aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/ISSUE_TEMPLATE/bug_report.md6
-rw-r--r--.github/workflows/android.yml6
-rw-r--r--.github/workflows/build.yml59
-rw-r--r--.github/workflows/cpp_lint.yml14
-rw-r--r--.github/workflows/lua.yml72
-rw-r--r--.github/workflows/lua_lint.yml32
-rw-r--r--.github/workflows/macos.yml21
-rw-r--r--.gitlab-ci.yml12
-rw-r--r--.mailmap8
-rw-r--r--CMakeLists.txt36
-rw-r--r--Dockerfile19
-rw-r--r--LICENSE.txt9
-rw-r--r--README.md28
-rw-r--r--android/app/src/main/AndroidManifest.xml13
-rw-r--r--android/app/src/main/java/net/minetest/minetest/GameActivity.java25
-rw-r--r--android/app/src/main/res/xml/filepaths.xml3
-rw-r--r--android/build.gradle7
-rw-r--r--android/native/build.gradle3
-rw-r--r--android/native/jni/Android.mk61
-rw-r--r--android/native/jni/Application.mk2
-rw-r--r--builtin/async/game.lua59
-rw-r--r--builtin/async/mainmenu.lua (renamed from builtin/async/init.lua)4
-rw-r--r--builtin/client/init.lua2
-rw-r--r--builtin/client/misc.lua7
-rw-r--r--builtin/common/information_formspecs.lua4
-rw-r--r--builtin/common/misc_helpers.lua161
-rw-r--r--builtin/common/mod_storage.lua19
-rw-r--r--builtin/common/serialize.lua353
-rw-r--r--builtin/common/strict.lua37
-rw-r--r--builtin/common/tests/misc_helpers_spec.lua99
-rw-r--r--builtin/common/tests/serialize_spec.lua158
-rw-r--r--builtin/common/tests/vector_spec.lua10
-rw-r--r--builtin/common/vector.lua14
-rw-r--r--builtin/game/async.lua22
-rw-r--r--builtin/game/chat.lua119
-rw-r--r--builtin/game/falling.lua12
-rw-r--r--builtin/game/features.lua2
-rw-r--r--builtin/game/init.lua4
-rw-r--r--builtin/game/item.lua178
-rw-r--r--builtin/game/item_entity.lua13
-rw-r--r--builtin/game/item_s.lua156
-rw-r--r--builtin/game/misc.lua101
-rw-r--r--builtin/game/misc_s.lua93
-rw-r--r--builtin/game/register.lua2
-rw-r--r--builtin/game/statbars.lua5
-rw-r--r--builtin/game/voxelarea.lua22
-rw-r--r--builtin/init.lua6
-rw-r--r--builtin/locale/__builtin.de.tr5
-rw-r--r--builtin/locale/__builtin.it.tr5
-rw-r--r--builtin/locale/template.txt5
-rw-r--r--builtin/mainmenu/common.lua18
-rw-r--r--builtin/mainmenu/dlg_config_world.lua117
-rw-r--r--builtin/mainmenu/dlg_contentstore.lua28
-rw-r--r--builtin/mainmenu/dlg_create_world.lua89
-rw-r--r--builtin/mainmenu/dlg_delete_content.lua13
-rw-r--r--builtin/mainmenu/dlg_delete_world.lua12
-rw-r--r--builtin/mainmenu/dlg_register.lua123
-rw-r--r--builtin/mainmenu/dlg_settings_advanced.lua105
-rw-r--r--builtin/mainmenu/dlg_version_info.lua172
-rw-r--r--builtin/mainmenu/generate_from_settingtypes.lua17
-rw-r--r--builtin/mainmenu/init.lua7
-rw-r--r--builtin/mainmenu/pkgmgr.lua165
-rw-r--r--builtin/mainmenu/tab_about.lua144
-rw-r--r--builtin/mainmenu/tab_content.lua35
-rw-r--r--builtin/mainmenu/tab_local.lua167
-rw-r--r--builtin/mainmenu/tab_online.lua57
-rw-r--r--builtin/mainmenu/tab_settings.lua49
-rw-r--r--builtin/mainmenu/tests/serverlistmgr_spec.lua1
-rw-r--r--builtin/settingtypes.txt2274
-rw-r--r--client/shaders/nodes_shader/opengl_fragment.glsl288
-rw-r--r--client/shaders/nodes_shader/opengl_vertex.glsl92
-rw-r--r--client/shaders/object_shader/opengl_fragment.glsl373
-rw-r--r--client/shaders/object_shader/opengl_vertex.glsl124
-rw-r--r--client/shaders/shadow_shaders/pass1_trans_vertex.glsl35
-rw-r--r--client/shaders/shadow_shaders/pass1_vertex.glsl37
-rw-r--r--clientmods/preview/init.lua3
-rw-r--r--clientmods/preview/mod.conf2
-rw-r--r--clientmods/preview/settingtypes.txt1
-rw-r--r--cmake/Modules/FindOpenGLES2.cmake73
-rw-r--r--cmake/Modules/FindSQLite3.cmake2
-rw-r--r--cmake/Modules/FindVorbis.cmake17
-rw-r--r--cmake/Modules/MinetestFindIrrlichtHeaders.cmake26
-rw-r--r--doc/breakages.md8
-rw-r--r--doc/client_lua_api.txt11
-rw-r--r--doc/lgpl-2.1.txt18
-rw-r--r--doc/lua_api.txt1412
-rw-r--r--doc/menu_lua_api.txt38
-rw-r--r--doc/minetest.62
-rw-r--r--doc/world_format.txt32
-rw-r--r--games/devtest/.luacheckrc43
-rw-r--r--games/devtest/game.conf2
-rw-r--r--games/devtest/mods/basetools/init.lua105
-rw-r--r--games/devtest/mods/basetools/textures/basetools_bloodsword.pngbin0 -> 165 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_elementalsword.pngbin0 -> 177 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_firesword.pngbin190 -> 166 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_healdagger.pngbin0 -> 162 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_healsword.pngbin0 -> 170 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_icesword.pngbin190 -> 170 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_mesepick.pngbin155 -> 156 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_mesesword.pngbin0 -> 163 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_superhealsword.pngbin0 -> 192 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_titaniumsword.pngbin0 -> 160 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_usespick.pngbin0 -> 161 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_usessword.pngbin0 -> 133 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_wooddagger.pngbin0 -> 139 bytes
-rw-r--r--games/devtest/mods/testentities/armor.lua32
-rw-r--r--games/devtest/mods/testentities/callbacks.lua4
-rw-r--r--games/devtest/mods/testentities/textures/testentities_armorball.pngbin561 -> 1385 bytes
-rw-r--r--games/devtest/mods/testformspec/formspec.lua41
-rw-r--r--games/devtest/mods/testformspec/textures/testformspec_9slice.pngbin0 -> 5935 bytes
-rw-r--r--games/devtest/mods/testitems/init.lua55
-rw-r--r--games/devtest/mods/testitems/mod.conf2
-rw-r--r--games/devtest/mods/testitems/textures/testitems_overlay_base.pngbin0 -> 106 bytes
-rw-r--r--games/devtest/mods/testitems/textures/testitems_overlay_overlay.pngbin0 -> 220 bytes
-rw-r--r--games/devtest/mods/testnodes/init.lua1
-rw-r--r--games/devtest/mods/testnodes/overlays.lua93
-rw-r--r--games/devtest/mods/testnodes/properties.lua18
-rw-r--r--games/devtest/mods/testnodes/textures.lua117
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_overlay.pngbin0 -> 153 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_overlayable.pngbin0 -> 87 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_tga_type10_32bpp_bt.tgabin0 -> 179 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_tga_type10_32bpp_tb.tgabin0 -> 179 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_tga_type1_24bpp_bt.tgabin0 -> 120 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_tga_type1_24bpp_tb.tgabin0 -> 120 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_tga_type2_16bpp_bt.tgabin0 -> 172 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_tga_type2_16bpp_tb.tgabin0 -> 172 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_tga_type2_32bpp_bt.tgabin0 -> 300 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_tga_type2_32bpp_tb.tgabin0 -> 300 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_tga_type3_16bpp_bt.tgabin0 -> 172 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_tga_type3_16bpp_tb.tgabin0 -> 172 bytes
-rw-r--r--games/devtest/mods/testtools/README.md8
-rw-r--r--games/devtest/mods/testtools/init.lua125
-rw-r--r--games/devtest/mods/testtools/textures/testtools_item_meta_editor.pngbin0 -> 114 bytes
-rw-r--r--games/devtest/mods/unittests/async_env.lua168
-rw-r--r--games/devtest/mods/unittests/entity.lua132
-rw-r--r--games/devtest/mods/unittests/init.lua9
-rw-r--r--games/devtest/mods/unittests/inside_async_env.lua25
-rw-r--r--games/devtest/mods/unittests/itemdescription.lua28
-rw-r--r--games/devtest/mods/unittests/misc.lua46
-rw-r--r--games/devtest/mods/unittests/textures/unittests_description_test.pngbin0 -> 268 bytes
-rw-r--r--games/devtest/mods/util_commands/init.lua61
-rw-r--r--lib/catch2/CMakeLists.txt16
-rw-r--r--lib/catch2/catch.hpp17970
-rw-r--r--lib/lua/CMakeLists.txt25
-rw-r--r--lib/lua/src/CMakeLists.txt18
-rw-r--r--lib/lua/src/lgc.c9
-rw-r--r--lib/lua/src/luaconf.h14
-rw-r--r--minetest.conf.example2883
-rw-r--r--misc/irrlichtmt_tag.txt1
-rw-r--r--misc/net.minetest.minetest.appdata.xml34
-rw-r--r--mods/mods_here.txt8
-rw-r--r--po/ar/minetest.po558
-rw-r--r--po/be/minetest.po637
-rw-r--r--po/bg/minetest.po625
-rw-r--r--po/ca/minetest.po534
-rw-r--r--po/cs/minetest.po624
-rw-r--r--po/da/minetest.po581
-rw-r--r--po/de/minetest.po683
-rw-r--r--po/dv/minetest.po509
-rw-r--r--po/el/minetest.po1051
-rw-r--r--po/eo/minetest.po624
-rw-r--r--po/es/minetest.po1030
-rw-r--r--po/et/minetest.po560
-rw-r--r--po/eu/minetest.po856
-rw-r--r--po/fi/minetest.po601
-rw-r--r--po/fil/minetest.po1812
-rw-r--r--po/fr/minetest.po778
-rw-r--r--po/gd/minetest.po484
-rw-r--r--po/gl/minetest.po3782
-rw-r--r--po/he/minetest.po548
-rw-r--r--po/hi/minetest.po552
-rw-r--r--po/hu/minetest.po1070
-rw-r--r--po/id/minetest.po679
-rw-r--r--po/it/minetest.po1317
-rw-r--r--po/ja/minetest.po862
-rw-r--r--po/jbo/minetest.po533
-rw-r--r--po/kk/minetest.po482
-rw-r--r--po/kn/minetest.po486
-rw-r--r--po/ko/minetest.po637
-rw-r--r--po/ky/minetest.po515
-rw-r--r--po/lt/minetest.po542
-rw-r--r--po/lv/minetest.po567
-rw-r--r--po/lzh/minetest.po471
-rw-r--r--po/minetest.pot3585
-rw-r--r--po/mr/minetest.po488
-rw-r--r--po/ms/minetest.po705
-rw-r--r--po/ms_Arab/minetest.po613
-rw-r--r--po/nb/minetest.po1002
-rw-r--r--po/nl/minetest.po639
-rw-r--r--po/nn/minetest.po764
-rw-r--r--po/oc/minetest.po6859
-rw-r--r--po/pl/minetest.po1210
-rw-r--r--po/pt/minetest.po867
-rw-r--r--po/pt_BR/minetest.po795
-rw-r--r--po/ro/minetest.po576
-rw-r--r--po/ru/minetest.po1155
-rw-r--r--po/sk/minetest.po750
-rw-r--r--po/sl/minetest.po581
-rw-r--r--po/sr_Cyrl/minetest.po573
-rw-r--r--po/sr_Latn/minetest.po482
-rw-r--r--po/sv/minetest.po726
-rw-r--r--po/sw/minetest.po582
-rw-r--r--po/th/minetest.po2287
-rw-r--r--po/tr/minetest.po635
-rw-r--r--po/tt/minetest.po471
-rw-r--r--po/uk/minetest.po568
-rw-r--r--po/vi/minetest.po1257
-rw-r--r--po/yue/minetest.po471
-rw-r--r--po/zh_CN/minetest.po656
-rw-r--r--po/zh_TW/minetest.po626
-rw-r--r--src/CMakeLists.txt76
-rw-r--r--src/benchmark/CMakeLists.txt7
-rw-r--r--src/benchmark/benchmark.cpp32
-rw-r--r--src/benchmark/benchmark.h26
-rw-r--r--src/benchmark/benchmark_serialize.cpp71
-rw-r--r--src/benchmark/benchmark_setup.h22
-rw-r--r--src/client/CMakeLists.txt4
-rw-r--r--src/client/camera.cpp16
-rw-r--r--src/client/camera.h3
-rw-r--r--src/client/client.cpp64
-rw-r--r--src/client/client.h11
-rw-r--r--src/client/clientenvironment.cpp1
-rw-r--r--src/client/clientevent.h1
-rw-r--r--src/client/clientlauncher.cpp3
-rw-r--r--src/client/clientmap.cpp315
-rw-r--r--src/client/clientmap.h74
-rw-r--r--src/client/clouds.cpp3
-rw-r--r--src/client/content_cao.cpp111
-rw-r--r--src/client/content_cao.h12
-rw-r--r--src/client/content_mapblock.cpp143
-rw-r--r--src/client/content_mapblock.h5
-rw-r--r--src/client/fontengine.cpp12
-rw-r--r--src/client/game.cpp181
-rw-r--r--src/client/gameui.cpp12
-rw-r--r--src/client/guiscalingfilter.cpp49
-rw-r--r--src/client/guiscalingfilter.h8
-rw-r--r--src/client/hud.cpp71
-rw-r--r--src/client/imagefilters.cpp2
-rw-r--r--src/client/joystick_controller.cpp12
-rw-r--r--src/client/localplayer.cpp23
-rw-r--r--src/client/localplayer.h5
-rw-r--r--src/client/mapblock_mesh.cpp326
-rw-r--r--src/client/mapblock_mesh.h125
-rw-r--r--src/client/mesh.cpp1
-rw-r--r--src/client/mesh_generator_thread.cpp22
-rw-r--r--src/client/mesh_generator_thread.h7
-rw-r--r--src/client/minimap.cpp2
-rw-r--r--src/client/particles.cpp440
-rw-r--r--src/client/particles.h68
-rw-r--r--src/client/render/core.cpp16
-rw-r--r--src/client/render/stereo.cpp2
-rw-r--r--src/client/renderingengine.cpp32
-rw-r--r--src/client/renderingengine.h5
-rw-r--r--src/client/shader.cpp97
-rw-r--r--src/client/shadows/dynamicshadows.cpp80
-rw-r--r--src/client/shadows/dynamicshadows.h21
-rw-r--r--src/client/shadows/dynamicshadowsrender.cpp201
-rw-r--r--src/client/shadows/dynamicshadowsrender.h21
-rw-r--r--src/client/shadows/shadowsshadercallbacks.cpp12
-rw-r--r--src/client/shadows/shadowsshadercallbacks.h12
-rw-r--r--src/client/sky.cpp9
-rw-r--r--src/client/sky.h3
-rw-r--r--src/client/sound.h28
-rw-r--r--src/client/sound_openal.cpp82
-rw-r--r--src/client/tile.cpp2
-rw-r--r--src/client/tile.h14
-rw-r--r--src/client/wieldmesh.cpp21
-rw-r--r--src/clientiface.cpp16
-rw-r--r--src/clientiface.h13
-rw-r--r--src/cmake_config.h.in3
-rw-r--r--src/collision.cpp4
-rw-r--r--src/config.h17
-rw-r--r--src/content/CMakeLists.txt1
-rw-r--r--src/content/content.cpp7
-rw-r--r--src/content/content.h7
-rw-r--r--src/content/mod_configuration.cpp255
-rw-r--r--src/content/mod_configuration.h111
-rw-r--r--src/content/mods.cpp362
-rw-r--r--src/content/mods.h119
-rw-r--r--src/content/subgames.cpp57
-rw-r--r--src/content/subgames.h20
-rw-r--r--src/database/database-leveldb.cpp2
-rw-r--r--src/database/database-postgresql.cpp2
-rw-r--r--src/database/database-postgresql.h3
-rw-r--r--src/database/database-sqlite3.cpp4
-rw-r--r--src/defaultsettings.cpp22
-rw-r--r--src/emerge.cpp27
-rw-r--r--src/emerge.h16
-rw-r--r--src/filesys.cpp1
-rw-r--r--src/filesys.h5
-rw-r--r--src/gamedef.h2
-rw-r--r--src/gameparams.h11
-rw-r--r--src/gettime.h32
-rw-r--r--src/gui/CMakeLists.txt1
-rw-r--r--src/gui/StyleSpec.h3
-rw-r--r--src/gui/guiAnimatedImage.cpp59
-rw-r--r--src/gui/guiAnimatedImage.h25
-rw-r--r--src/gui/guiBackgroundImage.cpp18
-rw-r--r--src/gui/guiButton.cpp8
-rw-r--r--src/gui/guiButtonImage.cpp27
-rw-r--r--src/gui/guiButtonImage.h10
-rw-r--r--src/gui/guiChatConsole.cpp4
-rw-r--r--src/gui/guiConfirmRegistration.cpp281
-rw-r--r--src/gui/guiConfirmRegistration.h68
-rw-r--r--src/gui/guiEngine.cpp4
-rw-r--r--src/gui/guiEngine.h2
-rw-r--r--src/gui/guiFormSpecMenu.cpp327
-rw-r--r--src/gui/guiFormSpecMenu.h9
-rw-r--r--src/gui/guiKeyChangeMenu.cpp22
-rw-r--r--src/gui/guiKeyChangeMenu.h1
-rw-r--r--src/gui/guiMainMenu.h3
-rw-r--r--src/gui/guiPasswordChange.cpp19
-rw-r--r--src/gui/guiPasswordChange.h2
-rw-r--r--src/gui/guiPathSelectMenu.cpp3
-rw-r--r--src/gui/guiScrollContainer.cpp9
-rw-r--r--src/gui/guiTable.cpp2
-rw-r--r--src/gui/guiVolumeChange.cpp22
-rw-r--r--src/gui/guiVolumeChange.h3
-rw-r--r--src/gui/mainmenumanager.h4
-rw-r--r--src/gui/modalMenu.cpp22
-rw-r--r--src/gui/modalMenu.h1
-rw-r--r--src/gui/touchscreengui.cpp2
-rw-r--r--src/hud.cpp1
-rw-r--r--src/hud.h1
-rw-r--r--src/inventory.cpp42
-rw-r--r--src/inventory.h26
-rw-r--r--src/inventorymanager.cpp2
-rw-r--r--src/irrlicht_changes/CGUITTFont.cpp60
-rw-r--r--src/irrlicht_changes/CGUITTFont.h43
-rw-r--r--src/irrlicht_changes/static_text.cpp2
-rw-r--r--src/irrlicht_changes/static_text.h2
-rw-r--r--src/itemdef.cpp21
-rw-r--r--src/itemdef.h4
-rw-r--r--src/lighting.h27
-rw-r--r--src/log.cpp195
-rw-r--r--src/log.h214
-rw-r--r--src/main.cpp31
-rw-r--r--src/map.cpp175
-rw-r--r--src/map.h104
-rw-r--r--src/mapblock.cpp34
-rw-r--r--src/mapgen/dungeongen.cpp2
-rw-r--r--src/mapgen/mapgen.cpp13
-rw-r--r--src/mapgen/mapgen.h42
-rw-r--r--src/mapgen/mapgen_flat.cpp2
-rw-r--r--src/mapgen/mapgen_fractal.cpp1
-rw-r--r--src/mapgen/mg_biome.cpp2
-rw-r--r--src/mapgen/mg_ore.cpp4
-rw-r--r--src/mapnode.cpp62
-rw-r--r--src/modchannels.cpp3
-rw-r--r--src/network/address.cpp8
-rw-r--r--src/network/address.h2
-rw-r--r--src/network/clientopcodes.cpp1
-rw-r--r--src/network/clientpackethandler.cpp175
-rw-r--r--src/network/connection.cpp17
-rw-r--r--src/network/connection.h6
-rw-r--r--src/network/connectionthreads.cpp10
-rw-r--r--src/network/networkprotocol.h128
-rw-r--r--src/network/serveropcodes.cpp2
-rw-r--r--src/network/serverpackethandler.cpp29
-rw-r--r--src/network/socket.cpp8
-rw-r--r--src/nodedef.cpp188
-rw-r--r--src/nodedef.h63
-rw-r--r--src/noise.cpp92
-rw-r--r--src/particles.cpp127
-rw-r--r--src/particles.h373
-rw-r--r--src/player.cpp2
-rw-r--r--src/player.h4
-rw-r--r--src/porting.cpp2
-rw-r--r--src/porting_android.cpp12
-rw-r--r--src/porting_android.h7
-rw-r--r--src/remoteplayer.h7
-rw-r--r--src/script/common/CMakeLists.txt1
-rw-r--r--src/script/common/c_content.cpp176
-rw-r--r--src/script/common/c_content.h19
-rw-r--r--src/script/common/c_converter.cpp99
-rw-r--r--src/script/common/c_converter.h21
-rw-r--r--src/script/common/c_internal.cpp14
-rw-r--r--src/script/common/c_internal.h6
-rw-r--r--src/script/common/c_packer.cpp596
-rw-r--r--src/script/common/c_packer.h126
-rw-r--r--src/script/common/helper.cpp80
-rw-r--r--src/script/common/helper.h3
-rw-r--r--src/script/cpp_api/s_async.cpp183
-rw-r--r--src/script/cpp_api/s_async.h54
-rw-r--r--src/script/cpp_api/s_base.cpp8
-rw-r--r--src/script/cpp_api/s_client.cpp10
-rw-r--r--src/script/cpp_api/s_entity.cpp13
-rw-r--r--src/script/cpp_api/s_entity.h2
-rw-r--r--src/script/cpp_api/s_env.cpp4
-rw-r--r--src/script/cpp_api/s_security.cpp14
-rw-r--r--src/script/lua_api/l_areastore.cpp49
-rw-r--r--src/script/lua_api/l_client.cpp26
-rw-r--r--src/script/lua_api/l_craft.cpp32
-rw-r--r--src/script/lua_api/l_craft.h1
-rw-r--r--src/script/lua_api/l_env.cpp11
-rw-r--r--src/script/lua_api/l_env.h2
-rw-r--r--src/script/lua_api/l_internal.h2
-rw-r--r--src/script/lua_api/l_inventory.cpp23
-rw-r--r--src/script/lua_api/l_item.cpp56
-rw-r--r--src/script/lua_api/l_item.h18
-rw-r--r--src/script/lua_api/l_mainmenu.cpp142
-rw-r--r--src/script/lua_api/l_mainmenu.h4
-rw-r--r--src/script/lua_api/l_nodemeta.cpp27
-rw-r--r--src/script/lua_api/l_nodemeta.h6
-rw-r--r--src/script/lua_api/l_noise.cpp67
-rw-r--r--src/script/lua_api/l_noise.h17
-rw-r--r--src/script/lua_api/l_object.cpp214
-rw-r--r--src/script/lua_api/l_object.h12
-rw-r--r--src/script/lua_api/l_particleparams.h282
-rw-r--r--src/script/lua_api/l_particles.cpp214
-rw-r--r--src/script/lua_api/l_particles_local.cpp114
-rw-r--r--src/script/lua_api/l_server.cpp131
-rw-r--r--src/script/lua_api/l_server.h10
-rw-r--r--src/script/lua_api/l_settings.cpp21
-rw-r--r--src/script/lua_api/l_sound.cpp4
-rw-r--r--src/script/lua_api/l_storage.cpp8
-rw-r--r--src/script/lua_api/l_util.cpp22
-rw-r--r--src/script/lua_api/l_util.h5
-rw-r--r--src/script/lua_api/l_vmanip.cpp51
-rw-r--r--src/script/lua_api/l_vmanip.h5
-rw-r--r--src/script/scripting_client.cpp2
-rw-r--r--src/script/scripting_server.cpp68
-rw-r--r--src/script/scripting_server.h17
-rw-r--r--src/serialization.cpp35
-rw-r--r--src/server.cpp720
-rw-r--r--src/server.h74
-rw-r--r--src/server/luaentity_sao.cpp30
-rw-r--r--src/server/luaentity_sao.h13
-rw-r--r--src/server/mods.cpp31
-rw-r--r--src/server/mods.h23
-rw-r--r--src/server/player_sao.cpp8
-rw-r--r--src/server/player_sao.h52
-rw-r--r--src/serverenvironment.cpp71
-rw-r--r--src/serverenvironment.h27
-rw-r--r--src/settings.cpp8
-rw-r--r--src/settings.h1
-rw-r--r--src/settings_translation_file.cpp1136
-rw-r--r--src/skyparams.h2
-rw-r--r--src/sound.h25
-rw-r--r--src/staticobject.cpp4
-rw-r--r--src/staticobject.h2
-rw-r--r--src/terminal_chat_console.cpp3
-rw-r--r--src/tileanimation.cpp4
-rw-r--r--src/tileanimation.h4
-rw-r--r--src/tool.cpp2
-rw-r--r--src/tool.h1
-rw-r--r--src/translation.cpp2
-rw-r--r--src/translation.h2
-rw-r--r--src/unittest/CMakeLists.txt1
-rw-r--r--src/unittest/test.cpp10
-rw-r--r--src/unittest/test.h2
-rw-r--r--src/unittest/test_address.cpp2
-rw-r--r--src/unittest/test_eventmanager.cpp4
-rw-r--r--src/unittest/test_irrptr.cpp4
-rw-r--r--src/unittest/test_lua.cpp79
-rw-r--r--src/unittest/test_nodedef.cpp2
-rw-r--r--src/unittest/test_noise.cpp54
-rw-r--r--src/unittest/test_serialization.cpp78
-rw-r--r--src/unittest/test_server_shutdown_state.cpp4
-rw-r--r--src/unittest/test_servermodmanager.cpp8
-rw-r--r--src/unittest/test_utilities.cpp28
-rw-r--r--src/unittest/test_voxelarea.cpp4
-rw-r--r--src/util/basic_macros.h8
-rw-r--r--src/util/enriched_string.cpp2
-rw-r--r--src/util/enriched_string.h2
-rw-r--r--src/util/ieee_float.cpp2
-rw-r--r--src/util/metricsbackend.cpp96
-rw-r--r--src/util/metricsbackend.h84
-rw-r--r--src/util/numeric.cpp11
-rw-r--r--src/util/numeric.h23
-rw-r--r--src/util/pointer.h13
-rw-r--r--src/util/serialize.cpp220
-rw-r--r--src/util/serialize.h10
-rw-r--r--src/util/srp.cpp4
-rw-r--r--src/util/stream.h70
-rw-r--r--src/util/string.cpp55
-rw-r--r--src/util/string.h4
-rw-r--r--textures/base/pack/checkbox_16_white.pngbin0 -> 173 bytes
-rw-r--r--textures/base/pack/error_icon_orange.pngbin0 -> 133 bytes
-rw-r--r--textures/base/pack/error_icon_red.pngbin0 -> 133 bytes
-rw-r--r--textures/base/pack/no_screenshot.pngbin586 -> 2043 bytes
-rw-r--r--textures/base/pack/server_favorite_delete.pngbin0 -> 748 bytes
-rwxr-xr-xutil/buildbot/buildwin32.sh46
-rwxr-xr-xutil/buildbot/buildwin64.sh33
-rwxr-xr-xutil/bump_version.sh2
-rwxr-xr-xutil/ci/build.sh14
-rwxr-xr-xutil/ci/build_prometheus_cpp.sh2
-rwxr-xr-xutil/ci/clang-tidy.sh12
-rw-r--r--util/ci/common.sh9
-rwxr-xr-xutil/generate-texture-normals.sh255
-rw-r--r--util/helper_mod/init.lua51
-rw-r--r--util/helper_mod/mod.conf3
-rwxr-xr-xutil/stress_mapgen.sh30
-rwxr-xr-xutil/test_multiplayer.sh45
494 files changed, 75089 insertions, 25057 deletions
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index b6f351c15..7cf34bd4a 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -8,8 +8,8 @@ assignees: ''
##### Minetest version
<!--
-Paste Minetest version between quotes below
-If you are on a devel version, please add git commit hash
+Paste Minetest version between quotes below.
+If you are on a devel version, please add git commit hash.
You can use `minetest --version` to find it.
-->
```
@@ -29,4 +29,4 @@ OpenGL version:
<!-- Describe your problem here -->
##### Steps to reproduce
-<!-- For bug reports or build issues, explain how the problem happened -->
+<!-- Explain how the problem has happened, providing a minimal test (i.e. a code snippet reduced to the bone) where possible -->
diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml
index cc5fe83ef..20411a332 100644
--- a/.github/workflows/android.yml
+++ b/.github/workflows/android.yml
@@ -23,7 +23,7 @@ jobs:
build:
runs-on: ubuntu-20.04
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Install deps
run: |
sudo apt-get update
@@ -31,12 +31,12 @@ jobs:
- name: Build with Gradle
run: cd android; ./gradlew assemblerelease
- name: Save armeabi artifact
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: Minetest-armeabi-v7a.apk
path: android/app/build/outputs/apk/release/app-armeabi-v7a-release-unsigned.apk
- name: Save arm64 artifact
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: Minetest-arm64-v8a.apk
path: android/app/build/outputs/apk/release/app-arm64-v8a-release-unsigned.apk
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 79f9af5c7..d578c3d9f 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -34,7 +34,7 @@ jobs:
gcc_5:
runs-on: ubuntu-18.04
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Install deps
run: |
source ./util/ci/common.sh
@@ -55,7 +55,7 @@ jobs:
gcc_10:
runs-on: ubuntu-20.04
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Install deps
run: |
source ./util/ci/common.sh
@@ -76,7 +76,7 @@ jobs:
clang_3_9:
runs-on: ubuntu-18.04
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Install deps
run: |
source ./util/ci/common.sh
@@ -101,7 +101,7 @@ jobs:
clang_10:
runs-on: ubuntu-20.04
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Install deps
run: |
source ./util/ci/common.sh
@@ -126,13 +126,13 @@ jobs:
# Build with prometheus-cpp (server-only)
clang_9_prometheus:
name: "clang_9 (PROMETHEUS=1)"
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Install deps
run: |
source ./util/ci/common.sh
- install_linux_deps --old-irr clang-9
+ install_linux_deps clang-9
- name: Build prometheus-cpp
run: |
@@ -152,9 +152,9 @@ jobs:
docker:
name: "Docker image"
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Build docker image
run: |
docker build . -t minetest:latest
@@ -162,13 +162,13 @@ jobs:
win32:
name: "MinGW cross-compiler (32-bit)"
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Install compiler
run: |
- sudo apt-get update -q && sudo apt-get install gettext -qyy
- wget http://minetest.kitsunemimi.pw/mingw-w64-i686_9.2.0_ubuntu18.04.tar.xz -O mingw.tar.xz
+ sudo apt-get update && sudo apt-get install -y gettext
+ wget http://minetest.kitsunemimi.pw/mingw-w64-i686_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz
sudo tar -xaf mingw.tar.xz -C /usr
- name: Build
@@ -180,13 +180,13 @@ jobs:
win64:
name: "MinGW cross-compiler (64-bit)"
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Install compiler
run: |
- sudo apt-get update -q && sudo apt-get install gettext -qyy
- wget http://minetest.kitsunemimi.pw/mingw-w64-x86_64_9.2.0_ubuntu18.04.tar.xz -O mingw.tar.xz
+ sudo apt-get update && sudo apt-get install -y gettext
+ wget http://minetest.kitsunemimi.pw/mingw-w64-x86_64_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz
sudo tar -xaf mingw.tar.xz -C /usr
- name: Build
@@ -199,13 +199,10 @@ jobs:
msvc:
name: VS 2019 ${{ matrix.config.arch }}-${{ matrix.type }}
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 zstd curl[winssl] openal-soft libvorbis libogg sqlite3 freetype luajit
+ VCPKG_VERSION: 5cf60186a241e84e8232641ee973395d4fde90e1
+ # 2022.02
+ vcpkg_packages: zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp opengl-registry
strategy:
fail-fast: false
matrix:
@@ -226,11 +223,15 @@ jobs:
# Enable it, when working on the installer.
steps:
- - name: Checkout
- uses: actions/checkout@v2
+ - uses: actions/checkout@v3
+
+ - name: Checkout IrrlichtMt
+ run: |
+ $ref = @(Get-Content misc\irrlichtmt_tag.txt)
+ git clone https://github.com/minetest/irrlicht lib\irrlichtmt --depth 1 -b $ref[0]
- name: Restore from cache and run vcpkg
- uses: lukka/run-vcpkg@v5
+ uses: lukka/run-vcpkg@v7
with:
vcpkgArguments: ${{env.vcpkg_packages}}
vcpkgDirectory: '${{ github.workspace }}\vcpkg'
@@ -238,7 +239,7 @@ jobs:
vcpkgGitCommitId: ${{ env.VCPKG_VERSION }}
vcpkgTriplet: ${{ matrix.config.vcpkg_triplet }}
- - name: CMake
+ - name: Minetest CMake
run: |
cmake ${{matrix.config.generator}} `
-DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake" `
@@ -246,7 +247,7 @@ jobs:
-DENABLE_POSTGRESQL=OFF `
-DRUN_IN_PLACE=${{ contains(matrix.type, 'portable') }} .
- - name: Build
+ - name: Build Minetest
run: cmake --build . --config Release
- name: CPack
@@ -265,7 +266,7 @@ jobs:
- name: Package Clean
run: rm -r $env:GITHUB_WORKSPACE\Package\_CPack_Packages
- - uses: actions/upload-artifact@v1
+ - uses: actions/upload-artifact@v3
with:
name: msvc-${{ matrix.config.arch }}-${{ matrix.type }}
path: .\Package\
diff --git a/.github/workflows/cpp_lint.yml b/.github/workflows/cpp_lint.yml
index 2bd884c7a..581ee06d6 100644
--- a/.github/workflows/cpp_lint.yml
+++ b/.github/workflows/cpp_lint.yml
@@ -26,12 +26,13 @@ on:
jobs:
# clang_format:
-# runs-on: ubuntu-18.04
+# runs-on: ubuntu-20.04
# steps:
-# - uses: actions/checkout@v2
+# - uses: actions/checkout@v3
# - name: Install clang-format
# run: |
-# sudo apt-get install clang-format-9 -qyy
+# sudo apt-get update
+# sudo apt-get install -y clang-format-9
#
# - name: Run clang-format
# run: |
@@ -41,14 +42,13 @@ jobs:
# CLANG_FORMAT: clang-format-9
clang_tidy:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Install deps
run: |
- sudo apt-get install clang-tidy-9 -qyy
source ./util/ci/common.sh
- install_linux_deps
+ install_linux_deps clang-tidy-9
- name: Run clang-tidy
run: |
diff --git a/.github/workflows/lua.yml b/.github/workflows/lua.yml
new file mode 100644
index 000000000..21cbbdcee
--- /dev/null
+++ b/.github/workflows/lua.yml
@@ -0,0 +1,72 @@
+name: lua_lint
+
+# Lint on lua changes on builtin or if workflow changed
+on:
+ push:
+ paths:
+ - 'builtin/**.lua'
+ - 'games/devtest/**.lua'
+ - '.github/workflows/**.yml'
+ pull_request:
+ paths:
+ - 'builtin/**.lua'
+ - 'games/devtest/**.lua'
+ - '.github/workflows/**.yml'
+
+jobs:
+ # Note that the integration tests are also run build.yml, but only when C++ code is changed.
+ integration_tests:
+ name: "Compile and run multiplayer tests"
+ runs-on: ubuntu-20.04
+ steps:
+ - uses: actions/checkout@v3
+ - name: Install deps
+ run: |
+ source ./util/ci/common.sh
+ install_linux_deps clang-10 gdb libluajit-5.1-dev
+
+ - name: Build
+ run: |
+ ./util/ci/build.sh
+ env:
+ CC: clang-10
+ CXX: clang++-10
+ CMAKE_FLAGS: "-DENABLE_GETTEXT=0 -DBUILD_SERVER=0"
+
+ - name: Integration test + devtest
+ run: |
+ ./util/test_multiplayer.sh
+
+ luacheck:
+ name: "Builtin Luacheck and Unit Tests"
+ runs-on: ubuntu-20.04
+
+ steps:
+
+ - uses: actions/checkout@v3
+ - uses: leafo/gh-actions-lua@v9
+ with:
+ luaVersion: "5.1.5"
+ - uses: leafo/gh-actions-luarocks@v4
+
+ - name: Install LuaJIT
+ run: |
+ cd $HOME
+ git clone https://github.com/LuaJIT/LuaJIT/
+ cd LuaJIT
+ make -j$(nproc)
+
+ - name: Install luarocks tools
+ run: |
+ luarocks install --local luacheck
+ luarocks install --local busted
+
+ - name: Run checks (builtin)
+ run: |
+ $HOME/.luarocks/bin/luacheck builtin
+ $HOME/.luarocks/bin/busted builtin
+ $HOME/.luarocks/bin/busted builtin --lua=$HOME/LuaJIT/src/luajit
+
+ - name: Run checks (devtest)
+ run: |
+ $HOME/.luarocks/bin/luacheck --config=games/devtest/.luacheckrc games/devtest
diff --git a/.github/workflows/lua_lint.yml b/.github/workflows/lua_lint.yml
deleted file mode 100644
index 738e5afff..000000000
--- a/.github/workflows/lua_lint.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-name: lua_lint
-
-# Lint on lua changes on builtin or if workflow changed
-on:
- push:
- paths:
- - 'builtin/**.lua'
- - '.github/workflows/**.yml'
- pull_request:
- paths:
- - 'builtin/**.lua'
- - '.github/workflows/**.yml'
-
-jobs:
- luacheck:
- name: "Builtin Luacheck and Unit Tests"
- runs-on: ubuntu-18.04
- steps:
- - uses: actions/checkout@v2
- - name: Install luarocks
- run: |
- sudo apt-get install luarocks -qyy
-
- - name: Install luarocks tools
- run: |
- luarocks install --local luacheck
- luarocks install --local busted
-
- - name: Run checks
- run: |
- $HOME/.luarocks/bin/luacheck builtin
- $HOME/.luarocks/bin/busted builtin
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
index 69253b70a..038765494 100644
--- a/.github/workflows/macos.yml
+++ b/.github/workflows/macos.yml
@@ -22,7 +22,6 @@ on:
- '.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
@@ -31,7 +30,7 @@ jobs:
build:
runs-on: macos-10.15
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Install deps
run: |
pkgs=(cmake freetype gettext gmp hiredis jpeg jsoncpp leveldb libogg libpng libvorbis luajit zstd)
@@ -43,10 +42,9 @@ jobs:
- 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
+ git clone https://github.com/minetest/irrlicht lib/irrlichtmt --depth 1 -b $(cat misc/irrlichtmt_tag.txt)
+ mkdir build
+ cd build
cmake .. \
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 \
-DCMAKE_FIND_FRAMEWORK=LAST \
@@ -60,7 +58,14 @@ jobs:
run: |
./build/macos/minetest.app/Contents/MacOS/minetest --run-unittests
- - uses: actions/upload-artifact@v2
+ # Zipping the built .app preserves permissions on the contained files,
+ # which the GitHub artifact pipeline would otherwise strip away.
+ - name: CPack
+ run: |
+ cd build
+ cpack -G ZIP -B macos
+
+ - uses: actions/upload-artifact@v3
with:
name: minetest-macos
- path: ./build/macos/
+ path: ./build/macos/*.zip
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5d2600364..28e35a971 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -9,7 +9,6 @@ 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
@@ -19,11 +18,10 @@ variables:
- 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
- - cd cmakebuild
- - cmake -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DCMAKE_BUILD_TYPE=Release -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE -DBUILD_SERVER=TRUE ..
- - make -j2
+ - git clone https://github.com/minetest/irrlicht lib/irrlichtmt --depth 1 -b $(cat misc/irrlichtmt_tag.txt)
+ - mkdir build && cd build
+ - cmake -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE -DBUILD_SERVER=TRUE ..
+ - make -j $(($(nproc) + 1))
- make install
artifacts:
when: on_success
@@ -198,7 +196,7 @@ build:fedora-28:
before_script:
- 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
+ - wget -nv http://minetest.kitsunemimi.pw/mingw-w64-${WIN_ARCH}_11.2.0_ubuntu20.04.tar.xz -O mingw.tar.xz
- tar -xaf mingw.tar.xz -C /usr
.build_win_template:
diff --git a/.mailmap b/.mailmap
index fcc763411..76190d078 100644
--- a/.mailmap
+++ b/.mailmap
@@ -49,14 +49,15 @@ ClobberXD <ClobberXD@gmail.com> <36130650+ClobberXD@users.noreply.github.com>
Auke Kok <sofar+github@foo-projects.org>
Auke Kok <sofar+github@foo-projects.org> <sofar@foo-projects.org>
Desour <vorunbekannt75@web.de>
-Nathanaël Courant <Ekdohibs@users.noreply.github.com> <nathanael.courant@laposte.net>
+Nathanaëlle Courant <Ekdohibs@users.noreply.github.com> <nathanael.courant@laposte.net>
Ezhh <owlecho@live.com>
paramat <paramat@users.noreply.github.com>
paramat <paramat@users.noreply.github.com> <mat.gregory@virginmedia.com>
lhofhansl <lhofhansl@yahoo.com> <larsh@apache.org>
red-001 <red-001@outlook.ie> <red-001@openmailbox.org>
-Wuzzy <wuzzy2@mail.ru> <Wuzzy2@mail.ru>
-Wuzzy <wuzzy2@mail.ru> <almikes@aol.com>
+Wuzzy <Wuzzy@disroot.org> <wuzzy2@mail.ru>
+Wuzzy <Wuzzy@disroot.org> <Wuzzy2@mail.ru>
+Wuzzy <Wuzzy@disroot.org> <almikes@aol.com>
Jordach <jordach.snelling@gmail.com>
MoNTE48 <MoNTE48@mail.ua>
v-rob <robinsonvincent89@gmail.com>
@@ -65,3 +66,4 @@ EvidenceB <49488517+EvidenceBKidscode@users.noreply.github.com>
gregorycu <gregory.currie@gmail.com>
Rogier <rogier777@gmail.com>
Rogier <rogier777@gmail.com> <Rogier-5@users.noreply.github.com>
+x2048 <codeforsmile@gmail.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 40cf6504b..94efc4ec3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,14 +11,15 @@ endif()
project(minetest)
set(PROJECT_NAME_CAPITALIZED "Minetest")
-set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD 14)
+set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
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 5)
-set(VERSION_PATCH 1)
+set(VERSION_MINOR 6)
+set(VERSION_PATCH 0)
set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
# Change to false for releases
@@ -51,6 +52,7 @@ set(RUN_IN_PLACE ${DEFAULT_RUN_IN_PLACE} CACHE BOOL
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(BUILD_BENCHMARKS FALSE CACHE BOOL "Build benchmarks")
set(WARN_ALL TRUE CACHE BOOL "Enable -Wall for Release build")
@@ -59,6 +61,9 @@ if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type: Debug or Release" FORCE)
endif()
+set(ENABLE_UPDATE_CHECKER (NOT ${DEVELOPMENT_BUILD}) CACHE BOOL
+ "Whether to enable update checks by default")
+
# Included stuff
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
@@ -68,7 +73,7 @@ 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
@@ -76,7 +81,6 @@ if(NOT "${IRRLICHTMT_BUILD_DIR}" STREQUAL "")
# 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
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/lib/irrlichtmt")
message(STATUS "Using user-provided IrrlichtMt at subdirectory 'lib/irrlichtmt'")
if(BUILD_CLIENT)
@@ -106,9 +110,9 @@ else()
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}")
+ message(FATAL_ERROR "IrrlichtMt headers are required to build the server, but none found.\n${explanation_msg}")
endif()
- message(STATUS "Found Irrlicht headers: ${IRRLICHT_INCLUDE_DIR}")
+ message(STATUS "Found IrrlichtMt 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
@@ -116,8 +120,20 @@ else()
endif()
endif()
-if(TARGET IrrlichtMt::IrrlichtMt)
+if(BUILD_CLIENT AND TARGET IrrlichtMt::IrrlichtMt)
+ # retrieve version somehow
+ if(NOT IrrlichtMt_VERSION)
+ get_target_property(IrrlichtMt_VERSION IrrlichtMt VERSION)
+ endif()
message(STATUS "Found IrrlichtMt ${IrrlichtMt_VERSION}")
+
+ set(TARGET_VER_S 1.9.0mt7)
+ string(REPLACE "mt" "." TARGET_VER ${TARGET_VER_S})
+ if(IrrlichtMt_VERSION VERSION_LESS ${TARGET_VER})
+ message(FATAL_ERROR "At least IrrlichtMt ${TARGET_VER_S} is required to build")
+ elseif(NOT DEVELOPMENT_BUILD AND IrrlichtMt_VERSION VERSION_GREATER ${TARGET_VER})
+ message(FATAL_ERROR "IrrlichtMt ${TARGET_VER_S} is required to build")
+ endif()
endif()
@@ -279,6 +295,10 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?Clang")
endif()
endif()
+if(BUILD_BENCHMARKS)
+ add_subdirectory(lib/catch2)
+endif()
+
# Subdirectories
# Be sure to add all relevant definitions above this
add_subdirectory(src)
diff --git a/Dockerfile b/Dockerfile
index 93f6b982b..3dd82e772 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -26,24 +26,21 @@ RUN apk add --no-cache git build-base cmake sqlite-dev curl-dev zlib-dev zstd-de
rm -fr ./games/minetest_game/.git
WORKDIR /usr/src/
-RUN git clone --recursive https://github.com/jupp0r/prometheus-cpp/ -b v1.0.0 && \
- mkdir prometheus-cpp/build && \
- cd prometheus-cpp/build && \
- cmake .. \
+RUN git clone --recursive https://github.com/jupp0r/prometheus-cpp/ && \
+ cd prometheus-cpp && \
+ cmake -B build \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_TESTING=0 \
-GNinja && \
- ninja && \
- ninja install
+ cmake --build build && \
+ cmake --install build
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 && \
- cd build && \
- cmake .. \
+RUN cmake -B build \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SERVER=TRUE \
@@ -51,8 +48,8 @@ RUN mkdir build && \
-DBUILD_UNITTESTS=FALSE \
-DBUILD_CLIENT=FALSE \
-GNinja && \
- ninja && \
- ninja install
+ cmake --build build && \
+ cmake --install build
ARG DOCKER_IMAGE=alpine:3.14
FROM $DOCKER_IMAGE AS runtime
diff --git a/LICENSE.txt b/LICENSE.txt
index ab44488a7..1f2c6c38d 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -63,6 +63,15 @@ Zughy:
appgurueu:
textures/base/pack/server_incompatible.png
+
+erlehmann, Warr1024, rollerozxa:
+ textures/base/pack/no_screenshot.png
+
+kilbith:
+ textures/base/pack/server_favorite.png
+
+SmallJoker
+ textures/base/pack/server_favorite_delete.png (based on server_favorite.png)
License of Minetest source code
-------------------------------
diff --git a/README.md b/README.md
index b3d2981f6..0bc5d4b42 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ Minetest
Minetest is a free open-source voxel game engine with easy modding and game creation.
-Copyright (C) 2010-2020 Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2010-2022 Perttu Ahola <celeron55@gmail.com>
and contributors (see source file comments and the version control log)
In case you downloaded the source code
@@ -144,19 +144,19 @@ Compiling
For Debian/Ubuntu users:
- 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
+ sudo apt install g++ make libc6-dev cmake libpng-dev libjpeg-dev libxi-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 gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel libzstd-devel
+ sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libvorbis-devel libXi-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 libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses zstd
+ sudo pacman -S base-devel libcurl-gnutls cmake libxi libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses zstd
For Alpine users:
- 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
+ sudo apk add build-base cmake libpng-dev jpeg-dev libxi-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
@@ -223,8 +223,8 @@ 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 the Irrlicht or IrrlichtMt library installed.
- - In that case use `-DIRRLICHT_INCLUDE_DIR=/some/where/irrlicht/include`.
+- If you build a bare server you don't need to compile IrrlichtMt, just the headers suffice.
+ - In that case use `-DIRRLICHT_INCLUDE_DIR=/some/where/irrlichtmt/include`.
- Minetest will use the IrrlichtMt package that is found first, given by the following order:
1. Specified `IRRLICHTMT_BUILD_DIR` CMake variable
@@ -240,6 +240,7 @@ General options and their default values:
BUILD_CLIENT=TRUE - Build Minetest client
BUILD_SERVER=FALSE - Build Minetest server
BUILD_UNITTESTS=TRUE - Build unittest sources
+ BUILD_BENCHMARKS=FALSE - Build benchmark sources
CMAKE_BUILD_TYPE=Release - Type of build (Release vs. Debug)
Release - Release build
Debug - Debug build
@@ -249,7 +250,7 @@ General options and their default values:
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_GETTEXT=ON - Build with Gettext; Allows using translations
- ENABLE_GLES=OFF - Build for OpenGL ES instead of OpenGL (requires support by IrrlichtMt)
+ ENABLE_GLES=OFF - Enable extra support code for OpenGL ES (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
@@ -259,8 +260,8 @@ General options and their default values:
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=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)
+ ENABLE_UPDATE_CHECKER=TRUE - Whether to enable update checks by default
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)
@@ -300,15 +301,12 @@ Library specific options:
OPENAL_DLL - Only if building with sound on Windows; path to OpenAL32.dll
OPENAL_INCLUDE_DIR - Only if building with sound; directory where al.h is located
OPENAL_LIBRARY - Only if building with sound; path to libopenal.a/libopenal.so/OpenAL32.lib
- OPENGLES2_INCLUDE_DIR - Only if building with GLES; directory that contains gl2.h
- OPENGLES2_LIBRARY - Only if building with GLES; path to libGLESv2.a/libGLESv2.so
SQLITE3_INCLUDE_DIR - Directory that contains sqlite3.h
SQLITE3_LIBRARY - Path to libsqlite3.a/libsqlite3.so/sqlite3.lib
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; 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
@@ -421,8 +419,8 @@ git clone --depth 1 https://github.com/minetest/irrlicht.git lib/irrlichtmt
#### Build
```bash
-mkdir cmakebuild
-cd cmakebuild
+mkdir build
+cd build
cmake .. \
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 \
@@ -430,7 +428,7 @@ cmake .. \
-DCMAKE_INSTALL_PREFIX=../build/macos/ \
-DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE
-make -j$(nproc)
+make -j$(sysctl -n hw.logicalcpu)
make install
```
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 6ea677cb9..11c868622 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -59,6 +59,17 @@
android:name=".UnzipService"
android:enabled="true"
android:exported="false" />
- </application>
+
+ <provider
+ android:name="androidx.core.content.FileProvider"
+ android:authorities="net.minetest.minetest.fileprovider"
+ android:grantUriPermissions="true"
+ android:exported="false">
+ <meta-data
+ android:name="android.support.FILE_PROVIDER_PATHS"
+ android:resource="@xml/filepaths" />
+ </provider>
+
+</application>
</manifest>
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 46fc9b1de..f5e9fd6d0 100644
--- a/android/app/src/main/java/net/minetest/minetest/GameActivity.java
+++ b/android/app/src/main/java/net/minetest/minetest/GameActivity.java
@@ -26,6 +26,7 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.text.InputType;
+import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
@@ -34,10 +35,16 @@ import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
+import androidx.annotation.Keep;
import androidx.appcompat.app.AlertDialog;
+import androidx.core.content.FileProvider;
+import java.io.File;
import java.util.Objects;
+// Native code finds these methods by name (see porting_android.cpp).
+// This annotation prevents the minifier/Proguard from mangling them.
+@Keep
public class GameActivity extends NativeActivity {
static {
System.loadLibrary("c++_shared");
@@ -179,4 +186,22 @@ public class GameActivity extends NativeActivity {
public String getCachePath() {
return Utils.getCacheDirectory(this).getAbsolutePath();
}
+
+ public void shareFile(String path) {
+ File file = new File(path);
+ if (!file.exists()) {
+ Log.e("GameActivity", "File " + file.getAbsolutePath() + " doesn't exist");
+ return;
+ }
+
+ Uri fileUri = FileProvider.getUriForFile(this, "net.minetest.minetest.fileprovider", file);
+
+ Intent intent = new Intent(Intent.ACTION_SEND, fileUri);
+ intent.setDataAndType(fileUri, getContentResolver().getType(fileUri));
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ intent.putExtra(Intent.EXTRA_STREAM, fileUri);
+
+ Intent shareIntent = Intent.createChooser(intent, null);
+ startActivity(shareIntent);
+ }
}
diff --git a/android/app/src/main/res/xml/filepaths.xml b/android/app/src/main/res/xml/filepaths.xml
new file mode 100644
index 000000000..2fff06908
--- /dev/null
+++ b/android/app/src/main/res/xml/filepaths.xml
@@ -0,0 +1,3 @@
+<paths>
+ <external-files-path path="Minetest/" name="minetest" />
+</paths>
diff --git a/android/build.gradle b/android/build.gradle
index a4c0e7535..7113dc7ad 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,16 +1,17 @@
// 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", 5) // Version Minor
-project.ext.set("versionPatch", 1) // Version Patch
+project.ext.set("versionMinor", 6) // Version Minor
+project.ext.set("versionPatch", 0) // Version Patch
project.ext.set("versionExtra", "") // Version Extra
project.ext.set("versionCode", 40) // Android Version Code
+project.ext.set("developmentBuild", 0) // Whether it is a development build, or a release
// 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'
+ ext.ndk_version = '23.2.8568313'
repositories {
google()
jcenter()
diff --git a/android/native/build.gradle b/android/native/build.gradle
index 2ddc77135..2254aab3a 100644
--- a/android/native/build.gradle
+++ b/android/native/build.gradle
@@ -14,7 +14,8 @@ android {
"versionMajor=${versionMajor}",
"versionMinor=${versionMinor}",
"versionPatch=${versionPatch}",
- "versionExtra=${versionExtra}"
+ "versionExtra=${versionExtra}",
+ "developmentBuild=${developmentBuild}"
}
}
}
diff --git a/android/native/jni/Android.mk b/android/native/jni/Android.mk
index f8ca74d3c..50651d5ba 100644
--- a/android/native/jni/Android.mk
+++ b/android/native/jni/Android.mk
@@ -1,6 +1,7 @@
LOCAL_PATH := $(call my-dir)/..
#LOCAL_ADDRESS_SANITIZER:=true
+#USE_BUILTIN_LUA:=true
include $(CLEAR_VARS)
LOCAL_MODULE := Curl
@@ -42,11 +43,15 @@ LOCAL_MODULE := Irrlicht
LOCAL_SRC_FILES := deps/$(APP_ABI)/Irrlicht/libIrrlichtMt.a
include $(PREBUILT_STATIC_LIBRARY)
+ifndef USE_BUILTIN_LUA
+
include $(CLEAR_VARS)
LOCAL_MODULE := LuaJIT
LOCAL_SRC_FILES := deps/$(APP_ABI)/LuaJIT/libluajit.a
include $(PREBUILT_STATIC_LIBRARY)
+endif
+
include $(CLEAR_VARS)
LOCAL_MODULE := OpenAL
LOCAL_SRC_FILES := deps/$(APP_ABI)/OpenAL-Soft/libopenal.a
@@ -92,14 +97,20 @@ LOCAL_CFLAGS += \
-DUSE_CURL=1 \
-DUSE_SOUND=1 \
-DUSE_LEVELDB=0 \
- -DUSE_LUAJIT=1 \
-DUSE_GETTEXT=1 \
-DVERSION_MAJOR=${versionMajor} \
-DVERSION_MINOR=${versionMinor} \
-DVERSION_PATCH=${versionPatch} \
-DVERSION_EXTRA=${versionExtra} \
+ -DDEVELOPMENT_BUILD=${developmentBuild} \
$(GPROF_DEF)
+ifdef USE_BUILTIN_LUA
+ LOCAL_CFLAGS += -DUSE_LUAJIT=0
+else
+ LOCAL_CFLAGS += -DUSE_LUAJIT=1
+endif
+
ifdef NDEBUG
LOCAL_CFLAGS += -DNDEBUG=1
endif
@@ -120,12 +131,19 @@ LOCAL_C_INCLUDES := \
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
+ifdef USE_BUILTIN_LUA
+ LOCAL_C_INCLUDES += \
+ ../../lib/lua/src \
+ ../../lib/bitop
+else
+ LOCAL_C_INCLUDES += deps/$(APP_ABI)/LuaJIT/include
+endif
+
LOCAL_SRC_FILES := \
$(wildcard ../../src/client/*.cpp) \
$(wildcard ../../src/client/*/*.cpp) \
@@ -207,6 +225,41 @@ LOCAL_SRC_FILES := \
../../src/voxel.cpp \
../../src/voxelalgorithms.cpp
+# Built-in Lua
+ifdef USE_BUILTIN_LUA
+ LOCAL_SRC_FILES += \
+ ../../lib/lua/src/lapi.c \
+ ../../lib/lua/src/lauxlib.c \
+ ../../lib/lua/src/lbaselib.c \
+ ../../lib/lua/src/lcode.c \
+ ../../lib/lua/src/ldblib.c \
+ ../../lib/lua/src/ldebug.c \
+ ../../lib/lua/src/ldo.c \
+ ../../lib/lua/src/ldump.c \
+ ../../lib/lua/src/lfunc.c \
+ ../../lib/lua/src/lgc.c \
+ ../../lib/lua/src/linit.c \
+ ../../lib/lua/src/liolib.c \
+ ../../lib/lua/src/llex.c \
+ ../../lib/lua/src/lmathlib.c \
+ ../../lib/lua/src/lmem.c \
+ ../../lib/lua/src/loadlib.c \
+ ../../lib/lua/src/lobject.c \
+ ../../lib/lua/src/lopcodes.c \
+ ../../lib/lua/src/loslib.c \
+ ../../lib/lua/src/lparser.c \
+ ../../lib/lua/src/lstate.c \
+ ../../lib/lua/src/lstring.c \
+ ../../lib/lua/src/lstrlib.c \
+ ../../lib/lua/src/ltable.c \
+ ../../lib/lua/src/ltablib.c \
+ ../../lib/lua/src/ltm.c \
+ ../../lib/lua/src/lundump.c \
+ ../../lib/lua/src/lvm.c \
+ ../../lib/lua/src/lzio.c \
+ ../../lib/bitop/bit.c
+endif
+
# GMP
LOCAL_SRC_FILES += ../../lib/gmp/mini-gmp.c
@@ -218,12 +271,14 @@ LOCAL_STATIC_LIBRARIES += \
Freetype \
Iconv libcharset \
Irrlicht \
- LuaJIT \
OpenAL \
Gettext \
SQLite3 \
Vorbis libvorbisfile libogg \
Zstd
+ifndef USE_BUILTIN_LUA
+ LOCAL_STATIC_LIBRARIES += LuaJIT
+endif
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 e21bca61c..9d9596137 100644
--- a/android/native/jni/Application.mk
+++ b/android/native/jni/Application.mk
@@ -20,7 +20,7 @@ APP_CPPFLAGS := -g -Og -fno-omit-frame-pointer
endif
APP_CFLAGS := $(APP_CPPFLAGS) -Wno-inconsistent-missing-override -Wno-parentheses-equality
-APP_CXXFLAGS := $(APP_CPPFLAGS) -fexceptions -frtti -std=gnu++17
+APP_CXXFLAGS := $(APP_CPPFLAGS) -fexceptions -frtti -std=gnu++14
APP_LDFLAGS := -Wl,--no-warn-mismatch,--gc-sections,--icf=safe
ifeq ($(APP_ABI),arm64-v8a)
diff --git a/builtin/async/game.lua b/builtin/async/game.lua
new file mode 100644
index 000000000..6512f0706
--- /dev/null
+++ b/builtin/async/game.lua
@@ -0,0 +1,59 @@
+core.log("info", "Initializing asynchronous environment (game)")
+
+local function pack2(...)
+ return {n=select('#', ...), ...}
+end
+
+-- Entrypoint to run async jobs, called by C++
+function core.job_processor(func, params)
+ local retval = pack2(func(unpack(params, 1, params.n)))
+
+ return retval
+end
+
+-- Import a bunch of individual files from builtin/game/
+local gamepath = core.get_builtin_path() .. "game" .. DIR_DELIM
+
+dofile(gamepath .. "constants.lua")
+dofile(gamepath .. "item_s.lua")
+dofile(gamepath .. "misc_s.lua")
+dofile(gamepath .. "features.lua")
+dofile(gamepath .. "voxelarea.lua")
+
+-- Transfer of globals
+do
+ local all = assert(core.transferred_globals)
+ core.transferred_globals = nil
+
+ all.registered_nodes = {}
+ all.registered_craftitems = {}
+ all.registered_tools = {}
+ for k, v in pairs(all.registered_items) do
+ -- Disable further modification
+ setmetatable(v, {__newindex = {}})
+ -- Reassemble the other tables
+ if v.type == "node" then
+ all.registered_nodes[k] = v
+ elseif v.type == "craftitem" then
+ all.registered_craftitems[k] = v
+ elseif v.type == "tool" then
+ all.registered_tools[k] = v
+ end
+ end
+
+ for k, v in pairs(all) do
+ core[k] = v
+ end
+end
+
+-- For tables that are indexed by item name:
+-- If table[X] does not exist, default to table[core.registered_aliases[X]]
+local alias_metatable = {
+ __index = function(t, name)
+ return rawget(t, core.registered_aliases[name])
+ end
+}
+setmetatable(core.registered_items, alias_metatable)
+setmetatable(core.registered_nodes, alias_metatable)
+setmetatable(core.registered_craftitems, alias_metatable)
+setmetatable(core.registered_tools, alias_metatable)
diff --git a/builtin/async/init.lua b/builtin/async/mainmenu.lua
index 3803994d6..0e9c222d1 100644
--- a/builtin/async/init.lua
+++ b/builtin/async/mainmenu.lua
@@ -1,5 +1,4 @@
-
-core.log("info", "Initializing Asynchronous environment")
+core.log("info", "Initializing asynchronous environment")
function core.job_processor(func, serialized_param)
local param = core.deserialize(serialized_param)
@@ -8,4 +7,3 @@ function core.job_processor(func, serialized_param)
return retval or core.serialize(nil)
end
-
diff --git a/builtin/client/init.lua b/builtin/client/init.lua
index 589fe8f24..3719a90ee 100644
--- a/builtin/client/init.lua
+++ b/builtin/client/init.lua
@@ -5,6 +5,8 @@ local commonpath = scriptpath.."common"..DIR_DELIM
dofile(clientpath .. "register.lua")
dofile(commonpath .. "after.lua")
+dofile(commonpath .. "mod_storage.lua")
dofile(commonpath .. "chatcommands.lua")
dofile(clientpath .. "chatcommands.lua")
dofile(clientpath .. "death_formspec.lua")
+dofile(clientpath .. "misc.lua")
diff --git a/builtin/client/misc.lua b/builtin/client/misc.lua
new file mode 100644
index 000000000..80e0f2904
--- /dev/null
+++ b/builtin/client/misc.lua
@@ -0,0 +1,7 @@
+function core.setting_get_pos(name)
+ local value = core.settings:get(name)
+ if not value then
+ return nil
+ end
+ return core.string_to_pos(value)
+end
diff --git a/builtin/common/information_formspecs.lua b/builtin/common/information_formspecs.lua
index 3405263bf..1445a017c 100644
--- a/builtin/common/information_formspecs.lua
+++ b/builtin/common/information_formspecs.lua
@@ -22,7 +22,6 @@ local LIST_FORMSPEC_DESCRIPTION = [[
local F = core.formspec_escape
local S = core.get_translator("__builtin")
-local check_player_privs = core.check_player_privs
-- CHAT COMMANDS FORMSPEC
@@ -58,10 +57,11 @@ local function build_chatcommands_formspec(name, sel, copy)
.. "any entry in the list.").. "\n" ..
S("Double-click to copy the entry to the chat history.")
+ local privs = core.get_player_privs(name)
for i, data in ipairs(mod_cmds) do
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)
+ local has_priv = privs[cmds[2].privs]
rows[#rows + 1] = ("%s,1,%s,%s"):format(
has_priv and COLOR_GREEN or COLOR_GRAY,
cmds[1], F(cmds[2].params))
diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua
index f5f89acd7..467f18804 100644
--- a/builtin/common/misc_helpers.lua
+++ b/builtin/common/misc_helpers.lua
@@ -204,7 +204,7 @@ end
--------------------------------------------------------------------------------
function string:trim()
- return (self:gsub("^%s*(.-)%s*$", "%1"))
+ return self:match("^%s*(.-)%s*$")
end
--------------------------------------------------------------------------------
@@ -245,16 +245,16 @@ function math.round(x)
return math.ceil(x - 0.5)
end
-
+local formspec_escapes = {
+ ["\\"] = "\\\\",
+ ["["] = "\\[",
+ ["]"] = "\\]",
+ [";"] = "\\;",
+ [","] = "\\,"
+}
function core.formspec_escape(text)
- if text ~= nil then
- text = string.gsub(text,"\\","\\\\")
- text = string.gsub(text,"%]","\\]")
- text = string.gsub(text,"%[","\\[")
- text = string.gsub(text,";","\\;")
- text = string.gsub(text,",","\\,")
- end
- return text
+ -- Use explicit character set instead of dot here because it doubles the performance
+ return text and string.gsub(text, "[\\%[%];,]", formspec_escapes)
end
@@ -265,18 +265,21 @@ function core.wrap_text(text, max_length, as_table)
return as_table and {text} or text
end
- for word in text:gmatch('%S+') do
- local cur_length = #table.concat(line, ' ')
- if cur_length > 0 and cur_length + #word + 1 >= max_length then
+ local line_length = 0
+ for word in text:gmatch("%S+") do
+ if line_length > 0 and line_length + #word + 1 >= max_length then
-- word wouldn't fit on current line, move to next line
- table.insert(result, table.concat(line, ' '))
- line = {}
+ table.insert(result, table.concat(line, " "))
+ line = {word}
+ line_length = #word
+ else
+ table.insert(line, word)
+ line_length = line_length + 1 + #word
end
- table.insert(line, word)
end
- table.insert(result, table.concat(line, ' '))
- return as_table and result or table.concat(result, '\n')
+ table.insert(result, table.concat(line, " "))
+ return as_table and result or table.concat(result, "\n")
end
--------------------------------------------------------------------------------
@@ -425,54 +428,50 @@ function core.string_to_pos(value)
return nil
end
- 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
- x, y, z = string.match(value, "^%( *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) *%)$")
+ value = value:match("^%((.-)%)$") or value -- strip parentheses
+
+ local x, y, z = value:trim():match("^([%d.-]+)[,%s]%s*([%d.-]+)[,%s]%s*([%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
--------------------------------------------------------------------------------
-function core.string_to_area(value)
- local p1, p2 = unpack(value:split(") ("))
- if p1 == nil or p2 == nil then
- return nil
- end
- p1 = core.string_to_pos(p1 .. ")")
- p2 = core.string_to_pos("(" .. p2)
- if p1 == nil or p2 == nil then
- return nil
+do
+ local rel_num_cap = "(~?-?%d*%.?%d*)" -- may be overly permissive as this will be tonumber'ed anyways
+ local num_delim = "[,%s]%s*"
+ local pattern = "^" .. table.concat({rel_num_cap, rel_num_cap, rel_num_cap}, num_delim) .. "$"
+
+ local function parse_area_string(pos, relative_to)
+ local pp = {}
+ pp.x, pp.y, pp.z = pos:trim():match(pattern)
+ return core.parse_coordinates(pp.x, pp.y, pp.z, relative_to)
end
- return p1, p2
-end
+ function core.string_to_area(value, relative_to)
+ local p1, p2 = value:match("^%((.-)%)%s*%((.-)%)$")
+ if not p1 then
+ return
+ end
-local function test_string_to_area()
- local p1, p2 = core.string_to_area("(10.0, 5, -2) ( 30.2, 4, -12.53)")
- assert(p1.x == 10.0 and p1.y == 5 and p1.z == -2)
- assert(p2.x == 30.2 and p2.y == 4 and p2.z == -12.53)
+ p1 = parse_area_string(p1, relative_to)
+ p2 = parse_area_string(p2, relative_to)
- p1, p2 = core.string_to_area("(10.0, 5, -2 30.2, 4, -12.53")
- assert(p1 == nil and p2 == nil)
+ if p1 == nil or p2 == nil then
+ return
+ end
- p1, p2 = core.string_to_area("(10.0, 5,) -2 fgdf2, 4, -12.53")
- assert(p1 == nil and p2 == nil)
+ return p1, p2
+ end
end
-test_string_to_area()
-
--------------------------------------------------------------------------------
function table.copy(t, seen)
local n = {}
@@ -701,3 +700,71 @@ end
function core.is_nan(number)
return number ~= number
end
+
+--[[ Helper function for parsing an optionally relative number
+of a chat command parameter, using the chat command tilde notation.
+
+Parameters:
+* arg: String snippet containing the number; possible values:
+ * "<number>": return as number
+ * "~<number>": return relative_to + <number>
+ * "~": return relative_to
+ * Anything else will return `nil`
+* relative_to: Number to which the `arg` number might be relative to
+
+Returns:
+A number or `nil`, depending on `arg.
+
+Examples:
+* `core.parse_relative_number("5", 10)` returns 5
+* `core.parse_relative_number("~5", 10)` returns 15
+* `core.parse_relative_number("~", 10)` returns 10
+]]
+function core.parse_relative_number(arg, relative_to)
+ if not arg then
+ return nil
+ elseif arg == "~" then
+ return relative_to
+ elseif string.sub(arg, 1, 1) == "~" then
+ local number = tonumber(string.sub(arg, 2))
+ if not number then
+ return nil
+ end
+ if core.is_nan(number) or number == math.huge or number == -math.huge then
+ return nil
+ end
+ return relative_to + number
+ else
+ local number = tonumber(arg)
+ if core.is_nan(number) or number == math.huge or number == -math.huge then
+ return nil
+ end
+ return number
+ end
+end
+
+--[[ Helper function to parse coordinates that might be relative
+to another position; supports chat command tilde notation.
+Intended to be used in chat command parameter parsing.
+
+Parameters:
+* x, y, z: Parsed x, y, and z coordinates as strings
+* relative_to: Position to which to compare the position
+
+Syntax of x, y and z:
+* "<number>": return as number
+* "~<number>": return <number> + player position on this axis
+* "~": return player position on this axis
+
+Returns: a vector or nil for invalid input or if player does not exist
+]]
+function core.parse_coordinates(x, y, z, relative_to)
+ if not relative_to then
+ x, y, z = tonumber(x), tonumber(y), tonumber(z)
+ return x and y and z and { x = x, y = y, z = z }
+ end
+ local rx = core.parse_relative_number(x, relative_to.x)
+ local ry = core.parse_relative_number(y, relative_to.y)
+ local rz = core.parse_relative_number(z, relative_to.z)
+ return rx and ry and rz and { x = rx, y = ry, z = rz }
+end
diff --git a/builtin/common/mod_storage.lua b/builtin/common/mod_storage.lua
new file mode 100644
index 000000000..7ccf62900
--- /dev/null
+++ b/builtin/common/mod_storage.lua
@@ -0,0 +1,19 @@
+-- Modify core.get_mod_storage to return the storage for the current mod.
+
+local get_current_modname = core.get_current_modname
+
+local old_get_mod_storage = core.get_mod_storage
+
+local storages = setmetatable({}, {
+ __mode = "v", -- values are weak references (can be garbage-collected)
+ __index = function(self, modname)
+ local storage = old_get_mod_storage(modname)
+ self[modname] = storage
+ return storage
+ end,
+})
+
+function core.get_mod_storage()
+ local modname = get_current_modname()
+ return modname and storages[modname]
+end
diff --git a/builtin/common/serialize.lua b/builtin/common/serialize.lua
index 300b394c6..caf989e69 100644
--- a/builtin/common/serialize.lua
+++ b/builtin/common/serialize.lua
@@ -1,205 +1,224 @@
--- Lua module to serialize values as Lua code.
--- From: https://github.com/fab13n/metalua/blob/no-dll/src/lib/serialize.lua
+-- From: https://github.com/appgurueu/modlib/blob/master/luon.lua
-- License: MIT
--- @copyright 2006-2997 Fabien Fleutot <metalua@gmail.com>
--- @author Fabien Fleutot <metalua@gmail.com>
--- @author ShadowNinja <shadowninja@minetest.net>
---------------------------------------------------------------------------------
---- Serialize an object into a source code string. This string, when passed as
--- an argument to deserialize(), returns an object structurally identical to
--- the original one. The following are currently supported:
--- * Booleans, numbers, strings, and nil.
--- * Functions; uses interpreter-dependent (and sometimes platform-dependent) bytecode!
--- * Tables; they can cantain multiple references and can be recursive, but metatables aren't saved.
--- This works in two phases:
--- 1. Recursively find and record multiple references and recursion.
--- 2. Recursively dump the value into a string.
--- @param x Value to serialize (nil is allowed).
--- @return load()able string containing the value.
-function core.serialize(x)
- local local_index = 1 -- Top index of the "_" local table in the dump
- -- table->nil/1/2 set of tables seen.
- -- nil = not seen, 1 = seen once, 2 = seen multiple times.
- local seen = {}
+local next, rawget, pairs, pcall, error, type, setfenv, loadstring
+ = next, rawget, pairs, pcall, error, type, setfenv, loadstring
- -- nest_points are places where a table appears within itself, directly
- -- or not. For instance, all of these chunks create nest points in
- -- table x: "x = {}; x[x] = 1", "x = {}; x[1] = x",
- -- "x = {}; x[1] = {y = {x}}".
- -- To handle those, two tables are used by mark_nest_point:
- -- * nested - Transient set of tables being currently traversed.
- -- Used for detecting nested tables.
- -- * nest_points - parent->{key=value, ...} table cantaining the nested
- -- keys and values in the parent. They're all dumped after all the
- -- other table operations have been performed.
- --
- -- mark_nest_point(p, k, v) fills nest_points with information required
- -- to remember that key/value (k, v) creates a nest point in table
- -- parent. It also marks "parent" and the nested item(s) as occuring
- -- multiple times, since several references to it will be required in
- -- order to patch the nest points.
- local nest_points = {}
- local nested = {}
- local function mark_nest_point(parent, k, v)
- local nk, nv = nested[k], nested[v]
- local np = nest_points[parent]
- if not np then
- np = {}
- nest_points[parent] = np
- end
- np[k] = v
- seen[parent] = 2
- if nk then seen[k] = 2 end
- if nv then seen[v] = 2 end
- end
+local table_concat, string_dump, string_format, string_match, math_huge
+ = table.concat, string.dump, string.format, string.match, math.huge
- -- First phase, list the tables and functions which appear more than
- -- once in x.
- local function mark_multiple_occurences(x)
- local tp = type(x)
- if tp ~= "table" and tp ~= "function" then
- -- No identity (comparison is done by value, not by instance)
+-- Recursively counts occurences of objects (non-primitives including strings) in a table.
+local function count_objects(value)
+ local counts = {}
+ if value == nil then
+ -- Early return for nil; tables can't contain nil
+ return counts
+ end
+ local function count_values(val)
+ local type_ = type(val)
+ if type_ == "boolean" or type_ == "number" then
return
end
- if seen[x] == 1 then
- seen[x] = 2
- elseif seen[x] ~= 2 then
- seen[x] = 1
- end
-
- if tp == "table" then
- nested[x] = true
- for k, v in pairs(x) do
- if nested[k] or nested[v] then
- mark_nest_point(x, k, v)
- else
- mark_multiple_occurences(k)
- mark_multiple_occurences(v)
+ local count = counts[val]
+ counts[val] = (count or 0) + 1
+ if type_ == "table" then
+ if not count then
+ for k, v in pairs(val) do
+ count_values(k)
+ count_values(v)
end
end
- nested[x] = nil
+ elseif type_ ~= "string" and type_ ~= "function" then
+ error("unsupported type: " .. type_)
end
end
+ count_values(value)
+ return counts
+end
- local dumped = {} -- object->varname set
- local local_defs = {} -- Dumped local definitions as source code lines
+-- Build a "set" of Lua keywords. These can't be used as short key names.
+-- See https://www.lua.org/manual/5.1/manual.html#2.1
+local keywords = {}
+for _, keyword in pairs({
+ "and", "break", "do", "else", "elseif",
+ "end", "false", "for", "function", "if",
+ "in", "local", "nil", "not", "or",
+ "repeat", "return", "then", "true", "until", "while",
+ "goto" -- LuaJIT, Lua 5.2+
+}) do
+ keywords[keyword] = true
+end
- -- Mutually recursive local functions:
- local dump_val, dump_or_ref_val
+local function quote(string)
+ return string_format("%q", string)
+end
- -- If x occurs multiple times, dump the local variable rather than
- -- the value. If it's the first time it's dumped, also dump the
- -- content in local_defs.
- function dump_or_ref_val(x)
- if seen[x] ~= 2 then
- return dump_val(x)
- end
- local var = dumped[x]
- if var then -- Already referenced
- return var
+local function dump_func(func)
+ return string_format("loadstring(%q)", string_dump(func))
+end
+
+-- Serializes Lua nil, booleans, numbers, strings, tables and even functions
+-- Tables are referenced by reference, strings are referenced by value. Supports circular tables.
+local function serialize(value, write)
+ local reference, refnum = "r1", 1
+ -- [object] = reference string
+ local references = {}
+ -- Circular tables that must be filled using `table[key] = value` statements
+ local to_fill = {}
+ for object, count in pairs(count_objects(value)) do
+ local type_ = type(object)
+ -- Object must appear more than once. If it is a string, the reference has to be shorter than the string.
+ if count >= 2 and (type_ ~= "string" or #reference + 2 < #object) then
+ write(reference)
+ write("=")
+ if type_ == "table" then
+ write("{}")
+ elseif type_ == "function" then
+ write(dump_func(object))
+ elseif type_ == "string" then
+ write(quote(object))
+ end
+ write(";")
+ references[object] = reference
+ if type_ == "table" then
+ to_fill[object] = reference
+ end
+ refnum = refnum + 1
+ reference = ("r%X"):format(refnum)
end
- -- First occurence, create and register reference
- local val = dump_val(x)
- local i = local_index
- local_index = local_index + 1
- var = "_["..i.."]"
- local_defs[#local_defs + 1] = var.." = "..val
- dumped[x] = var
- return var
end
-
- -- Second phase. Dump the object; subparts occuring multiple times
- -- are dumped in local variables which can be referenced multiple
- -- times. Care is taken to dump local vars in a sensible order.
- function dump_val(x)
- local tp = type(x)
- if x == nil then return "nil"
- elseif tp == "string" then return string.format("%q", x)
- elseif tp == "boolean" then return x and "true" or "false"
- elseif tp == "function" then
- return string.format("loadstring(%q)", string.dump(x))
- elseif tp == "number" then
- -- Serialize numbers reversibly with string.format
- return string.format("%.17g", x)
- elseif tp == "table" then
- local vals = {}
- local idx_dumped = {}
- local np = nest_points[x]
- for i, v in ipairs(x) do
- if not np or not np[i] then
- vals[#vals + 1] = dump_or_ref_val(v)
- end
- idx_dumped[i] = true
+ -- Used to decide whether we should do "key=..."
+ local function use_short_key(key)
+ return not references[key] and type(key) == "string" and (not keywords[key]) and string_match(key, "^[%a_][%a%d_]*$")
+ end
+ local function dump(value)
+ -- Primitive types
+ if value == nil then
+ return write("nil")
+ end
+ if value == true then
+ return write("true")
+ end
+ if value == false then
+ return write("false")
+ end
+ local type_ = type(value)
+ if type_ == "number" then
+ return write(string_format("%.17g", value))
+ end
+ -- Reference types: table, function and string
+ local ref = references[value]
+ if ref then
+ return write(ref)
+ end
+ if type_ == "string" then
+ return write(quote(value))
+ end
+ if type_ == "function" then
+ return write(dump_func(value))
+ end
+ if type_ == "table" then
+ write("{")
+ -- First write list keys:
+ -- Don't use the table length #value here as it may horribly fail
+ -- for tables which use large integers as keys in the hash part;
+ -- stop at the first "hole" (nil value) instead
+ local len = 0
+ local first = true -- whether this is the first entry, which may not have a leading comma
+ while true do
+ local v = rawget(value, len + 1) -- use rawget to avoid metatables like the vector metatable
+ if v == nil then break end
+ if first then first = false else write(",") end
+ dump(v)
+ len = len + 1
end
- for k, v in pairs(x) do
- if (not np or not np[k]) and
- not idx_dumped[k] then
- vals[#vals + 1] = "["..dump_or_ref_val(k).."] = "
- ..dump_or_ref_val(v)
+ -- Now write map keys ([key] = value)
+ for k, v in next, value do
+ -- We have written all non-float keys in [1, len] already
+ if type(k) ~= "number" or k % 1 ~= 0 or k < 1 or k > len then
+ if first then first = false else write(",") end
+ if use_short_key(k) then
+ write(k)
+ else
+ write("[")
+ dump(k)
+ write("]")
+ end
+ write("=")
+ dump(v)
end
end
- return "{"..table.concat(vals, ", ").."}"
- else
- error("Can't serialize data of type "..tp)
+ write("}")
+ return
end
end
-
- local function dump_nest_points()
- for parent, vals in pairs(nest_points) do
- for k, v in pairs(vals) do
- local_defs[#local_defs + 1] = dump_or_ref_val(parent)
- .."["..dump_or_ref_val(k).."] = "
- ..dump_or_ref_val(v)
+ -- Write the statements to fill circular tables
+ for table, ref in pairs(to_fill) do
+ for k, v in pairs(table) do
+ write(ref)
+ if use_short_key(k) then
+ write(".")
+ write(k)
+ else
+ write("[")
+ dump(k)
+ write("]")
end
+ write("=")
+ dump(v)
+ write(";")
end
end
-
- mark_multiple_occurences(x)
- local top_level = dump_or_ref_val(x)
- dump_nest_points()
-
- if next(local_defs) then
- return "local _ = {}\n"
- ..table.concat(local_defs, "\n")
- .."\nreturn "..top_level
- else
- return "return "..top_level
- end
+ write("return ")
+ dump(value)
end
--- Deserialization
-
-local function safe_loadstring(...)
- local func, err = loadstring(...)
- if func then
- setfenv(func, {})
- return func
- end
- return nil, err
+function core.serialize(value)
+ local rope = {}
+ serialize(value, function(text)
+ -- Faster than table.insert(rope, text) on PUC Lua 5.1
+ rope[#rope + 1] = text
+ end)
+ return table_concat(rope)
end
local function dummy_func() end
+local nan = (0/0)^1 -- +nan
+
function core.deserialize(str, safe)
- if type(str) ~= "string" then
- return nil, "Cannot deserialize type '"..type(str)
- .."'. Argument must be a string."
+ -- Backwards compatibility
+ if str == nil then
+ core.log("deprecated", "minetest.deserialize called with nil (expected string).")
+ return nil, "Invalid type: Expected a string, got nil"
end
- if str:byte(1) == 0x1B then
- return nil, "Bytecode prohibited"
+ local t = type(str)
+ if t ~= "string" then
+ error(("minetest.deserialize called with %s (expected string)."):format(t))
end
- local f, err = loadstring(str)
- if not f then return nil, err end
- -- The environment is recreated every time so deseralized code cannot
- -- pollute it with permanent references.
- setfenv(f, {loadstring = safe and dummy_func or safe_loadstring})
+ local func, err = loadstring(str)
+ if not func then return nil, err end
- local good, data = pcall(f)
- if good then
- return data
+ -- math.huge is serialized to inf, NaNs are serialized to nan by Lua
+ local env = {inf = math_huge, nan = nan}
+ if safe then
+ env.loadstring = dummy_func
else
- return nil, data
+ env.loadstring = function(str, ...)
+ local func, err = loadstring(str, ...)
+ if func then
+ setfenv(func, env)
+ return func
+ end
+ return nil, err
+ end
+ end
+ setfenv(func, env)
+ local success, value_or_err = pcall(func)
+ if success then
+ return value_or_err
end
+ return nil, value_or_err
end
diff --git a/builtin/common/strict.lua b/builtin/common/strict.lua
index ccde9676b..936ebb37b 100644
--- a/builtin/common/strict.lua
+++ b/builtin/common/strict.lua
@@ -1,9 +1,4 @@
-
--- Always warn when creating a global variable, even outside of a function.
--- This ignores mod namespaces (variables with the same name as the current mod).
-local WARN_INIT = false
-
-local getinfo = debug.getinfo
+local getinfo, rawget, rawset = debug.getinfo, rawget, rawset
function core.global_exists(name)
if type(name) ~= "string" then
@@ -19,39 +14,33 @@ local declared = {}
local warned = {}
function meta:__newindex(name, value)
+ if declared[name] then
+ return
+ end
local info = getinfo(2, "Sl")
local desc = ("%s:%d"):format(info.short_src, info.currentline)
- if not declared[name] then
- local warn_key = ("%s\0%d\0%s"):format(info.source,
- info.currentline, name)
- if not warned[warn_key] and info.what ~= "main" and
- info.what ~= "C" then
- core.log("warning", ("Assignment to undeclared "..
- "global %q inside a function at %s.")
+ local warn_key = ("%s\0%d\0%s"):format(info.source, info.currentline, name)
+ if not warned[warn_key] and info.what ~= "main" and info.what ~= "C" then
+ core.log("warning", ("Assignment to undeclared global %q inside a function at %s.")
:format(name, desc))
- warned[warn_key] = true
- end
- declared[name] = true
- end
- -- Ignore mod namespaces
- if WARN_INIT and name ~= core.get_current_modname() then
- core.log("warning", ("Global variable %q created at %s.")
- :format(name, desc))
+ warned[warn_key] = true
end
rawset(self, name, value)
+ declared[name] = true
end
function meta:__index(name)
+ if declared[name] then
+ return
+ end
local info = getinfo(2, "Sl")
local warn_key = ("%s\0%d\0%s"):format(info.source, info.currentline, name)
- if not declared[name] and not warned[warn_key] and info.what ~= "C" then
+ if not warned[warn_key] and info.what ~= "C" then
core.log("warning", ("Undeclared global variable %q accessed at %s:%s")
:format(name, info.short_src, info.currentline))
warned[warn_key] = true
end
- return rawget(self, name)
end
setmetatable(_G, meta)
-
diff --git a/builtin/common/tests/misc_helpers_spec.lua b/builtin/common/tests/misc_helpers_spec.lua
index b16987f0b..7d046d5b7 100644
--- a/builtin/common/tests/misc_helpers_spec.lua
+++ b/builtin/common/tests/misc_helpers_spec.lua
@@ -1,4 +1,5 @@
_G.core = {}
+_G.vector = {metatable = {}}
dofile("builtin/common/vector.lua")
dofile("builtin/common/misc_helpers.lua")
@@ -66,9 +67,107 @@ describe("pos", function()
end)
end)
+describe("area parsing", function()
+ describe("valid inputs", function()
+ it("accepts absolute numbers", function()
+ local p1, p2 = core.string_to_area("(10.0, 5, -2) ( 30.2 4 -12.53)")
+ assert(p1.x == 10 and p1.y == 5 and p1.z == -2)
+ assert(p2.x == 30.2 and p2.y == 4 and p2.z == -12.53)
+ end)
+
+ it("accepts relative numbers", function()
+ local p1, p2 = core.string_to_area("(1,2,3) (~5,~-5,~)", {x=10,y=10,z=10})
+ assert(type(p1) == "table" and type(p2) == "table")
+ assert(p1.x == 1 and p1.y == 2 and p1.z == 3)
+ assert(p2.x == 15 and p2.y == 5 and p2.z == 10)
+
+ p1, p2 = core.string_to_area("(1 2 3) (~5 ~-5 ~)", {x=10,y=10,z=10})
+ assert(type(p1) == "table" and type(p2) == "table")
+ assert(p1.x == 1 and p1.y == 2 and p1.z == 3)
+ assert(p2.x == 15 and p2.y == 5 and p2.z == 10)
+ end)
+ end)
+ describe("invalid inputs", function()
+ it("rejects too few numbers", function()
+ local p1, p2 = core.string_to_area("(1,1) (1,1,1,1)", {x=1,y=1,z=1})
+ assert(p1 == nil and p2 == nil)
+ end)
+
+ it("rejects too many numbers", function()
+ local p1, p2 = core.string_to_area("(1,1,1,1) (1,1,1,1)", {x=1,y=1,z=1})
+ assert(p1 == nil and p2 == nil)
+ end)
+
+ it("rejects nan & inf", function()
+ local p1, p2 = core.string_to_area("(1,1,1) (1,1,nan)", {x=1,y=1,z=1})
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("(1,1,1) (1,1,~nan)", {x=1,y=1,z=1})
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("(1,1,1) (1,~nan,1)", {x=1,y=1,z=1})
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("(1,1,1) (1,1,inf)", {x=1,y=1,z=1})
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("(1,1,1) (1,1,~inf)", {x=1,y=1,z=1})
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("(1,1,1) (1,~inf,1)", {x=1,y=1,z=1})
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("(nan,nan,nan) (nan,nan,nan)", {x=1,y=1,z=1})
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("(nan,nan,nan) (nan,nan,nan)")
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("(inf,inf,inf) (-inf,-inf,-inf)", {x=1,y=1,z=1})
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("(inf,inf,inf) (-inf,-inf,-inf)")
+ assert(p1 == nil and p2 == nil)
+ end)
+
+ it("rejects words", function()
+ local p1, p2 = core.string_to_area("bananas", {x=1,y=1,z=1})
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("bananas", "foobar")
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("bananas")
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("(bananas,bananas,bananas)")
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("(bananas,bananas,bananas) (bananas,bananas,bananas)")
+ assert(p1 == nil and p2 == nil)
+ end)
+
+ it("requires parenthesis & valid numbers", function()
+ local p1, p2 = core.string_to_area("(10.0, 5, -2 30.2, 4, -12.53")
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("(10.0, 5,) -2 fgdf2, 4, -12.53")
+ assert(p1 == nil and p2 == nil)
+ end)
+ end)
+end)
+
describe("table", function()
it("indexof()", function()
assert.equal(1, table.indexof({"foo", "bar"}, "foo"))
assert.equal(-1, table.indexof({"foo", "bar"}, "baz"))
end)
end)
+
+describe("formspec_escape", function()
+ it("escapes", function()
+ assert.equal(nil, core.formspec_escape(nil))
+ assert.equal("", core.formspec_escape(""))
+ assert.equal("\\[Hello\\\\\\[", core.formspec_escape("[Hello\\["))
+ end)
+end)
diff --git a/builtin/common/tests/serialize_spec.lua b/builtin/common/tests/serialize_spec.lua
index e46b7dcc5..340e226ee 100644
--- a/builtin/common/tests/serialize_spec.lua
+++ b/builtin/common/tests/serialize_spec.lua
@@ -1,42 +1,97 @@
_G.core = {}
+_G.vector = {metatable = {}}
_G.setfenv = require 'busted.compatibility'.setfenv
dofile("builtin/common/serialize.lua")
dofile("builtin/common/vector.lua")
+-- Supports circular tables; does not support table keys
+-- Correctly checks whether a mapping of references ("same") exists
+-- Is significantly more efficient than assert.same
+local function assert_same(a, b, same)
+ same = same or {}
+ if same[a] or same[b] then
+ assert(same[a] == b and same[b] == a)
+ return
+ end
+ if a == b then
+ return
+ end
+ if type(a) ~= "table" or type(b) ~= "table" then
+ assert(a == b)
+ return
+ end
+ same[a] = b
+ same[b] = a
+ local count = 0
+ for k, v in pairs(a) do
+ count = count + 1
+ assert(type(k) ~= "table")
+ assert_same(v, b[k], same)
+ end
+ for _ in pairs(b) do
+ count = count - 1
+ end
+ assert(count == 0)
+end
+
+local x, y = {}, {}
+local t1, t2 = {x, x, y, y}, {x, y, x, y}
+assert.same(t1, t2) -- will succeed because it only checks whether the depths match
+assert(not pcall(assert_same, t1, t2)) -- will correctly fail because it checks whether the refs match
+
describe("serialize", function()
+ local function assert_preserves(value)
+ local preserved_value = core.deserialize(core.serialize(value))
+ assert_same(value, preserved_value)
+ end
it("works", function()
- local test_in = {cat={sound="nyan", speed=400}, dog={sound="woof"}}
- local test_out = core.deserialize(core.serialize(test_in))
-
- assert.same(test_in, test_out)
+ assert_preserves({cat={sound="nyan", speed=400}, dog={sound="woof"}})
end)
it("handles characters", function()
- local test_in = {escape_chars="\n\r\t\v\\\"\'", non_european="θש×٩∂"}
- local test_out = core.deserialize(core.serialize(test_in))
- assert.same(test_in, test_out)
+ assert_preserves({escape_chars="\n\r\t\v\\\"\'", non_european="θש×٩∂"})
+ end)
+
+ it("handles NaN & infinities", function()
+ local nan = core.deserialize(core.serialize(0/0))
+ assert(nan ~= nan)
+ assert_preserves(math.huge)
+ assert_preserves(-math.huge)
end)
it("handles precise numbers", function()
- local test_in = 0.2695949158945771
- local test_out = core.deserialize(core.serialize(test_in))
- assert.same(test_in, test_out)
+ assert_preserves(0.2695949158945771)
end)
it("handles big integers", function()
- local test_in = 269594915894577
- local test_out = core.deserialize(core.serialize(test_in))
- assert.same(test_in, test_out)
+ assert_preserves(269594915894577)
end)
it("handles recursive structures", function()
local test_in = { hello = "world" }
test_in.foo = test_in
+ assert_preserves(test_in)
+ end)
+
+ it("handles cross-referencing structures", function()
+ local test_in = {
+ foo = {
+ baz = {
+ {}
+ },
+ },
+ bar = {
+ baz = {},
+ },
+ }
- local test_out = core.deserialize(core.serialize(test_in))
- assert.same(test_in, test_out)
+ test_in.foo.baz[1].foo = test_in.foo
+ test_in.foo.baz[1].bar = test_in.bar
+ test_in.bar.baz[1] = test_in.foo.baz[1]
+
+ assert_preserves(test_in)
end)
it("strips functions in safe mode", function()
@@ -46,6 +101,7 @@ describe("serialize", function()
end,
foo = "bar"
}
+ setfenv(test_in.func, _G)
local str = core.serialize(test_in)
assert.not_nil(str:find("loadstring"))
@@ -57,13 +113,77 @@ describe("serialize", function()
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)))
+ assert_preserves({v})
+ assert_preserves(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)))
+ assert_preserves(v)
+ end)
+
+ it("handles keywords as keys", function()
+ assert_preserves({["and"] = "keyword", ["for"] = "keyword"})
+ end)
+
+ describe("fuzzing", function()
+ local atomics = {true, false, math.huge, -math.huge} -- no NaN or nil
+ local function atomic()
+ return atomics[math.random(1, #atomics)]
+ end
+ local function num()
+ local sign = math.random() < 0.5 and -1 or 1
+ -- HACK math.random(a, b) requires a, b & b - a to fit within a 32-bit int
+ -- Use two random calls to generate a random number from 0 - 2^50 as lower & upper 25 bits
+ local val = math.random(0, 2^25) * 2^25 + math.random(0, 2^25 - 1)
+ local exp = math.random() < 0.5 and 1 or 2^(math.random(-120, 120))
+ return sign * val * exp
+ end
+ local function charcodes(count)
+ if count == 0 then return end
+ return math.random(0, 0xFF), charcodes(count - 1)
+ end
+ local function str()
+ return string.char(charcodes(math.random(0, 100)))
+ end
+ local primitives = {atomic, num, str}
+ local function primitive()
+ return primitives[math.random(1, #primitives)]()
+ end
+ local function tab(max_actions)
+ local root = {}
+ local tables = {root}
+ local function random_table()
+ return tables[math.random(1, #tables)]
+ end
+ for _ = 1, math.random(1, max_actions) do
+ local tab = random_table()
+ local value
+ if math.random() < 0.5 then
+ if math.random() < 0.5 then
+ value = random_table()
+ else
+ value = {}
+ table.insert(tables, value)
+ end
+ else
+ value = primitive()
+ end
+ tab[math.random() < 0.5 and (#tab + 1) or primitive()] = value
+ end
+ return root
+ end
+ it("primitives work", function()
+ for _ = 1, 1e3 do
+ assert_preserves(primitive())
+ end
+ end)
+ it("tables work", function()
+ for _ = 1, 100 do
+ local fuzzed_table = tab(1e3)
+ assert_same(fuzzed_table, table.copy(fuzzed_table))
+ assert_preserves(fuzzed_table)
+ end
+ end)
end)
end)
diff --git a/builtin/common/tests/vector_spec.lua b/builtin/common/tests/vector_spec.lua
index 2f72f3383..6a0b81a89 100644
--- a/builtin/common/tests/vector_spec.lua
+++ b/builtin/common/tests/vector_spec.lua
@@ -1,4 +1,4 @@
-_G.vector = {}
+_G.vector = {metatable = {}}
dofile("builtin/common/vector.lua")
describe("vector", function()
@@ -128,6 +128,14 @@ describe("vector", function()
assert.equal(vector.new(4.1, 5.9, 5.5), a:apply(f))
end)
+ it("combine()", function()
+ local a = vector.new(1, 2, 3)
+ local b = vector.new(3, 2, 1)
+ assert.equal(vector.add(a, b), vector.combine(a, b, function(x, y) return x + y end))
+ assert.equal(vector.new(3, 2, 3), vector.combine(a, b, math.max))
+ assert.equal(vector.new(1, 2, 1), vector.combine(a, b, math.min))
+ end)
+
it("equals()", function()
local function assertE(a, b)
assert.is_true(vector.equals(a, b))
diff --git a/builtin/common/vector.lua b/builtin/common/vector.lua
index 581d014e0..a08472e32 100644
--- a/builtin/common/vector.lua
+++ b/builtin/common/vector.lua
@@ -6,10 +6,8 @@ Note: The vector.*-functions must be able to accept old vectors that had no meta
-- localize functions
local setmetatable = setmetatable
-vector = {}
-
-local metatable = {}
-vector.metatable = metatable
+-- vector.metatable is set by C++.
+local metatable = vector.metatable
local xyz = {"x", "y", "z"}
@@ -112,6 +110,14 @@ function vector.apply(v, func)
)
end
+function vector.combine(a, b, func)
+ return fast_new(
+ func(a.x, b.x),
+ func(a.y, b.y),
+ func(a.z, b.z)
+ )
+end
+
function vector.distance(a, b)
local x = a.x - b.x
local y = a.y - b.y
diff --git a/builtin/game/async.lua b/builtin/game/async.lua
new file mode 100644
index 000000000..469f179d7
--- /dev/null
+++ b/builtin/game/async.lua
@@ -0,0 +1,22 @@
+
+core.async_jobs = {}
+
+function core.async_event_handler(jobid, retval)
+ local callback = core.async_jobs[jobid]
+ assert(type(callback) == "function")
+ callback(unpack(retval, 1, retval.n))
+ core.async_jobs[jobid] = nil
+end
+
+function core.handle_async(func, callback, ...)
+ assert(type(func) == "function" and type(callback) == "function",
+ "Invalid minetest.handle_async invocation")
+ local args = {n = select("#", ...), ...}
+ local mod_origin = core.get_last_run_mod()
+
+ local jobid = core.do_async_callback(func, args, mod_origin)
+ core.async_jobs[jobid] = callback
+
+ return true
+end
+
diff --git a/builtin/game/chat.lua b/builtin/game/chat.lua
index 493bb92c0..bbcdcf2d0 100644
--- a/builtin/game/chat.lua
+++ b/builtin/game/chat.lua
@@ -130,8 +130,13 @@ local function parse_range_str(player_name, str)
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
+ local player = core.get_player_by_name(player_name)
+ local relpos
+ if player then
+ relpos = player:get_pos()
+ end
+ p1, p2 = core.string_to_area(str, relpos)
+ if p1 == nil or p2 == nil then
return false, S("Incorrect area format. "
.. "Expected: (x1,y1,z1) (x2,y2,z2)")
end
@@ -310,12 +315,7 @@ local function handle_revoke_command(caller, revokename, revokeprivstr)
and revokename == core.settings:get("name")
and revokename ~= ""
if revokeprivstr == "all" then
- revokeprivs = privs
- privs = {}
- else
- for priv, _ in pairs(revokeprivs) do
- privs[priv] = nil
- end
+ revokeprivs = table.copy(privs)
end
local privs_unknown = ""
@@ -332,7 +332,10 @@ local function handle_revoke_command(caller, revokename, revokeprivstr)
end
local def = core.registered_privileges[priv]
if not def then
- privs_unknown = privs_unknown .. S("Unknown privilege: @1", priv) .. "\n"
+ -- Old/removed privileges might still be granted to certain players
+ if not privs[priv] then
+ privs_unknown = privs_unknown .. S("Unknown privilege: @1", priv) .. "\n"
+ end
elseif is_singleplayer and def.give_to_singleplayer then
irrevokable[priv] = true
elseif is_admin and def.give_to_admin then
@@ -359,19 +362,22 @@ local function handle_revoke_command(caller, revokename, revokeprivstr)
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")
+ privs[priv] = nil
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)
+ for priv, _ in pairs(revokeprivs) do
+ -- call the on_revoke callbacks
+ core.run_priv_callbacks(revokename, priv, caller, "revoke")
+ end
+ local new_privs = core.get_player_privs(revokename)
+
core.log("action", caller..' revoked ('
..core.privs_to_string(revokeprivs, ', ')
..') privileges from '..revokename)
@@ -569,10 +575,15 @@ core.register_chatcommand("teleport", {
description = S("Teleport to position or player"),
privs = {teleport=true},
func = function(name, param)
+ local player = core.get_player_by_name(name)
+ local relpos
+ if player then
+ relpos = player:get_pos()
+ end
local p = {}
- 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
+ p.x, p.y, p.z = string.match(param, "^([%d.~-]+)[, ] *([%d.~-]+)[, ] *([%d.~-]+)$")
+ p = core.parse_coordinates(p.x, p.y, p.z, relpos)
+ if p and p.x and p.y and p.z then
return teleport_to_pos(name, p)
end
@@ -586,9 +597,19 @@ core.register_chatcommand("teleport", {
"other players (missing privilege: @1).", "bring")
local teleportee_name
+ p = {}
teleportee_name, p.x, p.y, p.z = param:match(
- "^([^ ]+) +([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
+ "^([^ ]+) +([%d.~-]+)[, ] *([%d.~-]+)[, ] *([%d.~-]+)$")
+ if teleportee_name then
+ local teleportee = core.get_player_by_name(teleportee_name)
+ if not teleportee then
+ return
+ end
+ relpos = teleportee:get_pos()
+ p = core.parse_coordinates(p.x, p.y, p.z, relpos)
+ end
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
@@ -621,6 +642,10 @@ core.register_chatcommand("set", {
setname, setvalue = string.match(param, "([^ ]+) (.+)")
if setname and setvalue then
+ if setname:sub(1, 7) == "secure." then
+ return false, S("Failed. Cannot modify secure settings. "
+ .. "Edit the settings file manually.")
+ end
if not core.settings:get(setname) then
return false, S("Failed. Use '/set -n <name> <value>' "
.. "to create a new setting.")
@@ -837,7 +862,7 @@ core.register_chatcommand("spawnentity", {
description = S("Spawn entity at given (or your) position"),
privs = {give=true, interact=true},
func = function(name, param)
- local entityname, p = string.match(param, "^([^ ]+) *(.*)$")
+ local entityname, pstr = string.match(param, "^([^ ]+) *(.*)$")
if not entityname then
return false, S("EntityName required.")
end
@@ -851,11 +876,15 @@ core.register_chatcommand("spawnentity", {
if not core.registered_entities[entityname] then
return false, S("Cannot spawn an unknown entity.")
end
- if p == "" then
+ local p
+ if pstr == "" then
p = player:get_pos()
else
- p = core.string_to_pos(p)
- if p == nil then
+ p = {}
+ p.x, p.y, p.z = string.match(pstr, "^([%d.~-]+)[, ] *([%d.~-]+)[, ] *([%d.~-]+)$")
+ local relpos = player:get_pos()
+ p = core.parse_coordinates(p.x, p.y, p.z, relpos)
+ if not (p and p.x and p.y and p.z) then
return false, S("Invalid parameters (@1).", param)
end
end
@@ -1014,6 +1043,13 @@ core.register_chatcommand("status", {
end,
})
+local function get_time(timeofday)
+ local time = math.floor(timeofday * 1440)
+ local minute = time % 60
+ local hour = (time - minute) / 60
+ return time, hour, minute
+end
+
core.register_chatcommand("time", {
params = S("[<0..23>:<0..59> | <0..24000>]"),
description = S("Show or set time of day"),
@@ -1032,9 +1068,14 @@ core.register_chatcommand("time", {
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) or -1
+ local relative, negative, hour, minute = param:match("^(~?)(%-?)(%d+):(%d+)$")
+ if not relative then -- checking the first capture against nil suffices
+ local new_time = core.parse_relative_number(param, core.get_timeofday() * 24000)
+ if not new_time then
+ new_time = tonumber(param) or -1
+ else
+ new_time = new_time % 24000
+ end
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
@@ -1042,14 +1083,29 @@ core.register_chatcommand("time", {
core.log("action", name .. " sets time to " .. new_time)
return true, S("Time of day changed.")
end
+ local new_time
hour = tonumber(hour)
minute = tonumber(minute)
- if hour < 0 or hour > 23 then
- return false, S("Invalid hour (must be between 0 and 23 inclusive).")
- elseif minute < 0 or minute > 59 then
- return false, S("Invalid minute (must be between 0 and 59 inclusive).")
+ if relative == "" then
+ if hour < 0 or hour > 23 then
+ return false, S("Invalid hour (must be between 0 and 23 inclusive).")
+ elseif minute < 0 or minute > 59 then
+ return false, S("Invalid minute (must be between 0 and 59 inclusive).")
+ end
+ new_time = (hour * 60 + minute) / 1440
+ else
+ if minute < 0 or minute > 59 then
+ return false, S("Invalid minute (must be between 0 and 59 inclusive).")
+ end
+ local current_time = core.get_timeofday()
+ if negative == "-" then -- negative time
+ hour, minute = -hour, -minute
+ end
+ new_time = (current_time + (hour * 60 + minute) / 1440) % 1
+ local _
+ _, hour, minute = get_time(new_time)
end
- core.set_timeofday((hour * 60 + minute) / 1440)
+ core.set_timeofday(new_time)
core.log("action", ("%s sets time to %d:%02d"):format(name, hour, minute))
return true, S("Time of day changed.")
end,
@@ -1131,6 +1187,9 @@ core.register_chatcommand("ban", {
return true, S("Ban list: @1", ban_list)
end
end
+ if core.is_singleplayer() then
+ return false, S("You cannot ban players in singleplayer!")
+ end
if not core.get_player_by_name(param) then
return false, S("Player is not online.")
end
diff --git a/builtin/game/falling.lua b/builtin/game/falling.lua
index 29cb56aae..d5727f2a7 100644
--- a/builtin/game/falling.lua
+++ b/builtin/game/falling.lua
@@ -158,12 +158,10 @@ core.register_entity(":__builtin:falling_node", {
or def.drawtype == "normal"
or def.drawtype == "nodebox" then
if (def.paramtype2 == "facedir" or def.paramtype2 == "colorfacedir") then
- local fdir = node.param2 % 32
+ local fdir = node.param2 % 32 % 24
-- Get rotation from a precalculated lookup table
local euler = facedir_to_euler[fdir + 1]
- if euler then
- self.object:set_rotation(euler)
- end
+ self.object:set_rotation(euler)
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
@@ -264,7 +262,7 @@ core.register_entity(":__builtin:falling_node", {
end
-- Decide if we're replacing the node or placing on top
- local np = vector.new(bcp)
+ local np = vector.copy(bcp)
if bcd and bcd.buildable_to and
(not self.floats or bcd.liquidtype == "none") then
core.remove_node(bcp)
@@ -436,7 +434,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 = vector.new(p)
+ local pos_copy = vector.copy(p)
local node_copy = {name=n.name, param1=n.param1, param2=n.param2}
local drop_stacks = {}
for k, v in pairs(drops) do
@@ -461,7 +459,7 @@ end
function builtin_shared.check_attached_node(p, n)
local def = core.registered_nodes[n.name]
- local d = vector.new()
+ local d = vector.zero()
if def.paramtype2 == "wallmounted" or
def.paramtype2 == "colorwallmounted" then
-- The fallback vector here is in case 'wallmounted to dir' is nil due
diff --git a/builtin/game/features.lua b/builtin/game/features.lua
index 583ef5092..73b16361e 100644
--- a/builtin/game/features.lua
+++ b/builtin/game/features.lua
@@ -21,7 +21,9 @@ core.features = {
use_texture_alpha_string_modes = true,
degrotate_240_steps = true,
abm_min_max_y = true,
+ particlespawner_tweenable = true,
dynamic_add_media_table = true,
+ get_sky_as_table = true,
}
function core.has_feature(arg)
diff --git a/builtin/game/init.lua b/builtin/game/init.lua
index bb007fabd..d7606f357 100644
--- a/builtin/game/init.lua
+++ b/builtin/game/init.lua
@@ -8,6 +8,7 @@ local gamepath = scriptpath .. "game".. DIR_DELIM
local builtin_shared = {}
dofile(gamepath .. "constants.lua")
+dofile(gamepath .. "item_s.lua")
assert(loadfile(gamepath .. "item.lua"))(builtin_shared)
dofile(gamepath .. "register.lua")
@@ -16,8 +17,10 @@ if core.settings:get_bool("profiler.load") then
end
dofile(commonpath .. "after.lua")
+dofile(commonpath .. "mod_storage.lua")
dofile(gamepath .. "item_entity.lua")
dofile(gamepath .. "deprecated.lua")
+dofile(gamepath .. "misc_s.lua")
dofile(gamepath .. "misc.lua")
dofile(gamepath .. "privileges.lua")
dofile(gamepath .. "auth.lua")
@@ -32,5 +35,6 @@ dofile(gamepath .. "voxelarea.lua")
dofile(gamepath .. "forceloading.lua")
dofile(gamepath .. "statbars.lua")
dofile(gamepath .. "knockback.lua")
+dofile(gamepath .. "async.lua")
profiler = nil
diff --git a/builtin/game/item.lua b/builtin/game/item.lua
index 2a4b4e38f..b49787987 100644
--- a/builtin/game/item.lua
+++ b/builtin/game/item.lua
@@ -5,8 +5,8 @@ local builtin_shared = ...
local function copy_pointed_thing(pointed_thing)
return {
type = pointed_thing.type,
- above = vector.new(pointed_thing.above),
- under = vector.new(pointed_thing.under),
+ above = pointed_thing.above and vector.copy(pointed_thing.above),
+ under = pointed_thing.under and vector.copy(pointed_thing.under),
ref = pointed_thing.ref,
}
end
@@ -15,15 +15,6 @@ end
-- Item definition helpers
--
-function core.inventorycube(img1, img2, img3)
- img2 = img2 or img1
- img3 = img3 or img1
- return "[inventorycube"
- .. "{" .. img1:gsub("%^", "&")
- .. "{" .. img2:gsub("%^", "&")
- .. "{" .. img3:gsub("%^", "&")
-end
-
function core.get_pointed_thing_position(pointed_thing, above)
if pointed_thing.type == "node" then
if above then
@@ -37,144 +28,6 @@ function core.get_pointed_thing_position(pointed_thing, above)
end
end
-function core.dir_to_facedir(dir, is6d)
- --account for y if requested
- if is6d and math.abs(dir.y) > math.abs(dir.x) and math.abs(dir.y) > math.abs(dir.z) then
-
- --from above
- if dir.y < 0 then
- if math.abs(dir.x) > math.abs(dir.z) then
- if dir.x < 0 then
- return 19
- else
- return 13
- end
- else
- if dir.z < 0 then
- return 10
- else
- return 4
- end
- end
-
- --from below
- else
- if math.abs(dir.x) > math.abs(dir.z) then
- if dir.x < 0 then
- return 15
- else
- return 17
- end
- else
- if dir.z < 0 then
- return 6
- else
- return 8
- end
- end
- end
-
- --otherwise, place horizontally
- elseif math.abs(dir.x) > math.abs(dir.z) then
- if dir.x < 0 then
- return 3
- else
- return 1
- end
- else
- if dir.z < 0 then
- return 2
- else
- return 0
- end
- end
-end
-
--- Table of possible dirs
-local facedir_to_dir = {
- 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 = {
- [0]=1, 2, 3, 4,
- 5, 2, 6, 4,
- 6, 2, 5, 4,
- 1, 5, 3, 6,
- 1, 6, 3, 5,
- 1, 4, 3, 2,
-}
-function core.facedir_to_dir(facedir)
- return facedir_to_dir[facedir_to_dir_map[facedir % 32]]
-end
-
-function core.dir_to_wallmounted(dir)
- if math.abs(dir.y) > math.max(math.abs(dir.x), math.abs(dir.z)) then
- if dir.y < 0 then
- return 1
- else
- return 0
- end
- elseif math.abs(dir.x) > math.abs(dir.z) then
- if dir.x < 0 then
- return 3
- else
- return 2
- end
- else
- if dir.z < 0 then
- return 5
- else
- return 4
- end
- end
-end
-
--- table of dirs in wallmounted order
-local wallmounted_to_dir = {
- [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]
-end
-
-function core.dir_to_yaw(dir)
- return -math.atan2(dir.x, dir.z)
-end
-
-function core.yaw_to_dir(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") or (ptype == "colordegrotate")
-end
-
-function core.strip_param2_color(param2, paramtype2)
- if not core.is_colored_paramtype(paramtype2) then
- return nil
- end
- if paramtype2 == "colorfacedir" then
- 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
@@ -323,12 +176,12 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2,
end
-- Place above pointed node
- local place_to = vector.new(above)
+ local place_to = vector.copy(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 = vector.new(under)
+ place_to = vector.copy(under)
end
if core.is_protected(place_to, playername) then
@@ -409,7 +262,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 = vector.new(place_to)
+ local place_to_copy = vector.copy(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
@@ -420,7 +273,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 = vector.new(place_to)
+ local place_to_copy = vector.copy(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)
@@ -548,7 +401,7 @@ function core.node_punch(pos, node, puncher, pointed_thing)
-- Run script hook
for _, callback in ipairs(core.registered_on_punchnodes) do
-- Copy pos and node because callback can modify them
- local pos_copy = vector.new(pos)
+ local pos_copy = vector.copy(pos)
local node_copy = {name=node.name, param1=node.param1, param2=node.param2}
local pointed_thing_copy = pointed_thing and copy_pointed_thing(pointed_thing) or nil
callback(pos_copy, node_copy, puncher, pointed_thing_copy)
@@ -589,7 +442,7 @@ function core.node_dig(pos, node, digger)
local def = core.registered_nodes[node.name]
-- Copy pos because the callback could modify it
if def and (not def.diggable or
- (def.can_dig and not def.can_dig(vector.new(pos), digger))) then
+ (def.can_dig and not def.can_dig(vector.copy(pos), digger))) then
log("info", diggername .. " tried to dig "
.. node.name .. " which is not diggable "
.. core.pos_to_string(pos))
@@ -636,7 +489,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 = vector.new(pos)
+ local pos_copy = vector.copy(pos)
local node_copy = {name=node.name, param1=node.param1, param2=node.param2}
local drop_stacks = {}
for k, v in pairs(drops) do
@@ -668,7 +521,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 = vector.new(pos)
+ local pos_copy = vector.copy(pos)
local node_copy = {name=node.name, param1=node.param1, param2=node.param2}
def.after_dig_node(pos_copy, node_copy, oldmetadata, digger)
end
@@ -679,7 +532,7 @@ function core.node_dig(pos, node, digger)
core.set_last_run_mod(origin.mod)
-- Copy pos and node because callback can modify them
- local pos_copy = vector.new(pos)
+ local pos_copy = vector.copy(pos)
local node_copy = {name=node.name, param1=node.param1, param2=node.param2}
callback(pos_copy, node_copy, digger)
end
@@ -744,13 +597,8 @@ core.nodedef_default = {
-- Node properties
drawtype = "normal",
visual_scale = 1.0,
- -- Don't define these because otherwise the old tile_images and
- -- special_materials wouldn't be read
- --tiles ={""},
- --special_tiles = {
- -- {name="", backface_culling=true},
- -- {name="", backface_culling=true},
- --},
+ tiles = {},
+ special_tiles = {},
post_effect_color = {a=0, r=0, g=0, b=0},
paramtype = "none",
paramtype2 = "none",
diff --git a/builtin/game/item_entity.lua b/builtin/game/item_entity.lua
index 9b1b23bfd..53f98a7c7 100644
--- a/builtin/game/item_entity.lua
+++ b/builtin/game/item_entity.lua
@@ -58,17 +58,21 @@ core.register_entity(":__builtin:item", {
local glow = def and def.light_source and
math.floor(def.light_source / 2 + 0.5)
+ local size_bias = 1e-3 * math.random() -- small random bias to counter Z-fighting
+ local c = {-size, -size, -size, size, size, size}
self.object:set_properties({
is_visible = true,
visual = "wielditem",
textures = {itemname},
- visual_size = {x = size, y = size},
- collisionbox = {-size, -size, -size, size, size, size},
+ visual_size = {x = size + size_bias, y = size + size_bias},
+ collisionbox = c,
automatic_rotate = math.pi * 0.5 * 0.2 / size,
wield_item = self.itemstring,
glow = glow,
})
+ -- cache for usage in on_step
+ self._collisionbox = c
end,
get_staticdata = function(self)
@@ -93,6 +97,7 @@ core.register_entity(":__builtin:item", {
self.object:set_armor_groups({immortal = 1})
self.object:set_velocity({x = 0, y = 2, z = 0})
self.object:set_acceleration({x = 0, y = -gravity, z = 0})
+ self._collisionbox = self.initial_properties.collisionbox
self:set_item()
end,
@@ -163,7 +168,7 @@ core.register_entity(":__builtin:item", {
local pos = self.object:get_pos()
local node = core.get_node_or_nil({
x = pos.x,
- y = pos.y + self.object:get_properties().collisionbox[2] - 0.05,
+ y = pos.y + self._collisionbox[2] - 0.05,
z = pos.z
})
-- Delete in 'ignore' nodes
@@ -176,7 +181,7 @@ core.register_entity(":__builtin:item", {
if self.force_out then
-- This code runs after the entity got a push from the is_stuck code.
-- It makes sure the entity is entirely outside the solid node
- local c = self.object:get_properties().collisionbox
+ local c = self._collisionbox
local s = self.force_out_start
local f = self.force_out
local ok = (f.x > 0 and pos.x + c[1] > s.x + 0.5) or
diff --git a/builtin/game/item_s.lua b/builtin/game/item_s.lua
new file mode 100644
index 000000000..a51cd0a1c
--- /dev/null
+++ b/builtin/game/item_s.lua
@@ -0,0 +1,156 @@
+-- Minetest: builtin/item_s.lua
+-- The distinction of what goes here is a bit tricky, basically it's everything
+-- that does not (directly or indirectly) need access to ServerEnvironment,
+-- Server or writable access to IGameDef on the engine side.
+-- (The '_s' stands for standalone.)
+
+--
+-- Item definition helpers
+--
+
+function core.inventorycube(img1, img2, img3)
+ img2 = img2 or img1
+ img3 = img3 or img1
+ return "[inventorycube"
+ .. "{" .. img1:gsub("%^", "&")
+ .. "{" .. img2:gsub("%^", "&")
+ .. "{" .. img3:gsub("%^", "&")
+end
+
+function core.dir_to_facedir(dir, is6d)
+ --account for y if requested
+ if is6d and math.abs(dir.y) > math.abs(dir.x) and math.abs(dir.y) > math.abs(dir.z) then
+
+ --from above
+ if dir.y < 0 then
+ if math.abs(dir.x) > math.abs(dir.z) then
+ if dir.x < 0 then
+ return 19
+ else
+ return 13
+ end
+ else
+ if dir.z < 0 then
+ return 10
+ else
+ return 4
+ end
+ end
+
+ --from below
+ else
+ if math.abs(dir.x) > math.abs(dir.z) then
+ if dir.x < 0 then
+ return 15
+ else
+ return 17
+ end
+ else
+ if dir.z < 0 then
+ return 6
+ else
+ return 8
+ end
+ end
+ end
+
+ --otherwise, place horizontally
+ elseif math.abs(dir.x) > math.abs(dir.z) then
+ if dir.x < 0 then
+ return 3
+ else
+ return 1
+ end
+ else
+ if dir.z < 0 then
+ return 2
+ else
+ return 0
+ end
+ end
+end
+
+-- Table of possible dirs
+local facedir_to_dir = {
+ 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 = {
+ [0]=1, 2, 3, 4,
+ 5, 2, 6, 4,
+ 6, 2, 5, 4,
+ 1, 5, 3, 6,
+ 1, 6, 3, 5,
+ 1, 4, 3, 2,
+}
+function core.facedir_to_dir(facedir)
+ return facedir_to_dir[facedir_to_dir_map[facedir % 32]]
+end
+
+function core.dir_to_wallmounted(dir)
+ if math.abs(dir.y) > math.max(math.abs(dir.x), math.abs(dir.z)) then
+ if dir.y < 0 then
+ return 1
+ else
+ return 0
+ end
+ elseif math.abs(dir.x) > math.abs(dir.z) then
+ if dir.x < 0 then
+ return 3
+ else
+ return 2
+ end
+ else
+ if dir.z < 0 then
+ return 5
+ else
+ return 4
+ end
+ end
+end
+
+-- table of dirs in wallmounted order
+local wallmounted_to_dir = {
+ [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]
+end
+
+function core.dir_to_yaw(dir)
+ return -math.atan2(dir.x, dir.z)
+end
+
+function core.yaw_to_dir(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") or (ptype == "colordegrotate")
+end
+
+function core.strip_param2_color(param2, paramtype2)
+ if not core.is_colored_paramtype(paramtype2) then
+ return nil
+ end
+ if paramtype2 == "colorfacedir" then
+ 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
diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua
index e86efc50c..997b1894a 100644
--- a/builtin/game/misc.lua
+++ b/builtin/game/misc.lua
@@ -121,53 +121,6 @@ function core.get_player_radius_area(player_name, radius)
end
-function core.hash_node_position(pos)
- return (pos.z + 32768) * 65536 * 65536
- + (pos.y + 32768) * 65536
- + pos.x + 32768
-end
-
-
-function core.get_position_from_hash(hash)
- local x = (hash % 65536) - 32768
- hash = math.floor(hash / 65536)
- local y = (hash % 65536) - 32768
- hash = math.floor(hash / 65536)
- local z = (hash % 65536) - 32768
- return vector.new(x, y, z)
-end
-
-
-function core.get_item_group(name, group)
- if not core.registered_items[name] or not
- core.registered_items[name].groups[group] then
- return 0
- end
- return core.registered_items[name].groups[group]
-end
-
-
-function core.get_node_group(name, group)
- core.log("deprecated", "Deprecated usage of get_node_group, use get_item_group instead")
- return core.get_item_group(name, group)
-end
-
-
-function core.setting_get_pos(name)
- local value = core.settings:get(name)
- if not value then
- return nil
- end
- return core.string_to_pos(value)
-end
-
-
--- See l_env.cpp for the other functions
-function core.get_artificial_light(param1)
- return math.floor(param1 / 16)
-end
-
-
-- To be overriden by protection mods
function core.is_protected(pos, name)
@@ -284,40 +237,30 @@ end
core.dynamic_media_callbacks = {}
--- PNG encoder safety wrapper
+-- Transfer of certain globals into async environment
+-- see builtin/async/game.lua for the other side
-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 type(height) ~= "number" then
- error("Incorrect type for 'height', expected number, got " .. type(height))
+local function copy_filtering(t, seen)
+ if type(t) == "userdata" or type(t) == "function" then
+ return true -- don't use nil so presence can still be detected
+ elseif type(t) ~= "table" then
+ return t
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)
+ local n = {}
+ seen = seen or {}
+ seen[t] = n
+ for k, v in pairs(t) do
+ local k_ = seen[k] or copy_filtering(k, seen)
+ local v_ = seen[v] or copy_filtering(v, seen)
+ n[k_] = v_
end
+ return n
+end
- return o_encode_png(width, height, data, compression or 6)
+function core.get_globals_to_transfer()
+ local all = {
+ registered_items = copy_filtering(core.registered_items),
+ registered_aliases = core.registered_aliases,
+ }
+ return all
end
diff --git a/builtin/game/misc_s.lua b/builtin/game/misc_s.lua
new file mode 100644
index 000000000..67a0ec684
--- /dev/null
+++ b/builtin/game/misc_s.lua
@@ -0,0 +1,93 @@
+-- Minetest: builtin/misc_s.lua
+-- The distinction of what goes here is a bit tricky, basically it's everything
+-- that does not (directly or indirectly) need access to ServerEnvironment,
+-- Server or writable access to IGameDef on the engine side.
+-- (The '_s' stands for standalone.)
+
+--
+-- Misc. API functions
+--
+
+function core.hash_node_position(pos)
+ return (pos.z + 32768) * 65536 * 65536
+ + (pos.y + 32768) * 65536
+ + pos.x + 32768
+end
+
+
+function core.get_position_from_hash(hash)
+ local x = (hash % 65536) - 32768
+ hash = math.floor(hash / 65536)
+ local y = (hash % 65536) - 32768
+ hash = math.floor(hash / 65536)
+ local z = (hash % 65536) - 32768
+ return vector.new(x, y, z)
+end
+
+
+function core.get_item_group(name, group)
+ if not core.registered_items[name] or not
+ core.registered_items[name].groups[group] then
+ return 0
+ end
+ return core.registered_items[name].groups[group]
+end
+
+
+function core.get_node_group(name, group)
+ core.log("deprecated", "Deprecated usage of get_node_group, use get_item_group instead")
+ return core.get_item_group(name, group)
+end
+
+
+function core.setting_get_pos(name)
+ local value = core.settings:get(name)
+ if not value then
+ return nil
+ end
+ return core.string_to_pos(value)
+end
+
+
+-- See l_env.cpp for the other functions
+function core.get_artificial_light(param1)
+ return math.floor(param1 / 16)
+end
+
+-- 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 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 o_encode_png(width, height, data, compression or 6)
+end
diff --git a/builtin/game/register.lua b/builtin/game/register.lua
index 0be107c36..ee4edabbf 100644
--- a/builtin/game/register.lua
+++ b/builtin/game/register.lua
@@ -1,4 +1,4 @@
--- Minetest: builtin/misc_register.lua
+-- Minetest: builtin/register.lua
local S = core.get_translator("__builtin")
diff --git a/builtin/game/statbars.lua b/builtin/game/statbars.lua
index cb7ff7b76..78d1d2728 100644
--- a/builtin/game/statbars.lua
+++ b/builtin/game/statbars.lua
@@ -138,13 +138,15 @@ local function player_event_handler(player,eventname)
end
function core.hud_replace_builtin(hud_name, definition)
-
if type(definition) ~= "table" or
definition.hud_elem_type ~= "statbar" then
return false
end
+ definition = table.copy(definition)
+
if hud_name == "health" then
+ definition.item = definition.item or definition.number or core.PLAYER_MAX_HP_DEFAULT
bar_definitions.hp = definition
for name, ids in pairs(hud_ids) do
@@ -159,6 +161,7 @@ function core.hud_replace_builtin(hud_name, definition)
end
if hud_name == "breath" then
+ definition.item = definition.item or definition.number or core.PLAYER_MAX_BREATH_DEFAULT
bar_definitions.breath = definition
for name, ids in pairs(hud_ids) do
diff --git a/builtin/game/voxelarea.lua b/builtin/game/voxelarea.lua
index 64436bf1a..62f07d928 100644
--- a/builtin/game/voxelarea.lua
+++ b/builtin/game/voxelarea.lua
@@ -1,6 +1,9 @@
+local math_floor = math.floor
+local vector_new = vector.new
+
VoxelArea = {
- MinEdge = vector.new(1, 1, 1),
- MaxEdge = vector.new(0, 0, 0),
+ MinEdge = vector_new(1, 1, 1),
+ MaxEdge = vector_new(0, 0, 0),
ystride = 0,
zstride = 0,
}
@@ -19,7 +22,7 @@ end
function VoxelArea:getExtent()
local MaxEdge, MinEdge = self.MaxEdge, self.MinEdge
- return vector.new(
+ return vector_new(
MaxEdge.x - MinEdge.x + 1,
MaxEdge.y - MinEdge.y + 1,
MaxEdge.z - MinEdge.z + 1
@@ -36,7 +39,7 @@ function VoxelArea:index(x, y, z)
local i = (z - MinEdge.z) * self.zstride +
(y - MinEdge.y) * self.ystride +
(x - MinEdge.x) + 1
- return math.floor(i)
+ return math_floor(i)
end
function VoxelArea:indexp(p)
@@ -44,24 +47,23 @@ function VoxelArea:indexp(p)
local i = (p.z - MinEdge.z) * self.zstride +
(p.y - MinEdge.y) * self.ystride +
(p.x - MinEdge.x) + 1
- return math.floor(i)
+ return math_floor(i)
end
function VoxelArea:position(i)
- local p = {}
local MinEdge = self.MinEdge
i = i - 1
- p.z = math.floor(i / self.zstride) + MinEdge.z
+ local z = math_floor(i / self.zstride) + MinEdge.z
i = i % self.zstride
- p.y = math.floor(i / self.ystride) + MinEdge.y
+ local y = math_floor(i / self.ystride) + MinEdge.y
i = i % self.ystride
- p.x = math.floor(i) + MinEdge.x
+ local x = math_floor(i) + MinEdge.x
- return p
+ return vector_new(x, y, z)
end
function VoxelArea:contains(x, y, z)
diff --git a/builtin/init.lua b/builtin/init.lua
index 7a9b5c427..869136016 100644
--- a/builtin/init.lua
+++ b/builtin/init.lua
@@ -56,8 +56,10 @@ elseif INIT == "mainmenu" then
if not custom_loaded then
dofile(core.get_mainmenu_path() .. DIR_DELIM .. "init.lua")
end
-elseif INIT == "async" then
- dofile(asyncpath .. "init.lua")
+elseif INIT == "async" then
+ dofile(asyncpath .. "mainmenu.lua")
+elseif INIT == "async_game" then
+ dofile(asyncpath .. "game.lua")
elseif INIT == "client" then
dofile(clientpath .. "init.lua")
else
diff --git a/builtin/locale/__builtin.de.tr b/builtin/locale/__builtin.de.tr
index 1b29f81e7..4a17f7a4b 100644
--- a/builtin/locale/__builtin.de.tr
+++ b/builtin/locale/__builtin.de.tr
@@ -72,6 +72,7 @@ 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. Cannot modify secure settings. Edit the settings file manually.=Fehlgeschlagen. Sicherheitseinstellungen können nicht modifiziert werden. Bearbeiten Sie die Einstellungsdatei manuell.
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>
@@ -151,6 +152,7 @@ Server shutting down (operator request).=Server wird heruntergefahren (Betreiber
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
+You cannot ban players in singleplayer!=Im Einzelspielermodus können Sie keine Spieler verbannen!
Player is not online.=Spieler ist nicht online.
Failed to ban player.=Konnte Spieler nicht verbannen.
Banned @1.=@1 verbannt.
@@ -195,7 +197,6 @@ 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.
@@ -205,6 +206,7 @@ Available commands: (see also: /help <cmd>)=Verfügbare Befehle: (siehe auch: /h
Close=Schließen
Privilege=Privileg
Description=Beschreibung
+Available privileges:=Verfügbare Privilegien:
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.
@@ -232,7 +234,6 @@ 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
diff --git a/builtin/locale/__builtin.it.tr b/builtin/locale/__builtin.it.tr
index 77f85c766..b04b48926 100644
--- a/builtin/locale/__builtin.it.tr
+++ b/builtin/locale/__builtin.it.tr
@@ -72,6 +72,7 @@ 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. Cannot modify secure settings. Edit the settings file manually.=
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>
@@ -151,6 +152,7 @@ Server shutting down (operator request).=Arresto del server in corso (per richie
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
+You cannot ban players in singleplayer!=
Player is not online.=Il giocatore non è connesso.
Failed to ban player.=Errore nel bandire il giocatore.
Banned @1.=@1 banditÇ.
@@ -195,7 +197,6 @@ 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.
@@ -205,6 +206,7 @@ Available commands: (see also: /help <cmd>)=Comandi disponibili: (vedi anche /he
Close=Chiudi
Privilege=Privilegio
Description=Descrizione
+Available privileges:=Privilegi disponibili:
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.
@@ -232,7 +234,6 @@ 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
diff --git a/builtin/locale/template.txt b/builtin/locale/template.txt
index 308d17f37..fa7352317 100644
--- a/builtin/locale/template.txt
+++ b/builtin/locale/template.txt
@@ -72,6 +72,7 @@ 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. Cannot modify secure settings. Edit the settings file manually.=
Failed. Use '/set -n <name> <value>' to create a new setting.=
@1 @= @2=
<not set>=
@@ -151,6 +152,7 @@ Server shutting down (operator request).=
Ban the IP of a player or show the ban list=
The ban list is empty.=
Ban list: @1=
+You cannot ban players in singleplayer!=
Player is not online.=
Failed to ban player.=
Banned @1.=
@@ -195,7 +197,6 @@ 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.=
@@ -205,6 +206,7 @@ Available commands: (see also: /help <cmd>)=
Close=
Privilege=
Description=
+Available privileges:=
print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=
Handle the profiler and profiling data=
Statistics written to action log.=
@@ -232,7 +234,6 @@ 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=
diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua
index 8db8bb8d1..81e28f2bb 100644
--- a/builtin/mainmenu/common.lua
+++ b/builtin/mainmenu/common.lua
@@ -125,18 +125,12 @@ os.tmpname = function()
end
--------------------------------------------------------------------------------
-function menu_render_worldlist(show_gameid)
+function menu_render_worldlist()
local retval = {}
local current_worldlist = menudata.worldlist:get_list()
- local row
for i, v in ipairs(current_worldlist) do
- row = v.name
- if show_gameid == nil or show_gameid == true then
- row = row .. " [" .. v.gameid .. "]"
- end
- retval[#retval+1] = core.formspec_escape(row)
-
+ retval[#retval+1] = core.formspec_escape(v.name)
end
return table.concat(retval, ",")
@@ -242,3 +236,11 @@ function menu_worldmt_legacy(selected)
end
end
end
+
+function confirmation_formspec(message, confirm_id, confirm_label, cancel_id, cancel_label)
+ return "size[10,2.5,true]" ..
+ "label[0.5,0.5;" .. message .. "]" ..
+ "style[" .. confirm_id .. ";bgcolor=red]" ..
+ "button[0.5,1.5;2.5,0.5;" .. confirm_id .. ";" .. confirm_label .. "]" ..
+ "button[7.0,1.5;2.5,0.5;" .. cancel_id .. ";" .. cancel_label .. "]"
+end
diff --git a/builtin/mainmenu/dlg_config_world.lua b/builtin/mainmenu/dlg_config_world.lua
index 9bdf92a74..e76e10ef7 100644
--- a/builtin/mainmenu/dlg_config_world.lua
+++ b/builtin/mainmenu/dlg_config_world.lua
@@ -61,12 +61,68 @@ local function init_data(data)
data.list:set_sortmode("alphabetic")
end
+
+-- Returns errors errors and a list of all enabled mods (inc. game and world mods)
+--
+-- `with_errors` is a table from mod virtual path to `{ type = "error" | "warning" }`.
+-- `enabled_mods_by_name` is a table from mod virtual path to `true`.
+--
+-- @param world_path Path to the world
+-- @param all_mods List of mods, with `enabled` property.
+-- @returns with_errors, enabled_mods_by_name
+local function check_mod_configuration(world_path, all_mods)
+ -- Build up lookup tables for enabled mods and all mods by vpath
+ local enabled_mod_paths = {}
+ local all_mods_by_vpath = {}
+ for _, mod in ipairs(all_mods) do
+ if mod.type == "mod" then
+ all_mods_by_vpath[mod.virtual_path] = mod
+ end
+ if mod.enabled then
+ enabled_mod_paths[mod.virtual_path] = mod.path
+ end
+ end
+
+ -- Use the engine's mod configuration code to resolve dependencies and return any errors
+ local config_status = core.check_mod_configuration(world_path, enabled_mod_paths)
+
+ -- Build the list of enabled mod virtual paths
+ local enabled_mods_by_name = {}
+ for _, mod in ipairs(config_status.satisfied_mods) do
+ assert(mod.virtual_path ~= "")
+ enabled_mods_by_name[mod.name] = all_mods_by_vpath[mod.virtual_path] or mod
+ end
+ for _, mod in ipairs(config_status.unsatisfied_mods) do
+ assert(mod.virtual_path ~= "")
+ enabled_mods_by_name[mod.name] = all_mods_by_vpath[mod.virtual_path] or mod
+ end
+
+ -- Build the table of errors
+ local with_error = {}
+ for _, mod in ipairs(config_status.unsatisfied_mods) do
+ local error = { type = "warning" }
+ with_error[mod.virtual_path] = error
+
+ for _, depname in ipairs(mod.unsatisfied_depends) do
+ if not enabled_mods_by_name[depname] then
+ error.type = "error"
+ break
+ end
+ end
+ end
+
+ return with_error, enabled_mods_by_name
+end
+
local function get_formspec(data)
if not data.list then
init_data(data)
end
- local mod = data.list:get_list()[data.selected_mod] or {name = ""}
+ local all_mods = data.list:get_list()
+ local with_error, enabled_mods_by_name = check_mod_configuration(data.worldspec.path, all_mods)
+
+ local mod = all_mods[data.selected_mod] or {name = ""}
local retval =
"size[11.5,7.5,true]" ..
@@ -87,6 +143,29 @@ local function get_formspec(data)
"textarea[0.25,0.7;5.75,7.2;;" .. info .. ";]"
else
local hard_deps, soft_deps = pkgmgr.get_dependencies(mod.path)
+
+ -- Add error messages to dep lists
+ if mod.enabled or mod.is_game_content then
+ for i, dep_name in ipairs(hard_deps) do
+ local dep = enabled_mods_by_name[dep_name]
+ if not dep then
+ hard_deps[i] = mt_color_red .. dep_name .. " " .. fgettext("(Unsatisfied)")
+ elseif with_error[dep.virtual_path] then
+ hard_deps[i] = mt_color_orange .. dep_name .. " " .. fgettext("(Enabled, has error)")
+ else
+ hard_deps[i] = mt_color_green .. dep_name
+ end
+ end
+ for i, dep_name in ipairs(soft_deps) do
+ local dep = enabled_mods_by_name[dep_name]
+ if dep and with_error[dep.virtual_path] then
+ soft_deps[i] = mt_color_orange .. dep_name .. " " .. fgettext("(Enabled, has error)")
+ elseif dep then
+ soft_deps[i] = mt_color_green .. dep_name
+ end
+ end
+ end
+
local hard_deps_str = table.concat(hard_deps, ",")
local soft_deps_str = table.concat(soft_deps, ",")
@@ -138,7 +217,6 @@ local function get_formspec(data)
if mod.name ~= "" and not mod.is_game_content then
if mod.is_modpack then
-
if pkgmgr.is_modpack_entirely_enabled(data, mod.name) then
retval = retval ..
"button[5.5,0.125;3,0.5;btn_mp_disable;" ..
@@ -163,10 +241,16 @@ local function get_formspec(data)
"button[8.95,0.125;2.5,0.5;btn_enable_all_mods;" ..
fgettext("Enable all") .. "]"
end
+
+ local use_technical_names = core.settings:get_bool("show_technical_names")
+
return retval ..
- "tablecolumns[color;tree;text]" ..
+ "tablecolumns[color;tree;image,align=inline,width=1.5,0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") ..
+ ",1=" .. core.formspec_escape(defaulttexturedir .. "checkbox_16_white.png") ..
+ ",2=" .. core.formspec_escape(defaulttexturedir .. "error_icon_orange.png") ..
+ ",3=" .. core.formspec_escape(defaulttexturedir .. "error_icon_red.png") .. ";text]" ..
"table[5.5,0.75;5.75,6;world_config_modlist;" ..
- pkgmgr.render_packagelist(data.list) .. ";" .. data.selected_mod .."]"
+ pkgmgr.render_packagelist(data.list, use_technical_names, with_error) .. ";" .. data.selected_mod .."]"
end
local function handle_buttons(this, fields)
@@ -205,14 +289,19 @@ local function handle_buttons(this, fields)
local mods = worldfile:to_table()
local rawlist = this.data.list:get_raw_list()
+ local was_set = {}
for i = 1, #rawlist do
local mod = rawlist[i]
if not mod.is_modpack and
not mod.is_game_content then
if modname_valid(mod.name) then
- worldfile:set("load_mod_" .. mod.name,
- mod.enabled and "true" or "false")
+ if mod.enabled then
+ worldfile:set("load_mod_" .. mod.name, mod.virtual_path)
+ was_set[mod.name] = true
+ elseif not was_set[mod.name] then
+ worldfile:set("load_mod_" .. mod.name, "false")
+ end
elseif mod.enabled then
gamedata.errormessage = fgettext_ne("Failed to enable mo" ..
"d \"$1\" as it contains disallowed characters. " ..
@@ -256,12 +345,26 @@ local function handle_buttons(this, fields)
if fields.btn_enable_all_mods then
local list = this.data.list:get_raw_list()
+ -- When multiple copies of a mod are installed, we need to avoid enabling multiple of them
+ -- at a time. So lets first collect all the enabled mods, and then use this to exclude
+ -- multiple enables.
+
+ local was_enabled = {}
for i = 1, #list do
if not list[i].is_game_content
- and not list[i].is_modpack then
+ and not list[i].is_modpack and list[i].enabled then
+ was_enabled[list[i].name] = true
+ end
+ end
+
+ for i = 1, #list do
+ if not list[i].is_game_content and not list[i].is_modpack and
+ not was_enabled[list[i].name] then
list[i].enabled = true
+ was_enabled[list[i].name] = true
end
end
+
enabled_all = true
return true
end
diff --git a/builtin/mainmenu/dlg_contentstore.lua b/builtin/mainmenu/dlg_contentstore.lua
index 276a7b096..2152b8a39 100644
--- a/builtin/mainmenu/dlg_contentstore.lua
+++ b/builtin/mainmenu/dlg_contentstore.lua
@@ -151,11 +151,9 @@ local function start_install(package, reason)
if conf_path then
local conf = Settings(conf_path)
- if name_is_title then
- conf:set("name", package.title)
- else
- conf:set("title", package.title)
- conf:set("name", package.name)
+ conf:set("title", package.title)
+ if not name_is_title then
+ conf:set("name", package.name)
end
if not conf:get("description") then
conf:set("description", package.short_description)
@@ -193,7 +191,7 @@ end
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
+ if number_downloading < math.max(max_concurrent_downloads, 1) then
start_install(package, reason)
else
table.insert(download_queue, { package = package, reason = reason })
@@ -360,7 +358,7 @@ function install_dialog.get_formspec()
selected_game_idx = i
end
- games[i] = core.formspec_escape(games[i].name)
+ games[i] = core.formspec_escape(games[i].title)
end
local selected_game = pkgmgr.games[selected_game_idx]
@@ -410,7 +408,7 @@ function install_dialog.get_formspec()
"container[0.375,0.70]",
"label[0,0.25;", fgettext("Base Game:"), "]",
- "dropdown[2,0;4.25,0.5;gameid;", table.concat(games, ","), ";", selected_game_idx, "]",
+ "dropdown[2,0;4.25,0.5;selected_game;", table.concat(games, ","), ";", selected_game_idx, "]",
"label[0,0.8;", fgettext("Dependencies:"), "]",
@@ -461,9 +459,9 @@ function install_dialog.handle_submit(this, fields)
return true
end
- if fields.gameid then
+ if fields.selected_game then
for _, game in pairs(pkgmgr.games) do
- if game.name == fields.gameid then
+ if game.title == fields.selected_game then
core.settings:set("menu_last_game", game.id)
break
end
@@ -490,12 +488,10 @@ local confirm_overwrite = {}
function confirm_overwrite.get_formspec()
local package = confirm_overwrite.package
- return "size[11.5,4.5,true]" ..
- "label[2,2;" ..
- fgettext("\"$1\" already exists. Would you like to overwrite it?", package.name) .. "]"..
- "style[install;bgcolor=red]" ..
- "button[3.25,3.5;2.5,0.5;install;" .. fgettext("Overwrite") .. "]" ..
- "button[5.75,3.5;2.5,0.5;cancel;" .. fgettext("Cancel") .. "]"
+ return confirmation_formspec(
+ fgettext("\"$1\" already exists. Would you like to overwrite it?", package.name),
+ 'install', fgettext("Overwrite"),
+ 'cancel', fgettext("Cancel"))
end
function confirm_overwrite.handle_submit(this, fields)
diff --git a/builtin/mainmenu/dlg_create_world.lua b/builtin/mainmenu/dlg_create_world.lua
index 8d1509f33..806e019a9 100644
--- a/builtin/mainmenu/dlg_create_world.lua
+++ b/builtin/mainmenu/dlg_create_world.lua
@@ -15,9 +15,6 @@
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- 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"
local str = {}
@@ -94,14 +91,14 @@ local mgv6_biomes = {
local function create_world_formspec(dialogdata)
- -- Error out when no games found
+ -- Point the player to ContentDB when no games are found
if #pkgmgr.games == 0 then
- return "size[12.25,3,true]" ..
- "box[0,0;12,2;" .. mt_color_orange .. "]" ..
- "textarea[0.3,0;11.7,2;;;"..
- fgettext("You have no games installed.") .. "\n" ..
- fgettext("Download one from minetest.net") .. "]" ..
- "button[4.75,2.5;3,0.5;world_create_cancel;" .. fgettext("Cancel") .. "]"
+ return "size[8,2.5,true]" ..
+ "style[label_button;border=false]" ..
+ "button[0.5,0.5;7,0.5;label_button;" ..
+ fgettext("You have no games installed.") .. "]" ..
+ "button[0.5,1.5;2.5,0.5;world_create_open_cdb;" .. fgettext("Install a game") .. "]" ..
+ "button[5.0,1.5;2.5,0.5;world_create_cancel;" .. fgettext("Cancel") .. "]"
end
local current_mg = dialogdata.mg
@@ -111,14 +108,11 @@ local function create_world_formspec(dialogdata)
local flags = dialogdata.flags
- local game, gameidx = pkgmgr.find_by_gameid(gameid)
- if game == nil and hide_gamelist then
+ local game = pkgmgr.find_by_gameid(gameid)
+ if game == nil 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 disallowed_mapgen_settings = {}
@@ -296,17 +290,6 @@ local function create_world_formspec(dialogdata)
label_spflags = "label[0,"..y_start..";" .. fgettext("Mapgen-specific flags") .. "]"
end
- -- Warning if only devtest is installed
- local devtest_only = ""
- local gamelist_height = 2.3
- if #pkgmgr.games == 1 and pkgmgr.games[1].id == "devtest" then
- devtest_only = "box[0,0;5.8,1.7;#ff8800]" ..
- "textarea[0.3,0;6,1.8;;;"..
- fgettext("Warning: The Development Test is meant for developers.") .. "\n" ..
- fgettext("Download a game, such as Minetest Game, from minetest.net") .. "]"
- gamelist_height = 0.5
- end
-
local retval =
"size[12.25,7,true]" ..
@@ -315,22 +298,28 @@ local function create_world_formspec(dialogdata)
"field[0.3,0.6;6,0.5;te_world_name;" ..
fgettext("World name") ..
";" .. core.formspec_escape(dialogdata.worldname) .. "]" ..
- "set_focus[te_world_name;false]" ..
+ "set_focus[te_world_name;false]"
- "field[0.3,1.7;6,0.5;te_seed;" ..
- fgettext("Seed") ..
- ";".. core.formspec_escape(dialogdata.seed) .. "]" ..
+ if not disallowed_mapgen_settings["seed"] then
+ retval = retval .. "field[0.3,1.7;6,0.5;te_seed;" ..
+ fgettext("Seed") ..
+ ";".. core.formspec_escape(dialogdata.seed) .. "]"
+
+ end
+
+ retval = retval ..
"label[0,2;" .. fgettext("Mapgen") .. "]"..
"dropdown[0,2.5;6.3;dd_mapgen;" .. mglist .. ";" .. selindex .. "]"
- if not hide_gamelist or devtest_only ~= "" then
+ -- Warning if only devtest is installed
+ if #pkgmgr.games == 1 and pkgmgr.games[1].id == "devtest" 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[0,3.5]" ..
+ "box[0,0;5.8,1.7;#ff8800]" ..
+ "textarea[0.4,0.1;6,1.8;;;"..
+ fgettext("Development Test is meant for developers.") .. "]" ..
+ "button[1,1;4,0.5;world_create_open_cdb;" .. fgettext("Install another game") .. "]" ..
"container_end[]"
end
@@ -353,17 +342,20 @@ end
local function create_world_buttonhandler(this, fields)
+ if fields["world_create_open_cdb"] then
+ local dlg = create_store_dlg("game")
+ dlg:set_parent(this.parent)
+ this:delete()
+ this.parent:hide()
+ dlg:show()
+ return true
+ end
+
if fields["world_create_confirm"] or
fields["key_enter"] then
local worldname = fields["te_world_name"]
- 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
+ local game, gameindex = pkgmgr.find_by_gameid(core.settings:get("menu_last_game"))
local message
if game == nil then
@@ -391,7 +383,7 @@ local function create_world_buttonhandler(this, fields)
end
if message == nil then
- this.data.seed = fields["te_seed"]
+ this.data.seed = fields["te_seed"] or ""
this.data.mg = fields["dd_mapgen"]
-- actual names as used by engine
@@ -412,9 +404,7 @@ local function create_world_buttonhandler(this, fields)
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
+ menudata.worldlist:set_filtercriteria(game.id)
menudata.worldlist:refresh()
core.settings:set("mainmenu_last_selected_world",
menudata.worldlist:raw_index_by_uid(worldname))
@@ -426,7 +416,7 @@ local function create_world_buttonhandler(this, fields)
end
this.data.worldname = fields["te_world_name"]
- this.data.seed = fields["te_seed"]
+ this.data.seed = fields["te_seed"] or ""
if fields["games"] then
local gameindex = core.get_textlist_index("games")
@@ -472,13 +462,12 @@ local function create_world_buttonhandler(this, fields)
end
-function create_create_world_dlg(update_worldlistfilter)
+function create_create_world_dlg()
local retval = dialog_create("sp_create_world",
create_world_formspec,
create_world_buttonhandler,
nil)
retval.data = {
- update_worldlist_filter = update_worldlistfilter,
worldname = "",
-- settings the world is created with:
seed = core.settings:get("fixed_map_seed") or "",
diff --git a/builtin/mainmenu/dlg_delete_content.lua b/builtin/mainmenu/dlg_delete_content.lua
index a24171541..4463825f7 100644
--- a/builtin/mainmenu/dlg_delete_content.lua
+++ b/builtin/mainmenu/dlg_delete_content.lua
@@ -18,15 +18,10 @@
--------------------------------------------------------------------------------
local function delete_content_formspec(dialogdata)
- local retval =
- "size[11.5,4.5,true]" ..
- "label[2,2;" ..
- fgettext("Are you sure you want to delete \"$1\"?", dialogdata.content.name) .. "]"..
- "style[dlg_delete_content_confirm;bgcolor=red]" ..
- "button[3.25,3.5;2.5,0.5;dlg_delete_content_confirm;" .. fgettext("Delete") .. "]" ..
- "button[5.75,3.5;2.5,0.5;dlg_delete_content_cancel;" .. fgettext("Cancel") .. "]"
-
- return retval
+ return confirmation_formspec(
+ fgettext("Are you sure you want to delete \"$1\"?", dialogdata.content.name),
+ 'dlg_delete_content_confirm', fgettext("Delete"),
+ 'dlg_delete_content_cancel', fgettext("Cancel"))
end
--------------------------------------------------------------------------------
diff --git a/builtin/mainmenu/dlg_delete_world.lua b/builtin/mainmenu/dlg_delete_world.lua
index 33e7bc945..67c0612bd 100644
--- a/builtin/mainmenu/dlg_delete_world.lua
+++ b/builtin/mainmenu/dlg_delete_world.lua
@@ -17,14 +17,10 @@
local function delete_world_formspec(dialogdata)
- local retval =
- "size[10,2.5,true]" ..
- "label[0.5,0.5;" ..
- fgettext("Delete World \"$1\"?", dialogdata.delete_name) .. "]" ..
- "style[world_delete_confirm;bgcolor=red]" ..
- "button[0.5,1.5;2.5,0.5;world_delete_confirm;" .. fgettext("Delete") .. "]" ..
- "button[7.0,1.5;2.5,0.5;world_delete_cancel;" .. fgettext("Cancel") .. "]"
- return retval
+ return confirmation_formspec(
+ fgettext("Delete World \"$1\"?", dialogdata.delete_name),
+ 'world_delete_confirm', fgettext("Delete"),
+ 'world_delete_cancel', fgettext("Cancel"))
end
local function delete_world_buttonhandler(this, fields)
diff --git a/builtin/mainmenu/dlg_register.lua b/builtin/mainmenu/dlg_register.lua
new file mode 100644
index 000000000..a7658249c
--- /dev/null
+++ b/builtin/mainmenu/dlg_register.lua
@@ -0,0 +1,123 @@
+--Minetest
+--Copyright (C) 2022 rubenwardy
+--
+--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.
+
+--------------------------------------------------------------------------------
+
+local function register_formspec(dialogdata)
+ local title = fgettext("Joining $1", dialogdata.server and dialogdata.server.name or dialogdata.address)
+ local buttons_y = 4 + 1.3
+ if dialogdata.error then
+ buttons_y = buttons_y + 0.8
+ end
+
+ local retval = {
+ "formspec_version[4]",
+ "size[8,", tostring(buttons_y + 1.175), "]",
+ "set_focus[", (dialogdata.name ~= "" and "password" or "name"), "]",
+ "label[0.375,0.8;", title, "]",
+ "field[0.375,1.575;7.25,0.8;name;", core.formspec_escape(fgettext("Name")), ";",
+ core.formspec_escape(dialogdata.name), "]",
+ "pwdfield[0.375,2.875;7.25,0.8;password;", core.formspec_escape(fgettext("Password")), "]",
+ "pwdfield[0.375,4.175;7.25,0.8;password_2;", core.formspec_escape(fgettext("Confirm Password")), "]"
+ }
+
+ if dialogdata.error then
+ table.insert_all(retval, {
+ "box[0.375,", tostring(buttons_y - 0.9), ";7.25,0.6;darkred]",
+ "label[0.625,", tostring(buttons_y - 0.6), ";", core.formspec_escape(dialogdata.error), "]",
+ })
+ end
+
+ table.insert_all(retval, {
+ "container[0.375,", tostring(buttons_y), "]",
+ "button[0,0;2.5,0.8;dlg_register_confirm;", fgettext("Register"), "]",
+ "button[4.75,0;2.5,0.8;dlg_register_cancel;", fgettext("Cancel"), "]",
+ "container_end[]",
+ })
+
+ return table.concat(retval, "")
+end
+
+--------------------------------------------------------------------------------
+local function register_buttonhandler(this, fields)
+ this.data.name = fields.name
+ this.data.error = nil
+
+ if fields.dlg_register_confirm or fields.key_enter then
+ if fields.name == "" then
+ this.data.error = fgettext("Missing name")
+ return true
+ end
+ if fields.password ~= fields.password_2 then
+ this.data.error = fgettext("Passwords do not match")
+ return true
+ end
+
+ gamedata.playername = fields.name
+ gamedata.password = fields.password
+ gamedata.address = this.data.address
+ gamedata.port = this.data.port
+ gamedata.allow_login_or_register = "register"
+ gamedata.selected_world = 0
+
+ assert(gamedata.address and gamedata.port)
+
+ local server = this.data.server
+ if server then
+ serverlistmgr.add_favorite(server)
+ gamedata.servername = server.name
+ gamedata.serverdescription = server.description
+ else
+ gamedata.servername = ""
+ gamedata.serverdescription = ""
+
+ serverlistmgr.add_favorite({
+ address = gamedata.address,
+ port = gamedata.port,
+ })
+ end
+
+ core.settings:set("name", fields.name)
+ core.settings:set("address", gamedata.address)
+ core.settings:set("remote_port", gamedata.port)
+
+ core.start()
+ end
+
+ if fields["dlg_register_cancel"] then
+ this:delete()
+ return true
+ end
+
+ return false
+end
+
+--------------------------------------------------------------------------------
+function create_register_dialog(address, port, server)
+ assert(address)
+ assert(type(port) == "number")
+
+ local retval = dialog_create("dlg_register",
+ register_formspec,
+ register_buttonhandler,
+ nil)
+ retval.data.address = address
+ retval.data.port = port
+ retval.data.server = server
+ retval.data.name = core.settings:get("name") or ""
+ return retval
+end
diff --git a/builtin/mainmenu/dlg_settings_advanced.lua b/builtin/mainmenu/dlg_settings_advanced.lua
index 06fd32d84..69562e6a5 100644
--- a/builtin/mainmenu/dlg_settings_advanced.lua
+++ b/builtin/mainmenu/dlg_settings_advanced.lua
@@ -351,9 +351,9 @@ local function parse_config_file(read_all, parse_mods)
local file = io.open(path, "r")
if file then
if not games_category_initialized then
- fgettext_ne("Games") -- not used, but needed for xgettext
+ fgettext_ne("Content: Games") -- not used, but needed for xgettext
table.insert(settings, {
- name = "Games",
+ name = "Content: Games",
level = 0,
type = "category",
})
@@ -378,15 +378,15 @@ local function parse_config_file(read_all, parse_mods)
-- Parse mods
local mods_category_initialized = false
local mods = {}
- get_mods(core.get_modpath(), mods)
+ get_mods(core.get_modpath(), "mods", mods)
for _, mod in ipairs(mods) do
local path = mod.path .. DIR_DELIM .. FILENAME
local file = io.open(path, "r")
if file then
if not mods_category_initialized then
- fgettext_ne("Mods") -- not used, but needed for xgettext
+ fgettext_ne("Content: Mods") -- not used, but needed for xgettext
table.insert(settings, {
- name = "Mods",
+ name = "Content: Mods",
level = 0,
type = "category",
})
@@ -395,6 +395,37 @@ local function parse_config_file(read_all, parse_mods)
table.insert(settings, {
name = mod.name,
+ readable_name = mod.title,
+ level = 1,
+ type = "category",
+ })
+
+ parse_single_file(file, path, read_all, settings, 2, false)
+
+ file:close()
+ end
+ end
+
+ -- Parse client mods
+ local clientmods_category_initialized = false
+ local clientmods = {}
+ get_mods(core.get_clientmodpath(), "clientmods", clientmods)
+ for _, mod in ipairs(clientmods) do
+ local path = mod.path .. DIR_DELIM .. FILENAME
+ local file = io.open(path, "r")
+ if file then
+ if not clientmods_category_initialized then
+ fgettext_ne("Client Mods") -- not used, but needed for xgettext
+ table.insert(settings, {
+ name = "Client Mods",
+ level = 0,
+ type = "category",
+ })
+ clientmods_category_initialized = true
+ end
+
+ table.insert(settings, {
+ name = mod.name,
level = 1,
type = "category",
})
@@ -497,44 +528,40 @@ end
local function get_current_np_group(setting)
local value = core.settings:get_np_group(setting.name)
- local t = {}
if value == nil then
- t = setting.values
- else
- table.insert(t, value.offset)
- table.insert(t, value.scale)
- table.insert(t, value.spread.x)
- table.insert(t, value.spread.y)
- table.insert(t, value.spread.z)
- table.insert(t, value.seed)
- table.insert(t, value.octaves)
- table.insert(t, value.persistence)
- table.insert(t, value.lacunarity)
- table.insert(t, value.flags)
+ return setting.values
end
- return t
+ local p = "%g"
+ return {
+ p:format(value.offset),
+ p:format(value.scale),
+ p:format(value.spread.x),
+ p:format(value.spread.y),
+ p:format(value.spread.z),
+ p:format(value.seed),
+ p:format(value.octaves),
+ p:format(value.persistence),
+ p:format(value.lacunarity),
+ value.flags
+ }
end
local function get_current_np_group_as_string(setting)
local value = core.settings:get_np_group(setting.name)
- local t
if value == nil then
- t = setting.default
- else
- t = value.offset .. ", " ..
- value.scale .. ", (" ..
- value.spread.x .. ", " ..
- value.spread.y .. ", " ..
- value.spread.z .. "), " ..
- value.seed .. ", " ..
- value.octaves .. ", " ..
- value.persistence .. ", " ..
- value.lacunarity
- if value.flags ~= "" then
- t = t .. ", " .. value.flags
- end
+ return setting.default
end
- return t
+ return ("%g, %g, (%g, %g, %g), %g, %g, %g, %g"):format(
+ value.offset,
+ value.scale,
+ value.spread.x,
+ value.spread.y,
+ value.spread.z,
+ value.seed,
+ value.octaves,
+ value.persistence,
+ value.lacunarity
+ ) .. (value.flags ~= "" and (", " .. value.flags) or "")
end
local checkboxes = {} -- handle checkboxes events
@@ -667,7 +694,7 @@ local function create_change_setting_formspec(dialogdata)
elseif setting.type == "v3f" then
local val = get_current_value(setting)
local v3f = {}
- for line in val:gmatch("[+-]?[%d.-e]+") do -- All numeric characters
+ for line in val:gmatch("[+-]?[%d.+-eE]+") do -- All numeric characters
table.insert(v3f, line)
end
@@ -960,7 +987,7 @@ local function create_settings_formspec(tabview, _, tabdata)
local current_level = 0
for _, entry in ipairs(settings) do
local name
- if not core.settings:get_bool("main_menu_technical_settings") and entry.readable_name then
+ if not core.settings:get_bool("show_technical_names") and entry.readable_name then
name = fgettext_ne(entry.readable_name)
else
name = entry.name
@@ -1001,7 +1028,7 @@ local function create_settings_formspec(tabview, _, tabdata)
"button[10,4.9;2,1;btn_edit;" .. fgettext("Edit") .. "]" ..
"button[7,4.9;3,1;btn_restore;" .. fgettext("Restore Default") .. "]" ..
"checkbox[0,4.3;cb_tech_settings;" .. fgettext("Show technical names") .. ";"
- .. dump(core.settings:get_bool("main_menu_technical_settings")) .. "]"
+ .. dump(core.settings:get_bool("show_technical_names")) .. "]"
return formspec
end
@@ -1084,7 +1111,7 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
end
if fields["cb_tech_settings"] then
- core.settings:set("main_menu_technical_settings", fields["cb_tech_settings"])
+ core.settings:set("show_technical_names", fields["cb_tech_settings"])
core.settings:write()
core.update_formspec(this:get_formspec())
return true
diff --git a/builtin/mainmenu/dlg_version_info.lua b/builtin/mainmenu/dlg_version_info.lua
new file mode 100644
index 000000000..568fca3f4
--- /dev/null
+++ b/builtin/mainmenu/dlg_version_info.lua
@@ -0,0 +1,172 @@
+--[[
+Minetest
+Copyright (C) 2018-2020 SmallJoker, 2022 rubenwardy
+
+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.
+]]
+
+if not core.get_http_api then
+ function check_new_version()
+ end
+ return
+end
+
+local function version_info_formspec(data)
+ local cur_ver = core.get_version()
+ local title = fgettext("A new $1 version is available", cur_ver.project)
+ local message =
+ fgettext("Installed version: $1\nNew version: $2\n" ..
+ "Visit $3 to find out how to get the newest version and stay up to date" ..
+ " with features and bugfixes.",
+ cur_ver.string, data.new_version or "", data.url or "")
+
+ local fs = {
+ "formspec_version[3]",
+ "size[12.8,7]",
+ "style_type[label;textcolor=#0E0]",
+ "label[0.5,0.8;", core.formspec_escape(title), "]",
+ "textarea[0.4,1.6;12,3.4;;;",
+ core.formspec_escape(message), "]",
+ "container[0.4,5.8]",
+ "button[0.0,0;4.0,0.8;version_check_visit;", fgettext("Visit website"), "]",
+ "button[4.5,0;3.5,0.8;version_check_remind;", fgettext("Later"), "]",
+ "button[8.5.5,0;3.5,0.8;version_check_never;", fgettext("Never"), "]",
+ "container_end[]",
+ }
+
+ return table.concat(fs, "")
+end
+
+local function version_info_buttonhandler(this, fields)
+ if fields.version_check_remind then
+ -- Erase last known, user will be reminded again at next check
+ core.settings:set("update_last_known", "")
+ this:delete()
+ return true
+ end
+ if fields.version_check_never then
+ core.settings:set("update_last_checked", "disabled")
+ this:delete()
+ return true
+ end
+ if fields.version_check_visit then
+ if type(this.data.url) == "string" then
+ core.open_url(this.data.url)
+ end
+ this:delete()
+ return true
+ end
+
+ return false
+end
+
+local function create_version_info_dlg(new_version, url)
+ assert(type(new_version) == "string")
+ assert(type(url) == "string")
+
+ local retval = dialog_create("version_info",
+ version_info_formspec,
+ version_info_buttonhandler,
+ nil)
+
+ retval.data.new_version = new_version
+ retval.data.url = url
+
+ return retval
+end
+
+local function get_current_version_code()
+ -- Format: Major.Minor.Patch
+ -- Convert to MMMNNNPPP
+ local cur_string = core.get_version().string
+ local cur_major, cur_minor, cur_patch = cur_string:match("^(%d+).(%d+).(%d+)")
+
+ if not cur_patch then
+ core.log("error", "Failed to parse version numbers (invalid tag format?)")
+ return
+ end
+
+ return (cur_major * 1000 + cur_minor) * 1000 + cur_patch
+end
+
+local function on_version_info_received(json)
+ local maintab = ui.find_by_name("maintab")
+ if maintab.hidden then
+ -- Another dialog is open, abort.
+ return
+ end
+
+ local known_update = tonumber(core.settings:get("update_last_known")) or 0
+
+ -- Format: MMNNPPP (Major, Minor, Patch)
+ local new_number = type(json.latest) == "table" and json.latest.version_code
+ if type(new_number) ~= "number" then
+ core.log("error", "Failed to read version number (invalid response?)")
+ return
+ end
+
+ local cur_number = get_current_version_code()
+ if new_number <= known_update or new_number < cur_number then
+ return
+ end
+
+ -- Also consider updating from 1.2.3-dev to 1.2.3
+ if new_number == cur_number and not core.get_version().is_dev then
+ return
+ end
+
+ core.settings:set("update_last_known", tostring(new_number))
+
+ -- Show version info dialog (once)
+ maintab:hide()
+
+ local version_info_dlg = create_version_info_dlg(json.latest.version, json.latest.url)
+ version_info_dlg:set_parent(maintab)
+ version_info_dlg:show()
+
+ ui.update()
+end
+
+function check_new_version()
+ local url = core.settings:get("update_information_url")
+ if core.settings:get("update_last_checked") == "disabled" or
+ url == "" then
+ -- Never show any updates
+ return
+ end
+
+ local time_now = os.time()
+ local time_checked = tonumber(core.settings:get("update_last_checked")) or 0
+ if time_now - time_checked < 2 * 24 * 3600 then
+ -- Check interval of 2 entire days
+ return
+ end
+
+ core.settings:set("update_last_checked", tostring(time_now))
+
+ core.handle_async(function(params)
+ local http = core.get_http_api()
+ return http.fetch_sync(params)
+ end, { url = url }, function(result)
+ local json = result.succeeded and core.parse_json(result.data)
+ if type(json) ~= "table" or not json.latest then
+ core.log("error", "Failed to read JSON output from " .. url ..
+ ", status code = " .. result.code)
+ return
+ end
+
+ on_version_info_received(json)
+ end)
+end
diff --git a/builtin/mainmenu/generate_from_settingtypes.lua b/builtin/mainmenu/generate_from_settingtypes.lua
index 43fc57bb9..0f551fbb1 100644
--- a/builtin/mainmenu/generate_from_settingtypes.lua
+++ b/builtin/mainmenu/generate_from_settingtypes.lua
@@ -31,7 +31,7 @@ local group_format_template = [[
# octaves = %s,
# persistence = %s,
# lacunarity = %s,
-# flags = %s
+# flags =%s
# }
]]
@@ -55,7 +55,11 @@ local function create_minetest_conf_example()
end
if entry.comment ~= "" then
for _, comment_line in ipairs(entry.comment:split("\n", true)) do
- insert(result, "# " .. comment_line .. "\n")
+ if comment_line == "" then
+ insert(result, "#\n")
+ else
+ insert(result, "# " .. comment_line .. "\n")
+ end
end
end
insert(result, "# type: " .. entry.type)
@@ -73,10 +77,14 @@ local function create_minetest_conf_example()
end
insert(result, "\n")
if group_format == true then
+ local flags = entry.values[10]
+ if flags ~= "" then
+ flags = " "..flags
+ end
insert(result, sprintf(group_format_template, entry.name, entry.values[1],
entry.values[2], entry.values[3], entry.values[4], entry.values[5],
entry.values[6], entry.values[7], entry.values[8], entry.values[9],
- entry.values[10]))
+ flags))
else
local append
if entry.default ~= "" then
@@ -91,7 +99,7 @@ end
local translation_file_header = [[
// This file is automatically generated
-// It conatins a bunch of fake gettext calls, to tell xgettext about the strings in config files
+// It contains a bunch of fake gettext calls, to tell xgettext about the strings in config files
// To update it, refer to the bottom of builtin/mainmenu/dlg_settings_advanced.lua
fake_function() {]]
@@ -126,4 +134,3 @@ file = assert(io.open("src/settings_translation_file.cpp", "w"))
--file = assert(io.open("settings_translation_file.cpp", "w"))
file:write(create_translation_file())
file:close()
-
diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua
index 8e716c2eb..c3a28a570 100644
--- a/builtin/mainmenu/init.lua
+++ b/builtin/mainmenu/init.lua
@@ -17,9 +17,11 @@
mt_color_grey = "#AAAAAA"
mt_color_blue = "#6389FF"
+mt_color_lightblue = "#99CCFF"
mt_color_green = "#72FF63"
mt_color_dark_green = "#25C191"
mt_color_orange = "#FF8800"
+mt_color_red = "#FF3300"
local menupath = core.get_mainmenu_path()
local basepath = core.get_builtin_path()
@@ -43,7 +45,9 @@ dofile(menupath .. DIR_DELIM .. "dlg_contentstore.lua")
dofile(menupath .. DIR_DELIM .. "dlg_create_world.lua")
dofile(menupath .. DIR_DELIM .. "dlg_delete_content.lua")
dofile(menupath .. DIR_DELIM .. "dlg_delete_world.lua")
+dofile(menupath .. DIR_DELIM .. "dlg_register.lua")
dofile(menupath .. DIR_DELIM .. "dlg_rename_modpack.lua")
+dofile(menupath .. DIR_DELIM .. "dlg_version_info.lua")
local tabs = {}
@@ -91,6 +95,7 @@ local function init_globals()
-- Create main tabview
local tv_main = tabview_create("maintab", {x = 12, y = 5.4}, {x = 0, y = 0})
+ -- note: size would be 15.5,7.1 in real coordinates mode
tv_main:set_autosave_tab(true)
tv_main:add(tabs.local_game)
@@ -118,8 +123,8 @@ local function init_globals()
end
ui.set_default("maintab")
+ check_new_version()
tv_main:show()
-
ui.update()
end
diff --git a/builtin/mainmenu/pkgmgr.lua b/builtin/mainmenu/pkgmgr.lua
index 23f24d617..32a65fd08 100644
--- a/builtin/mainmenu/pkgmgr.lua
+++ b/builtin/mainmenu/pkgmgr.lua
@@ -78,34 +78,35 @@ local function load_texture_packs(txtpath, retval)
for _, item in ipairs(list) do
if item ~= "base" then
- local name = item
-
local path = txtpath .. DIR_DELIM .. item .. DIR_DELIM
- if path == current_texture_path then
- name = fgettext("$1 (Enabled)", name)
- end
-
local conf = Settings(path .. "texture_pack.conf")
+ local enabled = path == current_texture_path
+ local title = conf:get("title") or item
+
+ -- list_* is only used if non-nil, else the regular versions are used.
retval[#retval + 1] = {
name = item,
+ title = title,
+ list_name = enabled and fgettext("$1 (Enabled)", item) or nil,
+ list_title = enabled and fgettext("$1 (Enabled)", title) or nil,
author = conf:get("author"),
release = tonumber(conf:get("release")) or 0,
- list_name = name,
type = "txp",
path = path,
- enabled = path == current_texture_path,
+ enabled = enabled,
}
end
end
end
-function get_mods(path,retval,modpack)
+function get_mods(path, virtual_path, retval, modpack)
local mods = core.get_dir_list(path, true)
for _, name in ipairs(mods) do
if name:sub(1, 1) ~= "." then
- local prefix = path .. DIR_DELIM .. name
+ local mod_path = path .. DIR_DELIM .. name
+ local mod_virtual_path = virtual_path .. "/" .. name
local toadd = {
dir_name = name,
parent_dir = path,
@@ -114,18 +115,18 @@ function get_mods(path,retval,modpack)
-- Get config file
local mod_conf
- local modpack_conf = io.open(prefix .. DIR_DELIM .. "modpack.conf")
+ local modpack_conf = io.open(mod_path .. DIR_DELIM .. "modpack.conf")
if modpack_conf then
toadd.is_modpack = true
modpack_conf:close()
- mod_conf = Settings(prefix .. DIR_DELIM .. "modpack.conf"):to_table()
+ mod_conf = Settings(mod_path .. DIR_DELIM .. "modpack.conf"):to_table()
if mod_conf.name then
name = mod_conf.name
toadd.is_name_explicit = true
end
else
- mod_conf = Settings(prefix .. DIR_DELIM .. "mod.conf"):to_table()
+ mod_conf = Settings(mod_path .. DIR_DELIM .. "mod.conf"):to_table()
if mod_conf.name then
name = mod_conf.name
toadd.is_name_explicit = true
@@ -134,14 +135,16 @@ function get_mods(path,retval,modpack)
-- Read from config
toadd.name = name
+ toadd.title = mod_conf.title
toadd.author = mod_conf.author
toadd.release = tonumber(mod_conf.release) or 0
- toadd.path = prefix
+ toadd.path = mod_path
+ toadd.virtual_path = mod_virtual_path
toadd.type = "mod"
-- Check modpack.txt
-- Note: modpack.conf is already checked above
- local modpackfile = io.open(prefix .. DIR_DELIM .. "modpack.txt")
+ local modpackfile = io.open(mod_path .. DIR_DELIM .. "modpack.txt")
if modpackfile then
modpackfile:close()
toadd.is_modpack = true
@@ -153,7 +156,7 @@ function get_mods(path,retval,modpack)
elseif toadd.is_modpack then
toadd.type = "modpack"
toadd.is_modpack = true
- get_mods(prefix, retval, name)
+ get_mods(mod_path, mod_virtual_path, retval, name)
end
end
end
@@ -334,7 +337,7 @@ function pkgmgr.identify_modname(modpath,filename)
return nil
end
--------------------------------------------------------------------------------
-function pkgmgr.render_packagelist(render_list)
+function pkgmgr.render_packagelist(render_list, use_technical_names, with_error)
if not render_list then
if not pkgmgr.global_mods then
pkgmgr.refresh_globals()
@@ -346,31 +349,75 @@ function pkgmgr.render_packagelist(render_list)
local retval = {}
for i, v in ipairs(list) do
local color = ""
+ local icon = 0
+ local error = with_error and with_error[v.virtual_path]
+ local function update_error(val)
+ if val and (not error or (error.type == "warning" and val.type == "error")) then
+ error = val
+ end
+ end
+
if v.is_modpack then
local rawlist = render_list:get_raw_list()
color = mt_color_dark_green
- for j = 1, #rawlist, 1 do
- if rawlist[j].modpack == list[i].name and
- not rawlist[j].enabled then
- -- Modpack not entirely enabled so showing as grey
- color = mt_color_grey
- break
+ for j = 1, #rawlist do
+ if rawlist[j].modpack == list[i].name then
+ if with_error then
+ update_error(with_error[rawlist[j].virtual_path])
+ end
+
+ if rawlist[j].enabled then
+ icon = 1
+ else
+ -- Modpack not entirely enabled so showing as grey
+ color = mt_color_grey
+ end
end
end
elseif v.is_game_content or v.type == "game" then
+ icon = 1
color = mt_color_blue
+
+ local rawlist = render_list:get_raw_list()
+ if v.type == "game" and with_error then
+ for j = 1, #rawlist do
+ if rawlist[j].is_game_content then
+ update_error(with_error[rawlist[j].virtual_path])
+ end
+ end
+ end
elseif v.enabled or v.type == "txp" then
+ icon = 1
color = mt_color_green
end
+ if error then
+ if error.type == "warning" then
+ color = mt_color_orange
+ icon = 2
+ else
+ color = mt_color_red
+ icon = 3
+ end
+ end
+
retval[#retval + 1] = color
if v.modpack ~= nil or v.loc == "game" then
retval[#retval + 1] = "1"
else
retval[#retval + 1] = "0"
end
- retval[#retval + 1] = core.formspec_escape(v.list_name or v.name)
+
+ if with_error then
+ retval[#retval + 1] = icon
+ end
+
+ if use_technical_names then
+ retval[#retval + 1] = core.formspec_escape(v.list_name or v.name)
+ else
+ retval[#retval + 1] = core.formspec_escape(v.list_title or v.list_name or v.title or v.name)
+ end
end
return table.concat(retval, ",")
@@ -397,6 +444,14 @@ function pkgmgr.is_modpack_entirely_enabled(data, name)
return true
end
+local function disable_all_by_name(list, name, except)
+ for i=1, #list do
+ if list[i].name == name and list[i] ~= except then
+ list[i].enabled = false
+ end
+ end
+end
+
---------- toggles or en/disables a mod or modpack and its dependencies --------
local function toggle_mod_or_modpack(list, toggled_mods, enabled_mods, toset, mod)
if not mod.is_modpack then
@@ -405,13 +460,16 @@ local function toggle_mod_or_modpack(list, toggled_mods, enabled_mods, toset, mo
toset = not mod.enabled
end
if mod.enabled ~= toset then
- mod.enabled = toset
toggled_mods[#toggled_mods+1] = mod.name
end
if toset then
-- Mark this mod for recursive dependency traversal
enabled_mods[mod.name] = true
+
+ -- Disable other mods with the same name
+ disable_all_by_name(list, mod.name, mod)
end
+ mod.enabled = toset
else
-- Toggle or en/disable every mod in the modpack,
-- interleaved unsupported
@@ -472,6 +530,7 @@ function pkgmgr.enable_mod(this, toset)
end
end
end
+
-- If sp is 0, every dependency is already activated
while sp > 0 do
local name = to_enable[sp]
@@ -483,8 +542,8 @@ function pkgmgr.enable_mod(this, toset)
if not mod_to_enable then
core.log("warning", "Mod dependency \"" .. name ..
"\" not found!")
- else
- if not mod_to_enable.enabled then
+ elseif not mod_to_enable.is_game_content then
+ if not mod_to_enable.enabled then
mod_to_enable.enabled = true
toggled_mods[#toggled_mods+1] = mod_to_enable.name
end
@@ -626,6 +685,8 @@ function pkgmgr.install_dir(type, path, basename, targetpath)
else
targetpath = core.get_gamepath() .. DIR_DELIM .. basename
end
+ else
+ error("basefolder didn't return a recognised type, this shouldn't happen")
end
-- Copy it
@@ -652,13 +713,14 @@ function pkgmgr.preparemodlist(data)
--read global mods
local modpaths = core.get_modpaths()
- for _, modpath in ipairs(modpaths) do
- get_mods(modpath, global_mods)
+ for key, modpath in pairs(modpaths) do
+ get_mods(modpath, key, global_mods)
end
for i=1,#global_mods,1 do
global_mods[i].type = "mod"
global_mods[i].loc = "global"
+ global_mods[i].enabled = false
retval[#retval + 1] = global_mods[i]
end
@@ -671,7 +733,7 @@ function pkgmgr.preparemodlist(data)
retval[#retval + 1] = {
type = "game",
is_game_content = true,
- name = fgettext("$1 mods", gamespec.name),
+ name = fgettext("$1 mods", gamespec.title),
path = gamespec.path
}
end
@@ -692,22 +754,37 @@ function pkgmgr.preparemodlist(data)
DIR_DELIM .. "world.mt"
local worldfile = Settings(filename)
-
- for key,value in pairs(worldfile:to_table()) do
+ for key, value in pairs(worldfile:to_table()) do
if key:sub(1, 9) == "load_mod_" then
key = key:sub(10)
- local element = nil
- for i=1,#retval,1 do
+ local mod_found = false
+
+ local fallback_found = false
+ local fallback_mod = nil
+
+ for i=1, #retval do
if retval[i].name == key and
- not retval[i].is_modpack then
- element = retval[i]
- break
+ not retval[i].is_modpack then
+ if core.is_yes(value) or retval[i].virtual_path == value then
+ retval[i].enabled = true
+ mod_found = true
+ break
+ elseif fallback_found then
+ -- Only allow fallback if only one mod matches
+ fallback_mod = nil
+ else
+ fallback_found = true
+ fallback_mod = retval[i]
+ end
end
end
- if element ~= nil then
- element.enabled = value ~= "false" and value ~= "nil" and value
- else
- core.log("info", "Mod: " .. key .. " " .. dump(value) .. " but not found")
+
+ if not mod_found then
+ if fallback_mod and value:find("/") then
+ fallback_mod.enabled = true
+ else
+ core.log("info", "Mod: " .. key .. " " .. dump(value) .. " but not found")
+ end
end
end
end
@@ -801,7 +878,7 @@ function pkgmgr.get_game_mods(gamespec, retval)
if gamespec ~= nil and
gamespec.gamemods_path ~= nil and
gamespec.gamemods_path ~= "" then
- get_mods(gamespec.gamemods_path, retval)
+ get_mods(gamespec.gamemods_path, ("games/%s/mods"):format(gamespec.id), retval)
end
end
@@ -837,10 +914,10 @@ end
function pkgmgr.gamelist()
local retval = ""
if #pkgmgr.games > 0 then
- retval = retval .. core.formspec_escape(pkgmgr.games[1].name)
+ retval = retval .. core.formspec_escape(pkgmgr.games[1].title)
for i=2,#pkgmgr.games,1 do
- retval = retval .. "," .. core.formspec_escape(pkgmgr.games[i].name)
+ retval = retval .. "," .. core.formspec_escape(pkgmgr.games[i].title)
end
end
return retval
diff --git a/builtin/mainmenu/tab_about.lua b/builtin/mainmenu/tab_about.lua
index ba258fd2d..a84ebce3f 100644
--- a/builtin/mainmenu/tab_about.lua
+++ b/builtin/mainmenu/tab_about.lua
@@ -15,48 +15,46 @@
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
---------------------------------------------------------------------------------
+-- https://github.com/orgs/minetest/teams/engine/members
local core_developers = {
- "Perttu Ahola (celeron55) <celeron55@gmail.com>",
+ "Perttu Ahola (celeron55) <celeron55@gmail.com> [Project founder]",
"sfan5 <sfan5@live.de>",
- "Nathanaël Courant (Nore/Ekdohibs) <nore@mesecons.net>",
+ "ShadowNinja <shadowninja@minetest.net>",
+ "Nathanaëlle Courant (Nore/Ekdohibs) <nore@mesecons.net>",
"Loic Blot (nerzhul/nrz) <loic.blot@unix-experience.fr>",
- "paramat",
"Andrew Ward (rubenwardy) <rw@rubenwardy.com>",
"Krock/SmallJoker <mk939@ymail.com>",
"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>",
}
+local core_team = {
+ "Zughy [Issue triager]",
+}
+
-- For updating active/previous contributors, see the script in ./util/gather_git_credits.py
local active_contributors = {
- "Wuzzy [I18n for builtin, liquid features, fixes]",
- "Zughy [Various features and fixes]",
- "numzero [Graphics and rendering]",
- "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]",
+ "Wuzzy [Features, translations, devtest]",
+ "Lars Müller [Lua optimizations and fixes]",
+ "Jude Melton-Houghton [Optimizations, bugfixes]",
+ "paradust7 [Performance, fixes, Irrlicht refactoring]",
+ "Desour [Fixes]",
+ "ROllerozxa [Main menu]",
+ "savilli [Bugfixes]",
+ "Lexi Hale [Particlespawner animation]",
"Liso [Shadow Mapping]",
- "MoNTE48 [Build fix]",
- "Jean-Patrick Guerrero (kilbith) [Fixes]",
- "ROllerozxa [Code cleanups]",
- "Lejo [bitop library integration]",
- "LoneWolfHT [Build fixes]",
+ "JosiahWI [Fixes, build system]",
+ "numzero [Graphics and rendering]",
+ "HybridDog [Fixes]",
"NeroBurner [Joystick]",
- "Elias Fleckenstein [Internal fixes]",
- "David CARLIER [Unix & Haiku build fixes]",
"pecksin [Clickable web links]",
- "srfqi [Android & rendering fixes]",
- "EvidenceB [Formspec]",
+ "Daroc Alden [Fixes]",
+ "Jean-Patrick Guerrero (kilbith) [Fixes]",
}
local previous_core_developers = {
@@ -71,33 +69,50 @@ local previous_core_developers = {
"Ryan Kwolek (kwolekr) <kwolekr@minetest.net>",
"sapier",
"Zeno",
- "ShadowNinja <shadowninja@minetest.net>",
"Auke Kok (sofar) <sofar@foo-projects.org>",
"Aaron Suen <warr1024@gmail.com>",
+ "paramat",
+ "Pierre-Yves Rollo <dev@pyrollo.com>",
}
local previous_contributors = {
- "Nils Dagsson Moskopp (erlehmann) <nils@dieweltistgarnichtso.net> [Minetest Logo]",
+ "Nils Dagsson Moskopp (erlehmann) <nils@dieweltistgarnichtso.net> [Minetest logo]",
"red-001 <red-001@outlook.ie>",
"Giuseppe Bilotta",
+ "ClobberXD",
"Dániel Juhász (juhdanad) <juhdanad@gmail.com>",
"MirceaKitsune <mirceakitsune@gmail.com>",
+ "MoNTE48",
"Constantin Wenger (SpeedProg)",
"Ciaran Gultnieks (CiaranG)",
"Paul Ouellette (pauloue)",
"stujones11",
+ "srifqi",
"Rogier <rogier777@gmail.com>",
"Gregory Currie (gregorycu)",
"JacobF",
- "Jeija <jeija@mesecons.net> [HTTP, particles]",
+ "Jeija <jeija@mesecons.net>",
}
-local function buildCreditList(source)
+local function prepare_credits(dest, source)
+ for _, s in ipairs(source) do
+ -- if there's text inside brackets make it gray-ish
+ s = s:gsub("%[.-%]", core.colorize("#aaa", "%1"))
+ dest[#dest+1] = s
+ end
+end
+
+local function build_hacky_list(items, spacing)
+ spacing = spacing or 0.5
+ local y = spacing / 2
local ret = {}
- for i = 1, #source do
- ret[i] = core.formspec_escape(source[i])
+ for _, item in ipairs(items) do
+ if item ~= "" then
+ ret[#ret+1] = ("label[0,%f;%s]"):format(y, core.formspec_escape(item))
+ end
+ y = y + spacing
end
- return table.concat(ret, ",,")
+ return table.concat(ret, ""), y
end
return {
@@ -106,42 +121,73 @@ return {
cbf_formspec = function(tabview, name, tabdata)
local logofile = defaulttexturedir .. "logo.png"
local version = core.get_version()
- local fs = "image[0.75,0.5;2.2,2.2;" .. core.formspec_escape(logofile) .. "]" ..
+
+ local credit_list = {}
+ table.insert_all(credit_list, {
+ core.colorize("#ff0", fgettext("Core Developers"))
+ })
+ prepare_credits(credit_list, core_developers)
+ table.insert_all(credit_list, {
+ "",
+ core.colorize("#ff0", fgettext("Core Team"))
+ })
+ prepare_credits(credit_list, core_team)
+ table.insert_all(credit_list, {
+ "",
+ core.colorize("#ff0", fgettext("Active Contributors"))
+ })
+ prepare_credits(credit_list, active_contributors)
+ table.insert_all(credit_list, {
+ "",
+ core.colorize("#ff0", fgettext("Previous Core Developers"))
+ })
+ prepare_credits(credit_list, previous_core_developers)
+ table.insert_all(credit_list, {
+ "",
+ core.colorize("#ff0", fgettext("Previous Contributors"))
+ })
+ prepare_credits(credit_list, previous_contributors)
+ local credit_fs, scroll_height = build_hacky_list(credit_list)
+ -- account for the visible portion
+ scroll_height = math.max(0, scroll_height - 6.9)
+
+ local fs = "image[1.5,0.6;2.5,2.5;" .. core.formspec_escape(logofile) .. "]" ..
"style[label_button;border=false]" ..
- "button[0.5,2;2.5,2;label_button;" .. version.project .. " " .. version.string .. "]" ..
- "button[0.75,2.75;2,2;homepage;minetest.net]" ..
- "tablecolumns[color;text]" ..
- "tableoptions[background=#00000000;highlight=#00000000;border=false]" ..
- "table[3.5,-0.25;8.5,6.05;list_credits;" ..
- "#FFFF00," .. fgettext("Core Developers") .. ",," ..
- buildCreditList(core_developers) .. ",,," ..
- "#FFFF00," .. fgettext("Active Contributors") .. ",," ..
- buildCreditList(active_contributors) .. ",,," ..
- "#FFFF00," .. fgettext("Previous Core Developers") ..",," ..
- buildCreditList(previous_core_developers) .. ",,," ..
- "#FFFF00," .. fgettext("Previous Contributors") .. ",," ..
- buildCreditList(previous_contributors) .. "," ..
- ";1]"
+ "button[0.1,3.4;5.3,0.5;label_button;" ..
+ core.formspec_escape(version.project .. " " .. version.string) .. "]" ..
+ "button[1.5,4.1;2.5,0.8;homepage;minetest.net]" ..
+ "scroll_container[5.5,0.1;9.5,6.9;scroll_credits;vertical;" ..
+ tostring(scroll_height / 1000) .. "]" .. credit_fs ..
+ "scroll_container_end[]"..
+ "scrollbar[15,0.1;0.4,6.9;vertical;scroll_credits;0]"
-- Render information
- fs = fs .. "label[0.75,4.9;" ..
+ fs = fs .. "style[label_button2;border=false]" ..
+ "button[0.1,6;5.3,1;label_button2;" ..
fgettext("Active renderer:") .. "\n" ..
core.formspec_escape(core.get_screen_info().render_info) .. "]"
- if PLATFORM ~= "Android" then
+ if PLATFORM == "Android" then
+ fs = fs .. "button[0.5,5.1;4.5,0.8;share_debug;" .. fgettext("Share debug log") .. "]"
+ else
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;3.5,1;userdata;" .. fgettext("Open User Data Directory") .. "]"
+ fs = fs .. "button[0.5,5.1;4.5,0.8;userdata;" .. fgettext("Open User Data Directory") .. "]"
end
- return fs
+ return fs, "size[15.5,7.1,false]real_coordinates[true]"
end,
cbf_button_handler = function(this, fields, name, tabdata)
if fields.homepage then
core.open_url("https://www.minetest.net")
end
+ if fields.share_debug then
+ local path = core.get_user_path() .. DIR_DELIM .. "debug.txt"
+ core.share_file(path)
+ end
+
if fields.userdata then
core.open_dir(core.get_user_path())
end
diff --git a/builtin/mainmenu/tab_content.lua b/builtin/mainmenu/tab_content.lua
index fb7f121f8..5e14d1902 100644
--- a/builtin/mainmenu/tab_content.lua
+++ b/builtin/mainmenu/tab_content.lua
@@ -51,12 +51,14 @@ local function get_formspec(tabview, name, tabdata)
tabdata.selected_pkg = 1
end
+ local use_technical_names = core.settings:get_bool("show_technical_names")
+
local retval =
"label[0.05,-0.25;".. fgettext("Installed Packages:") .. "]" ..
"tablecolumns[color;tree;text]" ..
"table[0,0.25;5.1,4.3;pkglist;" ..
- pkgmgr.render_packagelist(packages) ..
+ pkgmgr.render_packagelist(packages, use_technical_names) ..
";" .. tabdata.selected_pkg .. "]" ..
"button[0,4.85;5.25,0.5;btn_contentdb;".. fgettext("Browse online content") .. "]"
@@ -87,9 +89,17 @@ local function get_formspec(tabview, name, tabdata)
desc = info.description
end
+ local title_and_name
+ if selected_pkg.type == "game" then
+ title_and_name = selected_pkg.name
+ else
+ title_and_name = (selected_pkg.title or selected_pkg.name) .. "\n" ..
+ core.colorize("#BFBFBF", selected_pkg.name)
+ end
+
retval = retval ..
"image[5.5,0;3,2;" .. core.formspec_escape(modscreenshot) .. "]" ..
- "label[8.25,0.6;" .. core.formspec_escape(selected_pkg.name) .. "]" ..
+ "label[8.25,0.6;" .. core.formspec_escape(title_and_name) .. "]" ..
"box[5.5,2.2;6.15,2.35;#000]"
if selected_pkg.type == "mod" then
@@ -154,6 +164,9 @@ local function handle_doubleclick(pkg)
core.settings:set("texture_path", pkg.path)
end
packages = nil
+
+ mm_game_theme.init()
+ mm_game_theme.reset()
end
end
@@ -197,17 +210,17 @@ local function handle_buttons(tabview, fields, tabname, tabdata)
return true
end
- if fields.btn_mod_mgr_use_txp then
- local txp = packages:get_list()[tabdata.selected_pkg]
- core.settings:set("texture_path", txp.path)
- packages = nil
- return true
- end
-
+ if fields.btn_mod_mgr_use_txp or fields.btn_mod_mgr_disable_txp then
+ local txp_path = ""
+ if fields.btn_mod_mgr_use_txp then
+ txp_path = packages:get_list()[tabdata.selected_pkg].path
+ end
- if fields.btn_mod_mgr_disable_txp then
- core.settings:set("texture_path", "")
+ core.settings:set("texture_path", txp_path)
packages = nil
+
+ mm_game_theme.init()
+ mm_game_theme.reset()
return true
end
diff --git a/builtin/mainmenu/tab_local.lua b/builtin/mainmenu/tab_local.lua
index e77c6f04d..f8de10db6 100644
--- a/builtin/mainmenu/tab_local.lua
+++ b/builtin/mainmenu/tab_local.lua
@@ -16,7 +16,6 @@
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-local enable_gamebar = PLATFORM ~= "Android"
local current_game, singleplayer_refresh_gamebar
local valid_disabled_settings = {
["enable_damage"]=true,
@@ -24,95 +23,88 @@ local valid_disabled_settings = {
["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)
+-- 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)
- return game
- end
+ 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)
+-- 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
+ 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
+ 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
- menu_worldmt_legacy(index)
end
+ menu_worldmt_legacy(index)
+end
- function singleplayer_refresh_gamebar()
+function singleplayer_refresh_gamebar()
- local old_bar = ui.find_by_name("game_button_bar")
- if old_bar ~= nil then
- old_bar:delete()
+ local old_bar = ui.find_by_name("game_button_bar")
+ if old_bar ~= nil then
+ old_bar:delete()
+ end
+
+ local function game_buttonbar_button_handler(fields)
+ if fields.game_open_cdb then
+ local maintab = ui.find_by_name("maintab")
+ local dlg = create_store_dlg("game")
+ dlg:set_parent(maintab)
+ maintab:hide()
+ dlg:show()
+ return true
end
- local function game_buttonbar_button_handler(fields)
- if fields.game_open_cdb then
- local maintab = ui.find_by_name("maintab")
- local dlg = create_store_dlg("game")
- dlg:set_parent(maintab)
- maintab:hide()
- dlg:show()
+ for _, game in ipairs(pkgmgr.games) do
+ if fields["game_btnbar_" .. game.id] then
+ apply_game(game)
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
+ end
- local btnbar = buttonbar_create("game_button_bar",
- game_buttonbar_button_handler,
- {x=-0.3,y=5.9}, "horizontal", {x=12.4,y=1.15})
+ local btnbar = buttonbar_create("game_button_bar",
+ game_buttonbar_button_handler,
+ {x=-0.3,y=5.9}, "horizontal", {x=12.4,y=1.15})
- for _, game in ipairs(pkgmgr.games) do
- local btn_name = "game_btnbar_" .. game.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(game.name)
+ local image = nil
+ local text = nil
+ local tooltip = core.formspec_escape(game.title)
- if (game.menuicon_path or "") ~= "" then
- image = core.formspec_escape(game.menuicon_path)
- else
- local part1 = game.id:sub(1,5)
- local part2 = game.id:sub(6,10)
- local part3 = game.id:sub(11)
+ if (game.menuicon_path or "") ~= "" then
+ image = core.formspec_escape(game.menuicon_path)
+ else
+ 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 ~= "" then
- text = text .. "\n" .. part3
- end
+ text = part1 .. "\n" .. part2
+ if part3 ~= "" then
+ text = text .. "\n" .. part3
end
- btnbar:add_button(btn_name, text, image, tooltip)
end
-
- local plus_image = core.formspec_escape(defaulttexturedir .. "plus.png")
- 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
+ btnbar:add_button(btn_name, text, image, tooltip)
end
+
+ local plus_image = core.formspec_escape(defaulttexturedir .. "plus.png")
+ btnbar:add_button("game_open_cdb", "", plus_image, fgettext("Install games from ContentDB"))
end
local function get_disabled_settings(game)
@@ -187,7 +179,7 @@ local function get_formspec(tabview, name, tabdata)
damage ..
host ..
"textlist[3.9,0.4;7.9,3.45;sp_worlds;" ..
- menu_render_worldlist(not enable_gamebar) ..
+ menu_render_worldlist() ..
";" .. index .. "]"
if core.settings:get_bool("enable_server") and disabled_settings["enable_server"] == nil then
@@ -324,7 +316,7 @@ local function main_button_handler(this, fields, name, tabdata)
end
if fields["world_create"] ~= nil then
- local create_world_dlg = create_create_world_dlg(enable_gamebar)
+ local create_world_dlg = create_create_world_dlg()
create_world_dlg:set_parent(this)
this:hide()
create_world_dlg:show()
@@ -371,26 +363,23 @@ local function main_button_handler(this, fields, name, tabdata)
end
end
-local on_change
-if enable_gamebar then
- function on_change(type, old_tab, new_tab)
- if (type == "ENTER") then
- local game = current_game()
- if game then
- apply_game(game)
- end
+local function on_change(type, old_tab, new_tab)
+ if (type == "ENTER") then
+ local game = current_game()
+ if game then
+ apply_game(game)
+ end
- singleplayer_refresh_gamebar()
- ui.find_by_name("game_button_bar"):show()
- else
- menudata.worldlist:set_filtercriteria(nil)
- local gamebar = ui.find_by_name("game_button_bar")
- if gamebar then
- gamebar:hide()
- end
- core.set_topleft_text("")
- mm_game_theme.update(new_tab,nil)
+ singleplayer_refresh_gamebar()
+ ui.find_by_name("game_button_bar"):show()
+ else
+ menudata.worldlist:set_filtercriteria(nil)
+ local gamebar = ui.find_by_name("game_button_bar")
+ if gamebar then
+ gamebar:hide()
end
+ core.set_topleft_text("")
+ mm_game_theme.update(new_tab,nil)
end
end
diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua
index fb7409864..899f30bd1 100644
--- a/builtin/mainmenu/tab_online.lua
+++ b/builtin/mainmenu/tab_online.lua
@@ -87,27 +87,34 @@ local function get_formspec(tabview, name, tabdata)
"field[4.25,0.5;1.25,0.75;te_port;;" ..
core.formspec_escape(core.settings:get("remote_port")) .. "]" ..
- -- Name / Password
- "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[3,1.75;2.5,0.75;te_pwd;]" ..
-
-- Description Background
- "label[0.25,2.75;" .. fgettext("Server Description") .. "]" ..
- "box[0.25,3;5.25,2.75;#999999]"..
+ "label[0.25,1.6;" .. fgettext("Server Description") .. "]" ..
+ "box[0.25,1.85;5.25,2.7;#999999]"..
+
+ -- Name / Password
+ "container[0,4.8]" ..
+ "label[0.25,0;" .. fgettext("Name") .. "]" ..
+ "label[3,0;" .. fgettext("Password") .. "]" ..
+ "field[0.25,0.2;2.625,0.75;te_name;;" .. core.formspec_escape(core.settings:get("name")) .. "]" ..
+ "pwdfield[2.875,0.2;2.625,0.75;te_pwd;]" ..
+ "container_end[]" ..
-- Connect
- "button[3,6;2.5,0.75;btn_mp_connect;" .. fgettext("Connect") .. "]"
+ "button[3,6;2.5,0.75;btn_mp_login;" .. fgettext("Login") .. "]"
+
+ if core.settings:get_bool("enable_split_login_register") then
+ retval = retval .. "button[0.25,6;2.5,0.75;btn_mp_register;" .. fgettext("Register") .. "]"
+ end
if tabdata.selected then
if gamedata.fav then
- retval = retval .. "button[0.25,6;2.5,0.75;btn_delete_favorite;" ..
- fgettext("Del. Favorite") .. "]"
+ retval = retval .. "tooltip[btn_delete_favorite;" .. fgettext("Remove favorite") .. "]"
+ retval = retval .. "style[btn_delete_favorite;padding=6]"
+ retval = retval .. "image_button[5,1.3;0.5,0.5;" .. core.formspec_escape(defaulttexturedir ..
+ "server_favorite_delete.png") .. ";btn_delete_favorite;]"
end
if gamedata.serverdescription then
- retval = retval .. "textarea[0.25,3;5.25,2.75;;;" ..
+ retval = retval .. "textarea[0.25,1.85;5.2,2.75;;;" ..
core.formspec_escape(gamedata.serverdescription) .. "]"
end
end
@@ -339,12 +346,15 @@ local function main_button_handler(tabview, fields, name, tabdata)
return true
end
- if (fields.btn_mp_connect or fields.key_enter)
+ if (fields.btn_mp_login or fields.key_enter)
and fields.te_address ~= "" and fields.te_port then
gamedata.playername = fields.te_name
gamedata.password = fields.te_pwd
gamedata.address = fields.te_address
gamedata.port = tonumber(fields.te_port)
+
+ local enable_split_login_register = core.settings:get_bool("enable_split_login_register")
+ gamedata.allow_login_or_register = enable_split_login_register and "login" or "any"
gamedata.selected_world = 0
local idx = core.get_table_index("servers")
@@ -381,6 +391,25 @@ local function main_button_handler(tabview, fields, name, tabdata)
return true
end
+ if fields.btn_mp_register and fields.te_address ~= "" and fields.te_port then
+ local idx = core.get_table_index("servers")
+ local server = idx and tabdata.lookup[idx]
+ if server and (server.address ~= fields.te_address or server.port ~= tonumber(fields.te_port)) then
+ server = nil
+ end
+
+ if server and not is_server_protocol_compat_or_error(
+ server.proto_min, server.proto_max) then
+ return true
+ end
+
+ local dlg = create_register_dialog(fields.te_address, tonumber(fields.te_port), server)
+ dlg:set_parent(tabview)
+ tabview:hide()
+ dlg:show()
+ return true
+ end
+
return false
end
diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua
index 700b7390f..21c77aa8e 100644
--- a/builtin/mainmenu/tab_settings.lua
+++ b/builtin/mainmenu/tab_settings.lua
@@ -50,7 +50,7 @@ local labels = {
fgettext("Low"),
fgettext("Medium"),
fgettext("High"),
- fgettext("Ultra High")
+ fgettext("Very High")
}
}
@@ -160,7 +160,7 @@ local function formspec(tabview, name, tabdata)
.. getSettingIndex.NodeHighlighting() .. "]" ..
"dropdown[0.25,3.6;3.5;dd_leaves_style;" .. dd_options.leaves[1] .. ";"
.. getSettingIndex.Leaves() .. "]" ..
- "box[4,0;3.75,4.5;#999999]" ..
+ "box[4,0;3.75,4.9;#999999]" ..
"label[4.25,0.1;" .. fgettext("Texturing:") .. "]" ..
"dropdown[4.25,0.55;3.5;dd_filters;" .. dd_options.filters[1] .. ";"
.. getSettingIndex.Filter() .. "]" ..
@@ -169,9 +169,6 @@ local function formspec(tabview, name, tabdata)
"label[4.25,2.15;" .. fgettext("Antialiasing:") .. "]" ..
"dropdown[4.25,2.6;3.5;dd_antialiasing;" .. dd_options.antialiasing[1] .. ";"
.. getSettingIndex.Antialiasing() .. "]" ..
- "label[4.25,3.45;" .. fgettext("Screen:") .. "]" ..
- "checkbox[4.25,3.6;cb_autosave_screensize;" .. fgettext("Autosave Screen Size") .. ";"
- .. dump(core.settings:get_bool("autosave_screensize")) .. "]" ..
"box[8,0;3.75,4.5;#999999]"
local video_driver = core.settings:get("video_driver")
@@ -203,10 +200,15 @@ local function formspec(tabview, name, tabdata)
if core.settings:get("touchscreen_threshold") ~= nil then
tab_string = tab_string ..
- "label[4.3,4.2;" .. fgettext("Touchthreshold: (px)") .. "]" ..
- "dropdown[4.25,4.65;3.5;dd_touchthreshold;0,10,20,30,40,50;" ..
+ "label[4.25,3.5;" .. fgettext("Touch threshold (px):") .. "]" ..
+ "dropdown[4.25,3.95;3.5;dd_touchthreshold;0,10,20,30,40,50;" ..
((tonumber(core.settings:get("touchscreen_threshold")) / 10) + 1) ..
- "]box[4.0,4.5;3.75,1.0;#999999]"
+ "]"
+ else
+ tab_string = tab_string ..
+ "label[4.25,3.65;" .. fgettext("Screen:") .. "]" ..
+ "checkbox[4.25,3.9;cb_autosave_screensize;" .. fgettext("Autosave Screen Size") .. ";"
+ .. dump(core.settings:get_bool("autosave_screensize")) .. "]"
end
if shaders_enabled then
@@ -219,9 +221,18 @@ 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() .. "]"
+
+ if video_driver == "opengl" then
+ tab_string = tab_string ..
+ "label[8.25,2.8;" .. fgettext("Dynamic shadows:") .. "]" ..
+ "label[8.25,3.2;" .. fgettext("(game support required)") .. "]" ..
+ "dropdown[8.25,3.7;3.5;dd_shadows;" .. dd_options.shadow_levels[1] .. ";"
+ .. getSettingIndex.ShadowMapping() .. "]"
+ else
+ tab_string = tab_string ..
+ "label[8.38,2.7;" .. core.colorize("#888888",
+ fgettext("Dynamic shadows")) .. "]"
+ end
else
tab_string = tab_string ..
"label[8.38,0.7;" .. core.colorize("#888888",
@@ -231,9 +242,9 @@ local function formspec(tabview, name, tabdata)
"label[8.38,1.7;" .. core.colorize("#888888",
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")) .. "]"
+ fgettext("Waving Plants")) .. "]"..
+ "label[8.38,2.7;" .. core.colorize("#888888",
+ fgettext("Dynamic shadows")) .. "]"
end
return tab_string
@@ -364,11 +375,11 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
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" },
+ [2] = { 62, 512, "true", 0, "false" },
+ [3] = { 93, 1024, "true", 0, "false" },
+ [4] = { 140, 2048, "true", 1, "false" },
+ [5] = { 210, 4096, "true", 2, "true" },
+ [6] = { 300, 8192, "true", 2, "true" },
}
local s = shadow_presets[table.indexof(labels.shadow_levels, fields["dd_shadows"])]
if s then
diff --git a/builtin/mainmenu/tests/serverlistmgr_spec.lua b/builtin/mainmenu/tests/serverlistmgr_spec.lua
index a091959fb..ab7a6c60c 100644
--- a/builtin/mainmenu/tests/serverlistmgr_spec.lua
+++ b/builtin/mainmenu/tests/serverlistmgr_spec.lua
@@ -1,4 +1,5 @@
_G.core = {}
+_G.vector = {metatable = {}}
_G.unpack = table.unpack
_G.serverlistmgr = {}
diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt
index 01bebe4cc..52b4b4d9d 100644
--- a/builtin/settingtypes.txt
+++ b/builtin/settingtypes.txt
@@ -63,26 +63,15 @@
# There shouldn't be too much settings per category; settings that shouldn't be
# modified by the "average user" should be in (sub-)categories called "Advanced".
+
[Controls]
+
+[*General]
+
# If enabled, you can place blocks at the position (feet + eye level) where you stand.
# This is helpful when working with nodeboxes in small areas.
enable_build_where_you_stand (Build inside player) bool false
-# Player is able to fly without being affected by gravity.
-# This requires the "fly" privilege on the server.
-free_move (Flying) bool false
-
-# 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 "Aux1" key).
-# This requires the "fast" privilege on the server.
-fast_move (Fast movement) bool false
-
-# If enabled together with fly mode, player is able to fly through solid nodes.
-# This requires the "noclip" privilege on the server.
-noclip (Noclip) bool false
-
# Smooths camera when looking around. Also called look or mouse smoothing.
# Useful for recording videos.
cinematic (Cinematic mode) bool false
@@ -93,12 +82,6 @@ camera_smoothing (Camera smoothing) float 0.0 0.0 0.99
# Smooths rotation of camera in cinematic mode. 0 to disable.
cinematic_camera_smoothing (Camera smoothing in cinematic mode) float 0.7 0.0 0.99
-# Invert vertical mouse movement.
-invert_mouse (Invert mouse) bool false
-
-# Mouse sensitivity multiplier.
-mouse_sensitivity (Mouse sensitivity) float 0.2
-
# If enabled, "Aux1" key instead of "Sneak" key is used for climbing down and
# descending.
aux1_descends (Aux1 key for climbing/descending) bool false
@@ -108,11 +91,11 @@ doubletap_jump (Double tap jump for fly) bool false
# 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
+always_fly_fast (Always fly fast) bool true
# The time in seconds it takes between repeated node placements when holding
# the place button.
-repeat_place_time (Place repetition interval) float 0.25 0.001
+repeat_place_time (Place repetition interval) float 0.25 0.25 2
# Automatically jump up single-node obstacles.
autojump (Automatic jumping) bool false
@@ -121,12 +104,15 @@ autojump (Automatic jumping) bool false
# Enable this when you dig or place too often by accident.
safe_dig_and_place (Safe digging and placing) bool false
-# Enable random user input (only used for testing).
-random_input (Random input) bool false
+[*Keyboard and Mouse]
-# Continuous forward movement, toggled by autoforward key.
-# Press the autoforward key again or the backwards movement to disable.
-continuous_forward (Continuous forward) bool false
+# Invert vertical mouse movement.
+invert_mouse (Invert mouse) bool false
+
+# Mouse sensitivity multiplier.
+mouse_sensitivity (Mouse sensitivity) float 0.2 0.001 10.0
+
+[*Touchscreen]
# The length in pixels it takes for touch screen interaction to start.
touchscreen_threshold (Touch screen threshold) int 20 0 100
@@ -139,345 +125,179 @@ fixed_virtual_joystick (Fixed virtual joystick) bool false
# 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
-
-# The identifier of the joystick to use
-joystick_id (Joystick ID) int 0
-
-# The type of joystick
-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 dead zone of the joystick
-joystick_deadzone (Joystick dead zone) int 2048
-
-# The sensitivity of the joystick axes for moving the
-# in-game view frustum around.
-joystick_frustum_sensitivity (Joystick frustum sensitivity) float 170
-
-# Key for moving the player forward.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_forward (Forward key) key KEY_KEY_W
-
-# Key for moving the player backward.
-# Will also disable autoforward, when active.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_backward (Backward key) key KEY_KEY_S
-
-# Key for moving the player left.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_left (Left key) key KEY_KEY_A
-
-# Key for moving the player right.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_right (Right key) key KEY_KEY_D
-
-# Key for jumping.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_jump (Jump key) key KEY_SPACE
-
-# Key for sneaking.
-# Also used for climbing down and descending in water if aux1_descends is disabled.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_sneak (Sneak key) key KEY_LSHIFT
-
-# Key for digging.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_dig (Dig key) key KEY_LBUTTON
-
-# Key for placing.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_place (Place key) key KEY_RBUTTON
-
-# Key for opening the inventory.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_inventory (Inventory key) key KEY_KEY_I
-
-# Key for moving fast in fast mode.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_aux1 (Aux1 key) key KEY_KEY_E
-
-# Key for opening the chat window.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_chat (Chat key) key KEY_KEY_T
-
-# Key for opening the chat window to type commands.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_cmd (Command key) key /
-
-# Key for opening the chat window to type local commands.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_cmd_local (Command key) key .
-
-# Key for toggling unlimited view range.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_rangeselect (Range select key) key KEY_KEY_R
-
-# Key for toggling flying.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_freemove (Fly key) key KEY_KEY_K
-
-# Key for toggling pitch move mode.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_pitchmove (Pitch move key) key KEY_KEY_P
-
-# Key for toggling fast mode.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_fastmove (Fast key) key KEY_KEY_J
-
-# Key for toggling noclip mode.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_noclip (Noclip key) key KEY_KEY_H
-
-# Key for selecting the next item in the hotbar.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_hotbar_next (Hotbar next key) key KEY_KEY_N
-
-# Key for selecting the previous item in the hotbar.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_hotbar_previous (Hotbar previous key) key KEY_KEY_B
-
-# Key for muting the game.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_mute (Mute key) key KEY_KEY_M
-
-# Key for increasing the volume.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_increase_volume (Inc. volume key) key
-# Key for decreasing the volume.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_decrease_volume (Dec. volume key) key
+[Graphics and Audio]
-# Key for toggling autoforward.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_autoforward (Automatic forward key) key
+[*Graphics]
-# Key for toggling cinematic mode.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_cinematic (Cinematic mode key) key
+[**Screen]
-# Key for toggling display of minimap.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_minimap (Minimap key) key KEY_KEY_V
-
-# Key for taking screenshots.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_screenshot (Screenshot) key KEY_F12
-
-# Key for dropping the currently selected item.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_drop (Drop item key) key KEY_KEY_Q
-
-# Key to use view zoom when possible.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_zoom (View zoom key) key KEY_KEY_Z
-
-# Key for selecting the first hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot1 (Hotbar slot 1 key) key KEY_KEY_1
-
-# Key for selecting the second hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot2 (Hotbar slot 2 key) key KEY_KEY_2
-
-# Key for selecting the third hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot3 (Hotbar slot 3 key) key KEY_KEY_3
-
-# Key for selecting the fourth hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot4 (Hotbar slot 4 key) key KEY_KEY_4
-
-# Key for selecting the fifth hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot5 (Hotbar slot 5 key) key KEY_KEY_5
-
-# Key for selecting the sixth hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot6 (Hotbar slot 6 key) key KEY_KEY_6
+# Width component of the initial window size. Ignored in fullscreen mode.
+screen_w (Screen width) int 1024 1 65535
-# Key for selecting the seventh hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot7 (Hotbar slot 7 key) key KEY_KEY_7
+# Height component of the initial window size. Ignored in fullscreen mode.
+screen_h (Screen height) int 600 1 65535
-# Key for selecting the eighth hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot8 (Hotbar slot 8 key) key KEY_KEY_8
+# Save window size automatically when modified.
+autosave_screensize (Autosave screen size) bool true
-# Key for selecting the ninth hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot9 (Hotbar slot 9 key) key KEY_KEY_9
+# Fullscreen mode.
+fullscreen (Full screen) bool false
-# Key for selecting the tenth hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot10 (Hotbar slot 10 key) key KEY_KEY_0
+# Open the pause menu when the window's focus is lost. Does not pause if a formspec is
+# open.
+pause_on_lost_focus (Pause on lost window focus) bool false
-# Key for selecting the 11th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot11 (Hotbar slot 11 key) key
+[**FPS]
-# Key for selecting the 12th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot12 (Hotbar slot 12 key) key
+# If FPS would go higher than this, limit it by sleeping
+# to not waste CPU power for no benefit.
+fps_max (Maximum FPS) int 60 1 4294967295
-# Key for selecting the 13th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot13 (Hotbar slot 13 key) key
+# Vertical screen synchronization.
+vsync (VSync) bool false
-# Key for selecting the 14th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot14 (Hotbar slot 14 key) key
+# Maximum FPS when the window is not focused, or when the game is paused.
+fps_max_unfocused (FPS when unfocused or paused) int 20 1 4294967295
-# Key for selecting the 15th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot15 (Hotbar slot 15 key) key
+# View distance in nodes.
+viewing_range (Viewing range) int 190 20 4000
-# Key for selecting the 16th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot16 (Hotbar slot 16 key) key
+# Undersampling is similar to using a lower screen resolution, but it applies
+# to the game world only, keeping the GUI intact.
+# It should give a significant performance boost at the cost of less detailed image.
+# Higher values result in a less detailed image.
+undersampling (Undersampling) int 1 1 8
-# Key for selecting the 17th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot17 (Hotbar slot 17 key) key
+[**Graphics Effects]
-# Key for selecting the 18th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot18 (Hotbar slot 18 key) key
+# Makes all liquids opaque
+opaque_water (Opaque liquids) bool false
-# Key for selecting the 19th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot19 (Hotbar slot 19 key) key
+# Leaves style:
+# - Fancy: all faces visible
+# - Simple: only outer faces, if defined special_tiles are used
+# - Opaque: disable transparency
+leaves_style (Leaves style) enum fancy fancy,simple,opaque
-# Key for selecting the 20th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot20 (Hotbar slot 20 key) key
+# Connects glass if supported by node.
+connected_glass (Connect glass) bool false
-# Key for selecting the 21st hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot21 (Hotbar slot 21 key) key
+# Enable smooth lighting with simple ambient occlusion.
+# Disable for speed or for different looks.
+smooth_lighting (Smooth lighting) bool true
-# Key for selecting the 22nd hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot22 (Hotbar slot 22 key) key
+# 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
-# Key for selecting the 23rd hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot23 (Hotbar slot 23 key) key
+# Adds particles when digging a node.
+enable_particles (Digging particles) bool true
-# Key for selecting the 24th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot24 (Hotbar slot 24 key) key
+[**3d]
-# Key for selecting the 25th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot25 (Hotbar slot 25 key) key
+# 3D support.
+# Currently supported:
+# - none: no 3d output.
+# - anaglyph: cyan/magenta color 3d.
+# - interlaced: odd/even line based polarisation screen support.
+# - topbottom: split screen top/bottom.
+# - sidebyside: split screen side by side.
+# - crossview: Cross-eyed 3d
+# - pageflip: quadbuffer based 3d.
+# Note that the interlaced mode requires shaders to be enabled.
+3d_mode (3D mode) enum none none,anaglyph,interlaced,topbottom,sidebyside,crossview,pageflip
-# Key for selecting the 26th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot26 (Hotbar slot 26 key) key
+# Strength of 3D mode parallax.
+3d_paralax_strength (3D mode parallax strength) float 0.025 -0.087 0.087
-# Key for selecting the 27th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot27 (Hotbar slot 27 key) key
+[**Bobbing]
-# Key for selecting the 28th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot28 (Hotbar slot 28 key) key
+# Arm inertia, gives a more realistic movement of
+# the arm when the camera moves.
+arm_inertia (Arm inertia) bool true
-# Key for selecting the 29th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot29 (Hotbar slot 29 key) key
+# Enable view bobbing and amount of view bobbing.
+# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.
+view_bobbing_amount (View bobbing factor) float 1.0 0.0 7.9
-# Key for selecting the 30th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot30 (Hotbar slot 30 key) key
+# Multiplier for fall bobbing.
+# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.
+fall_bobbing_amount (Fall bobbing factor) float 0.03 0.0 100.0
-# Key for selecting the 31st hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot31 (Hotbar slot 31 key) key
+[**Camera]
-# Key for selecting the 32nd hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_slot32 (Hotbar slot 32 key) key
+# Camera 'near clipping plane' distance in nodes, between 0 and 0.25
+# Only works on GLES platforms. Most users will not need to change this.
+# Increasing can reduce artifacting on weaker GPUs.
+# 0.1 = Default, 0.25 = Good value for weaker tablets.
+near_plane (Near plane) float 0.1 0 0.25
-# Key for toggling the display of the HUD.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_toggle_hud (HUD toggle key) key KEY_F1
+# Field of view in degrees.
+fov (Field of view) int 72 45 160
-# Key for toggling the display of chat.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_toggle_chat (Chat toggle key) key KEY_F2
+# Alters the light curve by applying 'gamma correction' to it.
+# Higher values make middle and lower light levels brighter.
+# Value '1.0' leaves the light curve unaltered.
+# This only has significant effect on daylight and artificial
+# light, it has very little effect on natural night light.
+display_gamma (Light curve gamma) float 1.0 0.33 3.0
-# Key for toggling the display of the large chat console.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_console (Large chat console key) key KEY_F10
+# The strength (darkness) of node ambient-occlusion shading.
+# Lower is darker, Higher is lighter. The valid range of values for this
+# setting is 0.25 to 4.0 inclusive. If the value is out of range it will be
+# set to the nearest valid value.
+ambient_occlusion_gamma (Ambient occlusion gamma) float 2.2 0.25 4.0
-# Key for toggling the display of fog.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_toggle_force_fog_off (Fog toggle key) key KEY_F3
+[**Screenshots]
-# Key for toggling the camera update. Only used for development
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_toggle_update_camera (Camera update toggle key) key
+# Path to save screenshots at. Can be an absolute or relative path.
+# The folder will be created if it doesn't already exist.
+screenshot_path (Screenshot folder) path screenshots
-# Key for toggling the display of debug info.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_toggle_debug (Debug info toggle key) key KEY_F5
+# Format of screenshots.
+screenshot_format (Screenshot format) enum png png,jpg
-# Key for toggling the display of the profiler. Used for development.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_toggle_profiler (Profiler toggle key) key KEY_F6
+# Screenshot quality. Only used for JPEG format.
+# 1 means worst quality; 100 means best quality.
+# Use 0 for default quality.
+screenshot_quality (Screenshot quality) int 0 0 100
-# Key for switching between first- and third-person camera.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_camera_mode (Toggle camera mode key) key KEY_KEY_C
+[**Node and Entity Highlighting]
-# Key for increasing the viewing range.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_increase_viewing_range_min (View range increase key) key +
+# Method used to highlight selected object.
+node_highlighting (Node highlighting) enum box box,halo,none
-# Key for decreasing the viewing range.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_decrease_viewing_range_min (View range decrease key) key -
+# Show entity selection boxes
+# A restart is required after changing this.
+show_entity_selectionbox (Show entity selection boxes) bool false
-[Graphics]
+# Selection box border color (R,G,B).
+selectionbox_color (Selection box color) string (0,0,0)
-[*In-Game]
+# Width of the selection box lines around nodes.
+selectionbox_width (Selection box width) int 2 1 5
-[**Basic]
+# Crosshair color (R,G,B).
+# Also controls the object crosshair color
+crosshair_color (Crosshair color) string (255,255,255)
-# Whether name tag backgrounds should be shown by default.
-# Mods may still set a background.
-show_nametag_backgrounds (Show name tag backgrounds by default) bool true
+# Crosshair alpha (opaqueness, between 0 and 255).
+# This also applies to the object crosshair.
+crosshair_alpha (Crosshair alpha) int 255 0 255
-# Enable vertex buffer objects.
-# This should greatly improve graphics performance.
-enable_vbo (VBO) bool true
+[**Fog]
# Whether to fog out the end of the visible area.
enable_fog (Fog) bool true
-# Leaves style:
-# - Fancy: all faces visible
-# - Simple: only outer faces, if defined special_tiles are used
-# - Opaque: disable transparency
-leaves_style (Leaves style) enum fancy fancy,simple,opaque
-
-# Connects glass if supported by node.
-connected_glass (Connect glass) bool false
+# Make fog and sky colors depend on daytime (dawn/sunset) and view direction.
+directional_colored_fog (Colored fog) bool true
-# Enable smooth lighting with simple ambient occlusion.
-# Disable for speed or for different looks.
-smooth_lighting (Smooth lighting) bool true
+# Fraction of the visible distance at which fog starts to be rendered
+fog_start (Fog start) float 0.4 0.0 0.99
-# 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]
# Clouds are a client side effect.
enable_clouds (Clouds) bool true
@@ -485,13 +305,7 @@ enable_clouds (Clouds) bool true
# Use 3D cloud look instead of flat.
enable_3d_clouds (3D clouds) bool true
-# Method used to highlight selected object.
-node_highlighting (Node highlighting) enum box box,halo,none
-
-# Adds particles when digging a node.
-enable_particles (Digging particles) bool true
-
-[**Filtering]
+[**Filtering and Antialiasing]
# Use mipmapping to scale textures. May slightly increase performance,
# especially when using a high resolution texture pack.
@@ -521,7 +335,7 @@ texture_clean_transparent (Clean transparent textures) bool false
# 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
+texture_min_size (Minimum texture size) int 64 1 32768
# Use multi-sample antialiasing (MSAA) to smooth out block edges.
# This algorithm smooths out the 3D viewport while keeping the image sharp,
@@ -532,23 +346,15 @@ texture_min_size (Minimum texture size) int 64
# A restart is required after changing this option.
fsaa (FSAA) enum 0 0,1,2,4,8,16
-# Undersampling is similar to using a lower screen resolution, but it applies
-# to the game world only, keeping the GUI intact.
-# It should give a significant performance boost at the cost of less detailed image.
-# Higher values result in a less detailed image.
-undersampling (Undersampling) int 1 1 8
-[**Shaders]
+[*Shaders]
# Shaders allow advanced visual effects and may increase performance on some video
# cards.
# This only works with the OpenGL video backend.
enable_shaders (Shaders) bool true
-# Path to shader directory. If no path is defined, default location will be used.
-shader_path (Shader path) path
-
-[***Tone Mapping]
+[**Tone Mapping]
# Enables Hable's 'Uncharted 2' filmic tone mapping.
# Simulates the tone curve of photographic film and how this approximates the
@@ -556,7 +362,15 @@ shader_path (Shader path) path
# enhanced, highlights and shadows are gradually compressed.
tone_mapping (Filmic tone mapping) bool false
-[***Waving Nodes]
+[**Waving Nodes]
+
+# Set to true to enable waving leaves.
+# Requires shaders to be enabled.
+enable_waving_leaves (Waving leaves) bool false
+
+# Set to true to enable waving plants.
+# Requires shaders to be enabled.
+enable_waving_plants (Waving plants) bool false
# Set to true to enable waving liquids (like water).
# Requires shaders to be enabled.
@@ -578,132 +392,88 @@ water_wave_length (Waving liquids wavelength) float 20.0 0.1
# Requires waving liquids to be enabled.
water_wave_speed (Waving liquids wave speed) float 5.0
-# Set to true to enable waving leaves.
-# Requires shaders to be enabled.
-enable_waving_leaves (Waving leaves) bool false
+[**Dynamic shadows]
-# Set to true to enable waving plants.
+# Set to true to enable Shadow Mapping.
# Requires shaders to be enabled.
-enable_waving_plants (Waving plants) bool false
+enable_dynamic_shadows (Dynamic shadows) bool false
-[**Advanced]
-
-# Arm inertia, gives a more realistic movement of
-# the arm when the camera moves.
-arm_inertia (Arm inertia) bool true
-
-# If FPS would go higher than this, limit it by sleeping
-# to not waste CPU power for no benefit.
-fps_max (Maximum FPS) int 60 1
-
-# Maximum FPS when the window is not focused, or when the game is paused.
-fps_max_unfocused (FPS when unfocused or paused) int 20 1
+# Set the shadow strength gamma.
+# Adjusts the intensity of in-game dynamic shadows.
+# Lower value means lighter shadows, higher value means darker shadows.
+shadow_strength_gamma (Shadow strength gamma) float 1.0 0.1 10.0
-# Open the pause menu when the window's focus is lost. Does not pause if a formspec is
-# open.
-pause_on_lost_focus (Pause on lost window focus) bool false
-
-# View distance in nodes.
-viewing_range (Viewing range) int 190 20 4000
-
-# Camera 'near clipping plane' distance in nodes, between 0 and 0.25
-# Only works on GLES platforms. Most users will not need to change this.
-# Increasing can reduce artifacting on weaker GPUs.
-# 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. Ignored in fullscreen mode.
-screen_w (Screen width) int 1024 1
+# Maximum distance to render shadows.
+shadow_map_max_distance (Shadow map max distance in nodes to render shadows) float 120.0 10.0 1000.0
-# Height component of the initial window size. Ignored in fullscreen mode.
-screen_h (Screen height) int 600 1
+# Texture size to render the shadow map on.
+# This must be a power of two.
+# Bigger numbers create better shadows but it is also more expensive.
+shadow_map_texture_size (Shadow map texture size) int 1024 128 8192
-# Save window size automatically when modified.
-autosave_screensize (Autosave screen size) bool true
+# Sets shadow texture quality to 32 bits.
+# On false, 16 bits texture will be used.
+# This can cause much more artifacts in the shadow.
+shadow_map_texture_32bit (Shadow map texture in 32 bits) bool true
-# Fullscreen mode.
-fullscreen (Full screen) bool false
+# Enable Poisson disk filtering.
+# On true uses Poisson disk to make "soft shadows". Otherwise uses PCF filtering.
+shadow_poisson_filter (Poisson filtering) bool true
-# Vertical screen synchronization.
-vsync (VSync) bool false
+# Define shadow filtering quality.
+# This simulates the soft shadows effect by applying a PCF or Poisson disk
+# but also uses more resources.
+shadow_filters (Shadow filter quality) enum 1 0,1,2
-# Field of view in degrees.
-fov (Field of view) int 72 45 160
+# Enable colored shadows.
+# On true translucent nodes cast colored shadows. This is expensive.
+shadow_map_color (Colored shadows) bool false
-# Alters the light curve by applying 'gamma correction' to it.
-# Higher values make middle and lower light levels brighter.
-# Value '1.0' leaves the light curve unaltered.
-# This only has significant effect on daylight and artificial
-# light, it has very little effect on natural night light.
-display_gamma (Light curve gamma) float 1.0 0.33 3.0
+# Spread a complete update of shadow map over given amount of frames.
+# Higher values might make shadows laggy, lower values
+# will consume more resources.
+# Minimum value: 1; maximum value: 16
+shadow_update_frames (Map shadows update frames) int 8 1 16
-# Gradient of light curve at minimum light level.
-# Controls the contrast of the lowest light levels.
-lighting_alpha (Light curve low gradient) float 0.0 0.0 3.0
+# Set the soft shadow radius size.
+# Lower values mean sharper shadows, bigger values mean softer shadows.
+# Minimum value: 1.0; maximum value: 15.0
+shadow_soft_radius (Soft shadow radius) float 5.0 1.0 15.0
-# Gradient of light curve at maximum light level.
-# Controls the contrast of the highest light levels.
-lighting_beta (Light curve high gradient) float 1.5 0.0 3.0
+# Set the tilt of Sun/Moon orbit in degrees.
+# Value of 0 means no tilt / vertical orbit.
+# Minimum value: 0.0; maximum value: 60.0
+shadow_sky_body_orbit_tilt (Sky Body Orbit Tilt) float 0.0 0.0 60.0
-# Strength of light curve boost.
-# The 3 'boost' parameters define a range of the light
-# curve that is boosted in brightness.
-lighting_boost (Light curve boost) float 0.2 0.0 0.4
+[*Audio]
-# Center of light curve boost range.
-# Where 0.0 is minimum light level, 1.0 is maximum light level.
-lighting_boost_center (Light curve boost center) float 0.5 0.0 1.0
+# Volume of all sounds.
+# Requires the sound system to be enabled.
+sound_volume (Volume) float 0.7 0.0 1.0
-# Spread of light curve boost range.
-# Controls the width of the range to be boosted.
-# Standard deviation of the light curve boost Gaussian.
-lighting_boost_spread (Light curve boost spread) float 0.2 0.0 0.4
+# Whether to mute sounds. You can unmute sounds at any time, unless the
+# sound system is disabled (enable_sound=false).
+# In-game, you can toggle the mute state with the mute key or by using the
+# pause menu.
+mute_sound (Mute sound) bool false
-# Path to texture directory. All textures are first searched from here.
-texture_path (Texture path) path
+[*User Interfaces]
-# The rendering back-end.
+# Set the language. Leave empty to use the system language.
# 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 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.
-cloud_radius (Cloud radius) int 12
-
-# Enable view bobbing and amount of view bobbing.
-# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.
-view_bobbing_amount (View bobbing factor) float 1.0
-
-# Multiplier for fall bobbing.
-# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.
-fall_bobbing_amount (Fall bobbing factor) float 0.03
-
-# 3D support.
-# Currently supported:
-# - none: no 3d output.
-# - anaglyph: cyan/magenta color 3d.
-# - interlaced: odd/even line based polarisation screen support.
-# - topbottom: split screen top/bottom.
-# - sidebyside: split screen side by side.
-# - crossview: Cross-eyed 3d
-# - pageflip: quadbuffer based 3d.
-# Note that the interlaced mode requires shaders to be enabled.
-3d_mode (3D mode) enum none none,anaglyph,interlaced,topbottom,sidebyside,crossview,pageflip
-
-# Strength of 3D mode parallax.
-3d_paralax_strength (3D mode parallax strength) float 0.025
+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
-# In-game chat console height, between 0.1 (10%) and 1.0 (100%).
-console_height (Console height) float 0.6 0.1 1.0
+[**GUIs]
-# In-game chat console background color (R,G,B).
-console_color (Console color) string (0,0,0)
+# Scale GUI by a user specified value.
+# Use a nearest-neighbor-anti-alias filter to scale the GUI.
+# This will smooth over some of the rough edges, and blend
+# pixels when scaling down, at the cost of blurring some
+# edge pixels when images are scaled by non-integer sizes.
+gui_scaling (GUI scaling) float 1.0 0.5 20
-# In-game chat console background alpha (opaqueness, between 0 and 255).
-console_alpha (Console alpha) int 200 0 255
+# Enables animation of inventory items.
+inventory_items_animations (Inventory items animations) bool false
# Formspec full-screen background opacity (between 0 and 255).
formspec_fullscreen_bg_opacity (Formspec Full-Screen Background Opacity) int 140 0 255
@@ -711,112 +481,6 @@ formspec_fullscreen_bg_opacity (Formspec Full-Screen Background Opacity) int 140
# Formspec full-screen background color (R,G,B).
formspec_fullscreen_bg_color (Formspec Full-Screen Background Color) string (0,0,0)
-# Formspec default background opacity (between 0 and 255).
-formspec_default_bg_opacity (Formspec Default Background Opacity) int 140 0 255
-
-# Formspec default background color (R,G,B).
-formspec_default_bg_color (Formspec Default Background Color) string (0,0,0)
-
-# Selection box border color (R,G,B).
-selectionbox_color (Selection box color) string (0,0,0)
-
-# Width of the selection box lines around nodes.
-selectionbox_width (Selection box width) int 2 1 5
-
-# Crosshair color (R,G,B).
-# Also controls the object crosshair color
-crosshair_color (Crosshair color) string (255,255,255)
-
-# Crosshair alpha (opaqueness, between 0 and 255).
-# This also applies to the object crosshair.
-crosshair_alpha (Crosshair alpha) int 255 0 255
-
-# Maximum number of recent chat messages to show
-recent_chat_messages (Recent Chat Messages) int 6 2 20
-
-# Whether node texture animations should be desynchronized per mapblock.
-desynchronize_mapblock_texture_animation (Desynchronize block animation) bool true
-
-# Maximum proportion of current window to be used for hotbar.
-# Useful if there's something to be displayed right or left of hotbar.
-hud_hotbar_max_width (Maximum hotbar width) float 1.0
-
-# Modifies the size of the HUD elements.
-hud_scaling (HUD scale factor) float 1.0
-
-# Enables caching of facedir rotated meshes.
-enable_mesh_cache (Mesh cache) bool false
-
-# Delay between mesh updates on the client in ms. Increasing this will slow
-# down the rate of mesh updates, thus reducing jitter on slower clients.
-mesh_generation_interval (Mapblock mesh generation delay) int 0 0 50
-
-# Size of the MapBlock cache of the mesh generator. Increasing this will
-# increase the cache hit %, reducing the data being copied from the main
-# thread, thus reducing jitter.
-meshgen_block_cache_size (Mapblock mesh generator's MapBlock cache size in MB) int 20 0 1000
-
-# Enables minimap.
-enable_minimap (Minimap) bool true
-
-# Shape of the minimap. Enabled = round, disabled = square.
-minimap_shape_round (Round minimap) bool true
-
-# True = 256
-# False = 128
-# Usable to make minimap smoother on slower machines.
-minimap_double_scan_height (Minimap scan height) bool true
-
-# Make fog and sky colors depend on daytime (dawn/sunset) and view direction.
-directional_colored_fog (Colored fog) bool true
-
-# The strength (darkness) of node ambient-occlusion shading.
-# Lower is darker, Higher is lighter. The valid range of values for this
-# setting is 0.25 to 4.0 inclusive. If the value is out of range it will be
-# set to the nearest valid value.
-ambient_occlusion_gamma (Ambient occlusion gamma) float 2.2 0.25 4.0
-
-# Enables animation of inventory items.
-inventory_items_animations (Inventory items animations) bool false
-
-# Fraction of the visible distance at which fog starts to be rendered
-fog_start (Fog start) float 0.4 0.0 0.99
-
-# Makes all liquids opaque
-opaque_water (Opaque liquids) bool false
-
-# Textures on a node may be aligned either to the node or to the world.
-# The former mode suits better things like machines, furniture, etc., while
-# the latter makes stairs and microblocks fit surroundings better.
-# However, as this possibility is new, thus may not be used by older servers,
-# this option allows enforcing it for certain node types. Note though that
-# that is considered EXPERIMENTAL and may not work properly.
-world_aligned_mode (World-aligned textures mode) enum enable disable,enable,force_solid,force_nodebox
-
-# World-aligned textures may be scaled to span several nodes. However,
-# the server may not send the scale you want, especially if you use
-# a specially-designed texture pack; with this option, the client tries
-# to determine the scale automatically basing on the texture size.
-# See also texture_min_size.
-# Warning: This option is EXPERIMENTAL!
-autoscale_mode (Autoscaling mode) enum disable disable,enable,force
-
-# Show entity selection boxes
-# A restart is required after changing this.
-show_entity_selectionbox (Show entity selection boxes) bool false
-
-[*Menus]
-
-# Use a cloud animation for the main menu background.
-menu_clouds (Clouds in menu) bool true
-
-# Scale GUI by a user specified value.
-# Use a nearest-neighbor-anti-alias filter to scale the GUI.
-# This will smooth over some of the rough edges, and blend
-# pixels when scaling down, at the cost of blurring some
-# edge pixels when images are scaled by non-integer sizes.
-gui_scaling (GUI scaling) float 1.0 0.001
-
# When gui_scaling_filter is true, all GUI images need to be
# filtered in software, but some images are generated directly
# to hardware (e.g. render-to-texture for nodes in inventory).
@@ -829,170 +493,105 @@ gui_scaling_filter (GUI scaling filter) bool false
gui_scaling_filter_txr2img (GUI scaling filter txr2img) bool true
# Delay showing tooltips, stated in milliseconds.
-tooltip_show_delay (Tooltip delay) int 400
+tooltip_show_delay (Tooltip delay) int 400 0 18446744073709551615
# Append item name to tooltip.
tooltip_append_itemname (Append item name) bool false
-font_bold (Font bold by default) bool false
-
-font_italic (Font italic by default) bool false
+# Use a cloud animation for the main menu background.
+menu_clouds (Clouds in menu) bool true
-# Shadow offset (in pixels) of the default font. If 0, then shadow will not be drawn.
-font_shadow (Font shadow) int 1
+[**HUD]
-# Opaqueness (alpha) of the shadow behind the default font, between 0 and 255.
-font_shadow_alpha (Font shadow alpha) int 127 0 255
+# Modifies the size of the HUD elements.
+hud_scaling (HUD scaling) float 1.0 0.5 20
-# Font size of the default font where 1 unit = 1 pixel at 96 DPI
-font_size (Font size) int 16 1
+# Whether name tag backgrounds should be shown by default.
+# Mods may still set a background.
+show_nametag_backgrounds (Show name tag backgrounds by default) bool true
-# 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
+[**Chat]
-# 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
+# Maximum number of recent chat messages to show
+recent_chat_messages (Recent Chat Messages) int 6 2 20
-font_path_bold (Bold font path) filepath fonts/Arimo-Bold.ttf
-font_path_italic (Italic font path) filepath fonts/Arimo-Italic.ttf
-font_path_bold_italic (Bold and italic font path) filepath fonts/Arimo-BoldItalic.ttf
+# In-game chat console height, between 0.1 (10%) and 1.0 (100%).
+console_height (Console height) float 0.6 0.1 1.0
-# Font size of the monospace font where 1 unit = 1 pixel at 96 DPI
-mono_font_size (Monospace font size) int 16 1
+# In-game chat console background color (R,G,B).
+console_color (Console color) string (0,0,0)
-# 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
+# In-game chat console background alpha (opaqueness, between 0 and 255).
+console_alpha (Console alpha) int 200 0 255
-# 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
+# Maximum proportion of current window to be used for hotbar.
+# Useful if there's something to be displayed right or left of hotbar.
+hud_hotbar_max_width (Maximum hotbar width) float 1.0 0.001 1.0
-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_bold_italic (Bold and italic monospace font path) filepath fonts/Cousine-BoldItalic.ttf
+# Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console output.
+clickable_chat_weblinks (Chat weblinks) bool true
-# 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
+# Optional override for chat weblink color.
+chat_weblink_color (Weblink color) string
# Font size of the recent chat text and chat prompt in point (pt).
# Value 0 will use the default font size.
-chat_font_size (Chat font size) int 0
-
-# Path to save screenshots at. Can be an absolute or relative path.
-# The folder will be created if it doesn't already exist.
-screenshot_path (Screenshot folder) path screenshots
-
-# Format of screenshots.
-screenshot_format (Screenshot format) enum png png,jpg
-
-# Screenshot quality. Only used for JPEG format.
-# 1 means worst quality; 100 means best quality.
-# Use 0 for default quality.
-screenshot_quality (Screenshot quality) int 0 0 100
-
-[*Advanced]
+chat_font_size (Chat font size) int 0 0 72
-# 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
+[**Content Repository]
-# 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
-
-[Sound]
-
-# Enables the sound system.
-# If disabled, this completely disables all sounds everywhere and the in-game
-# sound controls will be non-functional.
-# Changing this setting requires a restart.
-enable_sound (Sound) bool true
-
-# Volume of all sounds.
-# Requires the sound system to be enabled.
-sound_volume (Volume) float 0.7 0.0 1.0
-
-# Whether to mute sounds. You can unmute sounds at any time, unless the
-# sound system is disabled (enable_sound=false).
-# In-game, you can toggle the mute state with the mute key or by using the
-# pause menu.
-mute_sound (Mute sound) bool false
-
-[Client]
+# The URL for the content repository
+contentdb_url (ContentDB URL) string https://content.minetest.net
-# Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console output.
-clickable_chat_weblinks (Chat weblinks) bool false
+# Comma-separated list of flags to hide in the content repository.
+# "nonfree" can be used to hide packages which do not qualify as 'free software',
+# as defined by the Free Software Foundation.
+# You can also specify content ratings.
+# These flags are independent from Minetest versions,
+# so see a full list at https://content.minetest.net/help/content_flags/
+contentdb_flag_blacklist (ContentDB Flag Blacklist) string nonfree, desktop_default
-# Optional override for chat weblink color.
-chat_weblink_color (Weblink color) string
+# Maximum number of concurrent downloads. Downloads exceeding this limit will be queued.
+# This should be lower than curl_parallel_limit.
+contentdb_max_concurrent_downloads (ContentDB Max Concurrent Downloads) int 3 1
-[*Network]
-# Address to connect to.
-# Leave this blank to start a local server.
-# Note that the address field in the main menu overrides this setting.
-address (Server address) string
+[Client and Server]
-# Port to connect to (UDP).
-# Note that the port field in the main menu overrides this setting.
-remote_port (Remote port) int 30000 1 65535
-
-# Prometheus listener address.
-# If Minetest is compiled with ENABLE_PROMETHEUS option enabled,
-# enable metrics listener for Prometheus on that address.
-# Metrics can be fetched on http://127.0.0.1:30000/metrics
-prometheus_listener_address (Prometheus listener address) string 127.0.0.1:30000
+[*Client]
# Save the map received by the client on disk.
enable_local_map_saving (Saving map received from server) bool false
-# Enable usage of remote media server (if provided by server).
-# Remote servers offer a significantly faster way to download media (e.g. textures)
-# when connecting to the server.
-enable_remote_media_server (Connect to external media server) bool true
-
-# Enable Lua modding support on client.
-# This support is experimental and API can change.
-enable_client_modding (Client modding) bool false
-
# URL to the server list displayed in the Multiplayer Tab.
serverlist_url (Serverlist URL) string servers.minetest.net
-# File in client/serverlist/ that contains your favorite servers displayed in the
-# Multiplayer Tab.
-serverlist_file (Serverlist file) string favoriteservers.json
-
-# Maximum size of the out chat queue.
-# 0 to disable queueing and -1 to make the queue size unlimited.
-max_out_chat_queue_size (Maximum size of the out chat queue) int 20
+# If enabled, account registration is separate from login in the UI.
+# If disabled, new accounts will be registered automatically when logging in.
+enable_split_login_register (Enable split login/register) bool true
-# Enable register confirmation when connecting to server.
-# If disabled, new account will be registered automatically.
-enable_register_confirmation (Enable register confirmation) bool true
+# URL to JSON file which provides information about the newest Minetest release
+update_information_url (Update information URL) string https://www.minetest.net/release_info.json
-[*Advanced]
+# Unix timestamp (integer) of when the client last checked for an update
+# Set this value to "disabled" to never check for updates.
+update_last_checked (Last update check) string
-# Timeout for client to remove unused map data from memory.
-client_unload_unused_data_timeout (Mapblock unload timeout) int 600
+# Version number which was last seen during an update check.
+#
+# Representation: MMMIIIPPP, where M=Major, I=Minor, P=Patch
+# Ex: 5.5.0 is 005005000
+update_last_known (Last known version update) int 0
-# Maximum number of mapblocks for client to be kept in memory.
-# Set to -1 for unlimited amount.
-client_mapblock_limit (Mapblock limit) int 7500
+[*Server]
-# Whether to show the client debug info (has the same effect as hitting F5).
-show_debug (Show debug info) bool false
+# Name of the player.
+# When running a server, clients connecting with this name are admins.
+# When starting from the main menu, this is overridden.
+name (Admin name) string
-[Server / Singleplayer]
+[**Serverlist and MOTD]
# Name of the server, to be displayed when players join and in the serverlist.
server_name (Server name) string Minetest server
@@ -1012,15 +611,20 @@ server_announce (Announce server) bool false
# Announce to this serverlist.
serverlist_url (Serverlist URL) string servers.minetest.net
-# Remove color codes from incoming chat messages
-# Use this to stop players from being able to use color in their messages
-strip_color_codes (Strip color codes) bool false
+# Message of the day displayed to players connecting.
+motd (Message of the day) string
-[*Network]
+# Maximum number of players that can be connected simultaneously.
+max_users (Maximum users) int 15 0 65535
+
+# If this is set, players will always (re)spawn at the given position.
+static_spawnpoint (Static spawnpoint) string
+
+[**Networking]
# Network port to listen (UDP).
# This value will be overridden when starting from the main menu.
-port (Server port) int 30000
+port (Server port) int 30000 1 65535
# The network interface that the server listens on.
bind_address (Bind address) string
@@ -1041,65 +645,14 @@ remote_media (Remote media) string
# Needs enable_ipv6 to be enabled.
ipv6_server (IPv6 server) bool false
-[**Advanced]
-
-# Maximum number of blocks that are simultaneously sent per client.
-# The maximum total count is calculated dynamically:
-# max_total = ceil((#clients + max_users) * per_client / 4)
-max_simultaneous_block_sends_per_client (Maximum simultaneous block sends per client) int 40
-
-# To reduce lag, block transfers are slowed down when a player is building something.
-# This determines how long they are slowed down after placing or removing a node.
-full_block_send_enable_min_time_from_building (Delay in sending blocks after building) float 2.0
-
-# Maximum number of packets sent per send step, if you have a slow connection
-# try reducing it, but don't reduce it to a number below double of targeted
-# client number.
-max_packets_per_iteration (Max. packets per iteration) int 1024
-
-# Compression level to use when sending mapblocks to the client.
-# -1 - use default compression level
-# 0 - least compression, fastest
-# 9 - best compression, slowest
-map_compression_level_net (Map Compression Level for Network Transfer) int -1 -1 9
-
-[*Game]
-
-# Default game when creating a new world.
-# This will be overridden when creating a world from the main menu.
-default_game (Default game) string minetest
-
-# Message of the day displayed to players connecting.
-motd (Message of the day) string
-
-# Maximum number of players that can be connected simultaneously.
-max_users (Maximum users) int 15
-
-# World directory (everything in the world is stored here).
-# Not needed if starting from the main menu.
-map-dir (Map directory) path
-
-# Time in seconds for item entity (dropped items) to live.
-# Setting it to -1 disables the feature.
-item_entity_ttl (Item entity TTL) int 900
-
-# Specifies the default stack size of nodes, items and tools.
-# Note that mods or games may explicitly set a stack for certain (or all) items.
-default_stack_max (Default stack size) int 99
-
-# Enable players getting damage and dying.
-enable_damage (Damage) bool false
-
-# Enable creative mode for all players
-creative_mode (Creative) bool false
-
-# A chosen map seed for a new map, leave empty for random.
-# Will be overridden when creating a new world in the main menu.
-fixed_map_seed (Fixed map seed) string
+[*Server Security]
# New users need to input this password.
default_password (Default password) string
+# If enabled, players cannot join without a password or change theirs to an empty password.
+disallow_empty_password (Disallow empty passwords) bool false
+
# The privileges that new users automatically get.
# See /privs in game for a full list on your server and mod configuration.
default_privs (Default privileges) string interact, shout
@@ -1107,25 +660,6 @@ default_privs (Default privileges) string interact, shout
# Privileges that players with basic_privs can grant
basic_privs (Basic privileges) string interact, shout
-# Whether players are shown to clients without any range limit.
-# Deprecated, use the setting player_transfer_distance instead.
-unlimited_player_transfer_distance (Unlimited player transfer distance) bool true
-
-# Defines the maximal player transfer distance in blocks (0 = unlimited).
-player_transfer_distance (Player transfer distance) int 0
-
-# Whether to allow players to damage and kill each other.
-enable_pvp (Player versus player) bool true
-
-# Enable mod channels support.
-enable_mod_channels (Mod channels) bool false
-
-# If this is set, players will always (re)spawn at the given position.
-static_spawnpoint (Static spawnpoint) string
-
-# If enabled, players cannot join without a password or change theirs to an empty password.
-disallow_empty_password (Disallow empty passwords) bool false
-
# If enabled, disable cheat prevention in multiplayer.
disable_anticheat (Disable anticheat) bool false
@@ -1133,317 +667,108 @@ disable_anticheat (Disable anticheat) bool false
# This option is only read when server starts.
enable_rollback_recording (Rollback recording) bool false
-# Format of player chat messages. The following strings are valid placeholders:
-# @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
+[**Client-side Modding]
-# A message to be displayed to all clients when the server shuts down.
-kick_msg_shutdown (Shutdown message) string Server shutting down.
+# Restricts the access of certain client-side functions on servers.
+# Combine the byteflags below to restrict client-side features, or set to 0
+# for no restrictions:
+# LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)
+# CHAT_MESSAGES: 2 (disable send_chat_message call client-side)
+# READ_ITEMDEFS: 4 (disable get_item_def call client-side)
+# READ_NODEDEFS: 8 (disable get_node_def call client-side)
+# LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to
+# csm_restriction_noderange)
+# READ_PLAYERINFO: 32 (disable get_player_names call client-side)
+csm_restriction_flags (Client side modding restrictions) int 62 0 63
-# A message to be displayed to all clients when the server crashes.
-kick_msg_crash (Crash message) string This server has experienced an internal error. You will now be disconnected.
+# If the CSM restriction for node range is enabled, get_node calls are limited
+# to this distance from the player to the node.
+csm_restriction_noderange (Client side node lookup range restriction) int 0 0 4294967295
-# Whether to ask clients to reconnect after a (Lua) crash.
-# Set this to true if your server is set up to restart automatically.
-ask_reconnect_on_crash (Ask to reconnect after crash) bool false
+[**Chat]
-# From how far clients know about objects, stated in mapblocks (16 nodes).
-#
-# Setting this larger than active_block_range will also cause the server
-# to maintain active objects up to this distance in the direction the
-# player is looking. (This can avoid mobs suddenly disappearing from view)
-active_object_send_range_blocks (Active object send range) int 8
+# Remove color codes from incoming chat messages
+# Use this to stop players from being able to use color in their messages
+strip_color_codes (Strip color codes) bool false
-# The radius of the volume of blocks around every player that is subject to the
-# active block stuff, stated in mapblocks (16 nodes).
-# In active blocks objects are loaded and ABMs run.
-# This is also the minimum range in which active objects (mobs) are maintained.
-# This should be configured together with active_object_send_range_blocks.
-active_block_range (Active block range) int 4
+# Set the maximum length of a chat message (in characters) sent by clients.
+chat_message_max_size (Chat message max length) int 500 10 65535
-# From how far blocks are sent to clients, stated in mapblocks (16 nodes).
-max_block_send_distance (Max block send distance) int 12
+# Amount of messages a player may send per 10 seconds.
+chat_message_limit_per_10sec (Chat message count limit) float 10.0 1.0
-# Maximum number of forceloaded mapblocks.
-max_forceloaded_blocks (Maximum forceloaded blocks) int 16
+# Kick players who sent more than X messages per 10 seconds.
+chat_message_limit_trigger_kick (Chat message kick threshold) int 50 1 65535
-# Interval of sending time of day to clients.
-time_send_interval (Time send interval) int 5
+[*Server Gameplay]
# Controls length of day/night cycle.
# Examples:
# 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged.
-time_speed (Time speed) int 72
+time_speed (Time speed) int 72 0
# Time of day when a new world is started, in millihours (0-23999).
world_start_time (World start time) int 6125 0 23999
-# Interval of saving important changes in the world, stated in seconds.
-server_map_save_interval (Map save interval) float 5.3
-
-# Set the maximum character length of a chat message sent by clients.
-chat_message_max_size (Chat message max length) int 500
-
-# Amount of messages a player may send per 10 seconds.
-chat_message_limit_per_10sec (Chat message count limit) float 10.0
+# Time in seconds for item entity (dropped items) to live.
+# Setting it to -1 disables the feature.
+item_entity_ttl (Item entity TTL) int 900 -1
-# Kick players who sent more than X messages per 10 seconds.
-chat_message_limit_trigger_kick (Chat message kick threshold) int 50
+# Specifies the default stack size of nodes, items and tools.
+# Note that mods or games may explicitly set a stack for certain (or all) items.
+default_stack_max (Default stack size) int 99 1 65535
[**Physics]
# Horizontal and vertical acceleration on ground or when climbing,
# in nodes per second per second.
-movement_acceleration_default (Default acceleration) float 3
+movement_acceleration_default (Default acceleration) float 3.0 0.0
# Horizontal acceleration in air when jumping or falling,
# in nodes per second per second.
-movement_acceleration_air (Acceleration in air) float 2
+movement_acceleration_air (Acceleration in air) float 2.0 0.0
# Horizontal and vertical acceleration in fast mode,
# in nodes per second per second.
-movement_acceleration_fast (Fast mode acceleration) float 10
+movement_acceleration_fast (Fast mode acceleration) float 10.0 0.0
# Walking and flying speed, in nodes per second.
-movement_speed_walk (Walking speed) float 4
+movement_speed_walk (Walking speed) float 4.0 0.0
# Sneaking speed, in nodes per second.
-movement_speed_crouch (Sneaking speed) float 1.35
+movement_speed_crouch (Sneaking speed) float 1.35 0.0
# Walking, flying and climbing speed in fast mode, in nodes per second.
-movement_speed_fast (Fast mode speed) float 20
+movement_speed_fast (Fast mode speed) float 20.0 0.0
# Vertical climbing speed, in nodes per second.
-movement_speed_climb (Climbing speed) float 3
+movement_speed_climb (Climbing speed) float 3.0 0.0
# Initial vertical speed when jumping, in nodes per second.
-movement_speed_jump (Jumping speed) float 6.5
+movement_speed_jump (Jumping speed) float 6.5 0.0
+# How much you are slowed down when moving inside a liquid.
# Decrease this to increase liquid resistance to movement.
-movement_liquid_fluidity (Liquid fluidity) float 1
+movement_liquid_fluidity (Liquid fluidity) float 1.0 0.001
# Maximum liquid resistance. Controls deceleration when entering liquid at
# high speed.
movement_liquid_fluidity_smooth (Liquid fluidity smoothing) float 0.5
-# Controls sinking speed in liquid.
-movement_liquid_sink (Liquid sinking) float 10
+# Controls sinking speed in liquid when idling. Negative values will cause
+# you to rise instead.
+movement_liquid_sink (Liquid sinking) float 10.0
# Acceleration of gravity, in nodes per second per second.
movement_gravity (Gravity) float 9.81
-[**Advanced]
-
-# Handling for deprecated Lua API calls:
-# - none: Do not log deprecated calls
-# - log: mimic and log backtrace of deprecated call (default).
-# - error: abort on usage of deprecated call (suggested for mod developers).
-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
-# memory consumption (4096=100MB, as a rule of thumb).
-max_clearobjects_extra_loaded_blocks (Max. clearobjects extra blocks) int 4096
-
-# How much the server will wait before unloading unused mapblocks.
-# Higher value is smoother, but will use more RAM.
-server_unload_unused_data_timeout (Unload unused server data) int 29
-
-# Maximum number of statically stored objects in a block.
-max_objects_per_block (Maximum objects per block) int 64
-
-# See https://www.sqlite.org/pragma.html#pragma_synchronous
-sqlite_synchronous (Synchronous SQLite) enum 2 0,1,2
-
-# Compression level to use when saving mapblocks to disk.
-# -1 - use default compression level
-# 0 - least compression, fastest
-# 9 - best compression, slowest
-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.
-dedicated_server_step (Dedicated server step) float 0.09
-
-# Length of time between active block management cycles
-active_block_mgmt_interval (Active block management interval) float 2.0
-
-# Length of time between Active Block Modifier (ABM) execution cycles
-abm_interval (ABM interval) float 1.0
-
-# The time budget allowed for ABMs to execute on each step
-# (as a fraction of the ABM Interval)
-abm_time_budget (ABM time budget) float 0.2 0.1 0.9
-
-# Length of time between NodeTimer execution cycles
-nodetimer_interval (NodeTimer interval) float 0.2
-
-# If enabled, invalid world data won't cause the server to shut down.
-# Only enable this if you know what you are doing.
-ignore_world_load_errors (Ignore world errors) bool false
-
-# Max liquids processed per step.
-liquid_loop_max (Liquid loop max) int 100000
-
-# The time (in seconds) that the liquids queue may grow beyond processing
-# capacity until an attempt is made to decrease its size by dumping old queue
-# items. A value of 0 disables the functionality.
-liquid_queue_purge_time (Liquid queue purge time) int 0
-
-# Liquid update interval in seconds.
-liquid_update (Liquid update tick) float 1.0
-
-# At this distance the server will aggressively optimize which blocks are sent to
-# clients.
-# Small values potentially improve performance a lot, at the expense of visible
-# rendering glitches (some blocks will not be rendered under water and in caves,
-# as well as sometimes on land).
-# Setting this to a value greater than max_block_send_distance disables this
-# optimization.
-# Stated in mapblocks (16 nodes).
-block_send_optimize_distance (Block send optimize distance) int 4 2
-
-# If enabled the server will perform map block occlusion culling based on
-# on the eye position of the player. This can reduce the number of blocks
-# sent to the client 50-80%. The client will not longer receive most invisible
-# so that the utility of noclip mode is reduced.
-server_side_occlusion_culling (Server side occlusion culling) bool true
-
-# Restricts the access of certain client-side functions on servers.
-# Combine the byteflags below to restrict client-side features, or set to 0
-# for no restrictions:
-# LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)
-# CHAT_MESSAGES: 2 (disable send_chat_message call client-side)
-# READ_ITEMDEFS: 4 (disable get_item_def call client-side)
-# READ_NODEDEFS: 8 (disable get_node_def call client-side)
-# LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to
-# csm_restriction_noderange)
-# READ_PLAYERINFO: 32 (disable get_player_names call client-side)
-csm_restriction_flags (Client side modding restrictions) int 62
-
-# If the CSM restriction for node range is enabled, get_node calls are limited
-# to this distance from the player to the node.
-csm_restriction_noderange (Client side node lookup range restriction) int 0
-
-[*Security]
-
-# Prevent mods from doing insecure things like running shell commands.
-secure.enable_security (Enable mod security) bool true
-
-# Comma-separated list of trusted mods that are allowed to access insecure
-# functions even when mod security is on (via request_insecure_environment()).
-secure.trusted_mods (Trusted mods) string
-
-# Comma-separated list of mods that are allowed to access HTTP APIs, which
-# allow them to upload and download data to/from the internet.
-secure.http_mods (HTTP mods) string
-
-[*Advanced]
-
-[**Profiling]
-# Load the game profiler to collect game profiling data.
-# Provides a /profiler command to access the compiled profile.
-# Useful for mod developers and server operators.
-profiler.load (Load the game profiler) bool false
-
-# The default format in which profiles are being saved,
-# when calling `/profiler save [format]` without format.
-profiler.default_report_format (Default report format) enum txt txt,csv,lua,json,json_pretty
-
-# The file path relative to your worldpath in which profiles will be saved to.
-profiler.report_path (Report path) string ""
-
-[***Instrumentation]
-
-# Instrument the methods of entities on registration.
-instrument.entity (Entity methods) bool true
-
-# Instrument the action function of Active Block Modifiers on registration.
-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 chat commands on registration.
-instrument.chatcommand (Chat commands) bool true
-
-# Instrument global callback functions on registration.
-# (anything you pass to a minetest.register_*() function)
-instrument.global_callback (Global callbacks) bool true
-
-[****Advanced]
-# Instrument builtin.
-# This is usually only needed by core/builtin contributors
-instrument.builtin (Builtin) bool false
-
-# Have the profiler instrument itself:
-# * Instrument an empty function.
-# This estimates the overhead, that instrumentation is adding (+1 function call).
-# * Instrument the sampler being used to update the statistics.
-instrument.profiler (Profiler) bool false
-
-[Client and Server]
-
-# Name of the player.
-# When running a server, clients connecting with this name are admins.
-# When starting from the main menu, this is overridden.
-name (Player name) string
-
-# Set the language. Leave empty to use the system language.
-# A restart is required after changing this.
-language (Language) enum ,be,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)
-# - none (messages with no level)
-# - error
-# - warning
-# - action
-# - info
-# - verbose
-debug_log_level (Debug log level) enum action ,none,error,warning,action,info,verbose
-
-# If the file size of debug.txt exceeds the number of megabytes specified in
-# this setting when it is opened, the file is moved to debug.txt.1,
-# deleting an older debug.txt.1 if it exists.
-# debug.txt is only moved if this setting is positive.
-debug_log_size_max (Debug log file size threshold) int 50
-
-# Minimal level of logging to be written to chat.
-chat_log_level (Chat log level) enum error ,none,error,warning,action,info,verbose
-
-# Enable IPv6 support (for both client and server).
-# Required for IPv6 connections to work at all.
-enable_ipv6 (IPv6) bool true
-
-[*Advanced]
-
-# 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.
-# - Serverlist download and server announcement.
-# - Downloads performed by main menu (e.g. mod manager).
-# Only has an effect if compiled with cURL.
-curl_parallel_limit (cURL parallel limit) int 8
-
-# Maximum time a file download (e.g. a mod download) may take, stated in milliseconds.
-curl_file_download_timeout (cURL file download timeout) int 300000
-
-# Replaces the default main menu with a custom one.
-main_menu_script (Main menu script) string
-
-# Print the engine's profiling data in regular intervals (in seconds).
-# 0 = disable. Useful for developers.
-profiler_print_interval (Engine profiling data print interval) int 0
[Mapgen]
+# A chosen map seed for a new map, leave empty for random.
+# Will be overridden when creating a new world in the main menu.
+fixed_map_seed (Fixed map seed) string
+
# Name of map generator to be used when creating a new world.
# Creating a world in the main menu will override this.
# Current mapgens in a highly unstable state:
@@ -1451,10 +776,10 @@ profiler_print_interval (Engine profiling data print interval) int 0
mg_name (Mapgen name) enum v7 v7,valleys,carpathian,v5,flat,fractal,singlenode,v6
# Water surface level of the world.
-water_level (Water level) int 1
+water_level (Water level) int 1 -31000 31000
# From how far blocks are generated for clients, stated in mapblocks (16 nodes).
-max_block_generate_distance (Max block generate distance) int 10
+max_block_generate_distance (Max block generate distance) int 10 1 32767
# Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).
# Only mapchunks completely within the mapgen limit are generated.
@@ -1466,7 +791,7 @@ mapgen_limit (Map generation limit) int 31007 0 31007
# 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]
+[*Biome API noise parameters]
# Temperature variation for biomes.
mg_biome_np_heat (Heat noise) noise_params_2d 50, 50, (1000, 1000, 1000), 5349, 3, 0.5, 2.0, eased
@@ -1491,7 +816,7 @@ mgv5_spflags (Mapgen V5 specific flags) flags caverns caverns,nocaverns
mgv5_cave_width (Cave width) float 0.09
# Y of upper limit of large caves.
-mgv5_large_cave_depth (Large cave depth) int -256
+mgv5_large_cave_depth (Large cave depth) int -256 -31000 31000
# Minimum limit of random number of small caves per mapchunk.
mgv5_small_cave_num_min (Small cave minimum number) int 0 0 256
@@ -1509,19 +834,19 @@ mgv5_large_cave_num_max (Large cave maximum number) int 2 0 64
mgv5_large_cave_flooded (Large cave proportion flooded) float 0.5 0.0 1.0
# Y-level of cavern upper limit.
-mgv5_cavern_limit (Cavern limit) int -256
+mgv5_cavern_limit (Cavern limit) int -256 -31000 31000
# Y-distance over which caverns expand to full size.
-mgv5_cavern_taper (Cavern taper) int 256
+mgv5_cavern_taper (Cavern taper) int 256 0 32767
# Defines full size of caverns, smaller values create larger caverns.
mgv5_cavern_threshold (Cavern threshold) float 0.7
# Lower Y limit of dungeons.
-mgv5_dungeon_ymin (Dungeon minimum Y) int -31000
+mgv5_dungeon_ymin (Dungeon minimum Y) int -31000 -31000 31000
# Upper Y limit of dungeons.
-mgv5_dungeon_ymax (Dungeon maximum Y) int 31000
+mgv5_dungeon_ymax (Dungeon maximum Y) int 31000 -31000 31000
[**Noises]
@@ -1566,10 +891,10 @@ mgv6_freq_desert (Desert noise threshold) float 0.45
mgv6_freq_beach (Beach noise threshold) float 0.15
# Lower Y limit of dungeons.
-mgv6_dungeon_ymin (Dungeon minimum Y) int -31000
+mgv6_dungeon_ymin (Dungeon minimum Y) int -31000 -31000 31000
# Upper Y limit of dungeons.
-mgv6_dungeon_ymax (Dungeon maximum Y) int 31000
+mgv6_dungeon_ymax (Dungeon maximum Y) int 31000 -31000 31000
[**Noises]
@@ -1615,19 +940,19 @@ mgv6_np_apple_trees (Apple trees noise) noise_params_2d 0, 1, (100, 100, 100), 3
mgv7_spflags (Mapgen V7 specific flags) flags mountains,ridges,nofloatlands,caverns mountains,ridges,floatlands,caverns,nomountains,noridges,nofloatlands,nocaverns
# Y of mountain density gradient zero level. Used to shift mountains vertically.
-mgv7_mount_zero_level (Mountain zero level) int 0
+mgv7_mount_zero_level (Mountain zero level) int 0 -31000 31000
# Lower Y limit of floatlands.
-mgv7_floatland_ymin (Floatland minimum Y) int 1024
+mgv7_floatland_ymin (Floatland minimum Y) int 1024 -31000 31000
# Upper Y limit of floatlands.
-mgv7_floatland_ymax (Floatland maximum Y) int 4096
+mgv7_floatland_ymax (Floatland maximum Y) int 4096 -31000 31000
# Y-distance over which floatlands taper from full density to nothing.
# Tapering starts at this distance from the Y limit.
# For a solid floatland layer, this controls the height of hills/mountains.
# Must be less than or equal to half the distance between the Y limits.
-mgv7_floatland_taper (Floatland tapering distance) int 256
+mgv7_floatland_taper (Floatland tapering distance) int 256 0 32767
# Exponent of the floatland tapering. Alters the tapering behaviour.
# Value = 1.0 creates a uniform, linear tapering.
@@ -1654,7 +979,7 @@ mgv7_floatland_density (Floatland density) float -0.6
# required value depending on 'mgv7_np_floatland'), to avoid
# server-intensive extreme water flow and to avoid vast flooding of the
# world surface below.
-mgv7_floatland_ywater (Floatland water level) int -31000
+mgv7_floatland_ywater (Floatland water level) int -31000 -31000 31000
# Controls width of tunnels, a smaller value creates wider tunnels.
# Value >= 10.0 completely disables generation of tunnels and avoids the
@@ -1662,7 +987,7 @@ mgv7_floatland_ywater (Floatland water level) int -31000
mgv7_cave_width (Cave width) float 0.09
# Y of upper limit of large caves.
-mgv7_large_cave_depth (Large cave depth) int -33
+mgv7_large_cave_depth (Large cave depth) int -33 -31000 31000
# Minimum limit of random number of small caves per mapchunk.
mgv7_small_cave_num_min (Small cave minimum number) int 0 0 256
@@ -1680,19 +1005,19 @@ mgv7_large_cave_num_max (Large cave maximum number) int 2 0 64
mgv7_large_cave_flooded (Large cave proportion flooded) float 0.5 0.0 1.0
# Y-level of cavern upper limit.
-mgv7_cavern_limit (Cavern limit) int -256
+mgv7_cavern_limit (Cavern limit) int -256 -31000 31000
# Y-distance over which caverns expand to full size.
-mgv7_cavern_taper (Cavern taper) int 256
+mgv7_cavern_taper (Cavern taper) int 256 0 32767
# Defines full size of caverns, smaller values create larger caverns.
mgv7_cavern_threshold (Cavern threshold) float 0.7
# Lower Y limit of dungeons.
-mgv7_dungeon_ymin (Dungeon minimum Y) int -31000
+mgv7_dungeon_ymin (Dungeon minimum Y) int -31000 -31000 31000
# Upper Y limit of dungeons.
-mgv7_dungeon_ymax (Dungeon maximum Y) int 31000
+mgv7_dungeon_ymax (Dungeon maximum Y) int 31000 -31000 31000
[**Noises]
@@ -1766,7 +1091,7 @@ mgcarpathian_valley_width (River valley width) float 0.25
mgcarpathian_cave_width (Cave width) float 0.09
# Y of upper limit of large caves.
-mgcarpathian_large_cave_depth (Large cave depth) int -33
+mgcarpathian_large_cave_depth (Large cave depth) int -33 -31000 31000
# Minimum limit of random number of small caves per mapchunk.
mgcarpathian_small_cave_num_min (Small cave minimum number) int 0 0 256
@@ -1784,19 +1109,19 @@ mgcarpathian_large_cave_num_max (Large cave maximum number) int 2 0 64
mgcarpathian_large_cave_flooded (Large cave proportion flooded) float 0.5 0.0 1.0
# Y-level of cavern upper limit.
-mgcarpathian_cavern_limit (Cavern limit) int -256
+mgcarpathian_cavern_limit (Cavern limit) int -256 -31000 31000
# Y-distance over which caverns expand to full size.
-mgcarpathian_cavern_taper (Cavern taper) int 256
+mgcarpathian_cavern_taper (Cavern taper) int 256 0 32767
# Defines full size of caverns, smaller values create larger caverns.
mgcarpathian_cavern_threshold (Cavern threshold) float 0.7
# Lower Y limit of dungeons.
-mgcarpathian_dungeon_ymin (Dungeon minimum Y) int -31000
+mgcarpathian_dungeon_ymin (Dungeon minimum Y) int -31000 -31000 31000
# Upper Y limit of dungeons.
-mgcarpathian_dungeon_ymax (Dungeon maximum Y) int 31000
+mgcarpathian_dungeon_ymax (Dungeon maximum Y) int 31000 -31000 31000
[**Noises]
@@ -1858,10 +1183,10 @@ mgcarpathian_np_dungeons (Dungeon noise) noise_params_3d 0.9, 0.5, (500, 500, 50
mgflat_spflags (Mapgen Flat specific flags) flags nolakes,nohills,nocaverns lakes,hills,caverns,nolakes,nohills,nocaverns
# Y of flat ground.
-mgflat_ground_level (Ground level) int 8
+mgflat_ground_level (Ground level) int 8 -31000 31000
# Y of upper limit of large caves.
-mgflat_large_cave_depth (Large cave depth) int -33
+mgflat_large_cave_depth (Large cave depth) int -33 -31000 31000
# Minimum limit of random number of small caves per mapchunk.
mgflat_small_cave_num_min (Small cave minimum number) int 0 0 256
@@ -1900,19 +1225,19 @@ mgflat_hill_threshold (Hill threshold) float 0.45
mgflat_hill_steepness (Hill steepness) float 64.0
# Y-level of cavern upper limit.
-mgflat_cavern_limit (Cavern limit) int -256
+mgflat_cavern_limit (Cavern limit) int -256 -31000 31000
# Y-distance over which caverns expand to full size.
-mgflat_cavern_taper (Cavern taper) int 256
+mgflat_cavern_taper (Cavern taper) int 256 0 32767
# Defines full size of caverns, smaller values create larger caverns.
mgflat_cavern_threshold (Cavern threshold) float 0.7
# Lower Y limit of dungeons.
-mgflat_dungeon_ymin (Dungeon minimum Y) int -31000
+mgflat_dungeon_ymin (Dungeon minimum Y) int -31000 -31000 31000
# Upper Y limit of dungeons.
-mgflat_dungeon_ymax (Dungeon maximum Y) int 31000
+mgflat_dungeon_ymax (Dungeon maximum Y) int 31000 -31000 31000
[**Noises]
@@ -1947,7 +1272,7 @@ mgfractal_spflags (Mapgen Fractal specific flags) flags terrain terrain,noterrai
mgfractal_cave_width (Cave width) float 0.09
# Y of upper limit of large caves.
-mgfractal_large_cave_depth (Large cave depth) int -33
+mgfractal_large_cave_depth (Large cave depth) int -33 -31000 31000
# Minimum limit of random number of small caves per mapchunk.
mgfractal_small_cave_num_min (Small cave minimum number) int 0 0 256
@@ -1965,10 +1290,10 @@ mgfractal_large_cave_num_max (Large cave maximum number) int 2 0 64
mgfractal_large_cave_flooded (Large cave proportion flooded) float 0.5 0.0 1.0
# Lower Y limit of dungeons.
-mgfractal_dungeon_ymin (Dungeon minimum Y) int -31000
+mgfractal_dungeon_ymin (Dungeon minimum Y) int -31000 -31000 31000
# Upper Y limit of dungeons.
-mgfractal_dungeon_ymax (Dungeon maximum Y) int 31000
+mgfractal_dungeon_ymax (Dungeon maximum Y) int 31000 -31000 31000
# Selects one of 18 fractal types.
# 1 = 4D "Roundy" Mandelbrot set.
@@ -1995,7 +1320,7 @@ mgfractal_fractal (Fractal type) int 1 1 18
# Increasing this increases the amount of fine detail, but also
# increases processing load.
# At iterations = 20 this mapgen has a similar load to mapgen V7.
-mgfractal_iterations (Iterations) int 11
+mgfractal_iterations (Iterations) int 11 1 65535
# (X,Y,Z) scale of fractal in nodes.
# Actual fractal size will be 2 to 3 times larger.
@@ -2078,10 +1403,10 @@ mgvalleys_spflags (Mapgen Valleys specific flags) flags altitude_chill,humid_riv
# The vertical distance over which heat drops by 20 if 'altitude_chill' is
# enabled. Also the vertical distance over which humidity drops by 10 if
# 'altitude_dry' is enabled.
-mgvalleys_altitude_chill (Altitude chill) int 90
+mgvalleys_altitude_chill (Altitude chill) int 90 0 65535
# Depth below which you'll find large caves.
-mgvalleys_large_cave_depth (Large cave depth) int -33
+mgvalleys_large_cave_depth (Large cave depth) int -33 -31000 31000
# Minimum limit of random number of small caves per mapchunk.
mgvalleys_small_cave_num_min (Small cave minimum number) int 0 0 256
@@ -2099,19 +1424,19 @@ mgvalleys_large_cave_num_max (Large cave maximum number) int 2 0 64
mgvalleys_large_cave_flooded (Large cave proportion flooded) float 0.5 0.0 1.0
# Depth below which you'll find giant caverns.
-mgvalleys_cavern_limit (Cavern upper limit) int -256
+mgvalleys_cavern_limit (Cavern upper limit) int -256 -31000 31000
# Y-distance over which caverns expand to full size.
-mgvalleys_cavern_taper (Cavern taper) int 192
+mgvalleys_cavern_taper (Cavern taper) int 192 0 32767
# Defines full size of caverns, smaller values create larger caverns.
mgvalleys_cavern_threshold (Cavern threshold) float 0.6
# How deep to make rivers.
-mgvalleys_river_depth (River depth) int 4
+mgvalleys_river_depth (River depth) int 4 0 65535
# How wide to make rivers.
-mgvalleys_river_size (River size) int 5
+mgvalleys_river_size (River size) int 5 0 65535
# Controls width of tunnels, a smaller value creates wider tunnels.
# Value >= 10.0 completely disables generation of tunnels and avoids the
@@ -2119,10 +1444,10 @@ mgvalleys_river_size (River size) int 5
mgvalleys_cave_width (Cave width) float 0.09
# Lower Y limit of dungeons.
-mgvalleys_dungeon_ymin (Dungeon minimum Y) int -31000
+mgvalleys_dungeon_ymin (Dungeon minimum Y) int -31000 -31000 31000
# Upper Y limit of dungeons.
-mgvalleys_dungeon_ymax (Dungeon maximum Y) int 63
+mgvalleys_dungeon_ymax (Dungeon maximum Y) int 63 -31000 31000
[**Noises]
@@ -2159,15 +1484,413 @@ mgvalleys_np_inter_valley_slope (Valley slope) noise_params_2d 0.5, 0.5, (128, 1
# 3D noise that determines number of dungeons per mapchunk.
mgvalleys_np_dungeons (Dungeon noise) noise_params_3d 0.9, 0.5, (500, 500, 500), 0, 2, 0.8, 2.0
+
+[Advanced]
+
+[*Developer Options]
+
+# Enable Lua modding support on client.
+# This support is experimental and API can change.
+enable_client_modding (Client modding) bool false
+
+# Replaces the default main menu with a custom one.
+main_menu_script (Main menu script) string
+
+[**Mod Security]
+
+# Prevent mods from doing insecure things like running shell commands.
+secure.enable_security (Enable mod security) bool true
+
+# Comma-separated list of trusted mods that are allowed to access insecure
+# functions even when mod security is on (via request_insecure_environment()).
+secure.trusted_mods (Trusted mods) string
+
+# Comma-separated list of mods that are allowed to access HTTP APIs, which
+# allow them to upload and download data to/from the internet.
+secure.http_mods (HTTP mods) string
+
+[**Debugging]
+
+# Level of logging to be written to debug.txt:
+# - <nothing> (no logging)
+# - none (messages with no level)
+# - error
+# - warning
+# - action
+# - info
+# - verbose
+# - trace
+debug_log_level (Debug log level) enum action ,none,error,warning,action,info,verbose,trace
+
+# If the file size of debug.txt exceeds the number of megabytes specified in
+# this setting when it is opened, the file is moved to debug.txt.1,
+# deleting an older debug.txt.1 if it exists.
+# debug.txt is only moved if this setting is positive.
+debug_log_size_max (Debug log file size threshold) int 50 1
+
+# Minimal level of logging to be written to chat.
+chat_log_level (Chat log level) enum error ,none,error,warning,action,info,verbose,trace
+
+# Handling for deprecated Lua API calls:
+# - none: Do not log deprecated calls
+# - log: mimic and log backtrace of deprecated call (default).
+# - error: abort on usage of deprecated call (suggested for mod developers).
+deprecated_lua_api_handling (Deprecated Lua API handling) enum log none,log,error
+
+# Enable random user input (only used for testing).
+random_input (Random input) bool false
+
+# Enable mod channels support.
+enable_mod_channels (Mod channels) bool false
+
+[**Mod Profiler]
+
+# Load the game profiler to collect game profiling data.
+# Provides a /profiler command to access the compiled profile.
+# Useful for mod developers and server operators.
+profiler.load (Load the game profiler) bool false
+
+# The default format in which profiles are being saved,
+# when calling `/profiler save [format]` without format.
+profiler.default_report_format (Default report format) enum txt txt,csv,lua,json,json_pretty
+
+# The file path relative to your worldpath in which profiles will be saved to.
+profiler.report_path (Report path) string ""
+
+# Instrument the methods of entities on registration.
+instrument.entity (Entity methods) bool true
+
+# Instrument the action function of Active Block Modifiers on registration.
+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 chat commands on registration.
+instrument.chatcommand (Chat commands) bool true
+
+# Instrument global callback functions on registration.
+# (anything you pass to a minetest.register_*() function)
+instrument.global_callback (Global callbacks) bool true
+
+# Instrument builtin.
+# This is usually only needed by core/builtin contributors
+instrument.builtin (Builtin) bool false
+
+# Have the profiler instrument itself:
+# * Instrument an empty function.
+# This estimates the overhead, that instrumentation is adding (+1 function call).
+# * Instrument the sampler being used to update the statistics.
+instrument.profiler (Profiler) bool false
+
+[**Engine profiler]
+
+# Print the engine's profiling data in regular intervals (in seconds).
+# 0 = disable. Useful for developers.
+profiler_print_interval (Engine profiling data print interval) int 0 0
+
+
[*Advanced]
+# Enable IPv6 support (for both client and server).
+# Required for IPv6 connections to work at all.
+enable_ipv6 (IPv6) bool true
+
+# If enabled, invalid world data won't cause the server to shut down.
+# Only enable this if you know what you are doing.
+ignore_world_load_errors (Ignore world errors) bool false
+
+[**Graphics]
+
+# Path to shader directory. If no path is defined, default location will be used.
+shader_path (Shader path) path
+
+# 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 opengl,ogles1,ogles2
+
+# Distance in nodes at which transparency depth sorting is enabled
+# Use this to limit the performance impact of transparency depth sorting
+transparency_sorting_distance (Transparency Sorting Distance) int 16 0 128
+
+# Enable vertex buffer objects.
+# This should greatly improve graphics performance.
+enable_vbo (VBO) bool true
+
+# Radius of cloud area stated in number of 64 node cloud squares.
+# Values larger than 26 will start to produce sharp cutoffs at cloud area corners.
+cloud_radius (Cloud radius) int 12 1 62
+
+# Whether node texture animations should be desynchronized per mapblock.
+desynchronize_mapblock_texture_animation (Desynchronize block animation) bool true
+
+# Enables caching of facedir rotated meshes.
+enable_mesh_cache (Mesh cache) bool false
+
+# Delay between mesh updates on the client in ms. Increasing this will slow
+# down the rate of mesh updates, thus reducing jitter on slower clients.
+mesh_generation_interval (Mapblock mesh generation delay) int 0 0 50
+
+# Size of the MapBlock cache of the mesh generator. Increasing this will
+# increase the cache hit %, reducing the data being copied from the main
+# thread, thus reducing jitter.
+meshgen_block_cache_size (Mapblock mesh generator's MapBlock cache size in MB) int 20 0 1000
+
+# True = 256
+# False = 128
+# Usable to make minimap smoother on slower machines.
+minimap_double_scan_height (Minimap scan height) bool true
+
+# Textures on a node may be aligned either to the node or to the world.
+# The former mode suits better things like machines, furniture, etc., while
+# the latter makes stairs and microblocks fit surroundings better.
+# However, as this possibility is new, thus may not be used by older servers,
+# this option allows enforcing it for certain node types. Note though that
+# that is considered EXPERIMENTAL and may not work properly.
+world_aligned_mode (World-aligned textures mode) enum enable disable,enable,force_solid,force_nodebox
+
+# World-aligned textures may be scaled to span several nodes. However,
+# the server may not send the scale you want, especially if you use
+# a specially-designed texture pack; with this option, the client tries
+# to determine the scale automatically basing on the texture size.
+# See also texture_min_size.
+# Warning: This option is EXPERIMENTAL!
+autoscale_mode (Autoscaling mode) enum disable disable,enable,force
+
+[**Font]
+
+font_bold (Font bold by default) bool false
+
+font_italic (Font italic by default) bool false
+
+# Shadow offset (in pixels) of the default font. If 0, then shadow will not be drawn.
+font_shadow (Font shadow) int 1 0 65535
+
+# 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 where 1 unit = 1 pixel at 96 DPI
+font_size (Font size) int 16 5 72
+
+# 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_bold_italic (Bold and italic font path) filepath fonts/Arimo-BoldItalic.ttf
+
+# Font size of the monospace font where 1 unit = 1 pixel at 96 DPI
+mono_font_size (Monospace font size) int 16 5 72
+
+# 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_bold_italic (Bold and italic monospace font path) filepath fonts/Cousine-BoldItalic.ttf
+
+# 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
+
+[**Lighting]
+
+# Gradient of light curve at minimum light level.
+# Controls the contrast of the lowest light levels.
+lighting_alpha (Light curve low gradient) float 0.0 0.0 3.0
+
+# Gradient of light curve at maximum light level.
+# Controls the contrast of the highest light levels.
+lighting_beta (Light curve high gradient) float 1.5 0.0 3.0
+
+# Strength of light curve boost.
+# The 3 'boost' parameters define a range of the light
+# curve that is boosted in brightness.
+lighting_boost (Light curve boost) float 0.2 0.0 0.4
+
+# Center of light curve boost range.
+# Where 0.0 is minimum light level, 1.0 is maximum light level.
+lighting_boost_center (Light curve boost center) float 0.5 0.0 1.0
+
+# Spread of light curve boost range.
+# Controls the width of the range to be boosted.
+# Standard deviation of the light curve boost Gaussian.
+lighting_boost_spread (Light curve boost spread) float 0.2 0.0 0.4
+
+[**Networking]
+
+# Prometheus listener address.
+# If Minetest is compiled with ENABLE_PROMETHEUS option enabled,
+# enable metrics listener for Prometheus on that address.
+# Metrics can be fetched on http://127.0.0.1:30000/metrics
+prometheus_listener_address (Prometheus listener address) string 127.0.0.1:30000
+
+# Maximum size of the out chat queue.
+# 0 to disable queueing and -1 to make the queue size unlimited.
+max_out_chat_queue_size (Maximum size of the out chat queue) int 20 -1 32767
+
+# Timeout for client to remove unused map data from memory, in seconds.
+client_unload_unused_data_timeout (Mapblock unload timeout) float 600.0 0.0
+
+# Maximum number of mapblocks for client to be kept in memory.
+# Set to -1 for unlimited amount.
+client_mapblock_limit (Mapblock limit) int 7500 -1 2147483647
+
+# Whether to show the client debug info (has the same effect as hitting F5).
+show_debug (Show debug info) bool false
+
+# Maximum number of blocks that are simultaneously sent per client.
+# The maximum total count is calculated dynamically:
+# max_total = ceil((#clients + max_users) * per_client / 4)
+max_simultaneous_block_sends_per_client (Maximum simultaneous block sends per client) int 40 1 4294967295
+
+# To reduce lag, block transfers are slowed down when a player is building something.
+# This determines how long they are slowed down after placing or removing a node.
+full_block_send_enable_min_time_from_building (Delay in sending blocks after building) float 2.0 0.0
+
+# Maximum number of packets sent per send step, if you have a slow connection
+# try reducing it, but don't reduce it to a number below double of targeted
+# client number.
+max_packets_per_iteration (Max. packets per iteration) int 1024 1 65535
+
+# Compression level to use when sending mapblocks to the client.
+# -1 - use default compression level
+# 0 - least compression, fastest
+# 9 - best compression, slowest
+map_compression_level_net (Map Compression Level for Network Transfer) int -1 -1 9
+
+[**Server]
+
+# Format of player chat messages. The following strings are valid placeholders:
+# @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 0.0
+
+# A message to be displayed to all clients when the server shuts down.
+kick_msg_shutdown (Shutdown message) string Server shutting down.
+
+# A message to be displayed to all clients when the server crashes.
+kick_msg_crash (Crash message) string This server has experienced an internal error. You will now be disconnected.
+
+# Whether to ask clients to reconnect after a (Lua) crash.
+# Set this to true if your server is set up to restart automatically.
+ask_reconnect_on_crash (Ask to reconnect after crash) bool false
+
+[**Server/Env Performance]
+
+# Length of a server tick and the interval at which objects are generally updated over
+# network, stated in seconds.
+dedicated_server_step (Dedicated server step) float 0.09 0.0
+
+# Whether players are shown to clients without any range limit.
+# Deprecated, use the setting player_transfer_distance instead.
+unlimited_player_transfer_distance (Unlimited player transfer distance) bool true
+
+# Defines the maximal player transfer distance in blocks (0 = unlimited).
+player_transfer_distance (Player transfer distance) int 0 0 65535
+
+# From how far clients know about objects, stated in mapblocks (16 nodes).
+#
+# Setting this larger than active_block_range will also cause the server
+# to maintain active objects up to this distance in the direction the
+# player is looking. (This can avoid mobs suddenly disappearing from view)
+active_object_send_range_blocks (Active object send range) int 8 1 65535
+
+# The radius of the volume of blocks around every player that is subject to the
+# active block stuff, stated in mapblocks (16 nodes).
+# In active blocks objects are loaded and ABMs run.
+# This is also the minimum range in which active objects (mobs) are maintained.
+# This should be configured together with active_object_send_range_blocks.
+active_block_range (Active block range) int 4 1 65535
+
+# From how far blocks are sent to clients, stated in mapblocks (16 nodes).
+max_block_send_distance (Max block send distance) int 12 1 65535
+
+# Maximum number of forceloaded mapblocks.
+max_forceloaded_blocks (Maximum forceloaded blocks) int 16 0
+
+# Interval of sending time of day to clients, stated in seconds.
+time_send_interval (Time send interval) float 5.0 0.001
+
+# Interval of saving important changes in the world, stated in seconds.
+server_map_save_interval (Map save interval) float 5.3 0.001
+
+# How long the server will wait before unloading unused mapblocks, stated in seconds.
+# Higher value is smoother, but will use more RAM.
+server_unload_unused_data_timeout (Unload unused server data) int 29 0 4294967295
+
+# Maximum number of statically stored objects in a block.
+max_objects_per_block (Maximum objects per block) int 256 1 65535
+
+# Length of time between active block management cycles, stated in seconds.
+active_block_mgmt_interval (Active block management interval) float 2.0 0.0
+
+# Length of time between Active Block Modifier (ABM) execution cycles, stated in seconds.
+abm_interval (ABM interval) float 1.0 0.0
+
+# The time budget allowed for ABMs to execute on each step
+# (as a fraction of the ABM Interval)
+abm_time_budget (ABM time budget) float 0.2 0.1 0.9
+
+# Length of time between NodeTimer execution cycles, stated in seconds.
+nodetimer_interval (NodeTimer interval) float 0.2 0.0
+
+# Max liquids processed per step.
+liquid_loop_max (Liquid loop max) int 100000 1 4294967295
+
+# The time (in seconds) that the liquids queue may grow beyond processing
+# capacity until an attempt is made to decrease its size by dumping old queue
+# items. A value of 0 disables the functionality.
+liquid_queue_purge_time (Liquid queue purge time) int 0 0 65535
+
+# Liquid update interval in seconds.
+liquid_update (Liquid update tick) float 1.0 0.001
+
+# At this distance the server will aggressively optimize which blocks are sent to
+# clients.
+# Small values potentially improve performance a lot, at the expense of visible
+# rendering glitches (some blocks will not be rendered under water and in caves,
+# as well as sometimes on land).
+# Setting this to a value greater than max_block_send_distance disables this
+# optimization.
+# Stated in mapblocks (16 nodes).
+block_send_optimize_distance (Block send optimize distance) int 4 2 32767
+
+# If enabled the server will perform map block occlusion culling based on
+# on the eye position of the player. This can reduce the number of blocks
+# sent to the client 50-80%. The client will not longer receive most invisible
+# so that the utility of noclip mode is reduced.
+server_side_occlusion_culling (Server side occlusion culling) bool true
+
+[**Mapgen]
+
# Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).
# WARNING!: There is no benefit, and there are several dangers, in
# increasing this value above 5.
# Reducing this value increases cave and dungeon density.
# Altering this value is for special usage, leaving it unchanged is
# recommended.
-chunksize (Chunk size) int 5
+chunksize (Chunk size) int 5 1 10
# Dump the mapgen debug information.
enable_mapgen_debug_info (Mapgen debug) bool false
@@ -2193,21 +1916,438 @@ emergequeue_limit_generate (Per-player limit of queued blocks to generate) int 1
# speed, but this may harm game performance by interfering with other
# processes, especially in singleplayer and/or when running Lua code in
# 'on_generated'. For many users the optimum setting may be '1'.
-num_emerge_threads (Number of emerge threads) int 1
+num_emerge_threads (Number of emerge threads) int 1 0 32767
-[Online Content Repository]
+[**cURL]
-# The URL for the content repository
-contentdb_url (ContentDB URL) string https://content.minetest.net
+# Maximum time an interactive request (e.g. server list fetch) may take, stated in milliseconds.
+curl_timeout (cURL interactive timeout) int 20000 100 2147483647
-# Comma-separated list of flags to hide in the content repository.
-# "nonfree" can be used to hide packages which do not qualify as 'free software',
-# as defined by the Free Software Foundation.
-# You can also specify content ratings.
-# These flags are independent from Minetest versions,
-# so see a full list at https://content.minetest.net/help/content_flags/
-contentdb_flag_blacklist (ContentDB Flag Blacklist) string nonfree, desktop_default
+# Limits number of parallel HTTP requests. Affects:
+# - Media fetch if server uses remote_media setting.
+# - Serverlist download and server announcement.
+# - Downloads performed by main menu (e.g. mod manager).
+# Only has an effect if compiled with cURL.
+curl_parallel_limit (cURL parallel limit) int 8 1 2147483647
-# Maximum number of concurrent downloads. Downloads exceeding this limit will be queued.
-# This should be lower than curl_parallel_limit.
-contentdb_max_concurrent_downloads (ContentDB Max Concurrent Downloads) int 3
+# 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 100 2147483647
+
+[**Misc]
+
+# 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 0.5 5.0
+
+# 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
+
+# Number of extra blocks that can be loaded by /clearobjects at once.
+# This is a trade-off between SQLite transaction overhead and
+# memory consumption (4096=100MB, as a rule of thumb).
+max_clearobjects_extra_loaded_blocks (Max. clearobjects extra blocks) int 4096 0 4294967295
+
+# World directory (everything in the world is stored here).
+# Not needed if starting from the main menu.
+map-dir (Map directory) path
+
+# See https://www.sqlite.org/pragma.html#pragma_synchronous
+sqlite_synchronous (Synchronous SQLite) enum 2 0,1,2
+
+# Compression level to use when saving mapblocks to disk.
+# -1 - use default compression level
+# 0 - least compression, fastest
+# 9 - best compression, slowest
+map_compression_level_disk (Map Compression Level for Disk Storage) int -1 -1 9
+
+# Enable usage of remote media server (if provided by server).
+# Remote servers offer a significantly faster way to download media (e.g. textures)
+# when connecting to the server.
+enable_remote_media_server (Connect to external media server) bool true
+
+# File in client/serverlist/ that contains your favorite servers displayed in the
+# Multiplayer Tab.
+serverlist_file (Serverlist file) string favoriteservers.json
+
+
+[*Gamepads]
+
+# Enable joysticks. Requires a restart to take effect
+enable_joysticks (Enable joysticks) bool false
+
+# The identifier of the joystick to use
+joystick_id (Joystick ID) int 0 0 255
+
+# The type of joystick
+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 dead zone of the joystick
+joystick_deadzone (Joystick dead zone) int 2048 0 65535
+
+# The sensitivity of the joystick axes for moving the
+# in-game view frustum around.
+joystick_frustum_sensitivity (Joystick frustum sensitivity) float 170.0 0.001
+
+
+[*Temporary Settings]
+
+# Path to texture directory. All textures are first searched from here.
+texture_path (Texture path) path
+
+# Enables minimap.
+enable_minimap (Minimap) bool true
+
+# Shape of the minimap. Enabled = round, disabled = square.
+minimap_shape_round (Round minimap) bool true
+
+# Address to connect to.
+# Leave this blank to start a local server.
+# Note that the address field in the main menu overrides this setting.
+address (Server address) string
+
+# Port to connect to (UDP).
+# Note that the port field in the main menu overrides this setting.
+remote_port (Remote port) int 30000 1 65535
+
+# Default game when creating a new world.
+# This will be overridden when creating a world from the main menu.
+default_game (Default game) string minetest
+
+# Enable players getting damage and dying.
+enable_damage (Damage) bool false
+
+# Enable creative mode for all players
+creative_mode (Creative) bool false
+
+# Whether to allow players to damage and kill each other.
+enable_pvp (Player versus player) bool true
+
+# Player is able to fly without being affected by gravity.
+# This requires the "fly" privilege on the server.
+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 "Aux1" key).
+# This requires the "fast" privilege on the server.
+fast_move (Fast movement) bool false
+
+# If enabled together with fly mode, player is able to fly through solid nodes.
+# This requires the "noclip" privilege on the server.
+noclip (Noclip) bool false
+
+# Continuous forward movement, toggled by autoforward key.
+# Press the autoforward key again or the backwards movement to disable.
+continuous_forward (Continuous forward) bool false
+
+# Formspec default background opacity (between 0 and 255).
+formspec_default_bg_opacity (Formspec Default Background Opacity) int 140 0 255
+
+# Formspec default background color (R,G,B).
+formspec_default_bg_color (Formspec Default Background Color) string (0,0,0)
+
+# Whether to show technical names.
+# Affects mods and texture packs in the Content and Select Mods menus, as well as
+# setting names in All Settings.
+# Controlled by the checkbox in the "All settings" menu.
+show_technical_names (Show technical names) bool false
+
+# Enables the sound system.
+# If disabled, this completely disables all sounds everywhere and the in-game
+# sound controls will be non-functional.
+# Changing this setting requires a restart.
+enable_sound (Sound) bool true
+
+# Key for moving the player forward.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_forward (Forward key) key KEY_KEY_W
+
+# Key for moving the player backward.
+# Will also disable autoforward, when active.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_backward (Backward key) key KEY_KEY_S
+
+# Key for moving the player left.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_left (Left key) key KEY_KEY_A
+
+# Key for moving the player right.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_right (Right key) key KEY_KEY_D
+
+# Key for jumping.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_jump (Jump key) key KEY_SPACE
+
+# Key for sneaking.
+# Also used for climbing down and descending in water if aux1_descends is disabled.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_sneak (Sneak key) key KEY_LSHIFT
+
+# Key for digging.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_dig (Dig key) key KEY_LBUTTON
+
+# Key for placing.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_place (Place key) key KEY_RBUTTON
+
+# Key for opening the inventory.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_inventory (Inventory key) key KEY_KEY_I
+
+# Key for moving fast in fast mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_aux1 (Aux1 key) key KEY_KEY_E
+
+# Key for opening the chat window.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_chat (Chat key) key KEY_KEY_T
+
+# Key for opening the chat window to type commands.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_cmd (Command key) key /
+
+# Key for opening the chat window to type local commands.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_cmd_local (Command key) key .
+
+# Key for toggling unlimited view range.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_rangeselect (Range select key) key KEY_KEY_R
+
+# Key for toggling flying.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_freemove (Fly key) key KEY_KEY_K
+
+# Key for toggling pitch move mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_pitchmove (Pitch move key) key KEY_KEY_P
+
+# Key for toggling fast mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_fastmove (Fast key) key KEY_KEY_J
+
+# Key for toggling noclip mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_noclip (Noclip key) key KEY_KEY_H
+
+# Key for selecting the next item in the hotbar.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_hotbar_next (Hotbar next key) key KEY_KEY_N
+
+# Key for selecting the previous item in the hotbar.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_hotbar_previous (Hotbar previous key) key KEY_KEY_B
+
+# Key for muting the game.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_mute (Mute key) key KEY_KEY_M
+
+# Key for increasing the volume.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_increase_volume (Inc. volume key) key
+
+# Key for decreasing the volume.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_decrease_volume (Dec. volume key) key
+
+# Key for toggling autoforward.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_autoforward (Automatic forward key) key
+
+# Key for toggling cinematic mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_cinematic (Cinematic mode key) key
+
+# Key for toggling display of minimap.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_minimap (Minimap key) key KEY_KEY_V
+
+# Key for taking screenshots.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_screenshot (Screenshot) key KEY_F12
+
+# Key for dropping the currently selected item.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_drop (Drop item key) key KEY_KEY_Q
+
+# Key to use view zoom when possible.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_zoom (View zoom key) key KEY_KEY_Z
+
+# Key for selecting the first hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot1 (Hotbar slot 1 key) key KEY_KEY_1
+
+# Key for selecting the second hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot2 (Hotbar slot 2 key) key KEY_KEY_2
+
+# Key for selecting the third hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot3 (Hotbar slot 3 key) key KEY_KEY_3
+
+# Key for selecting the fourth hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot4 (Hotbar slot 4 key) key KEY_KEY_4
+
+# Key for selecting the fifth hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot5 (Hotbar slot 5 key) key KEY_KEY_5
+
+# Key for selecting the sixth hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot6 (Hotbar slot 6 key) key KEY_KEY_6
+
+# Key for selecting the seventh hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot7 (Hotbar slot 7 key) key KEY_KEY_7
+
+# Key for selecting the eighth hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot8 (Hotbar slot 8 key) key KEY_KEY_8
+
+# Key for selecting the ninth hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot9 (Hotbar slot 9 key) key KEY_KEY_9
+
+# Key for selecting the tenth hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot10 (Hotbar slot 10 key) key KEY_KEY_0
+
+# Key for selecting the 11th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot11 (Hotbar slot 11 key) key
+
+# Key for selecting the 12th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot12 (Hotbar slot 12 key) key
+
+# Key for selecting the 13th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot13 (Hotbar slot 13 key) key
+
+# Key for selecting the 14th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot14 (Hotbar slot 14 key) key
+
+# Key for selecting the 15th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot15 (Hotbar slot 15 key) key
+
+# Key for selecting the 16th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot16 (Hotbar slot 16 key) key
+
+# Key for selecting the 17th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot17 (Hotbar slot 17 key) key
+
+# Key for selecting the 18th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot18 (Hotbar slot 18 key) key
+
+# Key for selecting the 19th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot19 (Hotbar slot 19 key) key
+
+# Key for selecting the 20th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot20 (Hotbar slot 20 key) key
+
+# Key for selecting the 21st hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot21 (Hotbar slot 21 key) key
+
+# Key for selecting the 22nd hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot22 (Hotbar slot 22 key) key
+
+# Key for selecting the 23rd hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot23 (Hotbar slot 23 key) key
+
+# Key for selecting the 24th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot24 (Hotbar slot 24 key) key
+
+# Key for selecting the 25th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot25 (Hotbar slot 25 key) key
+
+# Key for selecting the 26th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot26 (Hotbar slot 26 key) key
+
+# Key for selecting the 27th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot27 (Hotbar slot 27 key) key
+
+# Key for selecting the 28th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot28 (Hotbar slot 28 key) key
+
+# Key for selecting the 29th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot29 (Hotbar slot 29 key) key
+
+# Key for selecting the 30th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot30 (Hotbar slot 30 key) key
+
+# Key for selecting the 31st hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot31 (Hotbar slot 31 key) key
+
+# Key for selecting the 32nd hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_slot32 (Hotbar slot 32 key) key
+
+# Key for toggling the display of the HUD.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_toggle_hud (HUD toggle key) key KEY_F1
+
+# Key for toggling the display of chat.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_toggle_chat (Chat toggle key) key KEY_F2
+
+# Key for toggling the display of the large chat console.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_console (Large chat console key) key KEY_F10
+
+# Key for toggling the display of fog.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_toggle_force_fog_off (Fog toggle key) key KEY_F3
+
+# Key for toggling the camera update. Only used for development
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_toggle_update_camera (Camera update toggle key) key
+
+# Key for toggling the display of debug info.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_toggle_debug (Debug info toggle key) key KEY_F5
+
+# Key for toggling the display of the profiler. Used for development.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_toggle_profiler (Profiler toggle key) key KEY_F6
+
+# Key for switching between first- and third-person camera.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_camera_mode (Toggle camera mode key) key KEY_KEY_C
+
+# Key for increasing the viewing range.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_increase_viewing_range_min (View range increase key) key +
+
+# Key for decreasing the viewing range.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_decrease_viewing_range_min (View range decrease key) key -
diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl
index 762a676c6..c4b947e72 100644
--- a/client/shaders/nodes_shader/opengl_fragment.glsl
+++ b/client/shaders/nodes_shader/opengl_fragment.glsl
@@ -16,10 +16,16 @@ uniform float animationTimer;
uniform float f_textureresolution;
uniform mat4 m_ShadowViewProj;
uniform float f_shadowfar;
- varying float normalOffsetScale;
+ uniform float f_shadow_strength;
+ uniform vec4 CameraPos;
+ uniform float xyPerspectiveBias0;
+ uniform float xyPerspectiveBias1;
+
varying float adj_shadow_strength;
varying float cosLight;
varying float f_normal_length;
+ varying vec3 shadow_position;
+ varying float perspective_factor;
#endif
@@ -43,23 +49,7 @@ 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()
@@ -69,16 +59,7 @@ float getLinearDepth()
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;
+ return shadow_position * 0.5 + 0.5;
}
// custom smoothstep implementation because it's not defined in glsl1.2
// https://docs.gl/sl4/smoothstep
@@ -136,23 +117,16 @@ float getHardShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance
#if SHADOW_FILTER == 2
- #define PCFBOUND 3.5
- #define PCFSAMPLES 64.0
+ #define PCFBOUND 2.0 // 5x5
+ #define PCFSAMPLES 25
#elif SHADOW_FILTER == 1
- #define PCFBOUND 1.5
- #if defined(POISSON_FILTER)
- #define PCFSAMPLES 32.0
- #else
- #define PCFSAMPLES 16.0
- #endif
+ #define PCFBOUND 1.0 // 3x3
+ #define PCFSAMPLES 9
#else
#define PCFBOUND 0.0
- #if defined(POISSON_FILTER)
- #define PCFSAMPLES 4.0
- #else
- #define PCFSAMPLES 1.0
- #endif
+ #define PCFSAMPLES 1
#endif
+
#ifdef COLORED_SHADOWS
float getHardShadowDepth(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
{
@@ -169,57 +143,31 @@ float getHardShadowDepth(sampler2D shadowsampler, vec2 smTexCoord, float realDis
}
#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
-}
+#define BASEFILTERRADIUS 1.0
-float getPenumbraRadius(sampler2D shadowsampler, vec2 smTexCoord, float realDistance, float multiplier)
+float getPenumbraRadius(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
{
- 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);
- }
+ if (PCFBOUND == 0.0 || SOFTSHADOWRADIUS <= 0.0)
+ return 0.0;
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);
+ float depth = getHardShadowDepth(shadowsampler, smTexCoord.xy, realDistance);
+ // A factor from 0 to 1 to reduce blurring of short shadows
+ float sharpness_factor = 1.0;
+ // conversion factor from shadow depth to blur radius
+ float depth_to_blur = f_shadowfar / SOFTSHADOWRADIUS / xyPerspectiveBias0;
+ if (depth > 0.0 && f_normal_length > 0.0)
+ // 5 is empirical factor that controls how fast shadow loses sharpness
+ sharpness_factor = clamp(5 * depth * depth_to_blur, 0.0, 1.0);
+ depth = 0.0;
+
+ float world_to_texture = xyPerspectiveBias1 / perspective_factor / perspective_factor
+ * f_textureresolution / 2.0 / f_shadowfar;
+ float world_radius = 0.2; // shadow blur radius in world float coordinates, e.g. 0.2 = 0.02 of one node
+
+ return max(BASEFILTERRADIUS * f_textureresolution / 4096.0, sharpness_factor * world_radius * world_to_texture * SOFTSHADOWRADIUS);
}
#ifdef POISSON_FILTER
@@ -294,26 +242,23 @@ const vec2[64] poissonDisk = vec2[64](
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
+ float radius = getPenumbraRadius(shadowsampler, smTexCoord, realDistance);
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;
+ vec2 clampedpos;
+ vec4 visibility = vec4(0.0);
+ float scale_factor = radius / f_textureresolution;
- float texture_size = 1.0 / (f_textureresolution * 0.5);
- int samples = int(clamp(PCFSAMPLES * (1 - baseLength) * (1 - baseLength), PCFSAMPLES / 4, PCFSAMPLES));
+ int samples = (1 + 1 * int(SOFTSHADOWRADIUS > 1.0)) * PCFSAMPLES; // scale max samples for the soft shadows
+ samples = int(clamp(pow(4.0 * radius + 1.0, 2.0), 1.0, float(samples)));
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;
+ clampedpos = poissonDisk[x] * scale_factor + smTexCoord.xy;
visibility += getHardShadowColor(shadowsampler, clampedpos.xy, realDistance);
}
@@ -324,26 +269,23 @@ vec4 getShadowColor(sampler2D shadowsampler, vec2 smTexCoord, float realDistance
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
+ float radius = getPenumbraRadius(shadowsampler, smTexCoord, realDistance);
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;
+ vec2 clampedpos;
+ float visibility = 0.0;
+ float scale_factor = radius / f_textureresolution;
- float texture_size = 1.0 / (f_textureresolution * 0.5);
- int samples = int(clamp(PCFSAMPLES * (1 - baseLength) * (1 - baseLength), PCFSAMPLES / 4, PCFSAMPLES));
+ int samples = (1 + 1 * int(SOFTSHADOWRADIUS > 1.0)) * PCFSAMPLES; // scale max samples for the soft shadows
+ samples = int(clamp(pow(4.0 * radius + 1.0, 2.0), 1.0, float(samples)));
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;
+ clampedpos = poissonDisk[x] * scale_factor + smTexCoord.xy;
visibility += getHardShadow(shadowsampler, clampedpos.xy, realDistance);
}
@@ -359,65 +301,57 @@ float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
vec4 getShadowColor(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
{
- vec2 clampedpos;
- vec4 visibility = vec4(0.0);
- float radius = getPenumbraRadius(shadowsampler, smTexCoord, realDistance, 1.0);
+ float radius = getPenumbraRadius(shadowsampler, smTexCoord, realDistance);
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;
+ vec2 clampedpos;
+ vec4 visibility = vec4(0.0);
+ float x, y;
+ float bound = (1 + 0.5 * int(SOFTSHADOWRADIUS > 1.0)) * PCFBOUND; // scale max bound for soft shadows
+ bound = clamp(0.5 * (4.0 * radius - 1.0), 0.5, bound);
+ float scale_factor = radius / bound / f_textureresolution;
+ float n = 0.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
+ clampedpos = vec2(x,y) * scale_factor + smTexCoord.xy;
visibility += getHardShadowColor(shadowsampler, clampedpos.xy, realDistance);
- n += 1;
+ n += 1.0;
}
- return visibility / n;
+ return visibility / max(n, 1.0);
}
#else
float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
{
- vec2 clampedpos;
- float visibility = 0.0;
- float radius = getPenumbraRadius(shadowsampler, smTexCoord, realDistance, 1.0);
+ float radius = getPenumbraRadius(shadowsampler, smTexCoord, realDistance);
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;
+ vec2 clampedpos;
+ float visibility = 0.0;
+ float x, y;
+ float bound = (1 + 0.5 * int(SOFTSHADOWRADIUS > 1.0)) * PCFBOUND; // scale max bound for soft shadows
+ bound = clamp(0.5 * (4.0 * radius - 1.0), 0.5, bound);
+ float scale_factor = radius / bound / f_textureresolution;
+ float n = 0.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
+ clampedpos = vec2(x,y) * scale_factor + smTexCoord.xy;
visibility += getHardShadow(shadowsampler, clampedpos.xy, realDistance);
- n += 1;
+ n += 1.0;
}
- return visibility / n;
+ return visibility / max(n, 1.0);
}
#endif
@@ -481,53 +415,59 @@ void main(void)
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();
+ if (f_shadow_strength > 0.0) {
+ 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);
+ float distance_rate = (1.0 - pow(clamp(2.0 * length(posLightSpace.xy - 0.5),0.0,1.0), 10.0));
+ if (max(abs(posLightSpace.x - 0.5), abs(posLightSpace.y - 0.5)) > 0.5)
+ distance_rate = 0.0;
+ float f_adj_shadow_strength = max(adj_shadow_strength-mtsmoothstep(0.9,1.1, posLightSpace.z),0.0);
+
+ if (distance_rate > 1e-7) {
- 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;
+ vec4 visibility;
+ if (cosLight > 0.0 || f_normal_length < 1e-3)
+ 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;
+ if (cosLight > 0.0 || f_normal_length < 1e-3)
+ 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);
+ 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);
+ // 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);
+
+ // Apply self-shadowing when light falls at a narrow angle to the surface
+ // Cosine of the cut-off angle.
+ const float self_shadow_cutoff_cosine = 0.035;
+ if (f_normal_length != 0 && cosLight < self_shadow_cutoff_cosine) {
+ shadow_int = max(shadow_int, 1 - clamp(cosLight, 0.0, self_shadow_cutoff_cosine)/self_shadow_cutoff_cosine);
+ shadow_color = mix(vec3(0.0), shadow_color, min(cosLight, self_shadow_cutoff_cosine)/self_shadow_cutoff_cosine);
+ }
- 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;
- 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
+ // 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
+ }
#endif
#if ENABLE_TONE_MAPPING
@@ -547,6 +487,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 d316930b2..d1fba2830 100644
--- a/client/shaders/nodes_shader/opengl_vertex.glsl
+++ b/client/shaders/nodes_shader/opengl_vertex.glsl
@@ -32,10 +32,14 @@ centroid varying vec2 varTexCoord;
uniform float f_shadowfar;
uniform float f_shadow_strength;
uniform float f_timeofday;
+ uniform vec4 CameraPos;
+
varying float cosLight;
varying float normalOffsetScale;
varying float adj_shadow_strength;
varying float f_normal_length;
+ varying vec3 shadow_position;
+ varying float perspective_factor;
#endif
@@ -45,8 +49,38 @@ varying float nightRatio;
const vec3 artificialLight = vec3(1.04, 1.04, 1.04);
const float e = 2.718281828459;
const float BS = 10.0;
+uniform float xyPerspectiveBias0;
+uniform float xyPerspectiveBias1;
+uniform float zPerspectiveBias;
#ifdef ENABLE_DYNAMIC_SHADOWS
+
+vec4 getRelativePosition(in vec4 position)
+{
+ vec2 l = position.xy - CameraPos.xy;
+ vec2 s = l / abs(l);
+ s = (1.0 - s * CameraPos.xy);
+ l /= s;
+ return vec4(l, s);
+}
+
+float getPerspectiveFactor(in vec4 relativePosition)
+{
+ float pDistance = length(relativePosition.xy);
+ float pFactor = pDistance * xyPerspectiveBias0 + xyPerspectiveBias1;
+ return pFactor;
+}
+
+vec4 applyPerspectiveDistortion(in vec4 position)
+{
+ vec4 l = getRelativePosition(position);
+ float pFactor = getPerspectiveFactor(l);
+ l.xy /= pFactor;
+ position.xy = l.xy * l.zw + CameraPos.xy;
+ position.z *= zPerspectiveBias;
+ return position;
+}
+
// 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)
@@ -193,24 +227,46 @@ void main(void)
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));
+ if (f_shadow_strength > 0.0) {
+ vec3 nNormal;
+ f_normal_length = length(vNormal);
+
+ /* normalOffsetScale is in world coordinates (1/10th of a meter)
+ z_bias is in light space coordinates */
+ float normalOffsetScale, z_bias;
+ float pFactor = getPerspectiveFactor(getRelativePosition(m_ShadowViewProj * mWorld * inVertexPosition));
+ if (f_normal_length > 0.0) {
+ nNormal = normalize(vNormal);
+ cosLight = dot(nNormal, -v_LightDirection);
+ float sinLight = pow(1 - pow(cosLight, 2.0), 0.5);
+ normalOffsetScale = 2.0 * pFactor * pFactor * sinLight * min(f_shadowfar, 500.0) /
+ xyPerspectiveBias1 / f_textureresolution;
+ z_bias = 1.0 * sinLight / cosLight;
+ }
+ else {
+ nNormal = vec3(0.0);
+ cosLight = clamp(dot(v_LightDirection, normalize(vec3(v_LightDirection.x, 0.0, v_LightDirection.z))), 1e-2, 1.0);
+ float sinLight = pow(1 - pow(cosLight, 2.0), 0.5);
+ normalOffsetScale = 0.0;
+ z_bias = 3.6e3 * sinLight / cosLight;
+ }
+ z_bias *= pFactor * pFactor / f_textureresolution / f_shadowfar;
+
+ shadow_position = applyPerspectiveDistortion(m_ShadowViewProj * mWorld * (inVertexPosition + vec4(normalOffsetScale * nNormal, 0.0))).xyz;
+ shadow_position.z -= z_bias;
+ perspective_factor = pFactor;
+
+ 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 3390e7227..1fefc764b 100644
--- a/client/shaders/object_shader/opengl_fragment.glsl
+++ b/client/shaders/object_shader/opengl_fragment.glsl
@@ -1,28 +1,13 @@
uniform sampler2D baseTexture;
-uniform vec4 emissiveColor;
+uniform vec3 dayLight;
uniform vec4 skyBgColor;
uniform float fogDistance;
uniform vec3 eyePosition;
-varying vec3 vNormal;
-varying vec3 vPosition;
-varying vec3 worldPosition;
-varying lowp vec4 varColor;
-#ifdef GL_ES
-varying mediump vec2 varTexCoord;
-#else
-centroid varying vec2 varTexCoord;
-#endif
-
-varying vec3 eyeVec;
-varying float vIDiff;
-
-const float e = 2.718281828459;
-const float BS = 10.0;
-const float fogStart = FOG_START;
-const float fogShadingParameter = 1.0 / (1.0 - fogStart);
-
+// 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;
@@ -31,57 +16,42 @@ const float fogShadingParameter = 1.0 / (1.0 - fogStart);
uniform float f_textureresolution;
uniform mat4 m_ShadowViewProj;
uniform float f_shadowfar;
- uniform float f_timeofday;
- varying float normalOffsetScale;
+ uniform float f_shadow_strength;
+ uniform vec4 CameraPos;
+ uniform float xyPerspectiveBias0;
+ uniform float xyPerspectiveBias1;
+
varying float adj_shadow_strength;
varying float cosLight;
varying float f_normal_length;
+ varying vec3 shadow_position;
+ varying float perspective_factor;
#endif
-#if ENABLE_TONE_MAPPING
-/* Hable's UC2 Tone mapping parameters
- A = 0.22;
- B = 0.30;
- C = 0.10;
- D = 0.20;
- E = 0.01;
- F = 0.30;
- W = 11.2;
- equation used: ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F
-*/
-
-vec3 uncharted2Tonemap(vec3 x)
-{
- return ((x * (0.22 * x + 0.03) + 0.002) / (x * (0.22 * x + 0.3) + 0.06)) - 0.03333;
-}
-vec4 applyToneMapping(vec4 color)
-{
- color = vec4(pow(color.rgb, vec3(2.2)), color.a);
- const float gamma = 1.6;
- const float exposureBias = 5.5;
- color.rgb = uncharted2Tonemap(exposureBias * color.rgb);
- // Precalculated white_scale from
- //vec3 whiteScale = 1.0 / uncharted2Tonemap(vec3(W));
- vec3 whiteScale = vec3(1.036015346);
- color.rgb *= whiteScale;
- return vec4(pow(color.rgb, vec3(1.0 / gamma)), color.a);
-}
+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.
+// If the absolute position is required it can be calculated with
+// cameraOffset + worldPosition (for large coordinates the limits of float
+// precision must be considered).
+varying vec3 worldPosition;
+varying lowp vec4 varColor;
+#ifdef GL_ES
+varying mediump vec2 varTexCoord;
+#else
+centroid varying vec2 varTexCoord;
#endif
+varying vec3 eyeVec;
+varying float nightRatio;
-#ifdef ENABLE_DYNAMIC_SHADOWS
-const float bias0 = 0.9;
-const float zPersFactor = 0.5;
-const float bias1 = 1.0 - bias0;
+varying float vIDiff;
-vec4 getPerspectiveFactor(in vec4 shadowPosition)
-{
- float pDistance = length(shadowPosition.xy);
- float pFactor = pDistance * bias0 + bias1;
- shadowPosition.xyz *= vec3(vec2(1.0 / pFactor), zPersFactor);
+const float fogStart = FOG_START;
+const float fogShadingParameter = 1.0 / (1.0 - fogStart);
- return shadowPosition;
-}
+#ifdef ENABLE_DYNAMIC_SHADOWS
// assuming near is always 1.0
float getLinearDepth()
@@ -91,11 +61,14 @@ float getLinearDepth()
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;
+ return shadow_position * 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
@@ -124,10 +97,10 @@ vec4 getHardShadowColor(sampler2D shadowsampler, vec2 smTexCoord, float realDist
{
vec4 texDepth = texture2D(shadowsampler, smTexCoord.xy).rgba;
- float visibility = step(0.0, (realDistance-2e-5) - texDepth.r);
+ 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-2e-5) - texDepth.r);
+ visibility = step(0.0, realDistance - texDepth.b);
result = vec4(visibility, unpackColor(texDepth.a));
}
return result;
@@ -138,32 +111,67 @@ vec4 getHardShadowColor(sampler2D shadowsampler, vec2 smTexCoord, float realDist
float getHardShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
{
float texDepth = texture2D(shadowsampler, smTexCoord.xy).r;
- float visibility = step(0.0, (realDistance-2e-5) - texDepth);
-
+ float visibility = step(0.0, realDistance - texDepth);
return visibility;
}
#endif
+
#if SHADOW_FILTER == 2
- #define PCFBOUND 3.5
- #define PCFSAMPLES 64.0
+ #define PCFBOUND 2.0 // 5x5
+ #define PCFSAMPLES 25
#elif SHADOW_FILTER == 1
- #define PCFBOUND 1.5
- #if defined(POISSON_FILTER)
- #define PCFSAMPLES 32.0
- #else
- #define PCFSAMPLES 16.0
- #endif
+ #define PCFBOUND 1.0 // 3x3
+ #define PCFSAMPLES 9
#else
#define PCFBOUND 0.0
- #if defined(POISSON_FILTER)
- #define PCFSAMPLES 4.0
- #else
- #define PCFSAMPLES 1.0
- #endif
+ #define PCFSAMPLES 1
#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
+
+#define BASEFILTERRADIUS 1.0
+
+float getPenumbraRadius(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ // Return fast if sharp shadows are requested
+ if (PCFBOUND == 0.0 || SOFTSHADOWRADIUS <= 0.0)
+ return 0.0;
+
+ vec2 clampedpos;
+ float y, x;
+ float depth = getHardShadowDepth(shadowsampler, smTexCoord.xy, realDistance);
+ // A factor from 0 to 1 to reduce blurring of short shadows
+ float sharpness_factor = 1.0;
+ // conversion factor from shadow depth to blur radius
+ float depth_to_blur = f_shadowfar / SOFTSHADOWRADIUS / xyPerspectiveBias0;
+ if (depth > 0.0 && f_normal_length > 0.0)
+ // 5 is empirical factor that controls how fast shadow loses sharpness
+ sharpness_factor = clamp(5 * depth * depth_to_blur, 0.0, 1.0);
+ depth = 0.0;
+
+ float world_to_texture = xyPerspectiveBias1 / perspective_factor / perspective_factor
+ * f_textureresolution / 2.0 / f_shadowfar;
+ float world_radius = 0.2; // shadow blur radius in world float coordinates, e.g. 0.2 = 0.02 of one node
+
+ return max(BASEFILTERRADIUS * f_textureresolution / 4096.0, sharpness_factor * world_radius * world_to_texture * SOFTSHADOWRADIUS);
+}
+
#ifdef POISSON_FILTER
const vec2[64] poissonDisk = vec2[64](
vec2(0.170019, -0.040254),
@@ -236,38 +244,54 @@ const vec2[64] poissonDisk = vec2[64](
vec4 getShadowColor(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
{
+ float radius = getPenumbraRadius(shadowsampler, smTexCoord, realDistance);
+ if (radius < 0.1) {
+ // we are in the middle of even brightness, no need for filtering
+ return getHardShadowColor(shadowsampler, smTexCoord.xy, realDistance);
+ }
+
vec2 clampedpos;
vec4 visibility = vec4(0.0);
+ float scale_factor = radius / f_textureresolution;
- 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;
+ int samples = (1 + 1 * int(SOFTSHADOWRADIUS > 1.0)) * PCFSAMPLES; // scale max samples for the soft shadows
+ samples = int(clamp(pow(4.0 * radius + 1.0, 2.0), 1.0, float(samples)));
+ 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] * texture_size * SOFTSHADOWRADIUS + smTexCoord.xy;
+ clampedpos = poissonDisk[x] * scale_factor + smTexCoord.xy;
visibility += getHardShadowColor(shadowsampler, clampedpos.xy, realDistance);
}
- return visibility / PCFSAMPLES;
+ return visibility / samples;
}
#else
float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
{
+ float radius = getPenumbraRadius(shadowsampler, smTexCoord, realDistance);
+ if (radius < 0.1) {
+ // we are in the middle of even brightness, no need for filtering
+ return getHardShadow(shadowsampler, smTexCoord.xy, realDistance);
+ }
+
vec2 clampedpos;
float visibility = 0.0;
+ float scale_factor = radius / f_textureresolution;
- 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;
+ int samples = (1 + 1 * int(SOFTSHADOWRADIUS > 1.0)) * PCFSAMPLES; // scale max samples for the soft shadows
+ samples = int(clamp(pow(4.0 * radius + 1.0, 2.0), 1.0, float(samples)));
+ 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] * texture_size * SOFTSHADOWRADIUS + smTexCoord.xy;
+ clampedpos = poissonDisk[x] * scale_factor + smTexCoord.xy;
visibility += getHardShadow(shadowsampler, clampedpos.xy, realDistance);
}
- return visibility / PCFSAMPLES;
+ return visibility / samples;
}
#endif
@@ -279,42 +303,57 @@ float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
vec4 getShadowColor(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
{
+ float radius = getPenumbraRadius(shadowsampler, smTexCoord, realDistance);
+ if (radius < 0.1) {
+ // we are in the middle of even brightness, no need for filtering
+ return getHardShadowColor(shadowsampler, smTexCoord.xy, 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;
+ float x, y;
+ float bound = (1 + 0.5 * int(SOFTSHADOWRADIUS > 1.0)) * PCFBOUND; // scale max bound for soft shadows
+ bound = clamp(0.5 * (4.0 * radius - 1.0), 0.5, bound);
+ float scale_factor = radius / bound / f_textureresolution;
+ float n = 0.0;
+
// 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;
+ for (y = -bound; y <= bound; y += 1.0)
+ for (x = -bound; x <= bound; x += 1.0) {
+ clampedpos = vec2(x,y) * scale_factor + smTexCoord.xy;
visibility += getHardShadowColor(shadowsampler, clampedpos.xy, realDistance);
+ n += 1.0;
}
- return visibility / PCFSAMPLES;
+ return visibility / max(n, 1.0);
}
#else
float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
{
+ float radius = getPenumbraRadius(shadowsampler, smTexCoord, realDistance);
+ if (radius < 0.1) {
+ // we are in the middle of even brightness, no need for filtering
+ return getHardShadow(shadowsampler, smTexCoord.xy, 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;
+ float x, y;
+ float bound = (1 + 0.5 * int(SOFTSHADOWRADIUS > 1.0)) * PCFBOUND; // scale max bound for soft shadows
+ bound = clamp(0.5 * (4.0 * radius - 1.0), 0.5, bound);
+ float scale_factor = radius / bound / f_textureresolution;
+ float n = 0.0;
+
// 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;
+ for (y = -bound; y <= bound; y += 1.0)
+ for (x = -bound; x <= bound; x += 1.0) {
+ clampedpos = vec2(x,y) * scale_factor + smTexCoord.xy;
visibility += getHardShadow(shadowsampler, clampedpos.xy, realDistance);
+ n += 1.0;
}
- return visibility / PCFSAMPLES;
+ return visibility / max(n, 1.0);
}
#endif
@@ -322,12 +361,46 @@ float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
#endif
#endif
+#if ENABLE_TONE_MAPPING
+
+/* Hable's UC2 Tone mapping parameters
+ A = 0.22;
+ B = 0.30;
+ C = 0.10;
+ D = 0.20;
+ E = 0.01;
+ F = 0.30;
+ W = 11.2;
+ equation used: ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F
+*/
+
+vec3 uncharted2Tonemap(vec3 x)
+{
+ return ((x * (0.22 * x + 0.03) + 0.002) / (x * (0.22 * x + 0.3) + 0.06)) - 0.03333;
+}
+
+vec4 applyToneMapping(vec4 color)
+{
+ color = vec4(pow(color.rgb, vec3(2.2)), color.a);
+ const float gamma = 1.6;
+ const float exposureBias = 5.5;
+ color.rgb = uncharted2Tonemap(exposureBias * color.rgb);
+ // Precalculated white_scale from
+ //vec3 whiteScale = 1.0 / uncharted2Tonemap(vec3(W));
+ vec3 whiteScale = vec3(1.036015346);
+ color.rgb *= whiteScale;
+ return vec4(pow(color.rgb, vec3(1.0 / gamma)), color.a);
+}
+#endif
+
+
+
void main(void)
{
vec3 color;
vec2 uv = varTexCoord.st;
- vec4 base = texture2D(baseTexture, uv).rgba;
+ vec4 base = texture2D(baseTexture, uv).rgba;
// 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.
@@ -341,38 +414,65 @@ void main(void)
#endif
color = base.rgb;
- vec4 col = vec4(color.rgb, base.a);
- col.rgb *= varColor.rgb;
- col.rgb *= emissiveColor.rgb * vIDiff;
+ vec4 col = vec4(color.rgb * varColor.rgb, 1.0);
+ col.rgb *= vIDiff;
#ifdef ENABLE_DYNAMIC_SHADOWS
- float shadow_int = 0.0;
- vec3 shadow_color = vec3(0.0, 0.0, 0.0);
- vec3 posLightSpace = getLightSpacePosition();
+ if (f_shadow_strength > 0.0) {
+ float shadow_int = 0.0;
+ vec3 shadow_color = vec3(0.0, 0.0, 0.0);
+ vec3 posLightSpace = getLightSpacePosition();
+
+ float distance_rate = (1.0 - pow(clamp(2.0 * length(posLightSpace.xy - 0.5),0.0,1.0), 10.0));
+ if (max(abs(posLightSpace.x - 0.5), abs(posLightSpace.y - 0.5)) > 0.5)
+ distance_rate = 0.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;
+ vec4 visibility;
+ if (cosLight > 0.0 || f_normal_length < 1e-3)
+ 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);
+ if (cosLight > 0.0 || f_normal_length < 1e-3)
+ shadow_int = getShadow(ShadowMapSampler, posLightSpace.xy, posLightSpace.z);
+ else
+ shadow_int = 1.0;
#endif
-
- if (f_normal_length != 0 && cosLight <= 0.001) {
- shadow_int = clamp(shadow_int + 0.5 * abs(cosLight), 0.0, 1.0);
+ 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);
+
+ // Apply self-shadowing when light falls at a narrow angle to the surface
+ // Cosine of the cut-off angle.
+ const float self_shadow_cutoff_cosine = 0.14;
+ if (f_normal_length != 0 && cosLight < self_shadow_cutoff_cosine) {
+ shadow_int = max(shadow_int, 1 - clamp(cosLight, 0.0, self_shadow_cutoff_cosine)/self_shadow_cutoff_cosine);
+ shadow_color = mix(vec3(0.0), shadow_color, min(cosLight, self_shadow_cutoff_cosine)/self_shadow_cutoff_cosine);
+ }
+
+ 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
}
-
- 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
@@ -389,6 +489,7 @@ void main(void)
float clarity = clamp(fogShadingParameter
- fogShadingParameter * length(eyeVec) / fogDistance, 0.0, 1.0);
col = mix(skyBgColor, col, clarity);
+ col = vec4(col.rgb, base.a);
- gl_FragColor = vec4(col.rgb, base.a);
+ gl_FragColor = col;
}
diff --git a/client/shaders/object_shader/opengl_vertex.glsl b/client/shaders/object_shader/opengl_vertex.glsl
index f135ab9dc..dc9c70cdf 100644
--- a/client/shaders/object_shader/opengl_vertex.glsl
+++ b/client/shaders/object_shader/opengl_vertex.glsl
@@ -1,7 +1,10 @@
uniform mat4 mWorld;
-
+uniform vec3 dayLight;
uniform vec3 eyePosition;
uniform float animationTimer;
+uniform vec4 emissiveColor;
+uniform vec3 cameraOffset;
+
varying vec3 vNormal;
varying vec3 vPosition;
@@ -21,19 +24,54 @@ centroid varying vec2 varTexCoord;
uniform float f_shadowfar;
uniform float f_shadow_strength;
uniform float f_timeofday;
+ uniform vec4 CameraPos;
+
varying float cosLight;
- varying float normalOffsetScale;
varying float adj_shadow_strength;
varying float f_normal_length;
+ varying vec3 shadow_position;
+ varying float perspective_factor;
#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);
varying float vIDiff;
-
const float e = 2.718281828459;
const float BS = 10.0;
+uniform float xyPerspectiveBias0;
+uniform float xyPerspectiveBias1;
+uniform float zPerspectiveBias;
#ifdef ENABLE_DYNAMIC_SHADOWS
+
+vec4 getRelativePosition(in vec4 position)
+{
+ vec2 l = position.xy - CameraPos.xy;
+ vec2 s = l / abs(l);
+ s = (1.0 - s * CameraPos.xy);
+ l /= s;
+ return vec4(l, s);
+}
+
+float getPerspectiveFactor(in vec4 relativePosition)
+{
+ float pDistance = length(relativePosition.xy);
+ float pFactor = pDistance * xyPerspectiveBias0 + xyPerspectiveBias1;
+ return pFactor;
+}
+
+vec4 applyPerspectiveDistortion(in vec4 position)
+{
+ vec4 l = getRelativePosition(position);
+ float pFactor = getPerspectiveFactor(l);
+ l.xy /= pFactor;
+ position.xy = l.xy * l.zw + CameraPos.xy;
+ position.z *= zPerspectiveBias;
+ return position;
+}
+
// 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)
@@ -60,7 +98,7 @@ void main(void)
gl_Position = mWorldViewProj * inVertexPosition;
vPosition = gl_Position.xyz;
- vNormal = inVertexNormal;
+ vNormal = (mWorld * vec4(inVertexNormal, 0.0)).xyz;
worldPosition = (mWorld * inVertexPosition).xyz;
eyeVec = -(mWorldView * inVertexPosition).xyz;
@@ -75,29 +113,69 @@ void main(void)
#endif
#ifdef GL_ES
- varColor = inVertexColor.bgra;
+ vec4 color = inVertexColor.bgra;
#else
- varColor = inVertexColor;
+ vec4 color = inVertexColor;
#endif
-#ifdef ENABLE_DYNAMIC_SHADOWS
+ color *= emissiveColor;
- 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);
+ // The alpha gives the ratio of sunlight in the incoming light.
+ nightRatio = 1.0 - color.a;
+ color.rgb = color.rgb * (color.a * dayLight.rgb +
+ nightRatio * artificialLight.rgb) * 2.0;
+ color.a = 1.0;
+ // Emphase blue a bit in darker places
+ // See C++ implementation in mapblock_mesh.cpp final_color_blend()
+ float brightness = (color.r + color.g + color.b) / 3.0;
+ color.b += max(0.0, 0.021 - abs(0.2 * brightness - 0.021) +
+ 0.07 * brightness);
+
+ varColor = clamp(color, 0.0, 1.0);
+
+
+#ifdef ENABLE_DYNAMIC_SHADOWS
+ if (f_shadow_strength > 0.0) {
+ vec3 nNormal = normalize(vNormal);
+ f_normal_length = length(vNormal);
+
+ /* normalOffsetScale is in world coordinates (1/10th of a meter)
+ z_bias is in light space coordinates */
+ float normalOffsetScale, z_bias;
+ float pFactor = getPerspectiveFactor(getRelativePosition(m_ShadowViewProj * mWorld * inVertexPosition));
+ if (f_normal_length > 0.0) {
+ nNormal = normalize(vNormal);
+ cosLight = dot(nNormal, -v_LightDirection);
+ float sinLight = pow(1 - pow(cosLight, 2.0), 0.5);
+ normalOffsetScale = 0.1 * pFactor * pFactor * sinLight * min(f_shadowfar, 500.0) /
+ xyPerspectiveBias1 / f_textureresolution;
+ z_bias = 1e3 * sinLight / cosLight * (0.5 + f_textureresolution / 1024.0);
+ }
+ else {
+ nNormal = vec3(0.0);
+ cosLight = clamp(dot(v_LightDirection, normalize(vec3(v_LightDirection.x, 0.0, v_LightDirection.z))), 1e-2, 1.0);
+ float sinLight = pow(1 - pow(cosLight, 2.0), 0.5);
+ normalOffsetScale = 0.0;
+ z_bias = 3.6e3 * sinLight / cosLight;
+ }
+ z_bias *= pFactor * pFactor / f_textureresolution / f_shadowfar;
+
+ shadow_position = applyPerspectiveDistortion(m_ShadowViewProj * mWorld * (inVertexPosition + vec4(normalOffsetScale * nNormal, 0.0))).xyz;
+ shadow_position.z -= z_bias;
+ perspective_factor = pFactor;
+
+ 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));
+ }
+ }
#endif
}
diff --git a/client/shaders/shadow_shaders/pass1_trans_vertex.glsl b/client/shaders/shadow_shaders/pass1_trans_vertex.glsl
index 0a9efe450..244d2562a 100644
--- a/client/shaders/shadow_shaders/pass1_trans_vertex.glsl
+++ b/client/shaders/shadow_shaders/pass1_trans_vertex.glsl
@@ -1,28 +1,45 @@
uniform mat4 LightMVP; // world matrix
+uniform vec4 CameraPos;
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;
+uniform float xyPerspectiveBias0;
+uniform float xyPerspectiveBias1;
+uniform float zPerspectiveBias;
-vec4 getPerspectiveFactor(in vec4 shadowPosition)
+vec4 getRelativePosition(in vec4 position)
{
- float pDistance = length(shadowPosition.xy);
- float pFactor = pDistance * bias0 + bias1;
- shadowPosition.xyz *= vec3(vec2(1.0 / pFactor), zPersFactor);
+ vec2 l = position.xy - CameraPos.xy;
+ vec2 s = l / abs(l);
+ s = (1.0 - s * CameraPos.xy);
+ l /= s;
+ return vec4(l, s);
+}
- return shadowPosition;
+float getPerspectiveFactor(in vec4 relativePosition)
+{
+ float pDistance = length(relativePosition.xy);
+ float pFactor = pDistance * xyPerspectiveBias0 + xyPerspectiveBias1;
+ return pFactor;
}
+vec4 applyPerspectiveDistortion(in vec4 position)
+{
+ vec4 l = getRelativePosition(position);
+ float pFactor = getPerspectiveFactor(l);
+ l.xy /= pFactor;
+ position.xy = l.xy * l.zw + CameraPos.xy;
+ position.z *= zPerspectiveBias;
+ return position;
+}
void main()
{
vec4 pos = LightMVP * gl_Vertex;
- tPos = getPerspectiveFactor(LightMVP * gl_Vertex);
+ tPos = applyPerspectiveDistortion(LightMVP * gl_Vertex);
gl_Position = vec4(tPos.xyz, 1.0);
gl_TexCoord[0].st = gl_MultiTexCoord0.st;
diff --git a/client/shaders/shadow_shaders/pass1_vertex.glsl b/client/shaders/shadow_shaders/pass1_vertex.glsl
index a6d8b3db8..1dceb93c6 100644
--- a/client/shaders/shadow_shaders/pass1_vertex.glsl
+++ b/client/shaders/shadow_shaders/pass1_vertex.glsl
@@ -1,26 +1,43 @@
uniform mat4 LightMVP; // world matrix
+uniform vec4 CameraPos; // camera position
varying vec4 tPos;
-const float bias0 = 0.9;
-const float zPersFactor = 0.5;
-const float bias1 = 1.0 - bias0 + 1e-6;
+uniform float xyPerspectiveBias0;
+uniform float xyPerspectiveBias1;
+uniform float zPerspectiveBias;
-vec4 getPerspectiveFactor(in vec4 shadowPosition)
+vec4 getRelativePosition(in vec4 position)
{
- float pDistance = length(shadowPosition.xy);
- float pFactor = pDistance * bias0 + bias1;
- shadowPosition.xyz *= vec3(vec2(1.0 / pFactor), zPersFactor);
+ vec2 l = position.xy - CameraPos.xy;
+ vec2 s = l / abs(l);
+ s = (1.0 - s * CameraPos.xy);
+ l /= s;
+ return vec4(l, s);
+}
- return shadowPosition;
+float getPerspectiveFactor(in vec4 relativePosition)
+{
+ float pDistance = length(relativePosition.xy);
+ float pFactor = pDistance * xyPerspectiveBias0 + xyPerspectiveBias1;
+ return pFactor;
}
+vec4 applyPerspectiveDistortion(in vec4 position)
+{
+ vec4 l = getRelativePosition(position);
+ float pFactor = getPerspectiveFactor(l);
+ l.xy /= pFactor;
+ position.xy = l.xy * l.zw + CameraPos.xy;
+ position.z *= zPerspectiveBias;
+ return position;
+}
void main()
{
vec4 pos = LightMVP * gl_Vertex;
- tPos = getPerspectiveFactor(pos);
+ tPos = applyPerspectiveDistortion(pos);
gl_Position = vec4(tPos.xyz, 1.0);
- gl_TexCoord[0].st = gl_MultiTexCoord0.st;
+ gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
}
diff --git a/clientmods/preview/init.lua b/clientmods/preview/init.lua
index 977ed0ec3..46d59ec9a 100644
--- a/clientmods/preview/init.lua
+++ b/clientmods/preview/init.lua
@@ -165,6 +165,9 @@ core.after(5, function()
print("[PREVIEW] Find node near: " .. dump(core.find_node_near({x=0, y=20, z=0}, 10,
{"group:tree", "default:dirt", "default:stone"})))
+
+ print("[PREVIEW] Settings: preview_csm_test_setting = " ..
+ tostring(core.settings:get_bool("preview_csm_test_setting", false)))
end)
core.register_on_dignode(function(pos, node)
diff --git a/clientmods/preview/mod.conf b/clientmods/preview/mod.conf
index 4e56ec293..23a5c3e90 100644
--- a/clientmods/preview/mod.conf
+++ b/clientmods/preview/mod.conf
@@ -1 +1 @@
-name = preview
+name = preview
diff --git a/clientmods/preview/settingtypes.txt b/clientmods/preview/settingtypes.txt
new file mode 100644
index 000000000..fea9e71f3
--- /dev/null
+++ b/clientmods/preview/settingtypes.txt
@@ -0,0 +1 @@
+preview_csm_test_setting (Test CSM setting) bool false \ No newline at end of file
diff --git a/cmake/Modules/FindOpenGLES2.cmake b/cmake/Modules/FindOpenGLES2.cmake
deleted file mode 100644
index ce04191dd..000000000
--- a/cmake/Modules/FindOpenGLES2.cmake
+++ /dev/null
@@ -1,73 +0,0 @@
-#-------------------------------------------------------------------
-# The contents of this file are placed in the public domain. Feel
-# free to make use of it in any way you like.
-#-------------------------------------------------------------------
-
-# - Try to find OpenGLES and EGL
-# Once done this will define
-#
-# OPENGLES2_FOUND - system has OpenGLES
-# OPENGLES2_INCLUDE_DIR - the GL include directory
-# OPENGLES2_LIBRARIES - Link these to use OpenGLES
-#
-# EGL_FOUND - system has EGL
-# EGL_INCLUDE_DIR - the EGL include directory
-# EGL_LIBRARIES - Link these to use EGL
-
-# Win32 and Apple are not tested!
-# Linux tested and works
-
-if(WIN32)
- find_path(OPENGLES2_INCLUDE_DIR GLES2/gl2.h)
- find_library(OPENGLES2_LIBRARY libGLESv2)
-elseif(APPLE)
- create_search_paths(/Developer/Platforms)
- findpkg_framework(OpenGLES2)
- set(OPENGLES2_LIBRARY "-framework OpenGLES")
-else()
- # Unix
- find_path(OPENGLES2_INCLUDE_DIR GLES2/gl2.h
- PATHS /usr/openwin/share/include
- /opt/graphics/OpenGL/include
- /usr/X11R6/include
- /usr/include
- )
-
- find_library(OPENGLES2_LIBRARY
- NAMES GLESv2
- PATHS /opt/graphics/OpenGL/lib
- /usr/openwin/lib
- /usr/X11R6/lib
- /usr/lib
- )
-
- include(FindPackageHandleStandardArgs)
- 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
- /opt/graphics/OpenGL/include
- /usr/X11R6/include
- /usr/include
- )
-
- find_library(EGL_LIBRARY
- NAMES EGL
- PATHS /opt/graphics/OpenGL/lib
- /usr/openwin/lib
- /usr/X11R6/lib
- /usr/lib
- )
-
- find_package_handle_standard_args(EGL DEFAULT_MSG EGL_LIBRARY EGL_INCLUDE_DIR)
-endif()
-
-set(OPENGLES2_LIBRARIES ${OPENGLES2_LIBRARY})
-set(EGL_LIBRARIES ${EGL_LIBRARY})
-
-mark_as_advanced(
- OPENGLES2_INCLUDE_DIR
- OPENGLES2_LIBRARY
- EGL_INCLUDE_DIR
- EGL_LIBRARY
-)
diff --git a/cmake/Modules/FindSQLite3.cmake b/cmake/Modules/FindSQLite3.cmake
index b23553a80..8a66cb241 100644
--- a/cmake/Modules/FindSQLite3.cmake
+++ b/cmake/Modules/FindSQLite3.cmake
@@ -1,4 +1,4 @@
-mark_as_advanced(SQLITE3_LIBRARY SQLITE3_INCLUDE_DIR)
+mark_as_advanced(SQLITE3_LIBRARY SQLITE3_INCLUDE_DIR)
find_path(SQLITE3_INCLUDE_DIR sqlite3.h)
diff --git a/cmake/Modules/FindVorbis.cmake b/cmake/Modules/FindVorbis.cmake
index e5fe7f25e..222ddd9d5 100644
--- a/cmake/Modules/FindVorbis.cmake
+++ b/cmake/Modules/FindVorbis.cmake
@@ -29,18 +29,17 @@ else(NOT GP2XWIZ)
find_package_handle_standard_args(Vorbis DEFAULT_MSG
VORBIS_INCLUDE_DIR VORBIS_LIBRARY)
endif(NOT GP2XWIZ)
-
+
if(VORBIS_FOUND)
- if(NOT GP2XWIZ)
- set(VORBIS_LIBRARIES ${VORBISFILE_LIBRARY} ${VORBIS_LIBRARY}
- ${OGG_LIBRARY})
- else(NOT GP2XWIZ)
- set(VORBIS_LIBRARIES ${VORBIS_LIBRARY})
- endif(NOT GP2XWIZ)
+ if(NOT GP2XWIZ)
+ set(VORBIS_LIBRARIES ${VORBISFILE_LIBRARY} ${VORBIS_LIBRARY}
+ ${OGG_LIBRARY})
+ else(NOT GP2XWIZ)
+ set(VORBIS_LIBRARIES ${VORBIS_LIBRARY})
+ endif(NOT GP2XWIZ)
else(VORBIS_FOUND)
- set(VORBIS_LIBRARIES)
+ set(VORBIS_LIBRARIES)
endif(VORBIS_FOUND)
mark_as_advanced(OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR)
mark_as_advanced(OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY)
-
diff --git a/cmake/Modules/MinetestFindIrrlichtHeaders.cmake b/cmake/Modules/MinetestFindIrrlichtHeaders.cmake
index d33b296d0..e434b582f 100644
--- a/cmake/Modules/MinetestFindIrrlichtHeaders.cmake
+++ b/cmake/Modules/MinetestFindIrrlichtHeaders.cmake
@@ -1,21 +1,13 @@
-# Locate Irrlicht or IrrlichtMt headers on system.
+# Locate 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()
+find_path(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h
+ DOC "Path to the directory with IrrlichtMt includes"
+ PATHS
+ /usr/local/include/irrlichtmt
+ /usr/include/irrlichtmt
+ /system/develop/headers/irrlichtmt #Haiku
+ PATH_SUFFIXES "include/irrlichtmt"
+)
# Handholding for users
if(IRRLICHT_INCLUDE_DIR AND (NOT IS_DIRECTORY "${IRRLICHT_INCLUDE_DIR}" OR
diff --git a/doc/breakages.md b/doc/breakages.md
new file mode 100644
index 000000000..f7078f1e9
--- /dev/null
+++ b/doc/breakages.md
@@ -0,0 +1,8 @@
+# Minetest Major Breakages List
+
+This document contains a list of breaking changes to be made in the next major version.
+
+* Remove attachment space multiplier (*10)
+* `get_sky()` returns a table (without arg)
+* `game.conf` name/id mess
+* remove `depends.txt` / `description.txt` (would simplify ContentDB and Minetest code a little)
diff --git a/doc/client_lua_api.txt b/doc/client_lua_api.txt
index 32be8c849..8a450ba13 100644
--- a/doc/client_lua_api.txt
+++ b/doc/client_lua_api.txt
@@ -1,4 +1,4 @@
-Minetest Lua Client Modding API Reference 5.5.0
+Minetest Lua Client Modding API Reference 5.6.0
================================================
* More information at <http://www.minetest.net/>
* Developer Wiki: <http://dev.minetest.net/>
@@ -580,6 +580,7 @@ Spatial Vectors
* `vector.floor(v)`: returns a vector, each dimension rounded down
* `vector.round(v)`: returns a vector, each dimension rounded to nearest int
* `vector.apply(v, func)`: returns a vector
+* `vector.combine(v, w, func)`: returns a vector
* `vector.equals(v1, v2)`: returns a boolean
For the following functions `x` can be either a vector or a number:
@@ -937,6 +938,14 @@ Call these functions only at load time!
* `minetest.display_chat_message(message)` returns true on success
* Shows a chat message to the current player.
+Setting-related
+---------------
+
+* `minetest.settings`: Settings object containing all of the settings from the
+ main config file (`minetest.conf`). Check lua_api.txt for class reference.
+* `minetest.setting_get_pos(name)`: Loads a setting from the main settings and
+ parses it as a position (in the format `(1,2,3)`). Returns a position or nil.
+
Class reference
---------------
diff --git a/doc/lgpl-2.1.txt b/doc/lgpl-2.1.txt
index 4362b4915..e5ab03e12 100644
--- a/doc/lgpl-2.1.txt
+++ b/doc/lgpl-2.1.txt
@@ -55,7 +55,7 @@ modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
-
+
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
@@ -111,7 +111,7 @@ modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
-
+
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@@ -158,7 +158,7 @@ Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
-
+
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
@@ -216,7 +216,7 @@ instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
-
+
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
@@ -267,7 +267,7 @@ Library will still fall under Section 6.)
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
-
+
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
@@ -329,7 +329,7 @@ restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
-
+
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
@@ -370,7 +370,7 @@ subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
-
+
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
@@ -422,7 +422,7 @@ conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
-
+
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
@@ -456,7 +456,7 @@ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
-
+
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index faaed55e1..9e1633a14 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -35,19 +35,16 @@ the `init.lua` scripts in a shared environment.
Paths
-----
-* `RUN_IN_PLACE=1` (Windows release, local build)
- * `$path_user`: `<build directory>`
- * `$path_share`: `<build directory>`
-* `RUN_IN_PLACE=0`: (Linux release)
- * `$path_share`:
- * Linux: `/usr/share/minetest`
- * Windows: `<install directory>/minetest-0.4.x`
- * `$path_user`:
- * Linux: `$HOME/.minetest`
- * Windows: `C:/users/<user>/AppData/minetest` (maybe)
-
+Minetest keeps and looks for files mostly in two paths. `path_share` or `path_user`.
+`path_share` contains possibly read-only content for the engine (incl. games and mods).
+`path_user` contains mods or games installed by the user but also the users
+worlds or settings.
+With a local build (`RUN_IN_PLACE=1`) `path_share` and `path_user` both point to
+the build directory. For system-wide builds on Linux the share path is usually at
+`/usr/share/minetest` while the user path resides in `.minetest` in the home directory.
+Paths on other operating systems will differ.
Games
=====
@@ -62,7 +59,8 @@ Where `<gameid>` is unique to each game.
The game directory can contain the following files:
* `game.conf`, with the following keys:
- * `name`: Required, a human readable title to address the game, e.g. `name = Minetest`.
+ * `title`: Required, a human-readable title to address the game, e.g. `title = Minetest Game`.
+ * `name`: (Deprecated) same as title.
* `description`: Short description to be shown in the content tab
* `allowed_mapgens = <comma-separated mapgens>`
e.g. `allowed_mapgens = v5,v6,flat`
@@ -78,7 +76,7 @@ The game directory can contain the following files:
* `disallowed_mapgen_settings= <comma-separated mapgen settings>`
e.g. `disallowed_mapgen_settings = mgv5_spflags`
These mapgen settings are hidden for this game in the world creation
- dialog and game start menu.
+ dialog and game start menu. Add `seed` to hide the seed input field.
* `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
@@ -213,8 +211,6 @@ A `Settings` file that provides meta information about the mod.
internal ID used to track versions.
* `title`: A human-readable title to address the mod.
-Note: to support 0.4.x, please also provide depends.txt.
-
### `screenshot.png`
A screenshot shown in the mod manager within the main menu. It should
@@ -303,8 +299,8 @@ Any mod can redefine `experimental:tnt` by using the name
:experimental:tnt
-when registering it. That mod is required to have `experimental` as a
-dependency.
+when registering it. For this to work correctly, that mod must have
+`experimental` as a dependency.
@@ -345,9 +341,9 @@ of the game's nodes are to be used for core mapgen generation. For example:
#### Essential aliases
-* mapgen_stone
-* mapgen_water_source
-* mapgen_river_water_source
+* `mapgen_stone`
+* `mapgen_water_source`
+* `mapgen_river_water_source`
`mapgen_river_water_source` is required for mapgens with sloping rivers where
it is necessary to have a river liquid node with a short `liquid_range` and
@@ -355,50 +351,56 @@ it is necessary to have a river liquid node with a short `liquid_range` and
#### Optional aliases
-* mapgen_lava_source
+* `mapgen_lava_source`
Fallback lava node used if cave liquids are not defined in biome definitions.
-Deprecated for non-V6 mapgens, define cave liquids in biome definitions instead.
+Deprecated, define cave liquids in biome definitions instead.
-* mapgen_cobble
+* `mapgen_cobble`
Fallback node used if dungeon nodes are not defined in biome definitions.
-Deprecated for non-V6 mapgens, define dungeon nodes in biome definitions instead.
-
-### Aliases needed for Mapgen V6
-
-* mapgen_stone
-* mapgen_water_source
-* mapgen_lava_source
-* mapgen_dirt
-* mapgen_dirt_with_grass
-* mapgen_sand
-* mapgen_gravel
-* mapgen_desert_stone
-* mapgen_desert_sand
-* mapgen_dirt_with_snow
-* mapgen_snowblock
-* mapgen_snow
-* mapgen_ice
-
-* mapgen_tree
-* mapgen_leaves
-* mapgen_apple
-* mapgen_jungletree
-* mapgen_jungleleaves
-* mapgen_junglegrass
-* mapgen_pine_tree
-* mapgen_pine_needles
-
-* mapgen_cobble
-* mapgen_stair_cobble
-* mapgen_mossycobble
-* mapgen_stair_desert_stone
+Deprecated, define dungeon nodes in biome definitions instead.
+
+### Aliases for Mapgen V6
+
+#### Essential
+
+* `mapgen_stone`
+* `mapgen_water_source`
+* `mapgen_lava_source`
+* `mapgen_dirt`
+* `mapgen_dirt_with_grass`
+* `mapgen_sand`
+
+* `mapgen_tree`
+* `mapgen_leaves`
+* `mapgen_apple`
+
+* `mapgen_cobble`
+
+#### Optional
+
+* `mapgen_gravel` (falls back to stone)
+* `mapgen_desert_stone` (falls back to stone)
+* `mapgen_desert_sand` (falls back to sand)
+* `mapgen_dirt_with_snow` (falls back to dirt_with_grass)
+* `mapgen_snowblock` (falls back to dirt_with_grass)
+* `mapgen_snow` (not placed if missing)
+* `mapgen_ice` (falls back to water_source)
+
+* `mapgen_jungletree` (falls back to tree)
+* `mapgen_jungleleaves` (falls back to leaves)
+* `mapgen_junglegrass` (not placed if missing)
+* `mapgen_pine_tree` (falls back to tree)
+* `mapgen_pine_needles` (falls back to leaves)
+
+* `mapgen_stair_cobble` (falls back to cobble)
+* `mapgen_mossycobble` (falls back to cobble)
+* `mapgen_stair_desert_stone` (falls backto desert_stone)
### Setting the node used in Mapgen Singlenode
-By default the world is filled with air nodes. To set a different node use, for
-example:
+By default the world is filled with air nodes. To set a different node use e.g.:
minetest.register_alias("mapgen_singlenode", "default:stone")
@@ -419,6 +421,9 @@ stripping out the file extension:
* e.g. `foomod_foothing.png`
* e.g. `foomod_foothing`
+Supported texture formats are PNG (`.png`), JPEG (`.jpg`), Bitmap (`.bmp`)
+and Targa (`.tga`).
+Since better alternatives exist, the latter two may be removed in the future.
Texture modifiers
-----------------
@@ -981,15 +986,10 @@ Example:
All nodes register with `minetest.register_node` get added to the table
`minetest.registered_nodes`.
-If you want to check the drawtype of a node, you could do:
+If you want to check the drawtype of a node, you could do it like this:
- local function get_nodedef_field(nodename, fieldname)
- if not minetest.registered_nodes[nodename] then
- return nil
- end
- return minetest.registered_nodes[nodename][fieldname]
- end
- local drawtype = get_nodedef_field(nodename, "drawtype")
+ local def = minetest.registered_nodes[nodename]
+ local drawtype = def and def.drawtype
@@ -1191,7 +1191,7 @@ 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 `paramtype2="[color]wallmounted":
+ * 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`.
@@ -1203,7 +1203,7 @@ Look for examples in `games/devtest` or `games/minetest_game`.
* `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="[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.
@@ -1388,11 +1388,10 @@ HUD element types
-----------------
The position field is used for all element types.
-
To account for differing resolutions, the position coordinates are the
percentage of the screen, ranging in value from `0` to `1`.
-The name field is not yet used, but should contain a description of what the
+The `name` field is not yet used, but should contain a description of what the
HUD element represents.
The `direction` field is the direction in which something is drawn.
@@ -1425,10 +1424,9 @@ Supports negative values. By convention, the following values are recommended:
* 100: Temporary text messages or notification icons
* 1000: Full-screen effects such as full-black screen or credits.
This includes effects that cover the entire screen
-* Other: If your HUD element doesn't fit into any category, pick a number
- between the suggested values
-
+If your HUD element doesn't fit into any category, pick a number
+between the suggested values
Below are the specific uses for fields in each type; fields not listed for that
type are ignored.
@@ -1458,6 +1456,8 @@ Displays text on the HUD.
* `offset`: offset in pixels from position.
* `size`: size of the text.
The player-set font size is multiplied by size.x (y value isn't used).
+* `style`: determines font style
+ Bitfield with 1 = bold, 2 = italic, 4 = monospace
### `statbar`
@@ -1480,7 +1480,7 @@ Displays a horizontal bar made up of half-images with an optional background.
* `text`: The name of the inventory list to be displayed.
* `number`: Number of items in the inventory to be displayed.
* `item`: Position of item that is selected.
-* `direction`
+* `direction`: Direction the list will be displayed in
* `offset`: offset in pixels from position.
### `waypoint`
@@ -1524,7 +1524,7 @@ Displays an image oriented or translated according to current heading direction.
* `text`: The name of the texture to use.
* `alignment`: The alignment of the image.
* `offset`: Offset in pixels from position.
-* `dir`: How the image is rotated/translated:
+* `direction`: How the image is rotated/translated:
* 0 - Rotate as heading direction
* 1 - Rotate in reverse direction
* 2 - Translate as landscape direction
@@ -1544,15 +1544,12 @@ Displays a minimap on the HUD.
Representations of simple things
================================
-Position/vector
----------------
-
- {x=num, y=num, z=num}
+Vector (ie. a position)
+-----------------------
- Note: it is highly recommended to construct a vector using the helper function:
- vector.new(num, num, num)
+ vector.new(x, y, z)
-For helper functions see [Spatial Vectors].
+See [Spatial Vectors] for details.
`pointed_thing`
---------------
@@ -1573,8 +1570,7 @@ Exact pointing location (currently only `Raycast` supports these fields):
from 1).
* `pointed_thing.intersection_normal`: Unit vector, points outwards of the
selected selection box. This specifies which face is pointed at.
- Is a null vector `{x = 0, y = 0, z = 0}` when the pointer is inside the
- selection box.
+ Is a null vector `vector.zero()` when the pointer is inside the selection box.
@@ -1676,17 +1672,43 @@ these formats.
### Serialized
This is called "stackstring" or "itemstring". It is a simple string with
-1-3 components: the full item identifier, an optional amount and an optional
-wear value. Syntax:
+1-4 components:
+
+1. Full item identifier ("item name")
+2. Optional amount
+3. Optional wear value
+4. Optional item metadata
- <identifier> [<amount>[ <wear>]]
+Syntax:
+
+ <identifier> [<amount>[ <wear>[ <metadata>]]]
Examples:
-* `'default:apple'`: 1 apple
-* `'default:dirt 5'`: 5 dirt
-* `'default:pick_stone'`: a new stone pickaxe
-* `'default:pick_wood 1 21323'`: a wooden pickaxe, ca. 1/3 worn out
+* `"default:apple"`: 1 apple
+* `"default:dirt 5"`: 5 dirt
+* `"default:pick_stone"`: a new stone pickaxe
+* `"default:pick_wood 1 21323"`: a wooden pickaxe, ca. 1/3 worn out
+* `[[default:pick_wood 1 21323 "\u0001description\u0002My worn out pick\u0003"]]`:
+ * a wooden pickaxe from the `default` mod,
+ * amount must be 1 (pickaxe is a tool), ca. 1/3 worn out (it's a tool),
+ * with the `description` field set to `"My worn out pick"` in its metadata
+* `[[default:dirt 5 0 "\u0001description\u0002Special dirt\u0003"]]`:
+ * analogeous to the above example
+ * note how the wear is set to `0` as dirt is not a tool
+
+You should ideally use the `ItemStack` format to build complex item strings
+(especially if they use item metadata)
+without relying on the serialization format. Example:
+
+ local stack = ItemStack("default:pick_wood")
+ stack:set_wear(21323)
+ stack:get_meta():set_string("description", "My worn out pick")
+ local itemstring = stack:to_string()
+
+Additionally the methods `minetest.itemstring_with_palette(item, palette_index)`
+and `minetest.itemstring_with_color(item, colorstring)` may be used to create
+item strings encoding color information in their metadata.
### Table format
@@ -1776,21 +1798,20 @@ Groups in crafting recipes
An example: Make meat soup from any meat, any water and any bowl:
{
- output = 'food:meat_soup_raw',
+ output = "food:meat_soup_raw",
recipe = {
- {'group:meat'},
- {'group:water'},
- {'group:bowl'},
+ {"group:meat"},
+ {"group:water"},
+ {"group:bowl"},
},
- -- preserve = {'group:bowl'}, -- Not implemented yet (TODO)
}
Another example: Make red wool from white wool and red dye:
{
- type = 'shapeless',
- output = 'wool:red',
- recipe = {'wool:white', 'group:dye,basecolor_red'},
+ type = "shapeless",
+ output = "wool:red",
+ recipe = {"wool:white", "group:dye,basecolor_red"},
}
Special groups
@@ -1944,21 +1965,21 @@ Tool capabilities define:
* Damage groups
* Punch attack uses (until the tool breaks)
-### Full punch interval
+### Full punch interval `full_punch_interval`
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
+### Maximum drop level `max_drop_level`
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.
+This value is not used in the engine; it is the responsibility of the game/mod
+code to implement this.
-### Uses (tools only)
+### 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. The maximum supported number of
@@ -1973,17 +1994,17 @@ node's `level` group. The node cannot be dug if `leveldiff` is less than zero.
For non-tools, this has no effect.
-### Maximum level
+### Maximum level `maxlevel`
Tells what is the maximum level of a node of this group that the item will
be able to dig.
-### Digging times
+### Digging times `times`
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
+For example, as a Lua table, `times={[2]=2.00, [3]=0.70}`. This would
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.
@@ -2011,12 +2032,9 @@ Example definition of the capabilities of an item
-------------------------------------------------
tool_capabilities = {
- full_punch_interval=1.5,
- max_drop_level=1,
groupcaps={
crumbly={maxlevel=2, uses=20, times={[1]=1.60, [2]=1.20, [3]=0.80}}
- }
- damage_groups = {fleshy=2},
+ },
}
This makes the item capable of digging nodes that fulfil both of these:
@@ -2174,6 +2192,13 @@ Some of the values in the key-value store are handled specially:
* `color`: A `ColorString`, which sets the stack's color.
* `palette_index`: If the item has a palette, this is used to get the
current color from the palette.
+* `count_meta`: Replace the displayed count with any string.
+* `count_alignment`: Set the alignment of the displayed count value. This is an
+ int value. The lowest 2 bits specify the alignment in x-direction, the 3rd and
+ 4th bit specify the alignment in y-direction:
+ 0 = default, 1 = left / up, 2 = middle, 3 = right / down
+ The default currently is the same as right/down.
+ Example: 6 = 2 + 1*4 = middle,up
Example:
@@ -2230,7 +2255,7 @@ player named `<name>`.
When displaying text which can contain formspec code, e.g. text set by a player,
use `minetest.formspec_escape`.
-For coloured text you can use `minetest.colorize`.
+For colored text you can use `minetest.colorize`.
Since formspec version 3, elements drawn in the order they are defined. All
background elements are drawn before all other elements.
@@ -2285,6 +2310,8 @@ Version History
* Allow dropdown indexing events
* Formspec version 5 (5.5.0):
* Added padding[] element
+* Formspec version 6 (5.6.0):
+ * Add nine-slice images, animated_image, and fgimg_middle
Elements
--------
@@ -2388,24 +2415,26 @@ Elements
* End of a scroll_container, following elements are no longer bound to this
container.
-### `list[<inventory location>;<list name>;<X>,<Y>;<W>,<H>;]`
+### `list[<inventory location>;<list name>;<X>,<Y>;<W>,<H>;<starting item index>]`
-* Show an inventory list if it has been sent to the client. Nothing will
- be shown if the inventory list is of size 0.
+* Show an inventory list if it has been sent to the client.
+* If the inventory list changes (eg. it didn't exist before, it's resized, or its items
+ are moved) while the formspec is open, the formspec element may (but is not guaranteed
+ to) adapt to the new inventory list.
+* Item slots are drawn in a grid from left to right, then up to down, ordered
+ according to the slot index.
+* `W` and `H` are in inventory slots, not in coordinates.
+* `starting item index` (Optional): The index of the first (upper-left) item to draw.
+ Indices start at `0`. Default is `0`.
+* The number of shown slots is the minimum of `W*H` and the inventory list's size minus
+ `starting item index`.
* **Note**: With the new coordinate system, the spacing between inventory
slots is one-fourth the size of an inventory slot by default. Also see
[Styling Formspecs] for changing the size of slots and spacing.
-### `list[<inventory location>;<list name>;<X>,<Y>;<W>,<H>;<starting item index>]`
-
-* Show an inventory list if it has been sent to the client. Nothing will
- be shown if the inventory list is of size 0.
-* **Note**: With the new coordinate system, the spacing between inventory
- slots is one-fourth the size of an inventory slot.
-
### `listring[<inventory location>;<list name>]`
-* Allows to create a ring of inventory lists
+* Appends to an internal ring of inventory lists.
* Shift-clicking on items in one element of the ring
will send them to the next inventory list inside the ring
* The first occurrence of an element inside the ring will
@@ -2447,20 +2476,25 @@ Elements
* `bgcolor` tooltip background color as `ColorString` (optional)
* `fontcolor` tooltip font color as `ColorString` (optional)
-### `image[<X>,<Y>;<W>,<H>;<texture name>]`
+### `image[<X>,<Y>;<W>,<H>;<texture name>;<middle>]`
-* Show an image
+* Show an image.
+* `middle` (optional): Makes the image render in 9-sliced mode and defines the middle rect.
+ * Requires formspec version >= 6.
+ * See `background9[]` documentation for more information.
-### `animated_image[<X>,<Y>;<W>,<H>;<name>;<texture name>;<frame count>;<frame duration>;<frame start>]`
+### `animated_image[<X>,<Y>;<W>,<H>;<name>;<texture name>;<frame count>;<frame duration>;<frame start>;<middle>]`
* Show an animated image. The image is drawn like a "vertical_frames" tile
- animation (See [Tile animation definition]), but uses a frame count/duration
- for simplicity
+ animation (See [Tile animation definition]), but uses a frame count/duration for simplicity
* `name`: Element name to send when an event occurs. The event value is the index of the current frame.
* `texture name`: The image to use.
* `frame count`: The number of frames animating the image.
* `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`.
+* `frame start` (optional): The index of the frame to start on. Default `1`.
+* `middle` (optional): Makes the image render in 9-sliced mode and defines the middle rect.
+ * Requires formspec version >= 6.
+ * See `background9[]` documentation for more information.
### `model[<X>,<Y>;<W>,<H>;<name>;<mesh>;<textures>;<rotation X,Y>;<continuous>;<mouse control>;<frame loop range>;<animation speed>]`
@@ -2518,8 +2552,6 @@ Elements
will be added to the width and height of the texture, allowing it to be used as the
distance from the far end.
* All numbers in middle are integers.
-* Example for formspec 8x4 in 16x resolution:
- image shall be sized 8 times 16px times 4 times 16px
* If `auto_clip` is `true`, the background is clipped to the formspec size
(`x` and `y` are used as offset values, `w` and `h` are ignored)
* Available since formspec version 2
@@ -3076,6 +3108,8 @@ Some types may inherit styles from parent types.
* This is deprecated, use states instead.
* fgimg_pressed - image when pressed. Defaults to fgimg when not provided.
* This is deprecated, use states instead.
+ * fgimg_middle - Makes the fgimg textures render in 9-sliced mode and defines the middle rect.
+ See background9[] documentation for more details.
* NOTE: The parameters of any given image_button will take precedence over fgimg/fgimg_pressed
* sound - a sound to be played when triggered.
* scrollbar
@@ -3243,7 +3277,7 @@ Colors
`#RRGGBBAA` defines a color in hexadecimal format and alpha channel.
Named colors are also supported and are equivalent to
-[CSS Color Module Level 4](http://dev.w3.org/csswg/css-color/#named-colors).
+[CSS Color Module Level 4](https://www.w3.org/TR/css-color-4/#named-color).
To specify the value of the alpha channel, append `#A` or `#AA` to the end of
the color name (e.g. `colorname#08`).
@@ -3294,33 +3328,76 @@ The following functions provide escape sequences:
Spatial Vectors
===============
-A spatial vector is similar to a position, but instead using
-absolute world coordinates, it uses *relative* coordinates, relative to
-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
+
+Minetest stores 3-dimensional spatial vectors in Lua as tables of 3 coordinates,
+and has a class to represent them (`vector.*`), which this chapter is about.
+For details on what a spatial vectors is, please refer to Wikipedia:
+https://en.wikipedia.org/wiki/Euclidean_vector.
+
+Spatial vectors are used for various things, including, but not limited to:
+
+* any 3D spatial vector (x/y/z-directions)
+* Euler angles (pitch/yaw/roll in radians) (Spatial vectors have no real semantic
+ meaning here. Therefore, most vector operations make no sense in this use case.)
+
+Note that they are *not* used for:
+
+* n-dimensional vectors where n is not 3 (ie. n=2)
+* arrays of the form `{num, num, num}`
+
+The API documentation may refer to spatial vectors, as produced by `vector.new`,
+by any of the following notations:
+
+* `(x, y, z)` (Used rarely, and only if it's clear that it's a vector.)
+* `vector.new(x, y, z)`
+* `{x=num, y=num, z=num}` (Even here you are still supposed to use `vector.new`.)
+
+Compatibility notes
+-------------------
+
+Vectors used to be defined as tables of the form `{x = num, y = num, z = num}`.
+Since Minetest 5.5.0, vectors additionally have a metatable to enable easier use.
+Note: Those old-style vectors can still be found in old mod code. Hence, mod and
+engine APIs still need to be able to cope with them in many places.
+
+Manually constructed tables are deprecated and highly discouraged. This interface
+should be used to ensure seamless compatibility between mods and the Minetest API.
+This is especially important to callback function parameters and functions overwritten
+by mods.
+Also, though not likely, the internal implementation of a vector might change in
the future.
-Old code might still use vectors without metatables, be aware of this!
+In your own code, or if you define your own API, you can, of course, still use
+other representations of vectors.
+
+Vectors provided by API functions will provide an instance of this class if not
+stated otherwise. Mods should adapt this for convenience reasons.
+
+Special properties of the class
+-------------------------------
+
+Vectors can be indexed with numbers and allow method and operator syntax.
All these forms of addressing a vector `v` are valid:
`v[1]`, `v[3]`, `v.x`, `v[1] = 42`, `v.y = 13`
+Note: Prefer letter over number indexing for performance and compatibility reasons.
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.
+`tostring` is defined for vectors, see `vector.to_string`.
+
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,
+Common functions and methods
+----------------------------
+
+For the following functions (and subchapters),
+`v`, `v1`, `v2` are vectors,
+`p1`, `p2` are position vectors,
`s` is a scalar (a number),
vectors are written like this: `(x, y, z)`:
@@ -3342,6 +3419,7 @@ vectors are written like this: `(x, y, z)`:
* `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)"`.
+ * `tostring(v)` does the same.
* `vector.direction(p1, p2)`:
* Returns a vector of length 1 with direction `p1` to `p2`.
* If `p1` and `p2` are identical, returns `(0, 0, 0)`.
@@ -3360,6 +3438,9 @@ vectors are written like this: `(x, y, z)`:
* `vector.apply(v, func)`:
* Returns a vector where the function `func` has been applied to each
component.
+* `vector.combine(v, w, func)`:
+ * Returns a vector where the function `func` has combined both components of `v` and `w`
+ for each component
* `vector.equals(v1, v2)`:
* Returns a boolean, `true` if the vectors are identical.
* `vector.sort(v1, v2)`:
@@ -3372,7 +3453,7 @@ vectors are written like this: `(x, y, z)`:
* Returns the cross product of `v1` and `v2`.
* `vector.offset(v, x, y, z)`:
* Returns the sum of the vectors `v` and `(x, y, z)`.
-* `vector.check()`:
+* `vector.check(v)`:
* 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}`.
@@ -3394,6 +3475,9 @@ 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
+---------
+
Operators can be used if all of the involved vectors have metatables:
* `v1 == v2`:
* Returns whether `v1` and `v2` are identical.
@@ -3410,8 +3494,11 @@ Operators can be used if all of the involved vectors have metatables:
* `v / s`:
* Returns `v` scaled by `1 / s`.
+Rotation-related functions
+--------------------------
+
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
+vector (`{x = <pitch>, y = <yaw>, z = <roll>}`) where pitch, yaw and roll are
angles in radians.
* `vector.rotate(v, r)`:
@@ -3428,6 +3515,18 @@ angles in radians.
* If `up` is omitted, the roll of the returned vector defaults to zero.
* Otherwise `direction` and `up` need to be vectors in a 90 degree angle to each other.
+Further helpers
+---------------
+
+There are more helper functions involving vectors, but they are listed elsewhere
+because they only work on specific sorts of vectors or involve things that are not
+vectors.
+
+For example:
+
+* `minetest.hash_node_position` (Only works on node positions.)
+* `minetest.dir_to_wallmounted` (Involves wallmounted param2 values.)
+
@@ -3479,8 +3578,16 @@ Helper functions
* `minetest.string_to_pos(string)`: returns a position or `nil`
* Same but in reverse.
* If the string can't be parsed to a position, nothing is returned.
-* `minetest.string_to_area("(X1, Y1, Z1) (X2, Y2, Z2)")`: returns two positions
+* `minetest.string_to_area("(X1, Y1, Z1) (X2, Y2, Z2)", relative_to)`:
+ * returns two positions
* Converts a string representing an area box into two positions
+ * X1, Y1, ... Z2 are coordinates
+ * `relative_to`: Optional. If set to a position, each coordinate
+ can use the tilde notation for relative positions
+ * Tilde notation: "~": Relative coordinate
+ "~<number>": Relative coordinate plus <number>
+ * Example: `minetest.string_to_area("(1,2,3) (~5,~-5,~)", {x=10,y=10,z=10})`
+ returns `{x=1,y=2,z=3}, {x=15,y=5,z=10}`
* `minetest.formspec_escape(string)`: returns a string
* escapes the characters "[", "]", "\", "," and ";", which can not be used
in formspecs.
@@ -3512,6 +3619,12 @@ 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_tool_wear_after_use(uses [, initial_wear])`
+ * Simulates a tool being used once and returns the added wear,
+ such that, if only this function is used to calculate wear,
+ the tool will break exactly after `uses` times of uses
+ * `uses`: Number of times the tool can be used
+ * `initial_wear`: The initial wear the tool starts with (default: 0)
* `minetest.get_dig_params(groups, tool_capabilities [, wear])`:
Simulates an item that digs a node.
Returns a table with the following fields:
@@ -3543,6 +3656,9 @@ Translations
Texts can be translated client-side with the help of `minetest.translate` and
translation files.
+Consider using the tool [update_translations](https://github.com/minetest-tools/update_translations)
+to generate and update translation files automatically from the Lua source.
+
Translating a string
--------------------
@@ -4186,15 +4302,15 @@ differences:
* The Mapgen VoxelManip object is retrieved using:
`minetest.get_mapgen_object("voxelmanip")`
* This VoxelManip object already has the region of map just generated loaded
- into it; it's not necessary to call `VoxelManip:read_from_map()` before using
- a Mapgen VoxelManip.
+ into it; it's not necessary to call `VoxelManip:read_from_map()`.
+ Note that the region of map it has loaded is NOT THE SAME as the `minp`, `maxp`
+ parameters of `on_generated()`. Refer to `minetest.get_mapgen_object` docs.
* The `on_generated()` callbacks of some mods may place individual nodes in the
generated area using non-VoxelManip map modification methods. Because the
same Mapgen VoxelManip object is passed through each `on_generated()`
callback, it becomes necessary for the Mapgen VoxelManip object to maintain
- consistency with the current map state. For this reason, calling any of the
- following functions:
- `minetest.add_node()`, `minetest.set_node()`, or `minetest.swap_node()`
+ consistency with the current map state. For this reason, calling any of
+ `minetest.add_node()`, `minetest.set_node()` or `minetest.swap_node()`
will also update the Mapgen VoxelManip object's internal state active on the
current thread.
* After modifying the Mapgen VoxelManip object's internal buffer, it may be
@@ -4307,7 +4423,7 @@ Methods
-----------
A helper class for voxel areas.
-It can be created via `VoxelArea:new{MinEdge = pmin, MaxEdge = pmax}`.
+It can be created via `VoxelArea:new({MinEdge = pmin, MaxEdge = pmax})`.
The coordinates are *inclusive*, like most other things in Minetest.
### Methods
@@ -4355,7 +4471,7 @@ the axes in a voxel area:
If, for example:
- local area = VoxelArea:new{MinEdge = emin, MaxEdge = emax}
+ local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax})
The values of `ystride` and `zstride` can be obtained using `area.ystride` and
`area.zstride`.
@@ -4404,36 +4520,36 @@ generated chunk by the current mapgen.
Returns a table mapping requested generation notification types to arrays of
positions at which the corresponding generated structures are located within
-the current chunk. To set the capture of positions of interest to be recorded
-on generate, use `minetest.set_gen_notify()`.
-For decorations, the returned positions are the ground surface 'place_on'
-nodes, not the decorations themselves. A 'simple' type decoration is often 1
-node above the returned position and possibly displaced by 'place_offset_y'.
+the current chunk. To enable the capture of positions of interest to be recorded
+call `minetest.set_gen_notify()` first.
-Possible fields of the table returned are:
+Possible fields of the returned table are:
-* `dungeon`
-* `temple`
+* `dungeon`: bottom center position of dungeon rooms
+* `temple`: as above but for desert temples (mgv6 only)
* `cave_begin`
* `cave_end`
* `large_cave_begin`
* `large_cave_end`
-* `decoration`
+* `decoration#id` (see below)
Decorations have a key in the format of `"decoration#id"`, where `id` is the
-numeric unique decoration ID as returned by `minetest.get_decoration_id`.
-
+numeric unique decoration ID as returned by `minetest.get_decoration_id()`.
+For example, `decoration#123`.
+The returned positions are the ground surface 'place_on' nodes,
+not the decorations themselves. A 'simple' type decoration is often 1
+node above the returned position and possibly displaced by 'place_offset_y'.
Registered entities
===================
-Functions receive a "luaentity" as `self`:
+Functions receive a "luaentity" table as `self`:
-* It has the member `.name`, which is the registered name `("mod:thing")`
-* It has the member `.object`, which is an `ObjectRef` pointing to the object
-* The original prototype stuff is visible directly via a metatable
+* It has the member `name`, which is the registered name `("mod:thing")`
+* It has the member `object`, which is an `ObjectRef` pointing to the object
+* The original prototype is visible directly via a metatable
Callbacks:
@@ -4441,12 +4557,18 @@ Callbacks:
* Called when the object is instantiated.
* `dtime_s` is the time passed since the object was unloaded, which can be
used for updating the entity state.
-* `on_deactivate(self)
+* `on_deactivate(self, removal)`
* Called when the object is about to get removed or unloaded.
-* `on_step(self, dtime)`
+ * `removal`: boolean indicating whether the object is about to get removed.
+ Calling `object:remove()` on an active object will call this with `removal=true`.
+ The mapblock the entity resides in being unloaded will call this with `removal=false`.
+ * Note that this won't be called if the object hasn't been activated in the first place.
+ In particular, `minetest.clear_objects({mode = "full"})` won't call this,
+ whereas `minetest.clear_objects({mode = "quick"})` might call this.
+* `on_step(self, dtime, moveresult)`
* Called on every server tick, after movement and collision processing.
- `dtime` is usually 0.1 seconds, as per the `dedicated_server_step` setting
- in `minetest.conf`.
+ * `dtime`: elapsed time since last call
+ * `moveresult`: table with collision info (only available if physical=true)
* `on_punch(self, puncher, time_from_last_punch, tool_capabilities, dir, damage)`
* Called when somebody punches the object.
* Note that you probably want to handle most punches using the automatic
@@ -4477,6 +4599,30 @@ Callbacks:
* Should return a string that will be passed to `on_activate` when the
object is instantiated the next time.
+Collision info passed to `on_step` (`moveresult` argument):
+
+ {
+ touching_ground = boolean,
+ -- Note that touching_ground is only true if the entity was moving and
+ -- collided with ground.
+
+ collides = boolean,
+ standing_on_object = boolean,
+
+ collisions = {
+ {
+ type = string, -- "node" or "object",
+ axis = string, -- "x", "y" or "z"
+ node_pos = vector, -- if type is "node"
+ object = ObjectRef, -- if type is "object"
+ old_velocity = vector,
+ new_velocity = vector,
+ },
+ ...
+ }
+ -- `collisions` does not contain data of unloaded mapblock collisions
+ -- or when the velocity changes are negligibly small
+ }
@@ -4556,7 +4702,92 @@ Spawn a small apple tree:
minetest.spawn_tree(pos,apple_tree)
+Privileges
+==========
+Privileges provide a means for server administrators to give certain players
+access to special abilities in the engine, games or mods.
+For example, game moderators may need to travel instantly to any place in the world,
+this ability is implemented in `/teleport` command which requires `teleport` privilege.
+
+Registering privileges
+----------------------
+
+A mod can register a custom privilege using `minetest.register_privilege` function
+to give server administrators fine-grained access control over mod functionality.
+
+For consistency and practical reasons, privileges should strictly increase the abilities of the user.
+Do not register custom privileges that e.g. restrict the player from certain in-game actions.
+
+Checking privileges
+-------------------
+
+A mod can call `minetest.check_player_privs` to test whether a player has privileges
+to perform an operation.
+Also, when registering a chat command with `minetest.register_chatcommand` a mod can
+declare privileges that the command requires using the `privs` field of the command
+definition.
+
+Managing player privileges
+--------------------------
+
+A mod can update player privileges using `minetest.set_player_privs` function.
+Players holding the `privs` privilege can see and manage privileges for all
+players on the server.
+
+A mod can subscribe to changes in player privileges using `minetest.register_on_priv_grant`
+and `minetest.register_on_priv_revoke` functions.
+
+Built-in privileges
+-------------------
+
+Minetest includes a set of built-in privileges that control capabilities
+provided by the Minetest engine and can be used by mods:
+
+ * Basic privileges are normally granted to all players:
+ * `shout`: can communicate using the in-game chat.
+ * `interact`: can modify the world by digging, building and interacting
+ with the nodes, entities and other players. Players without the `interact`
+ privilege can only travel and observe the world.
+
+ * Advanced privileges allow bypassing certain aspects of the gameplay:
+ * `fast`: can use "fast mode" to move with maximum speed.
+ * `fly`: can use "fly mode" to move freely above the ground without falling.
+ * `noclip`: can use "noclip mode" to fly through solid nodes (e.g. walls).
+ * `teleport`: can use `/teleport` command to move to any point in the world.
+ * `creative`: can access creative inventory.
+ * `bring`: can teleport other players to oneself.
+ * `give`: can use `/give` and `/giveme` commands to give any item
+ in the game to oneself or others.
+ * `settime`: can use `/time` command to change current in-game time.
+ * `debug`: can enable wireframe rendering mode.
+
+ * Security-related privileges:
+ * `privs`: can modify privileges of the players using `/grant[me]` and
+ `/revoke[me]` commands.
+ * `basic_privs`: can grant and revoke basic privileges as defined by
+ the `basic_privs` setting.
+ * `kick`: can kick other players from the server using `/kick` command.
+ * `ban`: can ban other players using `/ban` command.
+ * `password`: can use `/setpassword` and `/clearpassword` commands
+ to manage players' passwords.
+ * `protection_bypass`: can bypass node protection. Note that the engine does not act upon this privilege,
+ it is only an implementation suggestion for games.
+
+ * Administrative privileges:
+ * `server`: can use `/fixlight`, `/deleteblocks` and `/deleteobjects`
+ commands. Can clear inventory of other players using `/clearinv` command.
+ * `rollback`: can use `/rollback_check` and `/rollback` commands.
+
+Related settings
+----------------
+
+Minetest includes the following settings to control behavior of privileges:
+
+ * `default_privs`: defines privileges granted to new players.
+ * `basic_privs`: defines privileges that can be granted/revoked by players having
+ the `basic_privs` privilege. This can be used, for example, to give
+ limited moderation powers to selected users.
'minetest' namespace reference
==============================
@@ -4625,6 +4856,13 @@ Utilities
abm_min_max_y = true,
-- dynamic_add_media supports passing a table with options (5.5.0)
dynamic_add_media_table = true,
+ -- particlespawners support texpools and animation of properties,
+ -- particle textures support smooth fade and scale animations, and
+ -- sprite-sheet particle animations can by synced to the lifetime
+ -- of individual particles (5.6.0)
+ particlespawner_tweenable = true,
+ -- allows get_sky to return a table instead of separate values (5.6.0)
+ get_sky_as_table = true,
}
* `minetest.has_feature(arg)`: returns `boolean, missing_features`
@@ -4688,6 +4926,7 @@ Utilities
* `string`: Simple version, eg, "1.2.3-dev"
* `hash`: Full git version (only set if available),
eg, "1.2.3-dev-01234567-dirty".
+ * `is_dev`: Boolean value indicating whether it's a development build
Use this for informational purposes only. The information in the returned
table does not represent the capabilities of the engine, nor is it
reliable or verifiable. Compatible forks will have a different name and
@@ -4851,7 +5090,7 @@ Call these functions only at load time!
* Called when a node is punched
* `minetest.register_on_generated(function(minp, maxp, blockseed))`
* Called after generating a piece of world. Modifying nodes inside the area
- is a bit faster than usually.
+ is a bit faster than usual.
* `minetest.register_on_newplayer(function(ObjectRef))`
* Called when a new player enters the world for the first time
* `minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage))`
@@ -5276,8 +5515,7 @@ Environment access
* Deprecated: use `minetest.set_mapgen_setting(name, value, override)`
instead.
* Set map generation parameters.
- * Function cannot be called after the registration period; only
- initialization and `on_mapgen_init`.
+ * Function cannot be called after the registration period.
* Takes a table as an argument with the fields:
* `mgname`
* `seed`
@@ -5583,14 +5821,19 @@ Item handling
* `width`: 0-3, 0 means shapeless recipe
* `items`: indexed [1-9] table with recipe items
* `output`: string with item name and quantity
- * Example query for `"default:gold_ingot"` will return table:
+ * Example result for `"default:gold_ingot"` with two recipes:
{
- [1]={method = "cooking", width = 3, output = "default:gold_ingot",
- items = {1 = "default:gold_lump"}},
- [2]={method = "normal", width = 1, output = "default:gold_ingot 9",
- items = {1 = "default:goldblock"}}
+ {
+ method = "cooking", width = 3,
+ output = "default:gold_ingot", items = {"default:gold_lump"}
+ },
+ {
+ method = "normal", width = 1,
+ output = "default:gold_ingot 9", items = {"default:goldblock"}
+ }
}
+
* `minetest.handle_node_drops(pos, drops, digger)`
* `drops`: list of itemstrings
* Handles drops from nodes after digging: Default action is to put them
@@ -5698,6 +5941,68 @@ Timing
* `job:cancel()`
* Cancels the job function from being called
+Async environment
+-----------------
+
+The engine allows you to submit jobs to be ran in an isolated environment
+concurrently with normal server operation.
+A job consists of a function to be ran in the async environment, any amount of
+arguments (will be serialized) and a callback that will be called with the return
+value of the job function once it is finished.
+
+The async environment does *not* have access to the map, entities, players or any
+globals defined in the 'usual' environment. Consequently, functions like
+`minetest.get_node()` or `minetest.get_player_by_name()` simply do not exist in it.
+
+Arguments and return values passed through this can contain certain userdata
+objects that will be seamlessly copied (not shared) to the async environment.
+This allows you easy interoperability for delegating work to jobs.
+
+* `minetest.handle_async(func, callback, ...)`:
+ * Queue the function `func` to be ran in an async environment.
+ Note that there are multiple persistent workers and any of them may
+ end up running a given job. The engine will scale the amount of
+ worker threads automatically.
+ * When `func` returns the callback is called (in the normal environment)
+ with all of the return values as arguments.
+ * Optional: Variable number of arguments that are passed to `func`
+* `minetest.register_async_dofile(path)`:
+ * Register a path to a Lua file to be imported when an async environment
+ is initialized. You can use this to preload code which you can then call
+ later using `minetest.handle_async()`.
+
+### List of APIs available in an async environment
+
+Classes:
+* `ItemStack`
+* `PerlinNoise`
+* `PerlinNoiseMap`
+* `PseudoRandom`
+* `PcgRandom`
+* `SecureRandom`
+* `VoxelArea`
+* `VoxelManip`
+ * only if transferred into environment; can't read/write to map
+* `Settings`
+
+Class instances that can be transferred between environments:
+* `ItemStack`
+* `PerlinNoise`
+* `PerlinNoiseMap`
+* `VoxelManip`
+
+Functions:
+* Standalone helpers such as logging, filesystem, encoding,
+ hashing or compression APIs
+* `minetest.request_insecure_environment` (same restrictions apply)
+
+Variables:
+* `minetest.settings`
+* `minetest.registered_items`, `registered_nodes`, `registered_tools`,
+ `registered_craftitems` and `registered_aliases`
+ * with all functions and userdata values replaced by `true`, calling any
+ callbacks here is obviously not possible
+
Server
------
@@ -5973,11 +6278,11 @@ Misc.
This is due to the fact that JSON has two distinct array and object
values.
* Example: `write_json({10, {a = false}})`,
- returns `"[10, {\"a\": false}]"`
+ returns `'[10, {"a": false}]'`
* `minetest.serialize(table)`: returns a string
* Convert a table containing tables, strings, numbers, booleans and `nil`s
into string form readable by `minetest.deserialize`
- * Example: `serialize({foo='bar'})`, returns `'return { ["foo"] = "bar" }'`
+ * Example: `serialize({foo="bar"})`, returns `'return { ["foo"] = "bar" }'`
* `minetest.deserialize(string[, safe])`: returns a table
* Convert a string returned by `minetest.serialize` into a table
* `string` is loaded in an empty sandbox environment.
@@ -5989,7 +6294,7 @@ Misc.
value of `safe`. It is fine to serialize then deserialize user-provided
data, but directly providing user input to deserialize is always unsafe.
* Example: `deserialize('return { ["foo"] = "bar" }')`,
- returns `{foo='bar'}`
+ returns `{foo="bar"}`
* Example: `deserialize('print("foo")')`, returns `nil`
(function call fails), returns
`error:[string "print("foo")"]:1: attempt to call global 'print' (a nil value)`
@@ -6202,45 +6507,53 @@ Sorted alphabetically.
`AreaStore`
-----------
-A fast access data structure to store areas, and find areas near a given
-position or area.
-Every area has a `data` string attribute to store additional information.
-You can create an empty `AreaStore` by calling `AreaStore()`, or
-`AreaStore(type_name)`. The mod decides where to save and load AreaStore.
-If you chose the parameter-less constructor, a fast implementation will be
-automatically chosen for you.
+AreaStore is a data structure to calculate intersections of 3D cuboid volumes
+and points. The `data` field (string) may be used to store and retrieve any
+mod-relevant information to the specified area.
+
+Despite its name, mods must take care of persisting AreaStore data. They may
+use the provided load and write functions for this.
+
### Methods
-* `get_area(id, include_borders, include_data)`
+* `AreaStore(type_name)`
+ * Returns a new AreaStore instance
+ * `type_name`: optional, forces the internally used API.
+ * Possible values: `"LibSpatial"` (default).
+ * When other values are specified, or SpatialIndex is not available,
+ the custom Minetest functions are used.
+* `get_area(id, include_corners, include_data)`
* Returns the area information about the specified ID.
* Returned values are either of these:
nil -- Area not found
- true -- Without `include_borders` and `include_data`
+ true -- Without `include_corners` and `include_data`
{
- min = pos, max = pos -- `include_borders == true`
+ min = pos, max = pos -- `include_corners == true`
data = string -- `include_data == true`
}
-* `get_areas_for_pos(pos, include_borders, include_data)`
+* `get_areas_for_pos(pos, include_corners, include_data)`
* Returns all areas as table, indexed by the area ID.
* Table values: see `get_area`.
-* `get_areas_in_area(edge1, edge2, accept_overlap, include_borders, include_data)`
- * Returns all areas that contain all nodes inside the area specified by `edge1`
- and `edge2` (inclusive).
+* `get_areas_in_area(corner1, corner2, accept_overlap, include_corners, include_data)`
+ * Returns all areas that contain all nodes inside the area specified by`
+ `corner1 and `corner2` (inclusive).
* `accept_overlap`: if `true`, areas are returned that have nodes in
common (intersect) with the specified area.
* Returns the same values as `get_areas_for_pos`.
-* `insert_area(edge1, edge2, data, [id])`: inserts an area into the store.
+* `insert_area(corner1, corner2, data, [id])`: inserts an area into the store.
* Returns the new area's ID, or nil if the insertion failed.
- * The (inclusive) positions `edge1` and `edge2` describe the area.
+ * The (inclusive) positions `corner1` and `corner2` describe the area.
* `data` is a string stored with the area.
* `id` (optional): will be used as the internal area ID if it is an unique
number between 0 and 2^32-2.
-* `reserve(count)`: reserves resources for at most `count` many contained
- areas.
- Only needed for efficiency, and only some implementations profit.
+* `reserve(count)`
+ * Requires SpatialIndex, no-op function otherwise.
+ * Reserves resources for `count` many contained areas to improve
+ efficiency when working with many area entries. Additional areas can still
+ be inserted afterwards at the usual complexity.
* `remove_area(id)`: removes the area with the given id from the store, returns
success.
* `set_cache_params(params)`: sets params for the included prefiltering cache.
@@ -6278,9 +6591,9 @@ An `InvRef` is a reference to an inventory.
* `set_width(listname, width)`: set width of list; currently used for crafting
* `get_stack(listname, i)`: get a copy of stack index `i` in list
* `set_stack(listname, i, stack)`: copy `stack` to index `i` in list
-* `get_list(listname)`: return full list
+* `get_list(listname)`: return full list (list of `ItemStack`s)
* `set_list(listname, list)`: set full list (size will not change)
-* `get_lists()`: returns list of inventory lists
+* `get_lists()`: returns table that maps listnames to inventory lists
* `set_lists(lists)`: sets inventory lists (size will not change)
* `add_item(listname, stack)`: add item somewhere in list, returns leftover
`ItemStack`.
@@ -6375,7 +6688,13 @@ an itemstring, a table or `nil`.
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, otherwise does nothing
+ * Valid `amount` range is [0,65536]
* `amount`: number, integer
+* `add_wear_by_uses(max_uses)`
+ * Increases wear in such a way that, if only this function is called,
+ the item breaks after `max_uses` times
+ * Valid `max_uses` range is [0,65536]
+ * Does nothing if item is not a tool or if `max_uses` is 0
* `add_item(item)`: returns leftover `ItemStack`
* Put some item or stack onto this stack
* `item_fits(item)`: returns `true` if item or stack can be fully added to
@@ -6509,6 +6828,21 @@ Lua back to the engine.
Doing so is much less error-prone and you will never need to wonder if the
object you are working with still exists.
+### Attachments
+
+It is possible to attach objects to other objects (`set_attach` method).
+
+When an object is attached, it is positioned relative to the parent's position
+and rotation. `get_pos` and `get_rotation` will always return the parent's
+values and changes via their setter counterparts are ignored.
+
+To change position or rotation call `set_attach` again with the new values.
+
+**Note**: Just like model dimensions, the relative position in `set_attach`
+must be multiplied by 10 compared to world positions.
+
+It is also possible to attach to a bone of the parent object. In that case the
+child will follow movement and rotation of that bone.
### Methods
@@ -6541,8 +6875,7 @@ object you are working with still exists.
* `set_hp(hp, reason)`: set number of health points
* See reason in register_on_player_hpchange
* Is limited to the range of 0 ... 65535 (2^16 - 1)
- * For players: HP are also limited by `hp_max` specified in the player's
- object properties
+ * For players: HP are also limited by `hp_max` specified in object properties
* `get_inventory()`: returns an `InvRef` for players, otherwise returns `nil`
* `get_wield_list()`: returns the name of the inventory list the wielded item
is in.
@@ -6562,12 +6895,13 @@ object you are working with still exists.
* `set_animation_frame_speed(frame_speed)`
* `frame_speed`: number, default: `15.0`
* `set_attach(parent[, bone, position, rotation, forced_visible])`
- * `bone`: string. Default is `""`, the root bone
- * `position`: `{x=num, y=num, z=num}`, relative, default `{x=0, y=0, z=0}`
- * `rotation`: `{x=num, y=num, z=num}` = Rotation on each axis, in degrees.
- Default `{x=0, y=0, z=0}`
+ * `parent`: `ObjectRef` to attach to
+ * `bone`: default `""` (the root bone)
+ * `position`: relative position, default `{x=0, y=0, z=0}`
+ * `rotation`: relative rotation in degrees, default `{x=0, y=0, z=0}`
* `forced_visible`: Boolean to control whether the attached entity
- should appear in first person. Default `false`.
+ should appear in first person, default `false`.
+ * Please also read the [Attachments] section above.
* This command may fail silently (do nothing) when it would result
in circular attachments.
* `get_attach()`: returns parent, bone, position, rotation, forced_visible,
@@ -6640,7 +6974,7 @@ object you are working with still exists.
* Fourth column: subject looking to the right
* Fifth column: subject viewed from above
* Sixth column: subject viewed from below
-* `get_entity_name()` (**Deprecated**: Will be removed in a future version)
+* `get_entity_name()` (**Deprecated**: Will be removed in a future version, use the field `self.name` instead)
* `get_luaentity()`
#### Player only (no-op for other objects)
@@ -6748,22 +7082,23 @@ object you are working with still exists.
* `hud_remove(id)`: remove the HUD element of the specified id
* `hud_change(id, stat, value)`: change a value of a previously added HUD
element.
- * element `stat` values:
- `position`, `name`, `scale`, `text`, `number`, `item`, `dir`
+ * `stat` supports the same keys as in the hud definition table except for
+ `"hud_elem_type"`.
* `hud_get(id)`: gets the HUD element definition structure of the specified ID
* `hud_set_flags(flags)`: sets specified HUD flags of player.
* `flags`: A table with the following fields set to boolean values
- * hotbar
- * healthbar
- * crosshair
- * wielditem
- * breathbar
- * minimap
- * minimap_radar
+ * `hotbar`
+ * `healthbar`
+ * `crosshair`
+ * `wielditem`
+ * `breathbar`
+ * `minimap`: Modifies the client's permission to view the minimap.
+ The client may locally elect to not view the minimap.
+ * `minimap_radar`: is only usable when `minimap` is true
+ * `basic_debug`: Allow showing basic debug info that might give a gameplay advantage.
+ This includes map seed, player position, look direction, the pointed node and block bounds.
+ Does not affect players with the `debug` privilege.
* If a flag equals `nil`, the flag is not modified
- * `minimap`: Modifies the client's permission to view the minimap.
- The client may locally elect to not view the minimap.
- * `minimap_radar` is only usable when `minimap` is true
* `hud_get_flags()`: returns a table of player HUD flags with boolean values.
* See `hud_set_flags` for a list of flags that can be toggled.
* `hud_set_hotbar_itemcount(count)`: sets number of items in builtin hotbar
@@ -6852,9 +7187,15 @@ object you are working with still exists.
* `"plain"`: Uses 0 textures, `bgcolor` used
* `clouds`: Boolean for whether clouds appear in front of `"skybox"` or
`"plain"` custom skyboxes (default: `true`)
-* `get_sky()`: returns base_color, type, table of textures, clouds.
-* `get_sky_color()`: returns a table with the `sky_color` parameters as in
- `set_sky`.
+* `get_sky(as_table)`:
+ * `as_table`: boolean that determines whether the deprecated version of this
+ function is being used.
+ * `true` returns a table containing sky parameters as defined in `set_sky(sky_parameters)`.
+ * Deprecated: `false` or `nil` returns base_color, type, table of textures,
+ clouds.
+* `get_sky_color()`:
+ * Deprecated: Use `get_sky(as_table)` instead.
+ * 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:
@@ -6877,7 +7218,9 @@ object you are working with still exists.
* `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", if it exists)
+ will re-enable the mesh moon. (default: `"moon.png"`, if it exists)
+ Note: Relative to the sun, the moon texture is rotated by 180°.
+ You can use the `^[transformR180` texture modifier to achieve the same orientation.
* `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`)
@@ -6888,6 +7231,9 @@ object you are working with still exists.
* `star_parameters` is a table with the following optional fields:
* `visible`: Boolean for whether the stars are visible.
(default: `true`)
+ * `day_opacity`: Float for maximum opacity of stars at day.
+ No effect if `visible` is false.
+ (default: 0.0; maximum: 1.0; minimum: 0.0)
* `count`: Integer number to set the number of stars in
the skybox. Only applies to `"skybox"` and `"regular"` sky types.
(default: `1000`)
@@ -6929,10 +7275,18 @@ object you are working with still exists.
* in third person view (max. values `{x=-10/10,y=-10,15,z=-5/5}`)
* `get_eye_offset()`: returns first and third person offsets.
* `send_mapblock(blockpos)`:
- * Sends a server-side loaded mapblock to the player.
- * Returns `false` if failed.
+ * Sends an already loaded mapblock to the player.
+ * Returns `false` if nothing was sent (note that this can also mean that
+ the client already has the block)
* Resource intensive - use sparsely
- * To get blockpos, integer divide pos by 16
+* `set_lighting(light_definition)`: sets lighting for the player
+ * `light_definition` is a table with the following optional fields:
+ * `shadows` is a table that controls ambient shadows
+ * `intensity` sets the intensity of the shadows from 0 (no shadows, default) to 1 (blackness)
+* `get_lighting()`: returns the current state of lighting for the player.
+ * Result is a table with the same fields as `light_definition` in `set_lighting`.
+* `respawn()`: Respawns the player using the same mechanism as the death screen,
+ including calling on_respawnplayer callbacks.
`PcgRandom`
-----------
@@ -7137,7 +7491,7 @@ The settings have the format `key = value`. Example:
Mod metadata: per mod metadata, saved automatically.
Can be obtained via `minetest.get_mod_storage()` during load time.
-WARNING: This storage backend is incaptable to save raw binary data due
+WARNING: This storage backend is incapable of saving raw binary data due
to restrictions of JSON.
### Methods
@@ -7159,8 +7513,10 @@ corresponding Lua entity using the given registration fields.
Player properties need to be saved manually.
{
- hp_max = 1,
- -- For players only. Defaults to `minetest.PLAYER_MAX_HP_DEFAULT`.
+ hp_max = 10,
+ -- Defines the maximum and default HP of the entity
+ -- For Lua entities the maximum is not enforced.
+ -- For players this defaults to `minetest.PLAYER_MAX_HP_DEFAULT`.
breath_max = 0,
-- For players only. Defaults to `minetest.PLAYER_MAX_BREATH_DEFAULT`.
@@ -7175,22 +7531,21 @@ Player properties need to be saved manually.
eye_height = 1.625,
-- For players only. Camera height above feet position in nodes.
- -- Defaults to 1.625.
- physical = true,
+ physical = false,
-- Collide with `walkable` nodes.
collide_with_objects = true,
-- Collide with other objects if physical = true
- collisionbox = {-0.5, 0.0, -0.5, 0.5, 1.0, 0.5}, -- Default
- selectionbox = {-0.5, 0.0, -0.5, 0.5, 1.0, 0.5},
+ collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-- Selection box uses collision box dimensions when not set.
-- For both boxes: {xmin, ymin, zmin, xmax, ymax, zmax} in nodes from
-- object position.
pointable = true,
- -- Overrides selection box when false
+ -- Whether the object can be pointed at
visual = "cube" / "sprite" / "upright_sprite" / "mesh" / "wielditem" / "item",
-- "cube" is a node-sized cube.
@@ -7327,48 +7682,26 @@ Used by `minetest.register_entity`.
...,
},
-- A table of object properties, see the `Object properties` section.
- -- Object properties being read directly from the entity definition
- -- table is deprecated. Define object properties in this
- -- `initial_properties` table instead.
+ -- The properties in this table are applied to the object
+ -- once when it is spawned.
+ -- Refer to the "Registered entities" section for explanations
on_activate = function(self, staticdata, dtime_s),
-
+ on_deactivate = function(self, removal),
on_step = function(self, dtime, moveresult),
- -- Called every server step
- -- dtime: Elapsed time
- -- moveresult: Table with collision info (only available if physical=true)
-
- on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir),
-
+ on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir, damage),
+ on_death = function(self, killer),
on_rightclick = function(self, clicker),
-
+ on_attach_child = function(self, child),
+ on_detach_child = function(self, child),
+ on_detach = function(self, parent),
get_staticdata = function(self),
- -- Called sometimes; the string returned is passed to on_activate when
- -- the entity is re-activated from static state
_custom_field = whatever,
-- You can define arbitrary member variables here (see Item definition
-- for more info) by using a '_' prefix
}
-Collision info passed to `on_step`:
-
- {
- touching_ground = boolean,
- collides = boolean,
- standing_on_object = boolean,
- collisions = {
- {
- type = string, -- "node" or "object",
- axis = string, -- "x", "y" or "z"
- node_pos = vector, -- if type is "node"
- object = ObjectRef, -- if type is "object"
- old_velocity = vector,
- new_velocity = vector,
- },
- ...
- }
- }
ABM (ActiveBlockModifier) definition
------------------------------------
@@ -7399,7 +7732,7 @@ Used by `minetest.register_abm`.
min_y = -32768,
max_y = 32767,
- -- min and max height levels where ABM will be processed
+ -- min and max height levels where ABM will be processed (inclusive)
-- can be used to reduce CPU usage
catch_up = true,
@@ -7425,7 +7758,7 @@ Used by `minetest.register_lbm`.
A loading block modifier (LBM) is used to define a function that is called for
specific nodes (defined by `nodenames`) when a mapblock which contains such nodes
-gets loaded.
+gets activated (not loaded!)
{
label = "Upgrade legacy doors",
@@ -7433,18 +7766,20 @@ gets loaded.
-- Definitions with identical labels will be listed as one.
name = "modname:replace_legacy_door",
+ -- Identifier of the LBM, should follow the modname:<whatever> convention
nodenames = {"default:lava_source"},
-- List of node names to trigger the LBM on.
- -- Also non-registered nodes will work.
- -- Groups (as of group:groupname) will work as well.
+ -- Names of non-registered nodes and groups (as group:groupname)
+ -- will work as well.
run_at_every_load = false,
- -- Whether to run the LBM's action every time a block gets loaded,
- -- and not only the first time the block gets loaded after the LBM
+ -- Whether to run the LBM's action every time a block gets activated,
+ -- and not only the first time the block gets activated after the LBM
-- was introduced.
action = function(pos, node),
+ -- Function triggered for each qualifying node.
}
Tile definition
@@ -7505,32 +7840,40 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and
`minetest.register_tool`.
{
- description = "Steel Axe",
+ description = "",
-- Can contain new lines. "\n" has to be used as new line character.
-- See also: `get_description` in [`ItemStack`]
- short_description = "Steel Axe",
+ short_description = "",
-- Must not contain new lines.
-- Defaults to nil.
- -- Use an [`ItemStack`] to get the short description, eg:
+ -- Use an [`ItemStack`] to get the short description, e.g.:
-- ItemStack(itemname):get_short_description()
groups = {},
- -- key = name, value = rating; rating = 1..3.
+ -- key = name, value = rating; rating = <number>.
-- If rating not applicable, use 1.
-- e.g. {wool = 1, fluffy = 3}
-- {soil = 2, outerspace = 1, crumbly = 1}
-- {bendy = 2, snappy = 1},
-- {hard = 1, metal = 1, spikes = 1}
- inventory_image = "default_tool_steelaxe.png",
+ inventory_image = "",
+ -- Texture shown in the inventory GUI
+ -- Defaults to a 3D rendering of the node if left empty.
- inventory_overlay = "overlay.png",
- -- An overlay which does not get colorized
+ inventory_overlay = "",
+ -- An overlay texture which is not affected by colorization
wield_image = "",
+ -- Texture shown when item is held in hand
+ -- Defaults to a 3D rendering of the node if left empty.
wield_overlay = "",
+ -- Like inventory_overlay but only used in the same situation as wield_image
+
+ wield_scale = {x = 1, y = 1, z = 1},
+ -- Scale for the item when held in hand
palette = "",
-- An image file containing the palette of a node.
@@ -7539,19 +7882,18 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and
-- The palette is always stretched to fit indices between 0 and 255, to
-- ensure compatibility with "colorfacedir" and "colorwallmounted" nodes.
- color = "0xFFFFFFFF",
- -- The color of the item. The palette overrides this.
-
- wield_scale = {x = 1, y = 1, z = 1},
+ color = "#ffffffff",
+ -- Color the item is colorized with. The palette overrides this.
- -- The default value of 99 may be configured by
- -- users using the setting "default_stack_max"
stack_max = 99,
+ -- Maximum amount of items that can be in a single stack.
+ -- The default can be changed by the setting `default_stack_max`
range = 4.0,
+ -- Range of node and object pointing that is possible with this item held
liquids_pointable = false,
- -- If true, item points to all liquid nodes (`liquidtype ~= "none"`),
+ -- If true, item can point to all liquid nodes (`liquidtype ~= "none"`),
-- even those for which `pointable = false`
light_source = 0,
@@ -7567,8 +7909,7 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and
max_drop_level = 0,
groupcaps = {
-- For example:
- choppy = {times = {[1] = 2.50, [2] = 1.40, [3] = 1.00},
- uses = 20, maxlevel = 2},
+ choppy = {times = {2.50, 1.40, 1.00}, uses = 20, maxlevel = 2},
},
damage_groups = {groupname = damage},
-- Damage values must be between -32768 and 32767 (2^15)
@@ -7588,16 +7929,16 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and
-- If "" and item is anything, no prediction is made.
-- Otherwise should be name of node which the client immediately places
-- on ground when the player places the item. Server will always update
- -- actual result to client in a short moment.
+ -- with actual result shortly.
node_dig_prediction = "air",
-- if "", no prediction is made.
-- if "air", node is removed.
-- Otherwise should be name of node which the client immediately places
- -- upon digging. Server will always update actual result shortly.
+ -- upon digging. Server will always update with actual result shortly.
sound = {
- -- Definition of items sounds to be played at various events.
+ -- Definition of item sounds to be played at various events.
-- All fields in this table are optional.
breaks = <SimpleSoundSpec>,
@@ -7660,7 +8001,7 @@ Node definition
Used by `minetest.register_node`.
{
- -- <all fields allowed in item definitions>,
+ -- <all fields allowed in item definitions>
drawtype = "normal", -- See "Node drawtypes"
@@ -7674,7 +8015,6 @@ Used by `minetest.register_node`.
tiles = {tile definition 1, def2, def3, def4, def5, def6},
-- Textures of node; +Y, -Y, +X, -X, +Z, -Z
- -- Old field name was 'tile_images'.
-- List can be shortened to needed length.
overlay_tiles = {tile definition 1, def2, def3, def4, def5, def6},
@@ -7686,7 +8026,6 @@ Used by `minetest.register_node`.
special_tiles = {tile definition 1, Tile definition 2},
-- Special textures of node; used rarely.
- -- Old field name was 'special_materials'.
-- List can be shortened to needed length.
color = ColorSpec,
@@ -7707,21 +8046,22 @@ Used by `minetest.register_node`.
-- If set to a boolean value (deprecated): true either sets it to blend
-- or clip, false sets it to clip or opaque mode depending on the drawtype.
- palette = "palette.png",
+ palette = "",
-- The node's `param2` is used to select a pixel from the image.
-- Pixels are arranged from left to right and from top to bottom.
-- The node's color will be multiplied with the selected pixel's color.
-- Tiles can override this behavior.
-- Only when `paramtype2` supports palettes.
- post_effect_color = "green#0F",
+ post_effect_color = "#00000000",
-- Screen tint if player is inside node, see "ColorSpec"
paramtype = "none", -- See "Nodes"
paramtype2 = "none", -- See "Nodes"
- place_param2 = nil, -- Force value for param2 when player places node
+ place_param2 = 0,
+ -- Value for param2 that is set when player places node
is_ground_content = true,
-- If false, the cave generator and dungeon generator will not carve
@@ -7739,7 +8079,7 @@ Used by `minetest.register_node`.
diggable = true, -- If false, can never be dug
- climbable = false, -- If true, can be climbed on (ladder)
+ climbable = false, -- If true, can be climbed on like a ladder
move_resistance = 0,
-- Slows down movement of players through this node (max. 7).
@@ -7765,9 +8105,11 @@ Used by `minetest.register_node`.
-- 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_flowing = "",
+ -- Node that represents the flowing version of the liquid
- liquid_alternative_source = "", -- Source version of flowing liquid
+ liquid_alternative_source = "",
+ -- Node that represents the source version of the liquid
liquid_viscosity = 0,
-- Controls speed at which the liquid spreads/flows (max. 7).
@@ -7787,7 +8129,6 @@ Used by `minetest.register_node`.
-- 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"'.
@@ -7811,37 +8152,29 @@ Used by `minetest.register_node`.
damage_per_second = 0,
-- If player is inside node, this damage is caused
- node_box = {type="regular"}, -- See "Node boxes"
+ node_box = {type = "regular"}, -- See "Node boxes"
- connects_to = nodenames,
+ connects_to = {},
-- Used for nodebox nodes with the type == "connected".
-- Specifies to what neighboring nodes connections will be drawn.
-- e.g. `{"group:fence", "default:wood"}` or `"default:stone"`
- connect_sides = { "top", "bottom", "front", "left", "back", "right" },
+ connect_sides = {},
-- Tells connected nodebox nodes to connect only to these sides of this
- -- node
+ -- node. possible: "top", "bottom", "front", "left", "back", "right"
- mesh = "model.obj",
+ mesh = "",
-- File name of mesh when using "mesh" drawtype
selection_box = {
- type = "fixed",
- fixed = {
- {-2 / 16, -0.5, -2 / 16, 2 / 16, 3 / 16, 2 / 16},
- -- Node box format: see [Node boxes]
- },
+ -- see [Node boxes] for possibilities
},
-- Custom selection box definition. Multiple boxes can be defined.
-- If "nodebox" drawtype is used and selection_box is nil, then node_box
-- definition is used for the selection box.
collision_box = {
- type = "fixed",
- fixed = {
- {-2 / 16, -0.5, -2 / 16, 2 / 16, 3 / 16, 2 / 16},
- -- Node box format: see [Node boxes]
- },
+ -- see [Node boxes] for possibilities
},
-- Custom collision box definition. Multiple boxes can be defined.
-- If "nodebox" drawtype is used and collision_box is nil, then node_box
@@ -7898,8 +8231,8 @@ 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 item filtering.
- -- Item filtering by string matching is deprecated.
+
+ -- Using a table allows multiple items, drop chances and item filtering:
drop = {
max_items = 1,
-- Maximum number of item lists to drop.
@@ -7910,7 +8243,7 @@ Used by `minetest.register_node`.
-- equals 'max_items'.
-- Therefore, entries should progress from low to high drop chance.
items = {
- -- Entry examples.
+ -- Examples:
{
-- 1 in 1000 chance of dropping a diamond.
-- Default rarity is '1'.
@@ -7980,7 +8313,7 @@ Used by `minetest.register_node`.
-- node is deleted from the world or the drops are added. This is
-- generally the result of either the node being dug or an attached node
-- becoming detached.
- -- oldmeta is the NodeMetaRef of the oldnode before deletion.
+ -- oldmeta are the metadata fields (table) of the node before deletion.
-- drops is a table of ItemStacks, so any metadata to be preserved can
-- be added directly to one or more of the dropped items. See
-- "ItemStackMetaRef".
@@ -8066,8 +8399,8 @@ Used by `minetest.register_node`.
mod_origin = "modname",
-- stores which mod actually registered a node
- -- if it can not find a source, returns "??"
- -- useful for getting what mod truly registered something
+ -- If the source could not be determined it contains "??"
+ -- Useful for getting which mod truly registered something
-- example: if a node is registered as ":othermodname:nodename",
-- nodename will show "othermodname", but mod_orgin will say "modname"
}
@@ -8080,11 +8413,11 @@ Used by `minetest.register_craft`.
### Shaped
{
- output = 'default:pick_stone',
+ output = "default:pick_stone",
recipe = {
- {'default:cobble', 'default:cobble', 'default:cobble'},
- {'', 'default:stick', ''},
- {'', 'default:stick', ''}, -- Also groups; e.g. 'group:crumbly'
+ {"default:cobble", "default:cobble", "default:cobble"},
+ {"", "default:stick", ""},
+ {"", "default:stick", ""}, -- Also groups; e.g. "group:crumbly"
},
replacements = <list of item pairs>,
-- replacements: replace one input item with another item on crafting
@@ -8095,7 +8428,7 @@ Used by `minetest.register_craft`.
{
type = "shapeless",
- output = 'mushrooms:mushroom_stew',
+ output = "mushrooms:mushroom_stew",
recipe = {
"mushrooms:bowl",
"mushrooms:mushroom_brown",
@@ -8120,7 +8453,7 @@ 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 )
+ 65536 * (1 - ( (1 - tool_1_wear) + (1 - tool_2_wear) + additional_wear ))
The result is rounded and can't be lower than 0. If the result is 65536 or higher,
no crafting is possible.
@@ -8143,6 +8476,10 @@ no crafting is possible.
replacements = {{"bucket:bucket_lava", "bucket:bucket_empty"}},
}
+The engine does not implement anything specific to cooking or fuels, but the
+recpies can be retrieved later using `minetest.get_craft_result` to have a
+consistent interface across different games/mods.
+
Ore definition
--------------
@@ -8151,15 +8488,17 @@ Used by `minetest.register_ore`.
See [Ores] section above for essential information.
{
- ore_type = "scatter",
+ ore_type = "",
+ -- Supported: "scatter", "sheet", "puff", "blob", "vein", "stratum"
- ore = "default:stone_with_coal",
+ ore = "",
+ -- Ore node to place
- ore_param2 = 3,
- -- Facedir rotation. Default is 0 (unchanged rotation)
+ ore_param2 = 0,
+ -- Param2 to set for ore (e.g. facedir rotation)
- wherein = "default:stone",
- -- A list of nodenames is supported too
+ wherein = "",
+ -- Node to place ore in. Multiple are possible by passing a list.
clust_scarcity = 8 * 8 * 8,
-- Ore has a 1 out of clust_scarcity chance of spawning in a node.
@@ -8175,13 +8514,13 @@ See [Ores] section above for essential information.
-- nodes are coal ore.
y_min = -31000,
- y_max = 64,
- -- Lower and upper limits for ore
+ y_max = 31000,
+ -- Lower and upper limits for ore (inclusive)
flags = "",
-- Attributes for the ore generation, see 'Ore attributes' section above
- noise_threshold = 0.5,
+ noise_threshold = 0,
-- If noise is above this threshold, ore is placed. Not needed for a
-- uniform distribution.
@@ -8208,12 +8547,12 @@ See [Ores] section above for essential information.
-- Type-specific parameters
- -- sheet
+ -- "sheet"
column_height_min = 1,
column_height_max = 16,
column_midpoint_factor = 0.5,
- -- puff
+ -- "puff"
np_puff_top = {
offset = 4,
scale = 2,
@@ -8231,10 +8570,10 @@ See [Ores] section above for essential information.
persistence = 0.7
},
- -- vein
+ -- "vein"
random_factor = 1.0,
- -- stratum
+ -- "stratum"
np_stratum_thickness = {
offset = 8,
scale = 4,
@@ -8243,7 +8582,7 @@ See [Ores] section above for essential information.
octaves = 3,
persistence = 0.7
},
- stratum_thickness = 8,
+ stratum_thickness = 8, -- only used if no noise defined
}
Biome definition
@@ -8305,8 +8644,7 @@ performance and computing power the practical limit is much lower.
node_dungeon_alt = "default:mossycobble",
-- Node used for randomly-distributed alternative structure nodes.
- -- If alternative structure nodes are not wanted leave this absent for
- -- performance reasons.
+ -- If alternative structure nodes are not wanted leave this absent.
node_dungeon_stair = "stairs:stair_cobble",
-- Node used for dungeon stairs.
@@ -8346,12 +8684,13 @@ See [Decoration types]. Used by `minetest.register_decoration`.
{
deco_type = "simple",
+ -- Type. "simple" or "schematic" supported
place_on = "default:dirt_with_grass",
-- Node (or list of nodes) that the decoration can be placed on
sidelen = 8,
- -- Size of the square divisions of the mapchunk being generated.
+ -- Size of the square (X / Z) divisions of the mapchunk being generated.
-- Determines the resolution of noise variation if used.
-- If the chunk size is not evenly divisible by sidelen, sidelen is made
-- equal to the chunk size.
@@ -8387,14 +8726,13 @@ See [Decoration types]. Used by `minetest.register_decoration`.
y_min = -31000,
y_max = 31000,
- -- Lower and upper limits for decoration.
+ -- Lower and upper limits for decoration (inclusive).
-- These parameters refer to the Y co-ordinate of the 'place_on' node.
spawn_by = "default:water",
-- Node (or list of nodes) that the decoration only spawns next to.
- -- Checks two horizontal planes of 8 neighbouring nodes (including
- -- diagonal neighbours), one plane level with the 'place_on' node and a
- -- plane one node above that.
+ -- Checks the 8 neighbouring nodes on the same Y, and also the ones
+ -- at Y+1, excluding both center nodes.
num_spawn_by = 1,
-- Number of spawn_by nodes that must be surrounding the decoration
@@ -8478,6 +8816,7 @@ See [Decoration types]. Used by `minetest.register_decoration`.
-- See 'Schematic specifier' for details.
replacements = {["oldname"] = "convert_to", ...},
+ -- Map of node names to replace in the schematic after reading it.
flags = "place_center_x, place_center_y, place_center_z",
-- Flags for schematic decorations. See 'Schematic attributes'.
@@ -8587,30 +8926,30 @@ Used by `minetest.create_detached_inventory`.
HUD Definition
--------------
-See [HUD] section.
+Since most values have multiple different functions, please see the
+documentation in [HUD] section.
-Used by `Player:hud_add`. Returned by `Player:hud_get`.
+Used by `ObjectRef:hud_add`. Returned by `ObjectRef:hud_get`.
{
- hud_elem_type = "image", -- See HUD element types
+ hud_elem_type = "image",
-- Type of element, can be "image", "text", "statbar", "inventory",
- -- "compass" or "minimap"
+ -- "waypoint", "image_waypoint", "compass" or "minimap"
position = {x=0.5, y=0.5},
- -- Left corner position of element
+ -- Top left corner position of element
name = "<name>",
- scale = {x = 2, y = 2},
+ scale = {x = 1, y = 1},
text = "<text>",
text2 = "<text>",
- number = 2,
+ number = 0,
- item = 3,
- -- Selected item in inventory. 0 for no item selected.
+ item = 0,
direction = 0,
-- Direction: 0: left-right, 1: right-left, 2: top-bottom, 3: bottom-top
@@ -8619,14 +8958,14 @@ Used by `Player:hud_add`. Returned by `Player:hud_get`.
offset = {x=0, y=0},
- size = { x=100, y=100 },
- -- Size of element in pixels
+ world_pos = {x=0, y=0, z=0},
+
+ size = {x=0, y=0},
z_index = 0,
- -- Z index : lower z-index HUDs are displayed behind higher z-index HUDs
+ -- 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
@@ -8666,6 +9005,8 @@ Used by `minetest.add_particle`.
texture = "image.png",
-- The texture of the particle
+ -- v5.6.0 and later: also supports the table format described in the
+ -- following section
playername = "singleplayer",
-- Optional, if specified spawns particle only on the player's client
@@ -8687,6 +9028,12 @@ Used by `minetest.add_particle`.
-- If set to a valid number 1-6, specifies the tile from which the
-- particle texture is picked.
-- Otherwise, the default behavior is used. (currently: any random tile)
+
+ drag = {x=0, y=0, z=0},
+ -- v5.6.0 and later: Optional drag value, consult the following section
+
+ bounce = {min = ..., max = ..., bias = 0},
+ -- v5.6.0 and later: Optional bounce range, consult the following section
}
@@ -8695,7 +9042,20 @@ Used by `minetest.add_particle`.
Used by `minetest.add_particlespawner`.
+Before v5.6.0, particlespawners used a different syntax and had a more limited set
+of features. Definition fields that are the same in both legacy and modern versions
+are shown in the next listing, and the fields that are used by legacy versions are
+shown separated by a comment; the modern fields are too complex to compactly
+describe in this manner and are documented after the listing.
+
+The older syntax can be used in combination with the newer syntax (e.g. having
+`minpos`, `maxpos`, and `pos` all set) to support older servers. On newer servers,
+the new syntax will override the older syntax; on older servers, the newer syntax
+will be ignored.
+
{
+ -- Common fields (same name and meaning in both new and legacy syntax)
+
amount = 1,
-- Number of particles spawned over the time period `time`.
@@ -8704,22 +9064,6 @@ Used by `minetest.add_particlespawner`.
-- If time is 0 spawner has infinite lifespan and spawns the `amount` on
-- a per-second basis.
- minpos = {x=0, y=0, z=0},
- maxpos = {x=0, y=0, z=0},
- minvel = {x=0, y=0, z=0},
- maxvel = {x=0, y=0, z=0},
- minacc = {x=0, y=0, z=0},
- maxacc = {x=0, y=0, z=0},
- minexptime = 1,
- maxexptime = 1,
- minsize = 1,
- maxsize = 1,
- -- The particles' properties are random values between the min and max
- -- values.
- -- applies to: pos, velocity, acceleration, expirationtime, size
- -- If `node` is set, min and maxsize can be set to 0 to spawn
- -- randomly-sized particles (just like actual node dig particles).
-
collisiondetection = false,
-- If true collide with `walkable` nodes and, depending on the
-- `object_collision` field, objects too.
@@ -8748,8 +9092,11 @@ Used by `minetest.add_particlespawner`.
animation = {Tile Animation definition},
-- Optional, specifies how to animate the particles' texture
+ -- v5.6.0 and later: set length to -1 to sychronize the length
+ -- of the animation with the expiration time of individual particles.
+ -- (-2 causes the animation to be played twice, and so on)
- glow = 0
+ glow = 0,
-- Optional, specify particle self-luminescence in darkness.
-- Values 0-14.
@@ -8763,8 +9110,307 @@ Used by `minetest.add_particlespawner`.
-- If set to a valid number 1-6, specifies the tile from which the
-- particle texture is picked.
-- Otherwise, the default behavior is used. (currently: any random tile)
+
+ -- Legacy definition fields
+
+ minpos = {x=0, y=0, z=0},
+ maxpos = {x=0, y=0, z=0},
+ minvel = {x=0, y=0, z=0},
+ maxvel = {x=0, y=0, z=0},
+ minacc = {x=0, y=0, z=0},
+ maxacc = {x=0, y=0, z=0},
+ minexptime = 1,
+ maxexptime = 1,
+ minsize = 1,
+ maxsize = 1,
+ -- The particles' properties are random values between the min and max
+ -- values.
+ -- applies to: pos, velocity, acceleration, expirationtime, size
+ -- If `node` is set, min and maxsize can be set to 0 to spawn
+ -- randomly-sized particles (just like actual node dig particles).
+ }
+
+### Modern definition fields
+
+After v5.6.0, spawner properties can be defined in several different ways depending
+on the level of control you need. `pos` for instance can be set as a single vector,
+in which case all particles will appear at that exact point throughout the lifetime
+of the spawner. Alternately, it can be specified as a min-max pair, specifying a
+cubic range the particles can appear randomly within. Finally, some properties can
+be animated by suffixing their key with `_tween` (e.g. `pos_tween`) and supplying
+a tween table.
+
+The following definitions are all equivalent, listed in order of precedence from
+lowest (the legacy syntax) to highest (tween tables). If multiple forms of a
+property definition are present, the highest-precidence form will be selected
+and all lower-precedence fields will be ignored, allowing for graceful
+degradation in older clients).
+
+ {
+ -- old syntax
+ maxpos = {x = 0, y = 0, z = 0},
+ minpos = {x = 0, y = 0, z = 0},
+
+ -- absolute value
+ pos = 0,
+ -- all components of every particle's position vector will be set to this
+ -- value
+
+ -- vec3
+ pos = vector.new(0,0,0),
+ -- all particles will appear at this exact position throughout the lifetime
+ -- of the particlespawner
+
+ -- vec3 range
+ pos = {
+ -- the particle will appear at a position that is picked at random from
+ -- within a cubic range
+
+ min = vector.new(0,0,0),
+ -- `min` is the minimum value this property will be set to in particles
+ -- spawned by the generator
+
+ max = vector.new(0,0,0),
+ -- `max` is the minimum value this property will be set to in particles
+ -- spawned by the generator
+
+ bias = 0,
+ -- when `bias` is 0, all random values are exactly as likely as any
+ -- other. when it is positive, the higher it is, the more likely values
+ -- will appear towards the minimum end of the allowed spectrum. when
+ -- it is negative, the lower it is, the more likely values will appear
+ -- towards the maximum end of the allowed spectrum. the curve is
+ -- exponential and there is no particular maximum or minimum value
+ },
+
+ -- tween table
+ pos_tween = {...},
+ -- a tween table should consist of a list of frames in the same form as the
+ -- untweened pos property above, which the engine will interpolate between,
+ -- and optionally a number of properties that control how the interpolation
+ -- takes place. currently **only two frames**, the first and the last, are
+ -- used, but extra frames are accepted for the sake of forward compatibility.
+ -- any of the above definition styles can be used here as well in any combination
+ -- supported by the property type
+
+ pos_tween = {
+ style = "fwd",
+ -- linear animation from first to last frame (default)
+ style = "rev",
+ -- linear animation from last to first frame
+ style = "pulse",
+ -- linear animation from first to last then back to first again
+ style = "flicker",
+ -- like "pulse", but slightly randomized to add a bit of stutter
+
+ reps = 1,
+ -- number of times the animation is played over the particle's lifespan
+
+ start = 0.0,
+ -- point in the spawner's lifespan at which the animation begins. 0 is
+ -- the very beginning, 1 is the very end
+
+ -- frames can be defined in a number of different ways, depending on the
+ -- underlying type of the property. for now, all but the first and last
+ -- frame are ignored
+
+ -- frames
+
+ -- floats
+ 0, 0,
+
+ -- vec3s
+ vector.new(0,0,0),
+ vector.new(0,0,0),
+
+ -- vec3 ranges
+ { min = vector.new(0,0,0), max = vector.new(0,0,0), bias = 0 },
+ { min = vector.new(0,0,0), max = vector.new(0,0,0), bias = 0 },
+
+ -- mixed
+ 0, { min = vector.new(0,0,0), max = vector.new(0,0,0), bias = 0 },
+ },
+ }
+
+All of the properties that can be defined in this way are listed in the next
+section, along with the datatypes they accept.
+
+#### List of particlespawner properties
+All of the properties in this list can be animated with `*_tween` tables
+unless otherwise specified. For example, `jitter` can be tweened by setting
+a `jitter_tween` table instead of (or in addition to) a `jitter` table/value.
+Types used are defined in the previous section.
+
+* vec3 range `pos`: the position at which particles can appear
+* vec3 range `vel`: the initial velocity of the particle
+* vec3 range `acc`: the direction and speed with which the particle
+ accelerates
+* vec3 range `jitter`: offsets the velocity of each particle by a random
+ amount within the specified range each frame. used to create Brownian motion.
+* vec3 range `drag`: the amount by which absolute particle velocity along
+ each axis is decreased per second. a value of 1.0 means that the particle
+ will be slowed to a stop over the space of a second; a value of -1.0 means
+ that the particle speed will be doubled every second. to avoid interfering
+ with gravity provided by `acc`, a drag vector like `vector.new(1,0,1)` can
+ be used instead of a uniform value.
+* float range `bounce`: how bouncy the particles are when `collisiondetection`
+ is turned on. values less than or equal to `0` turn off particle bounce;
+ `1` makes the particles bounce without losing any velocity, and `2` makes
+ them double their velocity with every bounce. `bounce` is not bounded but
+ values much larger than `1.0` probably aren't very useful.
+* float range `exptime`: the number of seconds after which the particle
+ disappears.
+* table `attract`: sets the birth orientation of particles relative to various
+ shapes defined in world coordinate space. this is an alternative means of
+ setting the velocity which allows particles to emerge from or enter into
+ some entity or node on the map, rather than simply being assigned random
+ velocity values within a range. the velocity calculated by this method will
+ be **added** to that specified by `vel` if `vel` is also set, so in most
+ cases **`vel` should be set to 0**. `attract` has the fields:
+ * string `kind`: selects the kind of shape towards which the particles will
+ be oriented. it must have one of the following values:
+ * `"none"`: no attractor is set and the `attractor` table is ignored
+ * `"point"`: the particles are attracted to a specific point in space.
+ use this also if you want a sphere-like effect, in combination with
+ the `radius` property.
+ * `"line"`: the particles are attracted to an (infinite) line passing
+ through the points `origin` and `angle`. use this for e.g. beacon
+ effects, energy beam effects, etc.
+ * `"plane"`: the particles are attracted to an (infinite) plane on whose
+ surface `origin` designates a point in world coordinate space. use this
+ for e.g. particles entering or emerging from a portal.
+ * float range `strength`: the speed with which particles will move towards
+ `attractor`. If negative, the particles will instead move away from that
+ point.
+ * vec3 `origin`: the origin point of the shape towards which particles will
+ initially be oriented. functions as an offset if `origin_attached` is also
+ set.
+ * vec3 `direction`: sets the direction in which the attractor shape faces. for
+ lines, this sets the angle of the line; e.g. a vector of (0,1,0) will
+ create a vertical line that passes through `origin`. for planes, `direction`
+ is the surface normal of an infinite plane on whose surface `origin` is
+ a point. functions as an offset if `direction_attached` is also set.
+ * entity `origin_attached`: allows the origin to be specified as an offset
+ from the position of an entity rather than a coordinate in world space.
+ * entity `direction_attached`: allows the direction to be specified as an offset
+ from the position of an entity rather than a coordinate in world space.
+ * bool `die_on_contact`: if true, the particles' lifetimes are adjusted so
+ that they will die as they cross the attractor threshold. this behavior
+ is the default but is undesirable for some kinds of animations; set it to
+ false to allow particles to live out their natural lives.
+* vec3 range `radius`: if set, particles will be arranged in a sphere around
+ `pos`. A constant can be used to create a spherical shell of particles, a
+ vector to create an ovoid shell, and a range to create a volume; e.g.
+ `{min = 0.5, max = 1, bias = 1}` will allow particles to appear between 0.5
+ and 1 nodes away from `pos` but will cluster them towards the center of the
+ sphere. Usually if `radius` is used, `pos` should be a single point, but it
+ can still be a range if you really know what you're doing (e.g. to create a
+ "roundcube" emitter volume).
+
+### Textures
+
+In versions before v5.6.0, particlespawner textures could only be specified as a single
+texture string. After v5.6.0, textures can now be specified as a table as well. This
+table contains options that allow simple animations to be applied to the texture.
+
+ texture = {
+ name = "mymod_particle_texture.png",
+ -- the texture specification string
+
+ alpha = 1.0,
+ -- controls how visible the particle is; at 1.0 the particle is fully
+ -- visible, at 0, it is completely invisible.
+
+ alpha_tween = {1, 0},
+ -- can be used instead of `alpha` to animate the alpha value over the
+ -- particle's lifetime. these tween tables work identically to the tween
+ -- tables used in particlespawner properties, except that time references
+ -- are understood with respect to the particle's lifetime, not the
+ -- spawner's. {1,0} fades the particle out over its lifetime.
+
+ scale = 1,
+ scale = {x = 1, y = 1},
+ -- scales the texture onscreen
+
+ scale_tween = {
+ {x = 1, y = 1},
+ {x = 0, y = 1},
+ },
+ -- animates the scale over the particle's lifetime. works like the
+ -- alpha_tween table, but can accept two-dimensional vectors as well as
+ -- integer values. the example value would cause the particle to shrink
+ -- in one dimension over the course of its life until it disappears
+
+ blend = "alpha",
+ -- (default) blends transparent pixels with those they are drawn atop
+ -- according to the alpha channel of the source texture. useful for
+ -- e.g. material objects like rocks, dirt, smoke, or node chunks
+ blend = "add",
+ -- adds the value of pixels to those underneath them, modulo the sources
+ -- alpha channel. useful for e.g. bright light effects like sparks or fire
+ blend = "screen",
+ -- like "add" but less bright. useful for subtler light effecs. note that
+ -- this is NOT formally equivalent to the "screen" effect used in image
+ -- editors and compositors, as it does not respect the alpha channel of
+ -- of the image being blended
+ blend = "sub",
+ -- the inverse of "add"; the value of the source pixel is subtracted from
+ -- the pixel underneath it. a white pixel will turn whatever is underneath
+ -- it black; a black pixel will be "transparent". useful for creating
+ -- darkening effects
+
+ animation = {Tile Animation definition},
+ -- overrides the particlespawner's global animation property for a single
+ -- specific texture
}
+Instead of setting a single texture definition, it is also possible to set a
+`texpool` property. A `texpool` consists of a list of possible particle textures.
+Every time a particle is spawned, the engine will pick a texture at random from
+the `texpool` and assign it as that particle's texture. You can also specify a
+`texture` in addition to a `texpool`; the `texture` value will be ignored on newer
+clients but will be sent to older (pre-v5.6.0) clients that do not implement
+texpools.
+
+ texpool = {
+ "mymod_particle_texture.png";
+ { name = "mymod_spark.png", fade = "out" },
+ {
+ name = "mymod_dust.png",
+ alpha = 0.3,
+ scale = 1.5,
+ animation = {
+ type = "vertical_frames",
+ aspect_w = 16, aspect_h = 16,
+
+ length = 3,
+ -- the animation lasts for 3s and then repeats
+ length = -3,
+ -- repeat the animation three times over the particle's lifetime
+ -- (post-v5.6.0 clients only)
+ },
+ },
+ }
+
+#### List of animatable texture properties
+
+While animated particlespawner values vary over the course of the particlespawner's
+lifetime, animated texture properties vary over the lifespans of the individual
+particles spawned with that texture. So a particle with the texture property
+
+ alpha_tween = {
+ 0.0, 1.0,
+ style = "pulse",
+ reps = 4,
+ }
+
+would be invisible at its spawning, pulse visible four times throughout its
+lifespan, and then vanish again before expiring.
+
+* float `alpha` (0.0 - 1.0): controls the visibility of the texture
+* vec2 `scale`: controls the size of the displayed billboard onscreen. Its units
+ are multiples of the parent particle's assigned size (see the `size` property above)
+
`HTTPRequest` definition
------------------------
diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt
index 9bc0c46bd..4d495f21e 100644
--- a/doc/menu_lua_api.txt
+++ b/doc/menu_lua_api.txt
@@ -1,4 +1,4 @@
-Minetest Lua Mainmenu API Reference 5.5.0
+Minetest Lua Mainmenu API Reference 5.6.0
=========================================
Introduction
@@ -46,6 +46,8 @@ core.open_url(url)
core.open_dir(path)
^ opens the path in the system file browser/explorer, returns false on failure.
^ Must be an existing directory.
+core.share_file(path)
+^ Android only. Shares file using the share popup
core.get_version() (possible in async calls)
^ returns current core version
@@ -221,13 +223,24 @@ 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, where mods can be installed
+ * returns path to global modpath in the user path, where mods can be installed
* core.get_modpaths() (possible in async calls)
- * returns list of paths to global modpaths, where mods have been installed
-
+ * returns table of virtual path 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.
+ Ex:
+
+ ```
+ {
+ mods = "/home/user/.minetest/mods",
+ share = "/usr/share/minetest/mods",
+
+ -- Custom dirs can be specified by the MINETEST_MOD_DIR env variable
+ ["/path/to/custom/dir"] = "/path/to/custom/dir",
+ }
+ ```
+
* core.get_clientmodpath() (possible in async calls)
* returns path to global client-side modpath
* core.get_gamepath() (possible in async calls)
@@ -235,13 +248,14 @@ Package - content which is downloadable from the content db, may or may not be i
* core.get_texturepath() (possible in async calls)
* returns path to default textures
* core.get_game(index)
+ * `name` in return value is deprecated, use `title` instead.
* returns:
{
id = <id>,
path = <full path to game>,
gamemods_path = <path>,
- name = <name of game>,
+ title = <title of game>,
menuicon_path = <full path to menuicon>,
author = "author",
DEPRECATED:
@@ -253,15 +267,27 @@ Package - content which is downloadable from the content db, may or may not be i
* returns
{
- name = "name of content",
+ name = "technical_id",
type = "mod" or "modpack" or "game" or "txp",
+ title = "Human readable title",
description = "description",
author = "author",
path = "path/to/content",
depends = {"mod", "names"}, -- mods only
optional_depends = {"mod", "names"}, -- mods only
}
+* core.check_mod_configuration(world_path, mod_paths)
+ * Checks whether configuration is valid.
+ * `world_path`: path to the world
+ * `mod_paths`: list of enabled mod paths
+ * returns:
+ {
+ is_consistent = true, -- true is consistent, false otherwise
+ unsatisfied_mods = {}, -- list of mod specs
+ satisfied_mods = {}, -- list of mod specs
+ error_message = "", -- message or nil
+ }
Logging
-------
diff --git a/doc/minetest.6 b/doc/minetest.6
index 6a3601f80..27a3d0024 100644
--- a/doc/minetest.6
+++ b/doc/minetest.6
@@ -92,8 +92,6 @@ Set password from contents of file
.B \-\-random\-input
Enable random user input, for testing (client only)
.TP
-.B \-\-videomodes
-List available video modes (client only)
.TP
.B \-\-speedtests
Run speed tests
diff --git a/doc/world_format.txt b/doc/world_format.txt
index eb1d7f728..17923df8e 100644
--- a/doc/world_format.txt
+++ b/doc/world_format.txt
@@ -129,9 +129,34 @@ Example content (added indentation and - explanations):
backend = sqlite3 - which DB backend to use for blocks (sqlite3, dummy, leveldb, redis, postgresql)
player_backend = sqlite3 - which DB backend to use for player data
readonly_backend = sqlite3 - optionally readonly seed DB (DB file _must_ be located in "readonly" subfolder)
+ auth_backend = files - which DB backend to use for authentication data
server_announce = false - whether the server is publicly announced or not
load_mod_<mod> = false - whether <mod> is to be loaded in this world
- auth_backend = files - which DB backend to use for authentication data
+
+For load_mod_<mod>, the possible values are:
+
+* `false` - Do not load the mod.
+* `true` - Load the mod from wherever it is found (may cause conflicts if the same mod appears also in some other place).
+* `mods/modpack/moddir` - Relative path to the mod
+ * Must be one of the following:
+ * `mods/`: mods in the user path's mods folder (ex `/home/user/.minetest/mods`)
+ * `share/`: mods in the share's mods folder (ex: `/usr/share/minetest/mods`)
+ * `/path/to/env`: you can use absolute paths to mods inside folders specified with the `MINETEST_MOD_PATH` env variable.
+ * Other locations and absolute paths are not supported
+ * Note that `moddir` is the directory name, not the mod name specified in mod.conf.
+
+PostgreSQL backend specific settings:
+ pgsql_connection = host=127.0.0.1 port=5432 user=mt_user password=mt_password dbname=minetest
+ pgsql_player_connection = (same parameters as above)
+ pgsql_readonly_connection = (same parameters as above)
+ pgsql_auth_connection = (same parameters as above)
+
+Redis backend specific settings:
+ redis_address = 127.0.0.1 - Redis server address
+ redis_hash = foo - Database hash
+ redis_port = 6379 - (optional) connection port
+ redis_password = hunter2 - (optional) server password
+
Player File Format
===================
@@ -333,6 +358,9 @@ if map format version >= 29:
- 0xffffffff = invalid/unknown timestamp, nothing should be done with the time
difference when loaded
+ u8 name_id_mapping_version
+ - Should be zero for map format version 29.
+
u16 num_name_id_mappings
foreach num_name_id_mappings
u16 id
@@ -434,7 +462,7 @@ if map format version < 29:
u8[name_len] name
- Node timers
-if map format version == 25:
+if map format version >= 25:
u8 length of the data of a single timer (always 2+4+4=10)
u16 num_of_timers
foreach num_of_timers:
diff --git a/games/devtest/.luacheckrc b/games/devtest/.luacheckrc
new file mode 100644
index 000000000..1c7d3994f
--- /dev/null
+++ b/games/devtest/.luacheckrc
@@ -0,0 +1,43 @@
+unused_args = false
+allow_defined_top = true
+max_string_line_length = false
+max_line_length = false
+
+ignore = {
+ "131", -- Unused global variable
+ "211", -- Unused local variable
+ "231", -- Local variable never accessed
+ "311", -- Value assigned to a local variable is unused
+ "412", -- Redefining an argument
+ "421", -- Shadowing a local variable
+ "431", -- Shadowing an upvalue
+ "432", -- Shadowing an upvalue argument
+ "611", -- Line contains only whitespace
+}
+
+read_globals = {
+ "ItemStack",
+ "INIT",
+ "DIR_DELIM",
+ "dump", "dump2",
+ "fgettext", "fgettext_ne",
+ "vector",
+ "VoxelArea",
+ "profiler",
+ "Settings",
+ "check",
+ "PseudoRandom",
+
+ string = {fields = {"split", "trim"}},
+ table = {fields = {"copy", "getn", "indexof", "insert_all"}},
+ math = {fields = {"hypot", "round"}},
+}
+
+globals = {
+ "aborted",
+ "minetest",
+ "core",
+ os = { fields = { "tempfolder" } },
+ "_",
+}
+
diff --git a/games/devtest/game.conf b/games/devtest/game.conf
index d6e382ad7..0f5656c99 100644
--- a/games/devtest/game.conf
+++ b/games/devtest/game.conf
@@ -1,2 +1,2 @@
-name = Development Test
+title = Development Test
description = Testing environment to help with testing the engine features of Minetest. It can also be helpful in mod development.
diff --git a/games/devtest/mods/basetools/init.lua b/games/devtest/mods/basetools/init.lua
index fd83b82eb..3ec69d39f 100644
--- a/games/devtest/mods/basetools/init.lua
+++ b/games/devtest/mods/basetools/init.lua
@@ -279,50 +279,135 @@ minetest.register_tool("basetools:sword_wood", {
})
minetest.register_tool("basetools:sword_stone", {
description = "Stone Sword".."\n"..
- "Damage: fleshy=4",
+ "Damage: fleshy=5",
inventory_image = "basetools_stonesword.png",
tool_capabilities = {
full_punch_interval = 1.0,
max_drop_level=0,
- damage_groups = {fleshy=4},
+ damage_groups = {fleshy=5},
}
})
minetest.register_tool("basetools:sword_steel", {
description = "Steel Sword".."\n"..
- "Damage: fleshy=6",
+ "Damage: fleshy=10",
inventory_image = "basetools_steelsword.png",
tool_capabilities = {
full_punch_interval = 1.0,
max_drop_level=1,
- damage_groups = {fleshy=6},
+ damage_groups = {fleshy=10},
+ }
+})
+minetest.register_tool("basetools:sword_titanium", {
+ description = "Titanium Sword".."\n"..
+ "Damage: fleshy=100",
+ inventory_image = "basetools_titaniumsword.png",
+ tool_capabilities = {
+ full_punch_interval = 1.0,
+ max_drop_level=1,
+ damage_groups = {fleshy=100},
+ }
+})
+minetest.register_tool("basetools:sword_blood", {
+ description = "Blood Sword".."\n"..
+ "Damage: fleshy=1000",
+ inventory_image = "basetools_bloodsword.png",
+ tool_capabilities = {
+ full_punch_interval = 1.0,
+ max_drop_level=1,
+ damage_groups = {fleshy=1000},
+ }
+})
+
+-- Max. damage sword
+minetest.register_tool("basetools:sword_mese", {
+ description = "Mese Sword".."\n"..
+ "Damage: fleshy=32767, fiery=32767, icy=32767".."\n"..
+ "Full Punch Interval: 0.0s",
+ inventory_image = "basetools_mesesword.png",
+ tool_capabilities = {
+ full_punch_interval = 0.0,
+ max_drop_level=1,
+ damage_groups = {fleshy=32767, fiery=32767, icy=32767},
}
})
-- Fire/Ice sword: Deal damage to non-fleshy damage groups
minetest.register_tool("basetools:sword_fire", {
description = "Fire Sword".."\n"..
- "Damage: icy=6",
+ "Damage: icy=10",
inventory_image = "basetools_firesword.png",
tool_capabilities = {
full_punch_interval = 1.0,
max_drop_level=0,
- damage_groups = {icy=6},
+ damage_groups = {icy=10},
}
})
minetest.register_tool("basetools:sword_ice", {
description = "Ice Sword".."\n"..
- "Damage: fiery=6",
+ "Damage: fiery=10",
inventory_image = "basetools_icesword.png",
tool_capabilities = {
full_punch_interval = 1.0,
max_drop_level=0,
- damage_groups = {fiery=6},
+ damage_groups = {fiery=10},
+ }
+})
+minetest.register_tool("basetools:sword_elemental", {
+ description = "Elemental Sword".."\n"..
+ "Damage: fiery=10, icy=10",
+ inventory_image = "basetools_elementalsword.png",
+ tool_capabilities = {
+ full_punch_interval = 1.0,
+ max_drop_level=0,
+ damage_groups = {fiery=10, icy=10},
}
})
+-- Healing weapons: heal HP
+minetest.register_tool("basetools:dagger_heal", {
+ description = "Healing Dagger".."\n"..
+ "Heal: fleshy=1".."\n"..
+ "Full Punch Interval: 0.5s",
+ inventory_image = "basetools_healdagger.png",
+ tool_capabilities = {
+ full_punch_interval = 0.5,
+ damage_groups = {fleshy=-1},
+ }
+})
+minetest.register_tool("basetools:sword_heal", {
+ description = "Healing Sword".."\n"..
+ "Heal: fleshy=10",
+ inventory_image = "basetools_healsword.png",
+ tool_capabilities = {
+ full_punch_interval = 1.0,
+ damage_groups = {fleshy=-10},
+ }
+})
+minetest.register_tool("basetools:sword_heal_super", {
+ description = "Super Healing Sword".."\n"..
+ "Heal: fleshy=32768, fiery=32768, icy=32768",
+ inventory_image = "basetools_superhealsword.png",
+ tool_capabilities = {
+ full_punch_interval = 1.0,
+ damage_groups = {fleshy=-32768, fiery=-32768, icy=-32768},
+ }
+})
+
+
--
-- Dagger: Low damage, fast punch interval
--
+minetest.register_tool("basetools:dagger_wood", {
+ description = "Wooden Dagger".."\n"..
+ "Damage: fleshy=1".."\n"..
+ "Full Punch Interval: 0.5s",
+ inventory_image = "basetools_wooddagger.png",
+ tool_capabilities = {
+ full_punch_interval = 0.5,
+ max_drop_level=0,
+ damage_groups = {fleshy=1},
+ }
+})
minetest.register_tool("basetools:dagger_steel", {
description = "Steel Dagger".."\n"..
"Damage: fleshy=2".."\n"..
@@ -343,7 +428,7 @@ for i=1, #uses do
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",
+ inventory_image = "basetools_usespick.png^[colorize:"..color..":127",
tool_capabilities = {
max_drop_level=0,
groupcaps={
@@ -355,7 +440,7 @@ for i=1, #uses do
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",
+ inventory_image = "basetools_usessword.png^[colorize:"..color..":127",
tool_capabilities = {
damage_groups = {fleshy=1},
punch_attack_uses = u,
diff --git a/games/devtest/mods/basetools/textures/basetools_bloodsword.png b/games/devtest/mods/basetools/textures/basetools_bloodsword.png
new file mode 100644
index 000000000..a521ba4a2
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_bloodsword.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_elementalsword.png b/games/devtest/mods/basetools/textures/basetools_elementalsword.png
new file mode 100644
index 000000000..d007217ee
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_elementalsword.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_firesword.png b/games/devtest/mods/basetools/textures/basetools_firesword.png
index ee2809ab7..eca999ba1 100644
--- a/games/devtest/mods/basetools/textures/basetools_firesword.png
+++ b/games/devtest/mods/basetools/textures/basetools_firesword.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_healdagger.png b/games/devtest/mods/basetools/textures/basetools_healdagger.png
new file mode 100644
index 000000000..3e6eb9cd0
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_healdagger.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_healsword.png b/games/devtest/mods/basetools/textures/basetools_healsword.png
new file mode 100644
index 000000000..f93fddfb2
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_healsword.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_icesword.png b/games/devtest/mods/basetools/textures/basetools_icesword.png
index 35ba8214b..55a8d609d 100644
--- a/games/devtest/mods/basetools/textures/basetools_icesword.png
+++ b/games/devtest/mods/basetools/textures/basetools_icesword.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_mesepick.png b/games/devtest/mods/basetools/textures/basetools_mesepick.png
index 2b5e12cdb..2993b475b 100644
--- a/games/devtest/mods/basetools/textures/basetools_mesepick.png
+++ b/games/devtest/mods/basetools/textures/basetools_mesepick.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_mesesword.png b/games/devtest/mods/basetools/textures/basetools_mesesword.png
new file mode 100644
index 000000000..bc82769bc
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_mesesword.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_superhealsword.png b/games/devtest/mods/basetools/textures/basetools_superhealsword.png
new file mode 100644
index 000000000..4175a0917
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_superhealsword.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_titaniumsword.png b/games/devtest/mods/basetools/textures/basetools_titaniumsword.png
new file mode 100644
index 000000000..55e22c7d5
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_titaniumsword.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_usespick.png b/games/devtest/mods/basetools/textures/basetools_usespick.png
new file mode 100644
index 000000000..27850f961
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_usespick.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_usessword.png b/games/devtest/mods/basetools/textures/basetools_usessword.png
new file mode 100644
index 000000000..0eaf4cf38
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_usessword.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_wooddagger.png b/games/devtest/mods/basetools/textures/basetools_wooddagger.png
new file mode 100644
index 000000000..6e5ab0fd6
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_wooddagger.png
Binary files differ
diff --git a/games/devtest/mods/testentities/armor.lua b/games/devtest/mods/testentities/armor.lua
index 306953d50..415e5bd19 100644
--- a/games/devtest/mods/testentities/armor.lua
+++ b/games/devtest/mods/testentities/armor.lua
@@ -4,10 +4,19 @@
local phasearmor = {
[0]={icy=100},
[1]={fiery=100},
- [2]={fleshy=100},
- [3]={immortal=1},
- [4]={punch_operable=1},
+ [2]={icy=100, fiery=100},
+ [3]={fleshy=-100},
+ [4]={fleshy=1},
+ [5]={fleshy=10},
+ [6]={fleshy=50},
+ [7]={fleshy=100},
+ [8]={fleshy=200},
+ [9]={fleshy=1000},
+ [10]={fleshy=32767},
+ [11]={immortal=1},
+ [12]={punch_operable=1},
}
+local max_phase = 12
minetest.register_entity("testentities:armorball", {
initial_properties = {
@@ -17,11 +26,11 @@ minetest.register_entity("testentities:armorball", {
visual = "sprite",
visual_size = {x=1, y=1},
textures = {"testentities_armorball.png"},
- spritediv = {x=1, y=5},
+ spritediv = {x=1, y=max_phase+1},
initial_sprite_basepos = {x=0, y=0},
},
- _phase = 2,
+ _phase = 7,
on_activate = function(self, staticdata)
minetest.log("action", "[testentities] armorball.on_activate")
@@ -32,10 +41,21 @@ minetest.register_entity("testentities:armorball", {
on_rightclick = function(self, clicker)
-- Change armor group and sprite
self._phase = self._phase + 1
- if self._phase >= 5 then
+ if self._phase >= max_phase + 1 then
self._phase = 0
end
self.object:set_sprite({x=0, y=self._phase})
self.object:set_armor_groups(phasearmor[self._phase])
end,
+
+ on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir, damage)
+ if not puncher then
+ return
+ end
+ local name = puncher:get_player_name()
+ if not name then
+ return
+ end
+ minetest.chat_send_player(name, "time_from_last_punch="..string.format("%.3f", time_from_last_punch).."; damage="..tostring(damage))
+ end,
})
diff --git a/games/devtest/mods/testentities/callbacks.lua b/games/devtest/mods/testentities/callbacks.lua
index 320690b39..a212fbfbe 100644
--- a/games/devtest/mods/testentities/callbacks.lua
+++ b/games/devtest/mods/testentities/callbacks.lua
@@ -31,8 +31,8 @@ minetest.register_entity("testentities:callback", {
on_activate = function(self, staticdata, dtime_s)
message("Callback entity: on_activate! pos="..spos(self).."; dtime_s="..dtime_s)
end,
- on_deactivate = function(self)
- message("Callback entity: on_deactivate! pos="..spos(self))
+ on_deactivate = function(self, removal)
+ message("Callback entity: on_deactivate! pos="..spos(self) .. "; removal=" .. tostring(removal))
end,
on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir, damage)
local name = get_object_name(puncher)
diff --git a/games/devtest/mods/testentities/textures/testentities_armorball.png b/games/devtest/mods/testentities/textures/testentities_armorball.png
index 88147bd1f..708c7b36d 100644
--- a/games/devtest/mods/testentities/textures/testentities_armorball.png
+++ b/games/devtest/mods/testentities/textures/testentities_armorball.png
Binary files differ
diff --git a/games/devtest/mods/testformspec/formspec.lua b/games/devtest/mods/testformspec/formspec.lua
index c0db695b7..5f1f8970e 100644
--- a/games/devtest/mods/testformspec/formspec.lua
+++ b/games/devtest/mods/testformspec/formspec.lua
@@ -195,8 +195,10 @@ local style_fs = [[
style[one_btn15;border=false;bgcolor=#1cc;bgimg=testformspec_bg.png;bgimg_hovered=testformspec_bg_hovered.png;bgimg_pressed=testformspec_bg_pressed.png]
item_image_button[1.25,9.6;1,1;testformspec:item;one_btn15;Bg]
- style[one_btn16;border=false;bgimg=testformspec_bg_9slice.png;bgimg_hovered=testformspec_bg_9slice_hovered.png;bgimg_pressed=testformspec_bg_9slice_pressed.png;bgimg_middle=4,6]
- button[2.5,9.6;2,1;one_btn16;9-Slice Bg]
+ style[one_btn16;border=false;bgimg=testformspec_bg_9slice.png;bgimg_middle=4,6;padding=5,7;fgimg=testformspec_bg.png;fgimg_middle=1]
+ style[one_btn16:hovered;bgimg=testformspec_bg_9slice_hovered.png;fgimg=testformspec_bg_hovered.png]
+ style[one_btn16:pressed;bgimg=testformspec_bg_9slice_pressed.png;fgimg=testformspec_bg_pressed.png]
+ image_button[2.5,9.6;2,1;;one_btn16;9-Slice Bg]
@@ -375,12 +377,16 @@ local pages = {
-- Animation
[[
- formspec_version[3]
+ formspec_version[6]
size[12,13]
animated_image[0.5,0.5;1,1;;testformspec_animation.png;4;100]
animated_image[0.5,1.75;1,1;;testformspec_animation.jpg;4;100]
animated_image[1.75,0.5;1,1;;testformspec_animation.png;100;100]
animated_image[3,0.5;1,1;ani_img_1;testformspec_animation.png;4;1000]
+ image[0.5,3;1,1;testformspec_bg.png;1]
+ animated_image[0.5,4.25;1,1;;[combine:16x48:0,0=testformspec_bg.png:0,16=testformspec_bg_hovered.png:0,32=testformspec_bg_pressed.png;3;250;1;1]
+ image[0.5,5.5;2,1;testformspec_9slice.png;16,0,-16,-16]
+ animated_image[2.75,5.5;1.5,0.5;;[combine:300x140:0,0=testformspec_9slice.png:0,70=(testformspec_9slice.png^[transformFX);2;500;1;16,0,-16,-16]
button[4.25,0.5;1,1;ani_btn_1;Current
Number]
animated_image[3,1.75;1,1;ani_img_2;testformspec_animation.png;4;1000;2]
@@ -430,6 +436,33 @@ mouse control = true]
checkbox[0.5,5.5.5;snd_chk;Sound;]
tabheader[0.5,7;8,0.65;snd_tab;Soundtab1,Soundtab2,Soundtab3;1;false;false]
]],
+
+ -- Background
+ [[
+ formspec_version[3]
+ size[12,13]
+ box[0,0;12,13;#f0f1]
+ background[0,0;0,0;testformspec_bg.png;true]
+ box[3.9,2.9;6.2,4.2;#d00f]
+ scroll_container[4,3;6,4;scrbar;vertical]
+ background9[1,0.5;0,0;testformspec_bg_9slice.png;true;4,6]
+ label[0,0.2;Backgrounds are not be applied to scroll containers,]
+ label[0,0.5;but to the whole form.]
+ scroll_container_end[]
+ scrollbar[3.5,3;0.3,4;vertical;scrbar;0]
+ container[2,11]
+ box[-0.1,0.5;3.2,1;#fff5]
+ background[0,0;2,3;testformspec_bg.png;false]
+ background9[1,0;2,3;testformspec_bg_9slice.png;false;4,6]
+ container_end[]
+ ]],
+
+ -- Unsized
+ [[
+ formspec_version[3]
+ background9[0,0;0,0;testformspec_bg_9slice.png;true;4,6]
+ background[1,1;0,0;testformspec_bg.png;true]
+ ]],
}
local page_id = 2
@@ -439,7 +472,7 @@ local function show_test_formspec(pname)
page = page()
end
- 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]"
+ local fs = page .. "tabheader[0,0;11,0.65;maintabs;Real Coord,Styles,Noclip,Hypertext,Tabs,Invs,Window,Anim,Model,ScrollC,Sound,Background,Unsized;" .. page_id .. ";false;false]"
minetest.show_formspec(pname, "testformspec:formspec", fs)
end
diff --git a/games/devtest/mods/testformspec/textures/testformspec_9slice.png b/games/devtest/mods/testformspec/textures/testformspec_9slice.png
new file mode 100644
index 000000000..70b6412a4
--- /dev/null
+++ b/games/devtest/mods/testformspec/textures/testformspec_9slice.png
Binary files differ
diff --git a/games/devtest/mods/testitems/init.lua b/games/devtest/mods/testitems/init.lua
new file mode 100644
index 000000000..33ebf50fc
--- /dev/null
+++ b/games/devtest/mods/testitems/init.lua
@@ -0,0 +1,55 @@
+local S = minetest.get_translator("testitems")
+
+--
+-- Texture overlays for items
+--
+
+-- For the global overlay color test
+local GLOBAL_COLOR_ARG = "orange"
+
+-- Punch handler to set random color with "color" argument in item metadata
+local overlay_on_use = function(itemstack, user, pointed_thing)
+ local meta = itemstack:get_meta()
+ local color = math.random(0x0, 0xFFFFFF)
+ local colorstr = string.format("#%06x", color)
+ meta:set_string("color", colorstr)
+ minetest.log("action", "[testitems] Color of "..itemstack:get_name().." changed to "..colorstr)
+ return itemstack
+end
+-- Place handler to clear item metadata color
+local overlay_on_place = function(itemstack, user, pointed_thing)
+ local meta = itemstack:get_meta()
+ meta:set_string("color", "")
+ return itemstack
+end
+
+minetest.register_craftitem("testitems:overlay_meta", {
+ description = S("Texture Overlay Test Item, Meta Color") .. "\n" ..
+ S("Image must be a square with rainbow cross (inventory and wield)") .. "\n" ..
+ S("Item meta color must only change square color") .. "\n" ..
+ S("Punch: Set random color") .. "\n" ..
+ S("Place: Clear color"),
+ -- Base texture: A grayscale square (can be colorized)
+ inventory_image = "testitems_overlay_base.png",
+ wield_image = "testitems_overlay_base.png",
+ -- Overlay: A rainbow cross (NOT to be colorized!)
+ inventory_overlay = "testitems_overlay_overlay.png",
+ wield_overlay = "testitems_overlay_overlay.png",
+
+ on_use = overlay_on_use,
+ on_place = overlay_on_place,
+ on_secondary_use = overlay_on_place,
+})
+minetest.register_craftitem("testitems:overlay_global", {
+ description = S("Texture Overlay Test Item, Global Color") .. "\n" ..
+ S("Image must be an orange square with rainbow cross (inventory and wield)"),
+ -- Base texture: A grayscale square (to be colorized)
+ inventory_image = "testitems_overlay_base.png",
+ wield_image = "testitems_overlay_base.png",
+ -- Overlay: A rainbow cross (NOT to be colorized!)
+ inventory_overlay = "testitems_overlay_overlay.png",
+ wield_overlay = "testitems_overlay_overlay.png",
+ color = GLOBAL_COLOR_ARG,
+})
+
+
diff --git a/games/devtest/mods/testitems/mod.conf b/games/devtest/mods/testitems/mod.conf
new file mode 100644
index 000000000..f91febe01
--- /dev/null
+++ b/games/devtest/mods/testitems/mod.conf
@@ -0,0 +1,2 @@
+name = testitems
+description = Test mod to test misc. items that are neither tools nor nodes
diff --git a/games/devtest/mods/testitems/textures/testitems_overlay_base.png b/games/devtest/mods/testitems/textures/testitems_overlay_base.png
new file mode 100644
index 000000000..f473623be
--- /dev/null
+++ b/games/devtest/mods/testitems/textures/testitems_overlay_base.png
Binary files differ
diff --git a/games/devtest/mods/testitems/textures/testitems_overlay_overlay.png b/games/devtest/mods/testitems/textures/testitems_overlay_overlay.png
new file mode 100644
index 000000000..75a7d9fc3
--- /dev/null
+++ b/games/devtest/mods/testitems/textures/testitems_overlay_overlay.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/init.lua b/games/devtest/mods/testnodes/init.lua
index 92e2c5630..d355c4278 100644
--- a/games/devtest/mods/testnodes/init.lua
+++ b/games/devtest/mods/testnodes/init.lua
@@ -8,3 +8,4 @@ dofile(path.."/properties.lua")
dofile(path.."/liquids.lua")
dofile(path.."/light.lua")
dofile(path.."/textures.lua")
+dofile(path.."/overlays.lua")
diff --git a/games/devtest/mods/testnodes/overlays.lua b/games/devtest/mods/testnodes/overlays.lua
new file mode 100644
index 000000000..294e06a16
--- /dev/null
+++ b/games/devtest/mods/testnodes/overlays.lua
@@ -0,0 +1,93 @@
+local S = minetest.get_translator("testnodes")
+
+minetest.register_node("testnodes:overlay", {
+ description = S("Texture Overlay Test Node") .. "\n" ..
+ S("Uncolorized"),
+ tiles = {{name = "testnodes_overlayable.png"}},
+ overlay_tiles = {{name = "testnodes_overlay.png"}},
+ groups = { dig_immediate = 2 },
+})
+minetest.register_node("testnodes:overlay_color_all", {
+ description = S("Texture Overlay Test Node, Colorized") .. "\n" ..
+ S("param2 changes color"),
+ tiles = {{name = "testnodes_overlayable.png"}},
+ overlay_tiles = {{name = "testnodes_overlay.png"}},
+ paramtype2 = "color",
+ palette = "testnodes_palette_full.png",
+
+
+ groups = { dig_immediate = 2 },
+})
+minetest.register_node("testnodes:overlay_color_overlay", {
+ description = S("Texture Overlay Test Node, Colorized Overlay") .. "\n" ..
+ S("param2 changes color of overlay"),
+ tiles = {{name = "testnodes_overlayable.png", color="white"}},
+ overlay_tiles = {{name = "testnodes_overlay.png"}},
+ paramtype2 = "color",
+ palette = "testnodes_palette_full.png",
+
+
+ groups = { dig_immediate = 2 },
+})
+minetest.register_node("testnodes:overlay_color_overlayed", {
+ description = S("Texture Overlay Test Node, Colorized Base") .. "\n" ..
+ S("param2 changes color of base texture"),
+ tiles = {{name = "testnodes_overlayable.png"}},
+ overlay_tiles = {{name = "testnodes_overlay.png", color="white"}},
+ paramtype2 = "color",
+ palette = "testnodes_palette_full.png",
+
+
+ groups = { dig_immediate = 2 },
+})
+
+local global_overlay_color = "#FF2000"
+minetest.register_node("testnodes:overlay_global", {
+ description = S("Texture Overlay Test Node, Global Color") .. "\n" ..
+ S("Global color = @1", global_overlay_color),
+ tiles = {{name = "testnodes_overlayable.png"}},
+ overlay_tiles = {{name = "testnodes_overlay.png"}},
+ color = global_overlay_color,
+
+
+ groups = { dig_immediate = 2 },
+})
+minetest.register_node("testnodes:overlay_global_color_all", {
+ description = S("Texture Overlay Test Node, Global Color + Colorized") .. "\n" ..
+ S("Global color = @1", global_overlay_color) .. "\n" ..
+ S("param2 changes color"),
+ tiles = {{name = "testnodes_overlayable.png"}},
+ overlay_tiles = {{name = "testnodes_overlay.png"}},
+ color = global_overlay_color,
+ paramtype2 = "color",
+ palette = "testnodes_palette_full.png",
+
+
+ groups = { dig_immediate = 2 },
+})
+minetest.register_node("testnodes:overlay_global_color_overlay", {
+ description = S("Texture Overlay Test Node, Global Color + Colorized Overlay") .. "\n" ..
+ S("Global color = @1", global_overlay_color) .. "\n" ..
+ S("param2 changes color of overlay"),
+ tiles = {{name = "testnodes_overlayable.png", color=global_overlay_color}},
+ overlay_tiles = {{name = "testnodes_overlay.png"}},
+ color = global_overlay_color,
+ paramtype2 = "color",
+ palette = "testnodes_palette_full.png",
+
+
+ groups = { dig_immediate = 2 },
+})
+minetest.register_node("testnodes:overlay_global_color_overlayed", {
+ description = S("Texture Overlay Test Node, Global Color + Colorized Base") .. "\n" ..
+ S("Global color = @1", global_overlay_color) .. "\n" ..
+ S("param2 changes color of base texture"),
+ tiles = {{name = "testnodes_overlayable.png"}},
+ overlay_tiles = {{name = "testnodes_overlay.png", color=global_overlay_color}},
+ color = global_overlay_color,
+ paramtype2 = "color",
+ palette = "testnodes_palette_full.png",
+
+
+ groups = { dig_immediate = 2 },
+})
diff --git a/games/devtest/mods/testnodes/properties.lua b/games/devtest/mods/testnodes/properties.lua
index 51f703d7c..bacd555cd 100644
--- a/games/devtest/mods/testnodes/properties.lua
+++ b/games/devtest/mods/testnodes/properties.lua
@@ -13,6 +13,20 @@ minetest.register_node("testnodes:falling", {
groups = { falling_node = 1, dig_immediate = 3 },
})
+minetest.register_node("testnodes:falling_facedir", {
+ description = S("Falling Facedir Node"),
+ tiles = {
+ "testnodes_1.png",
+ "testnodes_2.png",
+ "testnodes_3.png",
+ "testnodes_4.png",
+ "testnodes_5.png",
+ "testnodes_6.png",
+ },
+ paramtype2 = "facedir",
+ groups = { falling_node = 1, dig_immediate = 3 },
+})
+
-- Same as falling node, but will stop falling on top of liquids
minetest.register_node("testnodes:falling_float", {
description = S("Falling+Floating Node"),
@@ -252,9 +266,9 @@ for i=-100, 100, 25 do
end
-- Bouncy nodes (various bounce levels)
-for i=20, 180, 20 do
+for i=-140, 180, 20 do
local val = math.floor(((i-20)/200)*255)
- minetest.register_node("testnodes:bouncy"..i, {
+ minetest.register_node(("testnodes:bouncy"..i):gsub("-","NEG"), {
description = S("Bouncy Node (@1%)", i),
groups = {bouncy=i, dig_immediate=3},
diff --git a/games/devtest/mods/testnodes/textures.lua b/games/devtest/mods/testnodes/textures.lua
index dc581b0c7..2faacdd78 100644
--- a/games/devtest/mods/testnodes/textures.lua
+++ b/games/devtest/mods/testnodes/textures.lua
@@ -171,3 +171,120 @@ minetest.register_node("testnodes:generated_png_dst_emb", {
groups = { dig_immediate = 2 },
})
+
+--[[
+
+The following nodes can be used to demonstrate the TGA format support.
+
+Minetest supports TGA types 1, 2, 3 & 10. While adding the support for
+TGA type 9 (RLE-compressed, color-mapped) is easy, it is not advisable
+to do so, as it is not backwards compatible with any Minetest pre-5.5;
+content creators should therefore either use TGA type 1 or 10, or PNG.
+
+TODO: Types 1, 2 & 10 should have two test nodes each (i.e. bottom-top
+and top-bottom) for 16bpp (A1R5G5B5), 24bpp (B8G8R8), 32bpp (B8G8R8A8)
+colors.
+
+Note: Minetest requires the optional TGA footer for a texture to load.
+If a TGA image does not load in Minetest, append eight (8) null bytes,
+then the string “TRUEVISION-XFILE.â€, then another null byte.
+
+]]--
+
+minetest.register_node("testnodes:tga_type1_24bpp_bt", {
+ description = S("TGA Type 1 (color-mapped RGB) 24bpp bottom-top Test Node"),
+ drawtype = "glasslike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = { "testnodes_tga_type1_24bpp_bt.tga" },
+ groups = { dig_immediate = 2 },
+})
+
+minetest.register_node("testnodes:tga_type1_24bpp_tb", {
+ description = S("TGA Type 1 (color-mapped RGB) 24bpp top-bottom Test Node"),
+ drawtype = "glasslike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = { "testnodes_tga_type1_24bpp_tb.tga" },
+ groups = { dig_immediate = 2 },
+})
+
+minetest.register_node("testnodes:tga_type2_16bpp_bt", {
+ description = S("TGA Type 2 (uncompressed RGB) 16bpp bottom-top Test Node"),
+ drawtype = "glasslike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = { "testnodes_tga_type2_16bpp_bt.tga" },
+ use_texture_alpha = "clip",
+ groups = { dig_immediate = 2 },
+})
+
+minetest.register_node("testnodes:tga_type2_16bpp_tb", {
+ description = S("TGA Type 2 (uncompressed RGB) 16bpp top-bottom Test Node"),
+ drawtype = "glasslike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = { "testnodes_tga_type2_16bpp_tb.tga" },
+ use_texture_alpha = "clip",
+ groups = { dig_immediate = 2 },
+})
+
+minetest.register_node("testnodes:tga_type2_32bpp_bt", {
+ description = S("TGA Type 2 (uncompressed RGB) 32bpp bottom-top Test Node"),
+ drawtype = "glasslike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = { "testnodes_tga_type2_32bpp_bt.tga" },
+ use_texture_alpha = "blend",
+ groups = { dig_immediate = 2 },
+})
+
+minetest.register_node("testnodes:tga_type2_32bpp_tb", {
+ description = S("TGA Type 2 (uncompressed RGB) 32bpp top-bottom Test Node"),
+ drawtype = "glasslike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = { "testnodes_tga_type2_32bpp_tb.tga" },
+ use_texture_alpha = "blend",
+ groups = { dig_immediate = 2 },
+})
+
+minetest.register_node("testnodes:tga_type3_16bpp_bt", {
+ description = S("TGA Type 3 (uncompressed grayscale) 16bpp bottom-top Test Node"),
+ drawtype = "glasslike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = { "testnodes_tga_type3_16bpp_bt.tga" },
+ use_texture_alpha = "blend",
+ groups = { dig_immediate = 2 },
+})
+
+minetest.register_node("testnodes:tga_type3_16bpp_tb", {
+ description = S("TGA Type 3 (uncompressed grayscale) 16bpp top-bottom Test Node"),
+ drawtype = "glasslike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = { "testnodes_tga_type3_16bpp_tb.tga" },
+ use_texture_alpha = "blend",
+ groups = { dig_immediate = 2 },
+})
+
+minetest.register_node("testnodes:tga_type10_32bpp_bt", {
+ description = S("TGA Type 10 (RLE-compressed RGB) 32bpp bottom-top Test Node"),
+ tiles = { "testnodes_tga_type10_32bpp_bt.tga" },
+ drawtype = "glasslike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ use_texture_alpha = "blend",
+ groups = { dig_immediate = 2 },
+})
+
+minetest.register_node("testnodes:tga_type10_32bpp_tb", {
+ description = S("TGA Type 10 (RLE-compressed RGB) 32bpp top-bottom Test Node"),
+ drawtype = "glasslike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = { "testnodes_tga_type10_32bpp_tb.tga" },
+ use_texture_alpha = "blend",
+ groups = { dig_immediate = 2 },
+})
diff --git a/games/devtest/mods/testnodes/textures/testnodes_overlay.png b/games/devtest/mods/testnodes/textures/testnodes_overlay.png
new file mode 100644
index 000000000..1c69b5e08
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_overlay.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_overlayable.png b/games/devtest/mods/testnodes/textures/testnodes_overlayable.png
new file mode 100644
index 000000000..431bc94f4
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_overlayable.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_tga_type10_32bpp_bt.tga b/games/devtest/mods/testnodes/textures/testnodes_tga_type10_32bpp_bt.tga
new file mode 100644
index 000000000..2dc587bc3
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_tga_type10_32bpp_bt.tga
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_tga_type10_32bpp_tb.tga b/games/devtest/mods/testnodes/textures/testnodes_tga_type10_32bpp_tb.tga
new file mode 100644
index 000000000..b44a81c79
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_tga_type10_32bpp_tb.tga
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_tga_type1_24bpp_bt.tga b/games/devtest/mods/testnodes/textures/testnodes_tga_type1_24bpp_bt.tga
new file mode 100644
index 000000000..d2c2ca6d2
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_tga_type1_24bpp_bt.tga
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_tga_type1_24bpp_tb.tga b/games/devtest/mods/testnodes/textures/testnodes_tga_type1_24bpp_tb.tga
new file mode 100644
index 000000000..dfcb98864
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_tga_type1_24bpp_tb.tga
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_tga_type2_16bpp_bt.tga b/games/devtest/mods/testnodes/textures/testnodes_tga_type2_16bpp_bt.tga
new file mode 100644
index 000000000..0206216bb
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_tga_type2_16bpp_bt.tga
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_tga_type2_16bpp_tb.tga b/games/devtest/mods/testnodes/textures/testnodes_tga_type2_16bpp_tb.tga
new file mode 100644
index 000000000..2563f084b
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_tga_type2_16bpp_tb.tga
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_tga_type2_32bpp_bt.tga b/games/devtest/mods/testnodes/textures/testnodes_tga_type2_32bpp_bt.tga
new file mode 100644
index 000000000..3350500f8
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_tga_type2_32bpp_bt.tga
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_tga_type2_32bpp_tb.tga b/games/devtest/mods/testnodes/textures/testnodes_tga_type2_32bpp_tb.tga
new file mode 100644
index 000000000..216de0634
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_tga_type2_32bpp_tb.tga
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_tga_type3_16bpp_bt.tga b/games/devtest/mods/testnodes/textures/testnodes_tga_type3_16bpp_bt.tga
new file mode 100644
index 000000000..695bb4bb1
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_tga_type3_16bpp_bt.tga
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_tga_type3_16bpp_tb.tga b/games/devtest/mods/testnodes/textures/testnodes_tga_type3_16bpp_tb.tga
new file mode 100644
index 000000000..c08a093b2
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_tga_type3_16bpp_tb.tga
Binary files differ
diff --git a/games/devtest/mods/testtools/README.md b/games/devtest/mods/testtools/README.md
index a1eb95ed7..72f0a2db0 100644
--- a/games/devtest/mods/testtools/README.md
+++ b/games/devtest/mods/testtools/README.md
@@ -40,6 +40,14 @@ Usage:
* Punch: Open node metadata editor
+## Item Meta Editor
+Edit and view metadata of items.
+
+Usage:
+
+* Place/Punch: Opens item metadata editor of the item in the next
+ inventory slot from the wielded item
+
## Entity Rotator
Changes the entity rotation (with `set_rotation`).
diff --git a/games/devtest/mods/testtools/init.lua b/games/devtest/mods/testtools/init.lua
index 1041acdeb..abc1ed79b 100644
--- a/games/devtest/mods/testtools/init.lua
+++ b/games/devtest/mods/testtools/init.lua
@@ -693,30 +693,40 @@ local function use_loadstring(param, player)
return true, errOrResult
end
--- Node Meta Editor
+-- Item Meta Editor + Node Meta Editor
local node_meta_posses = {}
-local node_meta_latest_keylist = {}
+local meta_latest_keylist = {}
-local function show_node_meta_formspec(user, pos, key, value, keylist)
+local function show_meta_formspec(user, metatype, pos_or_item, 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]"..
+
+ local form = "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))).."]")
+ "button[4,8;3,1;set;"..F(S("Set value")).."]"
+
+ local extra_label
+ local formname
+ if metatype == "node" then
+ formname = "testtools:node_meta_editor"
+ extra_label = S("pos = @1", minetest.pos_to_string(pos_or_item))
+ else
+ formname = "testtools:item_meta_editor"
+ extra_label = S("item = @1", pos_or_item:get_name())
+ end
+ form = form .. "label[0,7.2;"..F(extra_label).."]"
+
+ minetest.show_formspec(user:get_player_name(), formname, form)
end
-local function get_node_meta_keylist(meta, playername, escaped)
+local function get_meta_keylist(meta, playername, escaped)
local keys = {}
local ekeys = {}
local mtable = meta:to_table()
@@ -729,7 +739,7 @@ local function get_node_meta_keylist(meta, playername, escaped)
end
end
if playername then
- node_meta_latest_keylist[playername] = keys
+ meta_latest_keylist[playername] = keys
end
return table.concat(ekeys, ",")
end
@@ -750,11 +760,47 @@ minetest.register_tool("testtools:node_meta_editor", {
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))
+ show_meta_formspec(user, "node", pos, "", "", get_meta_keylist(meta, user:get_player_name(), true))
return itemstack
end,
})
+local function get_item_next_to_wielded_item(player)
+ local inv = player:get_inventory()
+ local wield = player:get_wield_index()
+ local itemstack = inv:get_stack("main", wield+1)
+ return itemstack
+end
+local function set_item_next_to_wielded_item(player, itemstack)
+ local inv = player:get_inventory()
+ local wield = player:get_wield_index()
+ inv:set_stack("main", wield+1, itemstack)
+end
+
+local function use_item_meta_editor(itemstack, user, pointed_thing)
+ if not user:is_player() then
+ return itemstack
+ end
+ local item_to_edit = get_item_next_to_wielded_item(user)
+ if item_to_edit:is_empty() then
+ minetest.chat_send_player(user:get_player_name(), S("Place an item next to the Item Meta Editor in your inventory first!"))
+ return itemstack
+ end
+ local meta = item_to_edit:get_meta()
+ show_meta_formspec(user, "item", item_to_edit, "", "", get_meta_keylist(meta, user:get_player_name(), true))
+ return itemstack
+end
+
+minetest.register_tool("testtools:item_meta_editor", {
+ description = S("Item Meta Editor") .. "\n" ..
+ S("Punch/Place: Edit item metadata of item in the next inventory slot"),
+ inventory_image = "testtools_item_meta_editor.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_use = use_item_meta_editor,
+ on_secondary_use = use_item_meta_editor,
+ on_place = use_item_meta_editor,
+})
+
minetest.register_on_player_receive_fields(function(player, formname, fields)
if not (player and player:is_player()) then
return
@@ -832,17 +878,30 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
player:set_wielded_item(witem)
end
end
- elseif formname == "testtools:node_meta_editor" then
+ elseif formname == "testtools:node_meta_editor" or formname == "testtools:item_meta_editor" then
local name = player:get_player_name()
- local pos = node_meta_posses[name]
+ local metatype
+ local pos_or_item
+ if formname == "testtools:node_meta_editor" then
+ metatype = "node"
+ pos_or_item = node_meta_posses[name]
+ else
+ metatype = "item"
+ pos_or_item = get_item_next_to_wielded_item(player)
+ end
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
+ local keylist_table = meta_latest_keylist[name]
+ if metatype == "node" and not pos_or_item then
return
end
- local meta = minetest.get_meta(pos)
+ local meta
+ if metatype == "node" then
+ meta = minetest.get_meta(pos_or_item)
+ else
+ meta = pos_or_item:get_meta()
+ end
if not keylist_table then
return
end
@@ -856,31 +915,37 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
keylist_escaped[k] = F(v)
end
local keylist = table.concat(keylist_escaped, ",")
- show_node_meta_formspec(player, pos, key, value, keylist)
+ show_meta_formspec(player, metatype, pos_or_item, key, value, keylist)
return
end
elseif fields.key and fields.key ~= "" and fields.value then
- if not pos then
+ if metatype == "node" and not pos_or_item 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
+ local meta
+ if metatype == "node" then
+ meta = minetest.get_meta(pos_or_item)
+ elseif metatype == "item" then
+ if pos_or_item:is_empty() then
+ return
+ end
+ meta = pos_or_item:get_meta()
+ end
+ if 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
+ if metatype == "item" then
+ set_item_next_to_wielded_item(player, pos_or_item)
+ end
+ show_meta_formspec(player, metatype, pos_or_item, fields.key, fields.value,
+ get_meta_keylist(meta, name, true))
end
+ return
end
end
end)
minetest.register_on_leaveplayer(function(player)
local name = player:get_player_name()
- node_meta_latest_keylist[name] = nil
+ meta_latest_keylist[name] = nil
node_meta_posses[name] = nil
end)
diff --git a/games/devtest/mods/testtools/textures/testtools_item_meta_editor.png b/games/devtest/mods/testtools/textures/testtools_item_meta_editor.png
new file mode 100644
index 000000000..5cebb0a9d
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_item_meta_editor.png
Binary files differ
diff --git a/games/devtest/mods/unittests/async_env.lua b/games/devtest/mods/unittests/async_env.lua
new file mode 100644
index 000000000..b7edf941e
--- /dev/null
+++ b/games/devtest/mods/unittests/async_env.lua
@@ -0,0 +1,168 @@
+-- helper
+
+core.register_async_dofile(core.get_modpath(core.get_current_modname()) ..
+ DIR_DELIM .. "inside_async_env.lua")
+
+local function deepequal(a, b)
+ if type(a) == "function" then
+ return type(b) == "function"
+ elseif type(a) ~= "table" then
+ return a == b
+ elseif type(b) ~= "table" then
+ return false
+ end
+ for k, v in pairs(a) do
+ if not deepequal(v, b[k]) then
+ return false
+ end
+ end
+ for k, v in pairs(b) do
+ if not deepequal(a[k], v) then
+ return false
+ end
+ end
+ return true
+end
+
+-- Object Passing / Serialization
+
+local test_object = {
+ name = "stairs:stair_glass",
+ type = "node",
+ groups = {oddly_breakable_by_hand = 3, cracky = 3, stair = 1},
+ description = "Glass Stair",
+ sounds = {
+ dig = {name = "default_glass_footstep", gain = 0.5},
+ footstep = {name = "default_glass_footstep", gain = 0.3},
+ dug = {name = "default_break_glass", gain = 1}
+ },
+ node_box = {
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+ {-0.5, 0, 0, 0.5, 0.5, 0.5}
+ },
+ type = "fixed"
+ },
+ tiles = {
+ {name = "stairs_glass_split.png", backface_culling = true},
+ {name = "default_glass.png", backface_culling = true},
+ {name = "stairs_glass_stairside.png^[transformFX", backface_culling = true}
+ },
+ on_place = function(itemstack, placer)
+ return core.is_player(placer)
+ end,
+ sunlight_propagates = true,
+ is_ground_content = false,
+ light_source = 0,
+}
+
+local function test_object_passing()
+ local tmp = core.serialize_roundtrip(test_object)
+ assert(deepequal(test_object, tmp))
+
+ local circular_key = {"foo", "bar"}
+ circular_key[circular_key] = true
+ tmp = core.serialize_roundtrip(circular_key)
+ assert(tmp[1] == "foo")
+ assert(tmp[2] == "bar")
+ assert(tmp[tmp] == true)
+
+ local circular_value = {"foo"}
+ circular_value[2] = circular_value
+ tmp = core.serialize_roundtrip(circular_value)
+ assert(tmp[1] == "foo")
+ assert(tmp[2] == tmp)
+
+ -- Two-segment cycle
+ local cycle_seg_1, cycle_seg_2 = {}, {}
+ cycle_seg_1[1] = cycle_seg_2
+ cycle_seg_2[1] = cycle_seg_1
+ tmp = core.serialize_roundtrip(cycle_seg_1)
+ assert(tmp[1][1] == tmp)
+
+ -- Duplicated value without a cycle
+ local acyclic_dup_holder = {}
+ tmp = ItemStack("")
+ acyclic_dup_holder[tmp] = tmp
+ tmp = core.serialize_roundtrip(acyclic_dup_holder)
+ for k, v in pairs(tmp) do
+ assert(rawequal(k, v))
+ end
+end
+unittests.register("test_object_passing", test_object_passing)
+
+local function test_userdata_passing(_, pos)
+ -- basic userdata passing
+ local obj = table.copy(test_object.tiles[1])
+ obj.test = ItemStack("default:cobble 99")
+ local tmp = core.serialize_roundtrip(obj)
+ assert(type(tmp.test) == "userdata")
+ assert(obj.test:to_string() == tmp.test:to_string())
+
+ -- object can't be passed, should error
+ obj = core.raycast(pos, pos)
+ assert(not pcall(core.serialize_roundtrip, obj))
+
+ -- VManip
+ local vm = core.get_voxel_manip(pos, pos)
+ local expect = vm:get_node_at(pos)
+ local vm2 = core.serialize_roundtrip(vm)
+ assert(deepequal(vm2:get_node_at(pos), expect))
+end
+unittests.register("test_userdata_passing", test_userdata_passing, {map=true})
+
+-- Asynchronous jobs
+
+local function test_handle_async(cb)
+ -- Basic test including mod name tracking and unittests.async_test()
+ -- which is defined inside_async_env.lua
+ local func = function(x)
+ return core.get_last_run_mod(), _VERSION, unittests[x]()
+ end
+ local expect = {core.get_last_run_mod(), _VERSION, true}
+
+ core.handle_async(func, function(...)
+ if not deepequal(expect, {...}) then
+ return cb("Values did not equal")
+ end
+ if core.get_last_run_mod() ~= expect[1] then
+ return cb("Mod name not tracked correctly")
+ end
+
+ -- Test passing of nil arguments and return values
+ core.handle_async(function(a, b)
+ return a, b
+ end, function(a, b)
+ if b ~= 123 then
+ return cb("Argument went missing")
+ end
+ cb()
+ end, nil, 123)
+ end, "async_test")
+end
+unittests.register("test_handle_async", test_handle_async, {async=true})
+
+local function test_userdata_passing2(cb, _, pos)
+ -- VManip: check transfer into other env
+ local vm = core.get_voxel_manip(pos, pos)
+ local expect = vm:get_node_at(pos)
+
+ core.handle_async(function(vm_, pos_)
+ return vm_:get_node_at(pos_)
+ end, function(ret)
+ if not deepequal(expect, ret) then
+ return cb("Node data mismatch (one-way)")
+ end
+
+ -- VManip: test a roundtrip
+ core.handle_async(function(vm_)
+ return vm_
+ end, function(vm2)
+ if not deepequal(expect, vm2:get_node_at(pos)) then
+ return cb("Node data mismatch (roundtrip)")
+ end
+ cb()
+ end, vm)
+ end, vm, pos)
+end
+unittests.register("test_userdata_passing2", test_userdata_passing2, {map=true, async=true})
diff --git a/games/devtest/mods/unittests/entity.lua b/games/devtest/mods/unittests/entity.lua
new file mode 100644
index 000000000..68635cad7
--- /dev/null
+++ b/games/devtest/mods/unittests/entity.lua
@@ -0,0 +1,132 @@
+local log = {}
+
+local function insert_log(...)
+ log[#log+1] = string.format(...)
+end
+
+local function objref_str(self, ref)
+ if ref and ref:is_player() then
+ return "player"
+ end
+ return self.object == ref and "self" or tostring(ref)
+end
+
+core.register_entity("unittests:callbacks", {
+ initial_properties = {
+ hp_max = 5,
+ visual = "upright_sprite",
+ textures = { "unittests_stick.png" },
+ static_save = false,
+ },
+
+ on_activate = function(self, staticdata, dtime_s)
+ self.object:set_armor_groups({test = 100})
+ assert(self.object:get_hp() == self.initial_properties.hp_max)
+ insert_log("on_activate(%d)", #staticdata)
+ end,
+ on_deactivate = function(self, removal)
+ insert_log("on_deactivate(%s)", tostring(removal))
+ end,
+ on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir, damage)
+ insert_log("on_punch(%s, %.1f, %d)", objref_str(self, puncher),
+ time_from_last_punch, damage)
+ end,
+ on_death = function(self, killer)
+ assert(self.object:get_hp() == 0)
+ insert_log("on_death(%s)", objref_str(self, killer))
+ end,
+ on_rightclick = function(self, clicker)
+ insert_log("on_rightclick(%s)", objref_str(self, clicker))
+ end,
+ on_attach_child = function(self, child)
+ insert_log("on_attach_child(%s)", objref_str(self, child))
+ end,
+ on_detach_child = function(self, child)
+ insert_log("on_detach_child(%s)", objref_str(self, child))
+ end,
+ on_detach = function(self, parent)
+ insert_log("on_detach(%s)", objref_str(self, parent))
+ end,
+ get_staticdata = function(self)
+ assert(false)
+ end,
+})
+
+--
+
+local function check_log(expect)
+ if #expect ~= #log then
+ error("Log mismatch: " .. core.write_json(log))
+ end
+ for i, s in ipairs(expect) do
+ if log[i] ~= s then
+ error("Log mismatch at " .. i .. ": " .. core.write_json(log))
+ end
+ end
+ log = {} -- clear it for next time
+end
+
+local function test_entity_lifecycle(_, pos)
+ log = {}
+
+ -- with binary in staticdata
+ local obj = core.add_entity(pos, "unittests:callbacks", "abc\000def")
+ check_log({"on_activate(7)"})
+
+ obj:set_hp(0)
+ check_log({"on_death(nil)", "on_deactivate(true)"})
+
+ -- objectref must be invalid now
+ assert(obj:get_velocity() == nil)
+end
+unittests.register("test_entity_lifecycle", test_entity_lifecycle, {map=true})
+
+local function test_entity_interact(_, pos)
+ log = {}
+
+ local obj = core.add_entity(pos, "unittests:callbacks")
+ check_log({"on_activate(0)"})
+
+ -- rightclick
+ obj:right_click(obj)
+ check_log({"on_rightclick(self)"})
+
+ -- useless punch
+ obj:punch(obj, 0.5, {})
+ check_log({"on_punch(self, 0.5, 0)"})
+
+ -- fatal punch
+ obj:punch(obj, 1.9, {
+ full_punch_interval = 1.0,
+ damage_groups = { test = 10 },
+ })
+ check_log({
+ -- does 10 damage even though we only have 5 hp
+ "on_punch(self, 1.9, 10)",
+ "on_death(self)",
+ "on_deactivate(true)"
+ })
+end
+unittests.register("test_entity_interact", test_entity_interact, {map=true})
+
+local function test_entity_attach(player, pos)
+ log = {}
+
+ local obj = core.add_entity(pos, "unittests:callbacks")
+ check_log({"on_activate(0)"})
+
+ -- attach player to entity
+ player:set_attach(obj)
+ check_log({"on_attach_child(player)"})
+ player:set_detach()
+ check_log({"on_detach_child(player)"})
+
+ -- attach entity to player
+ obj:set_attach(player)
+ check_log({})
+ obj:set_detach()
+ check_log({"on_detach(player)"})
+
+ obj:remove()
+end
+unittests.register("test_entity_attach", test_entity_attach, {player=true, map=true})
diff --git a/games/devtest/mods/unittests/init.lua b/games/devtest/mods/unittests/init.lua
index 0754d507f..0e041be76 100644
--- a/games/devtest/mods/unittests/init.lua
+++ b/games/devtest/mods/unittests/init.lua
@@ -36,6 +36,7 @@ local function await(invoke)
called_early = {...}
else
coroutine.resume(co, ...)
+ co = nil
end
end)
if called_early ~= true then
@@ -112,7 +113,7 @@ local function wait_for_map(player, callback)
if core.get_node_or_nil(player:get_pos()) ~= nil then
callback()
else
- minetest.after(0, check)
+ core.after(0, check)
end
end
check()
@@ -170,11 +171,13 @@ end
--------------
-local modpath = minetest.get_modpath("unittests")
+local modpath = core.get_modpath("unittests")
dofile(modpath .. "/misc.lua")
dofile(modpath .. "/player.lua")
dofile(modpath .. "/crafting.lua")
dofile(modpath .. "/itemdescription.lua")
+dofile(modpath .. "/async_env.lua")
+dofile(modpath .. "/entity.lua")
--------------
@@ -183,7 +186,7 @@ if core.settings:get_bool("devtest_unittests_autostart", false) then
coroutine.wrap(unittests.run_all)()
end)
else
- minetest.register_chatcommand("unittests", {
+ core.register_chatcommand("unittests", {
privs = {basic_privs=true},
description = "Runs devtest unittests (may modify player or map state)",
func = function(name, param)
diff --git a/games/devtest/mods/unittests/inside_async_env.lua b/games/devtest/mods/unittests/inside_async_env.lua
new file mode 100644
index 000000000..4ed0fccd2
--- /dev/null
+++ b/games/devtest/mods/unittests/inside_async_env.lua
@@ -0,0 +1,25 @@
+unittests = {}
+
+core.log("info", "Hello World")
+
+local function do_tests()
+ assert(core == minetest)
+ -- stuff that should not be here
+ assert(not core.get_player_by_name)
+ assert(not core.set_node)
+ assert(not core.object_refs)
+ -- stuff that should be here
+ assert(ItemStack)
+ assert(core.registered_items[""])
+ -- alias handling
+ assert(core.registered_items["unittests:steel_ingot_alias"].name ==
+ "unittests:steel_ingot")
+end
+
+function unittests.async_test()
+ local ok, err = pcall(do_tests)
+ if not ok then
+ core.log("error", err)
+ end
+ return ok
+end
diff --git a/games/devtest/mods/unittests/itemdescription.lua b/games/devtest/mods/unittests/itemdescription.lua
index dc62de7f0..b4c218c98 100644
--- a/games/devtest/mods/unittests/itemdescription.lua
+++ b/games/devtest/mods/unittests/itemdescription.lua
@@ -1,17 +1,7 @@
-local full_description = "Colorful Pickaxe\nThe best pick."
-minetest.register_tool("unittests:colorful_pick", {
+local full_description = "Description Test Item\nFor testing item decription"
+minetest.register_tool("unittests:description_test", {
description = full_description,
- inventory_image = "basetools_mesepick.png",
- tool_capabilities = {
- full_punch_interval = 1.0,
- max_drop_level=3,
- groupcaps={
- cracky={times={[1]=2.0, [2]=1.0, [3]=0.5}, uses=20, maxlevel=3},
- crumbly={times={[1]=2.0, [2]=1.0, [3]=0.5}, uses=20, maxlevel=3},
- snappy={times={[1]=2.0, [2]=1.0, [3]=0.5}, uses=20, maxlevel=3}
- },
- damage_groups = {fleshy=4},
- },
+ inventory_image = "unittests_description_test.png",
})
minetest.register_chatcommand("item_description", {
@@ -30,18 +20,18 @@ local function test_short_desc()
return ItemStack(item):get_short_description()
end
- local stack = ItemStack("unittests:colorful_pick")
- assert(stack:get_short_description() == "Colorful Pickaxe")
- assert(get_short_description("unittests:colorful_pick") == "Colorful Pickaxe")
- assert(minetest.registered_items["unittests:colorful_pick"].short_description == nil)
+ local stack = ItemStack("unittests:description_test")
+ assert(stack:get_short_description() == "Description Test Item")
+ assert(get_short_description("unittests:description_test") == "Description Test Item")
+ assert(minetest.registered_items["unittests:description_test"].short_description == nil)
assert(stack:get_description() == full_description)
- assert(stack:get_description() == minetest.registered_items["unittests:colorful_pick"].description)
+ assert(stack:get_description() == minetest.registered_items["unittests:description_test"].description)
stack:get_meta():set_string("description", "Hello World")
assert(stack:get_short_description() == "Hello World")
assert(stack:get_description() == "Hello World")
assert(get_short_description(stack) == "Hello World")
- assert(get_short_description("unittests:colorful_pick") == "Colorful Pickaxe")
+ assert(get_short_description("unittests:description_test") == "Description Test Item")
stack:get_meta():set_string("short_description", "Foo Bar")
assert(stack:get_short_description() == "Foo Bar")
diff --git a/games/devtest/mods/unittests/misc.lua b/games/devtest/mods/unittests/misc.lua
index cf4f92cfa..4811c8008 100644
--- a/games/devtest/mods/unittests/misc.lua
+++ b/games/devtest/mods/unittests/misc.lua
@@ -24,7 +24,7 @@ local function test_dynamic_media(cb, player)
to_player = player:get_player_name(),
}, function(name)
if not call_ok then
- cb("impossible condition")
+ return cb("impossible condition")
end
cb()
end)
@@ -36,3 +36,47 @@ local function test_dynamic_media(cb, player)
-- 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})
+
+local function test_v3f_metatable(player)
+ assert(vector.check(player:get_pos()))
+end
+unittests.register("test_v3f_metatable", test_v3f_metatable, {player=true})
+
+local function test_v3s16_metatable(player, pos)
+ local node = minetest.get_node(pos)
+ local found_pos = minetest.find_node_near(pos, 0, node.name, true)
+ assert(vector.check(found_pos))
+end
+unittests.register("test_v3s16_metatable", test_v3s16_metatable, {map=true})
+
+local function test_clear_meta(_, pos)
+ local ref = core.get_meta(pos)
+
+ for way = 1, 3 do
+ ref:set_string("foo", "bar")
+ assert(ref:contains("foo"))
+
+ if way == 1 then
+ ref:from_table({})
+ elseif way == 2 then
+ ref:from_table(nil)
+ else
+ ref:set_string("foo", "")
+ end
+
+ assert(#core.find_nodes_with_meta(pos, pos) == 0, "clearing failed " .. way)
+ end
+end
+unittests.register("test_clear_meta", test_clear_meta, {map=true})
+
+local on_punch_called
+minetest.register_on_punchnode(function()
+ on_punch_called = true
+end)
+unittests.register("test_punch_node", function(_, pos)
+ minetest.place_node(pos, {name="basenodes:dirt"})
+ on_punch_called = false
+ minetest.punch_node(pos)
+ minetest.remove_node(pos)
+ -- currently failing: assert(on_punch_called)
+end, {map=true})
diff --git a/games/devtest/mods/unittests/textures/unittests_description_test.png b/games/devtest/mods/unittests/textures/unittests_description_test.png
new file mode 100644
index 000000000..a6be43314
--- /dev/null
+++ b/games/devtest/mods/unittests/textures/unittests_description_test.png
Binary files differ
diff --git a/games/devtest/mods/util_commands/init.lua b/games/devtest/mods/util_commands/init.lua
index 79acaa0d0..c37364042 100644
--- a/games/devtest/mods/util_commands/init.lua
+++ b/games/devtest/mods/util_commands/init.lua
@@ -246,3 +246,64 @@ function minetest.handle_node_drops(pos, drops, digger)
end
end
end
+
+minetest.register_chatcommand("set_displayed_itemcount", {
+ params = "(-s \"<string>\" [-c <color>]) | -a <alignment_num>",
+ description = "Set the displayed itemcount of the wielded item",
+ func = function(name, param)
+ local player = minetest.get_player_by_name(name)
+ local item = player:get_wielded_item()
+ local meta = item:get_meta()
+ local flag1 = param:sub(1, 2)
+ if flag1 == "-s" then
+ if param:sub(3, 4) ~= " \"" then
+ return false, "Error: Space and string with \"s expected after -s."
+ end
+ local se = param:find("\"", 5, true)
+ if not se then
+ return false, "Error: String with two \"s expected after -s."
+ end
+ local s = param:sub(5, se - 1)
+ if param:sub(se + 1, se + 4) == " -c " then
+ s = minetest.colorize(param:sub(se + 5), s)
+ end
+ meta:set_string("count_meta", s)
+ elseif flag1 == "-a" then
+ local num = tonumber(param:sub(4))
+ if not num then
+ return false, "Error: Invalid number: "..param:sub(4)
+ end
+ meta:set_int("count_alignment", num)
+ else
+ return false
+ end
+ player:set_wielded_item(item)
+ return true, "Displayed itemcount set."
+ end,
+})
+
+minetest.register_chatcommand("dump_item", {
+ params = "",
+ description = "Prints a dump of the wielded item in table form",
+ func = function(name, param)
+ local player = minetest.get_player_by_name(name)
+ local item = player:get_wielded_item()
+ local str = dump(item:to_table())
+ print(str)
+ return true, str
+ end,
+})
+
+-- shadow control
+minetest.register_on_joinplayer(function (player)
+ player:set_lighting({shadows={intensity = 0.33}})
+end)
+
+core.register_chatcommand("set_shadow", {
+ params = "<shadow_intensity>",
+ description = "Set shadow parameters of current player.",
+ func = function(player_name, param)
+ local shadow_intensity = tonumber(param)
+ minetest.get_player_by_name(player_name):set_lighting({shadows = { intensity = shadow_intensity} })
+ end
+})
diff --git a/lib/catch2/CMakeLists.txt b/lib/catch2/CMakeLists.txt
new file mode 100644
index 000000000..3c471d49d
--- /dev/null
+++ b/lib/catch2/CMakeLists.txt
@@ -0,0 +1,16 @@
+# catch2 is distributed as a standalone header.
+#
+# Downloaded from:
+#
+# https://github.com/catchorg/Catch2/releases/download/v2.13.9/catch.hpp
+#
+# The following changes were made to always print in microseconds, fixed format:
+#
+# - explicit Duration(double inNanoseconds, Unit units = Unit::Auto)
+# + explicit Duration(double inNanoseconds, Unit units = Unit::Microseconds)
+#
+# - return os << duration.value() << ' ' << duration.unitsAsString();
+# + return os << std::fixed << duration.value() << ' ' << duration.unitsAsString();
+
+add_library(catch2 INTERFACE)
+target_include_directories(catch2 INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/lib/catch2/catch.hpp b/lib/catch2/catch.hpp
new file mode 100644
index 000000000..88f110677
--- /dev/null
+++ b/lib/catch2/catch.hpp
@@ -0,0 +1,17970 @@
+/*
+ * Catch v2.13.9
+ * Generated: 2022-04-12 22:37:23.260201
+ * ----------------------------------------------------------
+ * This file has been merged from multiple headers. Please don't edit it directly
+ * Copyright (c) 2022 Two Blue Cubes Ltd. All rights reserved.
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ */
+#ifndef TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED
+#define TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED
+// start catch.hpp
+
+
+#define CATCH_VERSION_MAJOR 2
+#define CATCH_VERSION_MINOR 13
+#define CATCH_VERSION_PATCH 9
+
+#ifdef __clang__
+# pragma clang system_header
+#elif defined __GNUC__
+# pragma GCC system_header
+#endif
+
+// start catch_suppress_warnings.h
+
+#ifdef __clang__
+# ifdef __ICC // icpc defines the __clang__ macro
+# pragma warning(push)
+# pragma warning(disable: 161 1682)
+# else // __ICC
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wpadded"
+# pragma clang diagnostic ignored "-Wswitch-enum"
+# pragma clang diagnostic ignored "-Wcovered-switch-default"
+# endif
+#elif defined __GNUC__
+ // Because REQUIREs trigger GCC's -Wparentheses, and because still
+ // supported version of g++ have only buggy support for _Pragmas,
+ // Wparentheses have to be suppressed globally.
+# pragma GCC diagnostic ignored "-Wparentheses" // See #674 for details
+
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wunused-variable"
+# pragma GCC diagnostic ignored "-Wpadded"
+#endif
+// end catch_suppress_warnings.h
+#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER)
+# define CATCH_IMPL
+# define CATCH_CONFIG_ALL_PARTS
+#endif
+
+// In the impl file, we want to have access to all parts of the headers
+// Can also be used to sanely support PCHs
+#if defined(CATCH_CONFIG_ALL_PARTS)
+# define CATCH_CONFIG_EXTERNAL_INTERFACES
+# if defined(CATCH_CONFIG_DISABLE_MATCHERS)
+# undef CATCH_CONFIG_DISABLE_MATCHERS
+# endif
+# if !defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER)
+# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
+# endif
+#endif
+
+#if !defined(CATCH_CONFIG_IMPL_ONLY)
+// start catch_platform.h
+
+// See e.g.:
+// https://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h.auto.html
+#ifdef __APPLE__
+# include <TargetConditionals.h>
+# if (defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1) || \
+ (defined(TARGET_OS_MAC) && TARGET_OS_MAC == 1)
+# define CATCH_PLATFORM_MAC
+# elif (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE == 1)
+# define CATCH_PLATFORM_IPHONE
+# endif
+
+#elif defined(linux) || defined(__linux) || defined(__linux__)
+# define CATCH_PLATFORM_LINUX
+
+#elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__)
+# define CATCH_PLATFORM_WINDOWS
+#endif
+
+// end catch_platform.h
+
+#ifdef CATCH_IMPL
+# ifndef CLARA_CONFIG_MAIN
+# define CLARA_CONFIG_MAIN_NOT_DEFINED
+# define CLARA_CONFIG_MAIN
+# endif
+#endif
+
+// start catch_user_interfaces.h
+
+namespace Catch {
+ unsigned int rngSeed();
+}
+
+// end catch_user_interfaces.h
+// start catch_tag_alias_autoregistrar.h
+
+// start catch_common.h
+
+// start catch_compiler_capabilities.h
+
+// Detect a number of compiler features - by compiler
+// The following features are defined:
+//
+// CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported?
+// CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported?
+// CATCH_CONFIG_POSIX_SIGNALS : are POSIX signals supported?
+// CATCH_CONFIG_DISABLE_EXCEPTIONS : Are exceptions enabled?
+// ****************
+// Note to maintainers: if new toggles are added please document them
+// in configuration.md, too
+// ****************
+
+// In general each macro has a _NO_<feature name> form
+// (e.g. CATCH_CONFIG_NO_POSIX_SIGNALS) which disables the feature.
+// Many features, at point of detection, define an _INTERNAL_ macro, so they
+// can be combined, en-mass, with the _NO_ forms later.
+
+#ifdef __cplusplus
+
+# if (__cplusplus >= 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L)
+# define CATCH_CPP14_OR_GREATER
+# endif
+
+# if (__cplusplus >= 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
+# define CATCH_CPP17_OR_GREATER
+# endif
+
+#endif
+
+// Only GCC compiler should be used in this block, so other compilers trying to
+// mask themselves as GCC should be ignored.
+#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) && !defined(__LCC__)
+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic push" )
+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic pop" )
+
+# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__)
+
+#endif
+
+#if defined(__clang__)
+
+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic push" )
+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic pop" )
+
+// As of this writing, IBM XL's implementation of __builtin_constant_p has a bug
+// which results in calls to destructors being emitted for each temporary,
+// without a matching initialization. In practice, this can result in something
+// like `std::string::~string` being called on an uninitialized value.
+//
+// For example, this code will likely segfault under IBM XL:
+// ```
+// REQUIRE(std::string("12") + "34" == "1234")
+// ```
+//
+// Therefore, `CATCH_INTERNAL_IGNORE_BUT_WARN` is not implemented.
+# if !defined(__ibmxl__) && !defined(__CUDACC__)
+# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) /* NOLINT(cppcoreguidelines-pro-type-vararg, hicpp-vararg) */
+# endif
+
+# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \
+ _Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"")
+
+# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wparentheses\"" )
+
+# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wunused-variable\"" )
+
+# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" )
+
+# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wunused-template\"" )
+
+#endif // __clang__
+
+////////////////////////////////////////////////////////////////////////////////
+// Assume that non-Windows platforms support posix signals by default
+#if !defined(CATCH_PLATFORM_WINDOWS)
+ #define CATCH_INTERNAL_CONFIG_POSIX_SIGNALS
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// We know some environments not to support full POSIX signals
+#if defined(__CYGWIN__) || defined(__QNX__) || defined(__EMSCRIPTEN__) || defined(__DJGPP__)
+ #define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS
+#endif
+
+#ifdef __OS400__
+# define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS
+# define CATCH_CONFIG_COLOUR_NONE
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// Android somehow still does not support std::to_string
+#if defined(__ANDROID__)
+# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING
+# define CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// Not all Windows environments support SEH properly
+#if defined(__MINGW32__)
+# define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// PS4
+#if defined(__ORBIS__)
+# define CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// Cygwin
+#ifdef __CYGWIN__
+
+// Required for some versions of Cygwin to declare gettimeofday
+// see: http://stackoverflow.com/questions/36901803/gettimeofday-not-declared-in-this-scope-cygwin
+# define _BSD_SOURCE
+// some versions of cygwin (most) do not support std::to_string. Use the libstd check.
+// https://gcc.gnu.org/onlinedocs/gcc-4.8.2/libstdc++/api/a01053_source.html line 2812-2813
+# if !((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
+ && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
+
+# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING
+
+# endif
+#endif // __CYGWIN__
+
+////////////////////////////////////////////////////////////////////////////////
+// Visual C++
+#if defined(_MSC_VER)
+
+// Universal Windows platform does not support SEH
+// Or console colours (or console at all...)
+# if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP)
+# define CATCH_CONFIG_COLOUR_NONE
+# else
+# define CATCH_INTERNAL_CONFIG_WINDOWS_SEH
+# endif
+
+# if !defined(__clang__) // Handle Clang masquerading for msvc
+
+// MSVC traditional preprocessor needs some workaround for __VA_ARGS__
+// _MSVC_TRADITIONAL == 0 means new conformant preprocessor
+// _MSVC_TRADITIONAL == 1 means old traditional non-conformant preprocessor
+# if !defined(_MSVC_TRADITIONAL) || (defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL)
+# define CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+# endif // MSVC_TRADITIONAL
+
+// Only do this if we're not using clang on Windows, which uses `diagnostic push` & `diagnostic pop`
+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION __pragma( warning(push) )
+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION __pragma( warning(pop) )
+# endif // __clang__
+
+#endif // _MSC_VER
+
+#if defined(_REENTRANT) || defined(_MSC_VER)
+// Enable async processing, as -pthread is specified or no additional linking is required
+# define CATCH_INTERNAL_CONFIG_USE_ASYNC
+#endif // _MSC_VER
+
+////////////////////////////////////////////////////////////////////////////////
+// Check if we are compiled with -fno-exceptions or equivalent
+#if defined(__EXCEPTIONS) || defined(__cpp_exceptions) || defined(_CPPUNWIND)
+# define CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// DJGPP
+#ifdef __DJGPP__
+# define CATCH_INTERNAL_CONFIG_NO_WCHAR
+#endif // __DJGPP__
+
+////////////////////////////////////////////////////////////////////////////////
+// Embarcadero C++Build
+#if defined(__BORLANDC__)
+ #define CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+
+// Use of __COUNTER__ is suppressed during code analysis in
+// CLion/AppCode 2017.2.x and former, because __COUNTER__ is not properly
+// handled by it.
+// Otherwise all supported compilers support COUNTER macro,
+// but user still might want to turn it off
+#if ( !defined(__JETBRAINS_IDE__) || __JETBRAINS_IDE__ >= 20170300L )
+ #define CATCH_INTERNAL_CONFIG_COUNTER
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+
+// RTX is a special version of Windows that is real time.
+// This means that it is detected as Windows, but does not provide
+// the same set of capabilities as real Windows does.
+#if defined(UNDER_RTSS) || defined(RTX64_BUILD)
+ #define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH
+ #define CATCH_INTERNAL_CONFIG_NO_ASYNC
+ #define CATCH_CONFIG_COLOUR_NONE
+#endif
+
+#if !defined(_GLIBCXX_USE_C99_MATH_TR1)
+#define CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER
+#endif
+
+// Various stdlib support checks that require __has_include
+#if defined(__has_include)
+ // Check if string_view is available and usable
+ #if __has_include(<string_view>) && defined(CATCH_CPP17_OR_GREATER)
+ # define CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW
+ #endif
+
+ // Check if optional is available and usable
+ # if __has_include(<optional>) && defined(CATCH_CPP17_OR_GREATER)
+ # define CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL
+ # endif // __has_include(<optional>) && defined(CATCH_CPP17_OR_GREATER)
+
+ // Check if byte is available and usable
+ # if __has_include(<cstddef>) && defined(CATCH_CPP17_OR_GREATER)
+ # include <cstddef>
+ # if defined(__cpp_lib_byte) && (__cpp_lib_byte > 0)
+ # define CATCH_INTERNAL_CONFIG_CPP17_BYTE
+ # endif
+ # endif // __has_include(<cstddef>) && defined(CATCH_CPP17_OR_GREATER)
+
+ // Check if variant is available and usable
+ # if __has_include(<variant>) && defined(CATCH_CPP17_OR_GREATER)
+ # if defined(__clang__) && (__clang_major__ < 8)
+ // work around clang bug with libstdc++ https://bugs.llvm.org/show_bug.cgi?id=31852
+ // fix should be in clang 8, workaround in libstdc++ 8.2
+ # include <ciso646>
+ # if defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9)
+ # define CATCH_CONFIG_NO_CPP17_VARIANT
+ # else
+ # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT
+ # endif // defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9)
+ # else
+ # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT
+ # endif // defined(__clang__) && (__clang_major__ < 8)
+ # endif // __has_include(<variant>) && defined(CATCH_CPP17_OR_GREATER)
+#endif // defined(__has_include)
+
+#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER)
+# define CATCH_CONFIG_COUNTER
+#endif
+#if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) && !defined(CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH)
+# define CATCH_CONFIG_WINDOWS_SEH
+#endif
+// This is set by default, because we assume that unix compilers are posix-signal-compatible by default.
+#if defined(CATCH_INTERNAL_CONFIG_POSIX_SIGNALS) && !defined(CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_POSIX_SIGNALS)
+# define CATCH_CONFIG_POSIX_SIGNALS
+#endif
+// This is set by default, because we assume that compilers with no wchar_t support are just rare exceptions.
+#if !defined(CATCH_INTERNAL_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_WCHAR)
+# define CATCH_CONFIG_WCHAR
+#endif
+
+#if !defined(CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_CPP11_TO_STRING)
+# define CATCH_CONFIG_CPP11_TO_STRING
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_NO_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_CPP17_OPTIONAL)
+# define CATCH_CONFIG_CPP17_OPTIONAL
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_NO_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_CPP17_STRING_VIEW)
+# define CATCH_CONFIG_CPP17_STRING_VIEW
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_VARIANT) && !defined(CATCH_CONFIG_NO_CPP17_VARIANT) && !defined(CATCH_CONFIG_CPP17_VARIANT)
+# define CATCH_CONFIG_CPP17_VARIANT
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_BYTE) && !defined(CATCH_CONFIG_NO_CPP17_BYTE) && !defined(CATCH_CONFIG_CPP17_BYTE)
+# define CATCH_CONFIG_CPP17_BYTE
+#endif
+
+#if defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT)
+# define CATCH_INTERNAL_CONFIG_NEW_CAPTURE
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_NEW_CAPTURE) && !defined(CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NEW_CAPTURE)
+# define CATCH_CONFIG_NEW_CAPTURE
+#endif
+
+#if !defined(CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED) && !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+# define CATCH_CONFIG_DISABLE_EXCEPTIONS
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_NO_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_POLYFILL_ISNAN)
+# define CATCH_CONFIG_POLYFILL_ISNAN
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_USE_ASYNC) && !defined(CATCH_INTERNAL_CONFIG_NO_ASYNC) && !defined(CATCH_CONFIG_NO_USE_ASYNC) && !defined(CATCH_CONFIG_USE_ASYNC)
+# define CATCH_CONFIG_USE_ASYNC
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_NO_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_ANDROID_LOGWRITE)
+# define CATCH_CONFIG_ANDROID_LOGWRITE
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_NO_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_GLOBAL_NEXTAFTER)
+# define CATCH_CONFIG_GLOBAL_NEXTAFTER
+#endif
+
+// Even if we do not think the compiler has that warning, we still have
+// to provide a macro that can be used by the code.
+#if !defined(CATCH_INTERNAL_START_WARNINGS_SUPPRESSION)
+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION
+#endif
+#if !defined(CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION)
+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+#endif
+#if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS
+#endif
+#if !defined(CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS
+#endif
+#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS
+#endif
+#if !defined(CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS
+#endif
+
+// The goal of this macro is to avoid evaluation of the arguments, but
+// still have the compiler warn on problems inside...
+#if !defined(CATCH_INTERNAL_IGNORE_BUT_WARN)
+# define CATCH_INTERNAL_IGNORE_BUT_WARN(...)
+#endif
+
+#if defined(__APPLE__) && defined(__apple_build_version__) && (__clang_major__ < 10)
+# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS
+#elif defined(__clang__) && (__clang_major__ < 5)
+# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS
+#endif
+
+#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS
+#endif
+
+#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+#define CATCH_TRY if ((true))
+#define CATCH_CATCH_ALL if ((false))
+#define CATCH_CATCH_ANON(type) if ((false))
+#else
+#define CATCH_TRY try
+#define CATCH_CATCH_ALL catch (...)
+#define CATCH_CATCH_ANON(type) catch (type)
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_NO_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR)
+#define CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#endif
+
+// end catch_compiler_capabilities.h
+#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line
+#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line )
+#ifdef CATCH_CONFIG_COUNTER
+# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ )
+#else
+# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ )
+#endif
+
+#include <iosfwd>
+#include <string>
+#include <cstdint>
+
+// We need a dummy global operator<< so we can bring it into Catch namespace later
+struct Catch_global_namespace_dummy {};
+std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy);
+
+namespace Catch {
+
+ struct CaseSensitive { enum Choice {
+ Yes,
+ No
+ }; };
+
+ class NonCopyable {
+ NonCopyable( NonCopyable const& ) = delete;
+ NonCopyable( NonCopyable && ) = delete;
+ NonCopyable& operator = ( NonCopyable const& ) = delete;
+ NonCopyable& operator = ( NonCopyable && ) = delete;
+
+ protected:
+ NonCopyable();
+ virtual ~NonCopyable();
+ };
+
+ struct SourceLineInfo {
+
+ SourceLineInfo() = delete;
+ SourceLineInfo( char const* _file, std::size_t _line ) noexcept
+ : file( _file ),
+ line( _line )
+ {}
+
+ SourceLineInfo( SourceLineInfo const& other ) = default;
+ SourceLineInfo& operator = ( SourceLineInfo const& ) = default;
+ SourceLineInfo( SourceLineInfo&& ) noexcept = default;
+ SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default;
+
+ bool empty() const noexcept { return file[0] == '\0'; }
+ bool operator == ( SourceLineInfo const& other ) const noexcept;
+ bool operator < ( SourceLineInfo const& other ) const noexcept;
+
+ char const* file;
+ std::size_t line;
+ };
+
+ std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info );
+
+ // Bring in operator<< from global namespace into Catch namespace
+ // This is necessary because the overload of operator<< above makes
+ // lookup stop at namespace Catch
+ using ::operator<<;
+
+ // Use this in variadic streaming macros to allow
+ // >> +StreamEndStop
+ // as well as
+ // >> stuff +StreamEndStop
+ struct StreamEndStop {
+ std::string operator+() const;
+ };
+ template<typename T>
+ T const& operator + ( T const& value, StreamEndStop ) {
+ return value;
+ }
+}
+
+#define CATCH_INTERNAL_LINEINFO \
+ ::Catch::SourceLineInfo( __FILE__, static_cast<std::size_t>( __LINE__ ) )
+
+// end catch_common.h
+namespace Catch {
+
+ struct RegistrarForTagAliases {
+ RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo );
+ };
+
+} // end namespace Catch
+
+#define CATCH_REGISTER_TAG_ALIAS( alias, spec ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+// end catch_tag_alias_autoregistrar.h
+// start catch_test_registry.h
+
+// start catch_interfaces_testcase.h
+
+#include <vector>
+
+namespace Catch {
+
+ class TestSpec;
+
+ struct ITestInvoker {
+ virtual void invoke () const = 0;
+ virtual ~ITestInvoker();
+ };
+
+ class TestCase;
+ struct IConfig;
+
+ struct ITestCaseRegistry {
+ virtual ~ITestCaseRegistry();
+ virtual std::vector<TestCase> const& getAllTests() const = 0;
+ virtual std::vector<TestCase> const& getAllTestsSorted( IConfig const& config ) const = 0;
+ };
+
+ bool isThrowSafe( TestCase const& testCase, IConfig const& config );
+ bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config );
+ std::vector<TestCase> filterTests( std::vector<TestCase> const& testCases, TestSpec const& testSpec, IConfig const& config );
+ std::vector<TestCase> const& getAllTestCasesSorted( IConfig const& config );
+
+}
+
+// end catch_interfaces_testcase.h
+// start catch_stringref.h
+
+#include <cstddef>
+#include <string>
+#include <iosfwd>
+#include <cassert>
+
+namespace Catch {
+
+ /// A non-owning string class (similar to the forthcoming std::string_view)
+ /// Note that, because a StringRef may be a substring of another string,
+ /// it may not be null terminated.
+ class StringRef {
+ public:
+ using size_type = std::size_t;
+ using const_iterator = const char*;
+
+ private:
+ static constexpr char const* const s_empty = "";
+
+ char const* m_start = s_empty;
+ size_type m_size = 0;
+
+ public: // construction
+ constexpr StringRef() noexcept = default;
+
+ StringRef( char const* rawChars ) noexcept;
+
+ constexpr StringRef( char const* rawChars, size_type size ) noexcept
+ : m_start( rawChars ),
+ m_size( size )
+ {}
+
+ StringRef( std::string const& stdString ) noexcept
+ : m_start( stdString.c_str() ),
+ m_size( stdString.size() )
+ {}
+
+ explicit operator std::string() const {
+ return std::string(m_start, m_size);
+ }
+
+ public: // operators
+ auto operator == ( StringRef const& other ) const noexcept -> bool;
+ auto operator != (StringRef const& other) const noexcept -> bool {
+ return !(*this == other);
+ }
+
+ auto operator[] ( size_type index ) const noexcept -> char {
+ assert(index < m_size);
+ return m_start[index];
+ }
+
+ public: // named queries
+ constexpr auto empty() const noexcept -> bool {
+ return m_size == 0;
+ }
+ constexpr auto size() const noexcept -> size_type {
+ return m_size;
+ }
+
+ // Returns the current start pointer. If the StringRef is not
+ // null-terminated, throws std::domain_exception
+ auto c_str() const -> char const*;
+
+ public: // substrings and searches
+ // Returns a substring of [start, start + length).
+ // If start + length > size(), then the substring is [start, size()).
+ // If start > size(), then the substring is empty.
+ auto substr( size_type start, size_type length ) const noexcept -> StringRef;
+
+ // Returns the current start pointer. May not be null-terminated.
+ auto data() const noexcept -> char const*;
+
+ constexpr auto isNullTerminated() const noexcept -> bool {
+ return m_start[m_size] == '\0';
+ }
+
+ public: // iterators
+ constexpr const_iterator begin() const { return m_start; }
+ constexpr const_iterator end() const { return m_start + m_size; }
+ };
+
+ auto operator += ( std::string& lhs, StringRef const& sr ) -> std::string&;
+ auto operator << ( std::ostream& os, StringRef const& sr ) -> std::ostream&;
+
+ constexpr auto operator "" _sr( char const* rawChars, std::size_t size ) noexcept -> StringRef {
+ return StringRef( rawChars, size );
+ }
+} // namespace Catch
+
+constexpr auto operator "" _catch_sr( char const* rawChars, std::size_t size ) noexcept -> Catch::StringRef {
+ return Catch::StringRef( rawChars, size );
+}
+
+// end catch_stringref.h
+// start catch_preprocessor.hpp
+
+
+#define CATCH_RECURSION_LEVEL0(...) __VA_ARGS__
+#define CATCH_RECURSION_LEVEL1(...) CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(__VA_ARGS__)))
+#define CATCH_RECURSION_LEVEL2(...) CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(__VA_ARGS__)))
+#define CATCH_RECURSION_LEVEL3(...) CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(__VA_ARGS__)))
+#define CATCH_RECURSION_LEVEL4(...) CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(__VA_ARGS__)))
+#define CATCH_RECURSION_LEVEL5(...) CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(__VA_ARGS__)))
+
+#ifdef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define INTERNAL_CATCH_EXPAND_VARGS(...) __VA_ARGS__
+// MSVC needs more evaluations
+#define CATCH_RECURSION_LEVEL6(...) CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(__VA_ARGS__)))
+#define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL6(CATCH_RECURSION_LEVEL6(__VA_ARGS__))
+#else
+#define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL5(__VA_ARGS__)
+#endif
+
+#define CATCH_REC_END(...)
+#define CATCH_REC_OUT
+
+#define CATCH_EMPTY()
+#define CATCH_DEFER(id) id CATCH_EMPTY()
+
+#define CATCH_REC_GET_END2() 0, CATCH_REC_END
+#define CATCH_REC_GET_END1(...) CATCH_REC_GET_END2
+#define CATCH_REC_GET_END(...) CATCH_REC_GET_END1
+#define CATCH_REC_NEXT0(test, next, ...) next CATCH_REC_OUT
+#define CATCH_REC_NEXT1(test, next) CATCH_DEFER ( CATCH_REC_NEXT0 ) ( test, next, 0)
+#define CATCH_REC_NEXT(test, next) CATCH_REC_NEXT1(CATCH_REC_GET_END test, next)
+
+#define CATCH_REC_LIST0(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ )
+#define CATCH_REC_LIST1(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0) ) ( f, peek, __VA_ARGS__ )
+#define CATCH_REC_LIST2(f, x, peek, ...) f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ )
+
+#define CATCH_REC_LIST0_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ )
+#define CATCH_REC_LIST1_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0_UD) ) ( f, userdata, peek, __VA_ARGS__ )
+#define CATCH_REC_LIST2_UD(f, userdata, x, peek, ...) f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ )
+
+// Applies the function macro `f` to each of the remaining parameters, inserts commas between the results,
+// and passes userdata as the first parameter to each invocation,
+// e.g. CATCH_REC_LIST_UD(f, x, a, b, c) evaluates to f(x, a), f(x, b), f(x, c)
+#define CATCH_REC_LIST_UD(f, userdata, ...) CATCH_RECURSE(CATCH_REC_LIST2_UD(f, userdata, __VA_ARGS__, ()()(), ()()(), ()()(), 0))
+
+#define CATCH_REC_LIST(f, ...) CATCH_RECURSE(CATCH_REC_LIST2(f, __VA_ARGS__, ()()(), ()()(), ()()(), 0))
+
+#define INTERNAL_CATCH_EXPAND1(param) INTERNAL_CATCH_EXPAND2(param)
+#define INTERNAL_CATCH_EXPAND2(...) INTERNAL_CATCH_NO## __VA_ARGS__
+#define INTERNAL_CATCH_DEF(...) INTERNAL_CATCH_DEF __VA_ARGS__
+#define INTERNAL_CATCH_NOINTERNAL_CATCH_DEF
+#define INTERNAL_CATCH_STRINGIZE(...) INTERNAL_CATCH_STRINGIZE2(__VA_ARGS__)
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define INTERNAL_CATCH_STRINGIZE2(...) #__VA_ARGS__
+#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param))
+#else
+// MSVC is adding extra space and needs another indirection to expand INTERNAL_CATCH_NOINTERNAL_CATCH_DEF
+#define INTERNAL_CATCH_STRINGIZE2(...) INTERNAL_CATCH_STRINGIZE3(__VA_ARGS__)
+#define INTERNAL_CATCH_STRINGIZE3(...) #__VA_ARGS__
+#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) (INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) + 1)
+#endif
+
+#define INTERNAL_CATCH_MAKE_NAMESPACE2(...) ns_##__VA_ARGS__
+#define INTERNAL_CATCH_MAKE_NAMESPACE(name) INTERNAL_CATCH_MAKE_NAMESPACE2(name)
+
+#define INTERNAL_CATCH_REMOVE_PARENS(...) INTERNAL_CATCH_EXPAND1(INTERNAL_CATCH_DEF __VA_ARGS__)
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS_GEN(__VA_ARGS__)>())
+#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__))
+#else
+#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) INTERNAL_CATCH_EXPAND_VARGS(decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS_GEN(__VA_ARGS__)>()))
+#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__)))
+#endif
+
+#define INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(...)\
+ CATCH_REC_LIST(INTERNAL_CATCH_MAKE_TYPE_LIST,__VA_ARGS__)
+
+#define INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_0) INTERNAL_CATCH_REMOVE_PARENS(_0)
+#define INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_0, _1) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_1)
+#define INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_0, _1, _2) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_1, _2)
+#define INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_0, _1, _2, _3) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_1, _2, _3)
+#define INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_0, _1, _2, _3, _4) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_1, _2, _3, _4)
+#define INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_0, _1, _2, _3, _4, _5) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_1, _2, _3, _4, _5)
+#define INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_0, _1, _2, _3, _4, _5, _6) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_1, _2, _3, _4, _5, _6)
+#define INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_0, _1, _2, _3, _4, _5, _6, _7) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_1, _2, _3, _4, _5, _6, _7)
+#define INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_1, _2, _3, _4, _5, _6, _7, _8)
+#define INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9)
+#define INTERNAL_CATCH_REMOVE_PARENS_11_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10)
+
+#define INTERNAL_CATCH_VA_NARGS_IMPL(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N
+
+#define INTERNAL_CATCH_TYPE_GEN\
+ template<typename...> struct TypeList {};\
+ template<typename...Ts>\
+ constexpr auto get_wrapper() noexcept -> TypeList<Ts...> { return {}; }\
+ template<template<typename...> class...> struct TemplateTypeList{};\
+ template<template<typename...> class...Cs>\
+ constexpr auto get_wrapper() noexcept -> TemplateTypeList<Cs...> { return {}; }\
+ template<typename...>\
+ struct append;\
+ template<typename...>\
+ struct rewrap;\
+ template<template<typename...> class, typename...>\
+ struct create;\
+ template<template<typename...> class, typename>\
+ struct convert;\
+ \
+ template<typename T> \
+ struct append<T> { using type = T; };\
+ template< template<typename...> class L1, typename...E1, template<typename...> class L2, typename...E2, typename...Rest>\
+ struct append<L1<E1...>, L2<E2...>, Rest...> { using type = typename append<L1<E1...,E2...>, Rest...>::type; };\
+ template< template<typename...> class L1, typename...E1, typename...Rest>\
+ struct append<L1<E1...>, TypeList<mpl_::na>, Rest...> { using type = L1<E1...>; };\
+ \
+ template< template<typename...> class Container, template<typename...> class List, typename...elems>\
+ struct rewrap<TemplateTypeList<Container>, List<elems...>> { using type = TypeList<Container<elems...>>; };\
+ template< template<typename...> class Container, template<typename...> class List, class...Elems, typename...Elements>\
+ struct rewrap<TemplateTypeList<Container>, List<Elems...>, Elements...> { using type = typename append<TypeList<Container<Elems...>>, typename rewrap<TemplateTypeList<Container>, Elements...>::type>::type; };\
+ \
+ template<template <typename...> class Final, template< typename...> class...Containers, typename...Types>\
+ struct create<Final, TemplateTypeList<Containers...>, TypeList<Types...>> { using type = typename append<Final<>, typename rewrap<TemplateTypeList<Containers>, Types...>::type...>::type; };\
+ template<template <typename...> class Final, template <typename...> class List, typename...Ts>\
+ struct convert<Final, List<Ts...>> { using type = typename append<Final<>,TypeList<Ts>...>::type; };
+
+#define INTERNAL_CATCH_NTTP_1(signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)> struct Nttp{};\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ constexpr auto get_wrapper() noexcept -> Nttp<__VA_ARGS__> { return {}; } \
+ template<template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class...> struct NttpTemplateTypeList{};\
+ template<template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class...Cs>\
+ constexpr auto get_wrapper() noexcept -> NttpTemplateTypeList<Cs...> { return {}; } \
+ \
+ template< template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class Container, template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class List, INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ struct rewrap<NttpTemplateTypeList<Container>, List<__VA_ARGS__>> { using type = TypeList<Container<__VA_ARGS__>>; };\
+ template< template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class Container, template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class List, INTERNAL_CATCH_REMOVE_PARENS(signature), typename...Elements>\
+ struct rewrap<NttpTemplateTypeList<Container>, List<__VA_ARGS__>, Elements...> { using type = typename append<TypeList<Container<__VA_ARGS__>>, typename rewrap<NttpTemplateTypeList<Container>, Elements...>::type>::type; };\
+ template<template <typename...> class Final, template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class...Containers, typename...Types>\
+ struct create<Final, NttpTemplateTypeList<Containers...>, TypeList<Types...>> { using type = typename append<Final<>, typename rewrap<NttpTemplateTypeList<Containers>, Types...>::type...>::type; };
+
+#define INTERNAL_CATCH_DECLARE_SIG_TEST0(TestName)
+#define INTERNAL_CATCH_DECLARE_SIG_TEST1(TestName, signature)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ static void TestName()
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_X(TestName, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ static void TestName()
+
+#define INTERNAL_CATCH_DEFINE_SIG_TEST0(TestName)
+#define INTERNAL_CATCH_DEFINE_SIG_TEST1(TestName, signature)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ static void TestName()
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_X(TestName, signature,...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ static void TestName()
+
+#define INTERNAL_CATCH_NTTP_REGISTER0(TestFunc, signature)\
+ template<typename Type>\
+ void reg_test(TypeList<Type>, Catch::NameAndTags nameAndTags)\
+ {\
+ Catch::AutoReg( Catch::makeTestInvoker(&TestFunc<Type>), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), nameAndTags);\
+ }
+
+#define INTERNAL_CATCH_NTTP_REGISTER(TestFunc, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ void reg_test(Nttp<__VA_ARGS__>, Catch::NameAndTags nameAndTags)\
+ {\
+ Catch::AutoReg( Catch::makeTestInvoker(&TestFunc<__VA_ARGS__>), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), nameAndTags);\
+ }
+
+#define INTERNAL_CATCH_NTTP_REGISTER_METHOD0(TestName, signature, ...)\
+ template<typename Type>\
+ void reg_test(TypeList<Type>, Catch::StringRef className, Catch::NameAndTags nameAndTags)\
+ {\
+ Catch::AutoReg( Catch::makeTestInvoker(&TestName<Type>::test), CATCH_INTERNAL_LINEINFO, className, nameAndTags);\
+ }
+
+#define INTERNAL_CATCH_NTTP_REGISTER_METHOD(TestName, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ void reg_test(Nttp<__VA_ARGS__>, Catch::StringRef className, Catch::NameAndTags nameAndTags)\
+ {\
+ Catch::AutoReg( Catch::makeTestInvoker(&TestName<__VA_ARGS__>::test), CATCH_INTERNAL_LINEINFO, className, nameAndTags);\
+ }
+
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD0(TestName, ClassName)
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD1(TestName, ClassName, signature)\
+ template<typename TestType> \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName)<TestType> { \
+ void test();\
+ }
+
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X(TestName, ClassName, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)> \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName)<__VA_ARGS__> { \
+ void test();\
+ }
+
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD0(TestName)
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD1(TestName, signature)\
+ template<typename TestType> \
+ void INTERNAL_CATCH_MAKE_NAMESPACE(TestName)::TestName<TestType>::test()
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X(TestName, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)> \
+ void INTERNAL_CATCH_MAKE_NAMESPACE(TestName)::TestName<__VA_ARGS__>::test()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define INTERNAL_CATCH_NTTP_0
+#define INTERNAL_CATCH_NTTP_GEN(...) INTERNAL_CATCH_VA_NARGS_IMPL(__VA_ARGS__, INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__),INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_0)
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD(TestName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD1, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD0)(TestName, __VA_ARGS__)
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD(TestName, ClassName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD1, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD0)(TestName, ClassName, __VA_ARGS__)
+#define INTERNAL_CATCH_NTTP_REG_METHOD_GEN(TestName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD0, INTERNAL_CATCH_NTTP_REGISTER_METHOD0)(TestName, __VA_ARGS__)
+#define INTERNAL_CATCH_NTTP_REG_GEN(TestFunc, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER0, INTERNAL_CATCH_NTTP_REGISTER0)(TestFunc, __VA_ARGS__)
+#define INTERNAL_CATCH_DEFINE_SIG_TEST(TestName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DEFINE_SIG_TEST1, INTERNAL_CATCH_DEFINE_SIG_TEST0)(TestName, __VA_ARGS__)
+#define INTERNAL_CATCH_DECLARE_SIG_TEST(TestName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DECLARE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST1, INTERNAL_CATCH_DECLARE_SIG_TEST0)(TestName, __VA_ARGS__)
+#define INTERNAL_CATCH_REMOVE_PARENS_GEN(...) INTERNAL_CATCH_VA_NARGS_IMPL(__VA_ARGS__, INTERNAL_CATCH_REMOVE_PARENS_11_ARG,INTERNAL_CATCH_REMOVE_PARENS_10_ARG,INTERNAL_CATCH_REMOVE_PARENS_9_ARG,INTERNAL_CATCH_REMOVE_PARENS_8_ARG,INTERNAL_CATCH_REMOVE_PARENS_7_ARG,INTERNAL_CATCH_REMOVE_PARENS_6_ARG,INTERNAL_CATCH_REMOVE_PARENS_5_ARG,INTERNAL_CATCH_REMOVE_PARENS_4_ARG,INTERNAL_CATCH_REMOVE_PARENS_3_ARG,INTERNAL_CATCH_REMOVE_PARENS_2_ARG,INTERNAL_CATCH_REMOVE_PARENS_1_ARG)(__VA_ARGS__)
+#else
+#define INTERNAL_CATCH_NTTP_0(signature)
+#define INTERNAL_CATCH_NTTP_GEN(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL(__VA_ARGS__, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1,INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_0)( __VA_ARGS__))
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD(TestName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD1, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD0)(TestName, __VA_ARGS__))
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD(TestName, ClassName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD1, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD0)(TestName, ClassName, __VA_ARGS__))
+#define INTERNAL_CATCH_NTTP_REG_METHOD_GEN(TestName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD0, INTERNAL_CATCH_NTTP_REGISTER_METHOD0)(TestName, __VA_ARGS__))
+#define INTERNAL_CATCH_NTTP_REG_GEN(TestFunc, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER0, INTERNAL_CATCH_NTTP_REGISTER0)(TestFunc, __VA_ARGS__))
+#define INTERNAL_CATCH_DEFINE_SIG_TEST(TestName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DEFINE_SIG_TEST1, INTERNAL_CATCH_DEFINE_SIG_TEST0)(TestName, __VA_ARGS__))
+#define INTERNAL_CATCH_DECLARE_SIG_TEST(TestName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DECLARE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST1, INTERNAL_CATCH_DECLARE_SIG_TEST0)(TestName, __VA_ARGS__))
+#define INTERNAL_CATCH_REMOVE_PARENS_GEN(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL(__VA_ARGS__, INTERNAL_CATCH_REMOVE_PARENS_11_ARG,INTERNAL_CATCH_REMOVE_PARENS_10_ARG,INTERNAL_CATCH_REMOVE_PARENS_9_ARG,INTERNAL_CATCH_REMOVE_PARENS_8_ARG,INTERNAL_CATCH_REMOVE_PARENS_7_ARG,INTERNAL_CATCH_REMOVE_PARENS_6_ARG,INTERNAL_CATCH_REMOVE_PARENS_5_ARG,INTERNAL_CATCH_REMOVE_PARENS_4_ARG,INTERNAL_CATCH_REMOVE_PARENS_3_ARG,INTERNAL_CATCH_REMOVE_PARENS_2_ARG,INTERNAL_CATCH_REMOVE_PARENS_1_ARG)(__VA_ARGS__))
+#endif
+
+// end catch_preprocessor.hpp
+// start catch_meta.hpp
+
+
+#include <type_traits>
+
+namespace Catch {
+ template<typename T>
+ struct always_false : std::false_type {};
+
+ template <typename> struct true_given : std::true_type {};
+ struct is_callable_tester {
+ template <typename Fun, typename... Args>
+ true_given<decltype(std::declval<Fun>()(std::declval<Args>()...))> static test(int);
+ template <typename...>
+ std::false_type static test(...);
+ };
+
+ template <typename T>
+ struct is_callable;
+
+ template <typename Fun, typename... Args>
+ struct is_callable<Fun(Args...)> : decltype(is_callable_tester::test<Fun, Args...>(0)) {};
+
+#if defined(__cpp_lib_is_invocable) && __cpp_lib_is_invocable >= 201703
+ // std::result_of is deprecated in C++17 and removed in C++20. Hence, it is
+ // replaced with std::invoke_result here.
+ template <typename Func, typename... U>
+ using FunctionReturnType = std::remove_reference_t<std::remove_cv_t<std::invoke_result_t<Func, U...>>>;
+#else
+ // Keep ::type here because we still support C++11
+ template <typename Func, typename... U>
+ using FunctionReturnType = typename std::remove_reference<typename std::remove_cv<typename std::result_of<Func(U...)>::type>::type>::type;
+#endif
+
+} // namespace Catch
+
+namespace mpl_{
+ struct na;
+}
+
+// end catch_meta.hpp
+namespace Catch {
+
+template<typename C>
+class TestInvokerAsMethod : public ITestInvoker {
+ void (C::*m_testAsMethod)();
+public:
+ TestInvokerAsMethod( void (C::*testAsMethod)() ) noexcept : m_testAsMethod( testAsMethod ) {}
+
+ void invoke() const override {
+ C obj;
+ (obj.*m_testAsMethod)();
+ }
+};
+
+auto makeTestInvoker( void(*testAsFunction)() ) noexcept -> ITestInvoker*;
+
+template<typename C>
+auto makeTestInvoker( void (C::*testAsMethod)() ) noexcept -> ITestInvoker* {
+ return new(std::nothrow) TestInvokerAsMethod<C>( testAsMethod );
+}
+
+struct NameAndTags {
+ NameAndTags( StringRef const& name_ = StringRef(), StringRef const& tags_ = StringRef() ) noexcept;
+ StringRef name;
+ StringRef tags;
+};
+
+struct AutoReg : NonCopyable {
+ AutoReg( ITestInvoker* invoker, SourceLineInfo const& lineInfo, StringRef const& classOrMethod, NameAndTags const& nameAndTags ) noexcept;
+ ~AutoReg();
+};
+
+} // end namespace Catch
+
+#if defined(CATCH_CONFIG_DISABLE)
+ #define INTERNAL_CATCH_TESTCASE_NO_REGISTRATION( TestName, ... ) \
+ static void TestName()
+ #define INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION( TestName, ClassName, ... ) \
+ namespace{ \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName) { \
+ void test(); \
+ }; \
+ } \
+ void TestName::test()
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( TestName, TestFunc, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_DEFINE_SIG_TEST(TestFunc, INTERNAL_CATCH_REMOVE_PARENS(Signature))
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( TestNameClass, TestName, ClassName, Name, Tags, Signature, ... ) \
+ namespace{ \
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName) { \
+ INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD(TestName, ClassName, INTERNAL_CATCH_REMOVE_PARENS(Signature));\
+ } \
+ } \
+ INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD(TestName, INTERNAL_CATCH_REMOVE_PARENS(Signature))
+
+ #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(Name, Tags, ...) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, typename TestType, __VA_ARGS__ )
+ #else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(Name, Tags, ...) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, typename TestType, __VA_ARGS__ ) )
+ #endif
+
+ #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(Name, Tags, Signature, ...) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, Signature, __VA_ARGS__ )
+ #else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(Name, Tags, Signature, ...) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, Signature, __VA_ARGS__ ) )
+ #endif
+
+ #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION( ClassName, Name, Tags,... ) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, typename T, __VA_ARGS__ )
+ #else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION( ClassName, Name, Tags,... ) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, typename T, __VA_ARGS__ ) )
+ #endif
+
+ #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION( ClassName, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ )
+ #else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION( ClassName, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ ) )
+ #endif
+#endif
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_TESTCASE2( TestName, ... ) \
+ static void TestName(); \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( &TestName ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ __VA_ARGS__ } ); } /* NOLINT */ \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ static void TestName()
+ #define INTERNAL_CATCH_TESTCASE( ... ) \
+ INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ), __VA_ARGS__ )
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( &QualifiedMethod ), CATCH_INTERNAL_LINEINFO, "&" #QualifiedMethod, Catch::NameAndTags{ __VA_ARGS__ } ); } /* NOLINT */ \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestName, ClassName, ... )\
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName) { \
+ void test(); \
+ }; \
+ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( Catch::makeTestInvoker( &TestName::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ __VA_ARGS__ } ); /* NOLINT */ \
+ } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ void TestName::test()
+ #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, ... ) \
+ INTERNAL_CATCH_TEST_CASE_METHOD2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ), ClassName, __VA_ARGS__ )
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_REGISTER_TESTCASE( Function, ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( Function ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ __VA_ARGS__ } ); /* NOLINT */ \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_2(TestName, TestFunc, Name, Tags, Signature, ... )\
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ INTERNAL_CATCH_DECLARE_SIG_TEST(TestFunc, INTERNAL_CATCH_REMOVE_PARENS(Signature));\
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){\
+ INTERNAL_CATCH_TYPE_GEN\
+ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ INTERNAL_CATCH_NTTP_REG_GEN(TestFunc,INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ template<typename...Types> \
+ struct TestName{\
+ TestName(){\
+ int index = 0; \
+ constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, __VA_ARGS__)};\
+ using expander = int[];\
+ (void)expander{(reg_test(Types{}, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index]), Tags } ), index++)... };/* NOLINT */ \
+ }\
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
+ TestName<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(__VA_ARGS__)>();\
+ return 0;\
+ }();\
+ }\
+ }\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ INTERNAL_CATCH_DEFINE_SIG_TEST(TestFunc,INTERNAL_CATCH_REMOVE_PARENS(Signature))
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE(Name, Tags, ...) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, typename TestType, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE(Name, Tags, ...) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, typename TestType, __VA_ARGS__ ) )
+#endif
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG(Name, Tags, Signature, ...) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, Signature, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG(Name, Tags, Signature, ...) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, Signature, __VA_ARGS__ ) )
+#endif
+
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2(TestName, TestFuncName, Name, Tags, Signature, TmplTypes, TypesList) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ template<typename TestType> static void TestFuncName(); \
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName) { \
+ INTERNAL_CATCH_TYPE_GEN \
+ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature)) \
+ template<typename... Types> \
+ struct TestName { \
+ void reg_tests() { \
+ int index = 0; \
+ using expander = int[]; \
+ constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
+ constexpr char const* types_list[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
+ constexpr auto num_types = sizeof(types_list) / sizeof(types_list[0]);\
+ (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestFuncName<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + "<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++)... };/* NOLINT */\
+ } \
+ }; \
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){ \
+ using TestInit = typename create<TestName, decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS(TmplTypes)>()), TypeList<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(INTERNAL_CATCH_REMOVE_PARENS(TypesList))>>::type; \
+ TestInit t; \
+ t.reg_tests(); \
+ return 0; \
+ }(); \
+ } \
+ } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ template<typename TestType> \
+ static void TestFuncName()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE(Name, Tags, ...)\
+ INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, typename T,__VA_ARGS__)
+#else
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE(Name, Tags, ...)\
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, typename T, __VA_ARGS__ ) )
+#endif
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG(Name, Tags, Signature, ...)\
+ INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, Signature, __VA_ARGS__)
+#else
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG(Name, Tags, Signature, ...)\
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, Signature, __VA_ARGS__ ) )
+#endif
+
+ #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_2(TestName, TestFunc, Name, Tags, TmplList)\
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ template<typename TestType> static void TestFunc(); \
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){\
+ INTERNAL_CATCH_TYPE_GEN\
+ template<typename... Types> \
+ struct TestName { \
+ void reg_tests() { \
+ int index = 0; \
+ using expander = int[]; \
+ (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestFunc<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ Name " - " + std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + std::to_string(index), Tags } ), index++)... };/* NOLINT */\
+ } \
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){ \
+ using TestInit = typename convert<TestName, TmplList>::type; \
+ TestInit t; \
+ t.reg_tests(); \
+ return 0; \
+ }(); \
+ }}\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ template<typename TestType> \
+ static void TestFunc()
+
+ #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE(Name, Tags, TmplList) \
+ INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, TmplList )
+
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( TestNameClass, TestName, ClassName, Name, Tags, Signature, ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){ \
+ INTERNAL_CATCH_TYPE_GEN\
+ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD(TestName, ClassName, INTERNAL_CATCH_REMOVE_PARENS(Signature));\
+ INTERNAL_CATCH_NTTP_REG_METHOD_GEN(TestName, INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ template<typename...Types> \
+ struct TestNameClass{\
+ TestNameClass(){\
+ int index = 0; \
+ constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, __VA_ARGS__)};\
+ using expander = int[];\
+ (void)expander{(reg_test(Types{}, #ClassName, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index]), Tags } ), index++)... };/* NOLINT */ \
+ }\
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
+ TestNameClass<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(__VA_ARGS__)>();\
+ return 0;\
+ }();\
+ }\
+ }\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD(TestName, INTERNAL_CATCH_REMOVE_PARENS(Signature))
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( ClassName, Name, Tags,... ) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, typename T, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( ClassName, Name, Tags,... ) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, typename T, __VA_ARGS__ ) )
+#endif
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( ClassName, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( ClassName, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ ) )
+#endif
+
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2(TestNameClass, TestName, ClassName, Name, Tags, Signature, TmplTypes, TypesList)\
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ template<typename TestType> \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \
+ void test();\
+ };\
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestNameClass) {\
+ INTERNAL_CATCH_TYPE_GEN \
+ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ template<typename...Types>\
+ struct TestNameClass{\
+ void reg_tests(){\
+ int index = 0;\
+ using expander = int[];\
+ constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
+ constexpr char const* types_list[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
+ constexpr auto num_types = sizeof(types_list) / sizeof(types_list[0]);\
+ (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + "<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++)... };/* NOLINT */ \
+ }\
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
+ using TestInit = typename create<TestNameClass, decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS(TmplTypes)>()), TypeList<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(INTERNAL_CATCH_REMOVE_PARENS(TypesList))>>::type;\
+ TestInit t;\
+ t.reg_tests();\
+ return 0;\
+ }(); \
+ }\
+ }\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ template<typename TestType> \
+ void TestName<TestType>::test()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( ClassName, Name, Tags, ... )\
+ INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), ClassName, Name, Tags, typename T, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( ClassName, Name, Tags, ... )\
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), ClassName, Name, Tags, typename T,__VA_ARGS__ ) )
+#endif
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( ClassName, Name, Tags, Signature, ... )\
+ INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), ClassName, Name, Tags, Signature, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( ClassName, Name, Tags, Signature, ... )\
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), ClassName, Name, Tags, Signature,__VA_ARGS__ ) )
+#endif
+
+ #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2( TestNameClass, TestName, ClassName, Name, Tags, TmplList) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ template<typename TestType> \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \
+ void test();\
+ };\
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){ \
+ INTERNAL_CATCH_TYPE_GEN\
+ template<typename...Types>\
+ struct TestNameClass{\
+ void reg_tests(){\
+ int index = 0;\
+ using expander = int[];\
+ (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ Name " - " + std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + std::to_string(index), Tags } ), index++)... };/* NOLINT */ \
+ }\
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
+ using TestInit = typename convert<TestNameClass, TmplList>::type;\
+ TestInit t;\
+ t.reg_tests();\
+ return 0;\
+ }(); \
+ }}\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ template<typename TestType> \
+ void TestName<TestType>::test()
+
+#define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD(ClassName, Name, Tags, TmplList) \
+ INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), ClassName, Name, Tags, TmplList )
+
+// end catch_test_registry.h
+// start catch_capture.hpp
+
+// start catch_assertionhandler.h
+
+// start catch_assertioninfo.h
+
+// start catch_result_type.h
+
+namespace Catch {
+
+ // ResultWas::OfType enum
+ struct ResultWas { enum OfType {
+ Unknown = -1,
+ Ok = 0,
+ Info = 1,
+ Warning = 2,
+
+ FailureBit = 0x10,
+
+ ExpressionFailed = FailureBit | 1,
+ ExplicitFailure = FailureBit | 2,
+
+ Exception = 0x100 | FailureBit,
+
+ ThrewException = Exception | 1,
+ DidntThrowException = Exception | 2,
+
+ FatalErrorCondition = 0x200 | FailureBit
+
+ }; };
+
+ bool isOk( ResultWas::OfType resultType );
+ bool isJustInfo( int flags );
+
+ // ResultDisposition::Flags enum
+ struct ResultDisposition { enum Flags {
+ Normal = 0x01,
+
+ ContinueOnFailure = 0x02, // Failures fail test, but execution continues
+ FalseTest = 0x04, // Prefix expression with !
+ SuppressFail = 0x08 // Failures are reported but do not fail the test
+ }; };
+
+ ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs );
+
+ bool shouldContinueOnFailure( int flags );
+ inline bool isFalseTest( int flags ) { return ( flags & ResultDisposition::FalseTest ) != 0; }
+ bool shouldSuppressFailure( int flags );
+
+} // end namespace Catch
+
+// end catch_result_type.h
+namespace Catch {
+
+ struct AssertionInfo
+ {
+ StringRef macroName;
+ SourceLineInfo lineInfo;
+ StringRef capturedExpression;
+ ResultDisposition::Flags resultDisposition;
+
+ // We want to delete this constructor but a compiler bug in 4.8 means
+ // the struct is then treated as non-aggregate
+ //AssertionInfo() = delete;
+ };
+
+} // end namespace Catch
+
+// end catch_assertioninfo.h
+// start catch_decomposer.h
+
+// start catch_tostring.h
+
+#include <vector>
+#include <cstddef>
+#include <type_traits>
+#include <string>
+// start catch_stream.h
+
+#include <iosfwd>
+#include <cstddef>
+#include <ostream>
+
+namespace Catch {
+
+ std::ostream& cout();
+ std::ostream& cerr();
+ std::ostream& clog();
+
+ class StringRef;
+
+ struct IStream {
+ virtual ~IStream();
+ virtual std::ostream& stream() const = 0;
+ };
+
+ auto makeStream( StringRef const &filename ) -> IStream const*;
+
+ class ReusableStringStream : NonCopyable {
+ std::size_t m_index;
+ std::ostream* m_oss;
+ public:
+ ReusableStringStream();
+ ~ReusableStringStream();
+
+ auto str() const -> std::string;
+
+ template<typename T>
+ auto operator << ( T const& value ) -> ReusableStringStream& {
+ *m_oss << value;
+ return *this;
+ }
+ auto get() -> std::ostream& { return *m_oss; }
+ };
+}
+
+// end catch_stream.h
+// start catch_interfaces_enum_values_registry.h
+
+#include <vector>
+
+namespace Catch {
+
+ namespace Detail {
+ struct EnumInfo {
+ StringRef m_name;
+ std::vector<std::pair<int, StringRef>> m_values;
+
+ ~EnumInfo();
+
+ StringRef lookup( int value ) const;
+ };
+ } // namespace Detail
+
+ struct IMutableEnumValuesRegistry {
+ virtual ~IMutableEnumValuesRegistry();
+
+ virtual Detail::EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::vector<int> const& values ) = 0;
+
+ template<typename E>
+ Detail::EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::initializer_list<E> values ) {
+ static_assert(sizeof(int) >= sizeof(E), "Cannot serialize enum to int");
+ std::vector<int> intValues;
+ intValues.reserve( values.size() );
+ for( auto enumValue : values )
+ intValues.push_back( static_cast<int>( enumValue ) );
+ return registerEnum( enumName, allEnums, intValues );
+ }
+ };
+
+} // Catch
+
+// end catch_interfaces_enum_values_registry.h
+
+#ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+#include <string_view>
+#endif
+
+#ifdef __OBJC__
+// start catch_objc_arc.hpp
+
+#import <Foundation/Foundation.h>
+
+#ifdef __has_feature
+#define CATCH_ARC_ENABLED __has_feature(objc_arc)
+#else
+#define CATCH_ARC_ENABLED 0
+#endif
+
+void arcSafeRelease( NSObject* obj );
+id performOptionalSelector( id obj, SEL sel );
+
+#if !CATCH_ARC_ENABLED
+inline void arcSafeRelease( NSObject* obj ) {
+ [obj release];
+}
+inline id performOptionalSelector( id obj, SEL sel ) {
+ if( [obj respondsToSelector: sel] )
+ return [obj performSelector: sel];
+ return nil;
+}
+#define CATCH_UNSAFE_UNRETAINED
+#define CATCH_ARC_STRONG
+#else
+inline void arcSafeRelease( NSObject* ){}
+inline id performOptionalSelector( id obj, SEL sel ) {
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+#endif
+ if( [obj respondsToSelector: sel] )
+ return [obj performSelector: sel];
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+ return nil;
+}
+#define CATCH_UNSAFE_UNRETAINED __unsafe_unretained
+#define CATCH_ARC_STRONG __strong
+#endif
+
+// end catch_objc_arc.hpp
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable:4180) // We attempt to stream a function (address) by const&, which MSVC complains about but is harmless
+#endif
+
+namespace Catch {
+ namespace Detail {
+
+ extern const std::string unprintableString;
+
+ std::string rawMemoryToString( const void *object, std::size_t size );
+
+ template<typename T>
+ std::string rawMemoryToString( const T& object ) {
+ return rawMemoryToString( &object, sizeof(object) );
+ }
+
+ template<typename T>
+ class IsStreamInsertable {
+ template<typename Stream, typename U>
+ static auto test(int)
+ -> decltype(std::declval<Stream&>() << std::declval<U>(), std::true_type());
+
+ template<typename, typename>
+ static auto test(...)->std::false_type;
+
+ public:
+ static const bool value = decltype(test<std::ostream, const T&>(0))::value;
+ };
+
+ template<typename E>
+ std::string convertUnknownEnumToString( E e );
+
+ template<typename T>
+ typename std::enable_if<
+ !std::is_enum<T>::value && !std::is_base_of<std::exception, T>::value,
+ std::string>::type convertUnstreamable( T const& ) {
+ return Detail::unprintableString;
+ }
+ template<typename T>
+ typename std::enable_if<
+ !std::is_enum<T>::value && std::is_base_of<std::exception, T>::value,
+ std::string>::type convertUnstreamable(T const& ex) {
+ return ex.what();
+ }
+
+ template<typename T>
+ typename std::enable_if<
+ std::is_enum<T>::value
+ , std::string>::type convertUnstreamable( T const& value ) {
+ return convertUnknownEnumToString( value );
+ }
+
+#if defined(_MANAGED)
+ //! Convert a CLR string to a utf8 std::string
+ template<typename T>
+ std::string clrReferenceToString( T^ ref ) {
+ if (ref == nullptr)
+ return std::string("null");
+ auto bytes = System::Text::Encoding::UTF8->GetBytes(ref->ToString());
+ cli::pin_ptr<System::Byte> p = &bytes[0];
+ return std::string(reinterpret_cast<char const *>(p), bytes->Length);
+ }
+#endif
+
+ } // namespace Detail
+
+ // If we decide for C++14, change these to enable_if_ts
+ template <typename T, typename = void>
+ struct StringMaker {
+ template <typename Fake = T>
+ static
+ typename std::enable_if<::Catch::Detail::IsStreamInsertable<Fake>::value, std::string>::type
+ convert(const Fake& value) {
+ ReusableStringStream rss;
+ // NB: call using the function-like syntax to avoid ambiguity with
+ // user-defined templated operator<< under clang.
+ rss.operator<<(value);
+ return rss.str();
+ }
+
+ template <typename Fake = T>
+ static
+ typename std::enable_if<!::Catch::Detail::IsStreamInsertable<Fake>::value, std::string>::type
+ convert( const Fake& value ) {
+#if !defined(CATCH_CONFIG_FALLBACK_STRINGIFIER)
+ return Detail::convertUnstreamable(value);
+#else
+ return CATCH_CONFIG_FALLBACK_STRINGIFIER(value);
+#endif
+ }
+ };
+
+ namespace Detail {
+
+ // This function dispatches all stringification requests inside of Catch.
+ // Should be preferably called fully qualified, like ::Catch::Detail::stringify
+ template <typename T>
+ std::string stringify(const T& e) {
+ return ::Catch::StringMaker<typename std::remove_cv<typename std::remove_reference<T>::type>::type>::convert(e);
+ }
+
+ template<typename E>
+ std::string convertUnknownEnumToString( E e ) {
+ return ::Catch::Detail::stringify(static_cast<typename std::underlying_type<E>::type>(e));
+ }
+
+#if defined(_MANAGED)
+ template <typename T>
+ std::string stringify( T^ e ) {
+ return ::Catch::StringMaker<T^>::convert(e);
+ }
+#endif
+
+ } // namespace Detail
+
+ // Some predefined specializations
+
+ template<>
+ struct StringMaker<std::string> {
+ static std::string convert(const std::string& str);
+ };
+
+#ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+ template<>
+ struct StringMaker<std::string_view> {
+ static std::string convert(std::string_view str);
+ };
+#endif
+
+ template<>
+ struct StringMaker<char const *> {
+ static std::string convert(char const * str);
+ };
+ template<>
+ struct StringMaker<char *> {
+ static std::string convert(char * str);
+ };
+
+#ifdef CATCH_CONFIG_WCHAR
+ template<>
+ struct StringMaker<std::wstring> {
+ static std::string convert(const std::wstring& wstr);
+ };
+
+# ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+ template<>
+ struct StringMaker<std::wstring_view> {
+ static std::string convert(std::wstring_view str);
+ };
+# endif
+
+ template<>
+ struct StringMaker<wchar_t const *> {
+ static std::string convert(wchar_t const * str);
+ };
+ template<>
+ struct StringMaker<wchar_t *> {
+ static std::string convert(wchar_t * str);
+ };
+#endif
+
+ // TBD: Should we use `strnlen` to ensure that we don't go out of the buffer,
+ // while keeping string semantics?
+ template<int SZ>
+ struct StringMaker<char[SZ]> {
+ static std::string convert(char const* str) {
+ return ::Catch::Detail::stringify(std::string{ str });
+ }
+ };
+ template<int SZ>
+ struct StringMaker<signed char[SZ]> {
+ static std::string convert(signed char const* str) {
+ return ::Catch::Detail::stringify(std::string{ reinterpret_cast<char const *>(str) });
+ }
+ };
+ template<int SZ>
+ struct StringMaker<unsigned char[SZ]> {
+ static std::string convert(unsigned char const* str) {
+ return ::Catch::Detail::stringify(std::string{ reinterpret_cast<char const *>(str) });
+ }
+ };
+
+#if defined(CATCH_CONFIG_CPP17_BYTE)
+ template<>
+ struct StringMaker<std::byte> {
+ static std::string convert(std::byte value);
+ };
+#endif // defined(CATCH_CONFIG_CPP17_BYTE)
+ template<>
+ struct StringMaker<int> {
+ static std::string convert(int value);
+ };
+ template<>
+ struct StringMaker<long> {
+ static std::string convert(long value);
+ };
+ template<>
+ struct StringMaker<long long> {
+ static std::string convert(long long value);
+ };
+ template<>
+ struct StringMaker<unsigned int> {
+ static std::string convert(unsigned int value);
+ };
+ template<>
+ struct StringMaker<unsigned long> {
+ static std::string convert(unsigned long value);
+ };
+ template<>
+ struct StringMaker<unsigned long long> {
+ static std::string convert(unsigned long long value);
+ };
+
+ template<>
+ struct StringMaker<bool> {
+ static std::string convert(bool b);
+ };
+
+ template<>
+ struct StringMaker<char> {
+ static std::string convert(char c);
+ };
+ template<>
+ struct StringMaker<signed char> {
+ static std::string convert(signed char c);
+ };
+ template<>
+ struct StringMaker<unsigned char> {
+ static std::string convert(unsigned char c);
+ };
+
+ template<>
+ struct StringMaker<std::nullptr_t> {
+ static std::string convert(std::nullptr_t);
+ };
+
+ template<>
+ struct StringMaker<float> {
+ static std::string convert(float value);
+ static int precision;
+ };
+
+ template<>
+ struct StringMaker<double> {
+ static std::string convert(double value);
+ static int precision;
+ };
+
+ template <typename T>
+ struct StringMaker<T*> {
+ template <typename U>
+ static std::string convert(U* p) {
+ if (p) {
+ return ::Catch::Detail::rawMemoryToString(p);
+ } else {
+ return "nullptr";
+ }
+ }
+ };
+
+ template <typename R, typename C>
+ struct StringMaker<R C::*> {
+ static std::string convert(R C::* p) {
+ if (p) {
+ return ::Catch::Detail::rawMemoryToString(p);
+ } else {
+ return "nullptr";
+ }
+ }
+ };
+
+#if defined(_MANAGED)
+ template <typename T>
+ struct StringMaker<T^> {
+ static std::string convert( T^ ref ) {
+ return ::Catch::Detail::clrReferenceToString(ref);
+ }
+ };
+#endif
+
+ namespace Detail {
+ template<typename InputIterator, typename Sentinel = InputIterator>
+ std::string rangeToString(InputIterator first, Sentinel last) {
+ ReusableStringStream rss;
+ rss << "{ ";
+ if (first != last) {
+ rss << ::Catch::Detail::stringify(*first);
+ for (++first; first != last; ++first)
+ rss << ", " << ::Catch::Detail::stringify(*first);
+ }
+ rss << " }";
+ return rss.str();
+ }
+ }
+
+#ifdef __OBJC__
+ template<>
+ struct StringMaker<NSString*> {
+ static std::string convert(NSString * nsstring) {
+ if (!nsstring)
+ return "nil";
+ return std::string("@") + [nsstring UTF8String];
+ }
+ };
+ template<>
+ struct StringMaker<NSObject*> {
+ static std::string convert(NSObject* nsObject) {
+ return ::Catch::Detail::stringify([nsObject description]);
+ }
+
+ };
+ namespace Detail {
+ inline std::string stringify( NSString* nsstring ) {
+ return StringMaker<NSString*>::convert( nsstring );
+ }
+
+ } // namespace Detail
+#endif // __OBJC__
+
+} // namespace Catch
+
+//////////////////////////////////////////////////////
+// Separate std-lib types stringification, so it can be selectively enabled
+// This means that we do not bring in
+
+#if defined(CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS)
+# define CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER
+# define CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER
+# define CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER
+# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
+# define CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER
+#endif
+
+// Separate std::pair specialization
+#if defined(CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER)
+#include <utility>
+namespace Catch {
+ template<typename T1, typename T2>
+ struct StringMaker<std::pair<T1, T2> > {
+ static std::string convert(const std::pair<T1, T2>& pair) {
+ ReusableStringStream rss;
+ rss << "{ "
+ << ::Catch::Detail::stringify(pair.first)
+ << ", "
+ << ::Catch::Detail::stringify(pair.second)
+ << " }";
+ return rss.str();
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER
+
+#if defined(CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER) && defined(CATCH_CONFIG_CPP17_OPTIONAL)
+#include <optional>
+namespace Catch {
+ template<typename T>
+ struct StringMaker<std::optional<T> > {
+ static std::string convert(const std::optional<T>& optional) {
+ ReusableStringStream rss;
+ if (optional.has_value()) {
+ rss << ::Catch::Detail::stringify(*optional);
+ } else {
+ rss << "{ }";
+ }
+ return rss.str();
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER
+
+// Separate std::tuple specialization
+#if defined(CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER)
+#include <tuple>
+namespace Catch {
+ namespace Detail {
+ template<
+ typename Tuple,
+ std::size_t N = 0,
+ bool = (N < std::tuple_size<Tuple>::value)
+ >
+ struct TupleElementPrinter {
+ static void print(const Tuple& tuple, std::ostream& os) {
+ os << (N ? ", " : " ")
+ << ::Catch::Detail::stringify(std::get<N>(tuple));
+ TupleElementPrinter<Tuple, N + 1>::print(tuple, os);
+ }
+ };
+
+ template<
+ typename Tuple,
+ std::size_t N
+ >
+ struct TupleElementPrinter<Tuple, N, false> {
+ static void print(const Tuple&, std::ostream&) {}
+ };
+
+ }
+
+ template<typename ...Types>
+ struct StringMaker<std::tuple<Types...>> {
+ static std::string convert(const std::tuple<Types...>& tuple) {
+ ReusableStringStream rss;
+ rss << '{';
+ Detail::TupleElementPrinter<std::tuple<Types...>>::print(tuple, rss.get());
+ rss << " }";
+ return rss.str();
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER
+
+#if defined(CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER) && defined(CATCH_CONFIG_CPP17_VARIANT)
+#include <variant>
+namespace Catch {
+ template<>
+ struct StringMaker<std::monostate> {
+ static std::string convert(const std::monostate&) {
+ return "{ }";
+ }
+ };
+
+ template<typename... Elements>
+ struct StringMaker<std::variant<Elements...>> {
+ static std::string convert(const std::variant<Elements...>& variant) {
+ if (variant.valueless_by_exception()) {
+ return "{valueless variant}";
+ } else {
+ return std::visit(
+ [](const auto& value) {
+ return ::Catch::Detail::stringify(value);
+ },
+ variant
+ );
+ }
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER
+
+namespace Catch {
+ // Import begin/ end from std here
+ using std::begin;
+ using std::end;
+
+ namespace detail {
+ template <typename...>
+ struct void_type {
+ using type = void;
+ };
+
+ template <typename T, typename = void>
+ struct is_range_impl : std::false_type {
+ };
+
+ template <typename T>
+ struct is_range_impl<T, typename void_type<decltype(begin(std::declval<T>()))>::type> : std::true_type {
+ };
+ } // namespace detail
+
+ template <typename T>
+ struct is_range : detail::is_range_impl<T> {
+ };
+
+#if defined(_MANAGED) // Managed types are never ranges
+ template <typename T>
+ struct is_range<T^> {
+ static const bool value = false;
+ };
+#endif
+
+ template<typename Range>
+ std::string rangeToString( Range const& range ) {
+ return ::Catch::Detail::rangeToString( begin( range ), end( range ) );
+ }
+
+ // Handle vector<bool> specially
+ template<typename Allocator>
+ std::string rangeToString( std::vector<bool, Allocator> const& v ) {
+ ReusableStringStream rss;
+ rss << "{ ";
+ bool first = true;
+ for( bool b : v ) {
+ if( first )
+ first = false;
+ else
+ rss << ", ";
+ rss << ::Catch::Detail::stringify( b );
+ }
+ rss << " }";
+ return rss.str();
+ }
+
+ template<typename R>
+ struct StringMaker<R, typename std::enable_if<is_range<R>::value && !::Catch::Detail::IsStreamInsertable<R>::value>::type> {
+ static std::string convert( R const& range ) {
+ return rangeToString( range );
+ }
+ };
+
+ template <typename T, int SZ>
+ struct StringMaker<T[SZ]> {
+ static std::string convert(T const(&arr)[SZ]) {
+ return rangeToString(arr);
+ }
+ };
+
+} // namespace Catch
+
+// Separate std::chrono::duration specialization
+#if defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER)
+#include <ctime>
+#include <ratio>
+#include <chrono>
+
+namespace Catch {
+
+template <class Ratio>
+struct ratio_string {
+ static std::string symbol();
+};
+
+template <class Ratio>
+std::string ratio_string<Ratio>::symbol() {
+ Catch::ReusableStringStream rss;
+ rss << '[' << Ratio::num << '/'
+ << Ratio::den << ']';
+ return rss.str();
+}
+template <>
+struct ratio_string<std::atto> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::femto> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::pico> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::nano> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::micro> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::milli> {
+ static std::string symbol();
+};
+
+ ////////////
+ // std::chrono::duration specializations
+ template<typename Value, typename Ratio>
+ struct StringMaker<std::chrono::duration<Value, Ratio>> {
+ static std::string convert(std::chrono::duration<Value, Ratio> const& duration) {
+ ReusableStringStream rss;
+ rss << duration.count() << ' ' << ratio_string<Ratio>::symbol() << 's';
+ return rss.str();
+ }
+ };
+ template<typename Value>
+ struct StringMaker<std::chrono::duration<Value, std::ratio<1>>> {
+ static std::string convert(std::chrono::duration<Value, std::ratio<1>> const& duration) {
+ ReusableStringStream rss;
+ rss << duration.count() << " s";
+ return rss.str();
+ }
+ };
+ template<typename Value>
+ struct StringMaker<std::chrono::duration<Value, std::ratio<60>>> {
+ static std::string convert(std::chrono::duration<Value, std::ratio<60>> const& duration) {
+ ReusableStringStream rss;
+ rss << duration.count() << " m";
+ return rss.str();
+ }
+ };
+ template<typename Value>
+ struct StringMaker<std::chrono::duration<Value, std::ratio<3600>>> {
+ static std::string convert(std::chrono::duration<Value, std::ratio<3600>> const& duration) {
+ ReusableStringStream rss;
+ rss << duration.count() << " h";
+ return rss.str();
+ }
+ };
+
+ ////////////
+ // std::chrono::time_point specialization
+ // Generic time_point cannot be specialized, only std::chrono::time_point<system_clock>
+ template<typename Clock, typename Duration>
+ struct StringMaker<std::chrono::time_point<Clock, Duration>> {
+ static std::string convert(std::chrono::time_point<Clock, Duration> const& time_point) {
+ return ::Catch::Detail::stringify(time_point.time_since_epoch()) + " since epoch";
+ }
+ };
+ // std::chrono::time_point<system_clock> specialization
+ template<typename Duration>
+ struct StringMaker<std::chrono::time_point<std::chrono::system_clock, Duration>> {
+ static std::string convert(std::chrono::time_point<std::chrono::system_clock, Duration> const& time_point) {
+ auto converted = std::chrono::system_clock::to_time_t(time_point);
+
+#ifdef _MSC_VER
+ std::tm timeInfo = {};
+ gmtime_s(&timeInfo, &converted);
+#else
+ std::tm* timeInfo = std::gmtime(&converted);
+#endif
+
+ auto const timeStampSize = sizeof("2017-01-16T17:06:45Z");
+ char timeStamp[timeStampSize];
+ const char * const fmt = "%Y-%m-%dT%H:%M:%SZ";
+
+#ifdef _MSC_VER
+ std::strftime(timeStamp, timeStampSize, fmt, &timeInfo);
+#else
+ std::strftime(timeStamp, timeStampSize, fmt, timeInfo);
+#endif
+ return std::string(timeStamp);
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
+
+#define INTERNAL_CATCH_REGISTER_ENUM( enumName, ... ) \
+namespace Catch { \
+ template<> struct StringMaker<enumName> { \
+ static std::string convert( enumName value ) { \
+ static const auto& enumInfo = ::Catch::getMutableRegistryHub().getMutableEnumValuesRegistry().registerEnum( #enumName, #__VA_ARGS__, { __VA_ARGS__ } ); \
+ return static_cast<std::string>(enumInfo.lookup( static_cast<int>( value ) )); \
+ } \
+ }; \
+}
+
+#define CATCH_REGISTER_ENUM( enumName, ... ) INTERNAL_CATCH_REGISTER_ENUM( enumName, __VA_ARGS__ )
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+// end catch_tostring.h
+#include <iosfwd>
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable:4389) // '==' : signed/unsigned mismatch
+#pragma warning(disable:4018) // more "signed/unsigned mismatch"
+#pragma warning(disable:4312) // Converting int to T* using reinterpret_cast (issue on x64 platform)
+#pragma warning(disable:4180) // qualifier applied to function type has no meaning
+#pragma warning(disable:4800) // Forcing result to true or false
+#endif
+
+namespace Catch {
+
+ struct ITransientExpression {
+ auto isBinaryExpression() const -> bool { return m_isBinaryExpression; }
+ auto getResult() const -> bool { return m_result; }
+ virtual void streamReconstructedExpression( std::ostream &os ) const = 0;
+
+ ITransientExpression( bool isBinaryExpression, bool result )
+ : m_isBinaryExpression( isBinaryExpression ),
+ m_result( result )
+ {}
+
+ // We don't actually need a virtual destructor, but many static analysers
+ // complain if it's not here :-(
+ virtual ~ITransientExpression();
+
+ bool m_isBinaryExpression;
+ bool m_result;
+
+ };
+
+ void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs );
+
+ template<typename LhsT, typename RhsT>
+ class BinaryExpr : public ITransientExpression {
+ LhsT m_lhs;
+ StringRef m_op;
+ RhsT m_rhs;
+
+ void streamReconstructedExpression( std::ostream &os ) const override {
+ formatReconstructedExpression
+ ( os, Catch::Detail::stringify( m_lhs ), m_op, Catch::Detail::stringify( m_rhs ) );
+ }
+
+ public:
+ BinaryExpr( bool comparisonResult, LhsT lhs, StringRef op, RhsT rhs )
+ : ITransientExpression{ true, comparisonResult },
+ m_lhs( lhs ),
+ m_op( op ),
+ m_rhs( rhs )
+ {}
+
+ template<typename T>
+ auto operator && ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator || ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator == ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator != ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator > ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator < ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator >= ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator <= ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+ };
+
+ template<typename LhsT>
+ class UnaryExpr : public ITransientExpression {
+ LhsT m_lhs;
+
+ void streamReconstructedExpression( std::ostream &os ) const override {
+ os << Catch::Detail::stringify( m_lhs );
+ }
+
+ public:
+ explicit UnaryExpr( LhsT lhs )
+ : ITransientExpression{ false, static_cast<bool>(lhs) },
+ m_lhs( lhs )
+ {}
+ };
+
+ // Specialised comparison functions to handle equality comparisons between ints and pointers (NULL deduces as an int)
+ template<typename LhsT, typename RhsT>
+ auto compareEqual( LhsT const& lhs, RhsT const& rhs ) -> bool { return static_cast<bool>(lhs == rhs); }
+ template<typename T>
+ auto compareEqual( T* const& lhs, int rhs ) -> bool { return lhs == reinterpret_cast<void const*>( rhs ); }
+ template<typename T>
+ auto compareEqual( T* const& lhs, long rhs ) -> bool { return lhs == reinterpret_cast<void const*>( rhs ); }
+ template<typename T>
+ auto compareEqual( int lhs, T* const& rhs ) -> bool { return reinterpret_cast<void const*>( lhs ) == rhs; }
+ template<typename T>
+ auto compareEqual( long lhs, T* const& rhs ) -> bool { return reinterpret_cast<void const*>( lhs ) == rhs; }
+
+ template<typename LhsT, typename RhsT>
+ auto compareNotEqual( LhsT const& lhs, RhsT&& rhs ) -> bool { return static_cast<bool>(lhs != rhs); }
+ template<typename T>
+ auto compareNotEqual( T* const& lhs, int rhs ) -> bool { return lhs != reinterpret_cast<void const*>( rhs ); }
+ template<typename T>
+ auto compareNotEqual( T* const& lhs, long rhs ) -> bool { return lhs != reinterpret_cast<void const*>( rhs ); }
+ template<typename T>
+ auto compareNotEqual( int lhs, T* const& rhs ) -> bool { return reinterpret_cast<void const*>( lhs ) != rhs; }
+ template<typename T>
+ auto compareNotEqual( long lhs, T* const& rhs ) -> bool { return reinterpret_cast<void const*>( lhs ) != rhs; }
+
+ template<typename LhsT>
+ class ExprLhs {
+ LhsT m_lhs;
+ public:
+ explicit ExprLhs( LhsT lhs ) : m_lhs( lhs ) {}
+
+ template<typename RhsT>
+ auto operator == ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { compareEqual( m_lhs, rhs ), m_lhs, "==", rhs };
+ }
+ auto operator == ( bool rhs ) -> BinaryExpr<LhsT, bool> const {
+ return { m_lhs == rhs, m_lhs, "==", rhs };
+ }
+
+ template<typename RhsT>
+ auto operator != ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { compareNotEqual( m_lhs, rhs ), m_lhs, "!=", rhs };
+ }
+ auto operator != ( bool rhs ) -> BinaryExpr<LhsT, bool> const {
+ return { m_lhs != rhs, m_lhs, "!=", rhs };
+ }
+
+ template<typename RhsT>
+ auto operator > ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs > rhs), m_lhs, ">", rhs };
+ }
+ template<typename RhsT>
+ auto operator < ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs < rhs), m_lhs, "<", rhs };
+ }
+ template<typename RhsT>
+ auto operator >= ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs >= rhs), m_lhs, ">=", rhs };
+ }
+ template<typename RhsT>
+ auto operator <= ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs <= rhs), m_lhs, "<=", rhs };
+ }
+ template <typename RhsT>
+ auto operator | (RhsT const& rhs) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs | rhs), m_lhs, "|", rhs };
+ }
+ template <typename RhsT>
+ auto operator & (RhsT const& rhs) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs & rhs), m_lhs, "&", rhs };
+ }
+ template <typename RhsT>
+ auto operator ^ (RhsT const& rhs) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs ^ rhs), m_lhs, "^", rhs };
+ }
+
+ template<typename RhsT>
+ auto operator && ( RhsT const& ) -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<RhsT>::value,
+ "operator&& is not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename RhsT>
+ auto operator || ( RhsT const& ) -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<RhsT>::value,
+ "operator|| is not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ auto makeUnaryExpr() const -> UnaryExpr<LhsT> {
+ return UnaryExpr<LhsT>{ m_lhs };
+ }
+ };
+
+ void handleExpression( ITransientExpression const& expr );
+
+ template<typename T>
+ void handleExpression( ExprLhs<T> const& expr ) {
+ handleExpression( expr.makeUnaryExpr() );
+ }
+
+ struct Decomposer {
+ template<typename T>
+ auto operator <= ( T const& lhs ) -> ExprLhs<T const&> {
+ return ExprLhs<T const&>{ lhs };
+ }
+
+ auto operator <=( bool value ) -> ExprLhs<bool> {
+ return ExprLhs<bool>{ value };
+ }
+ };
+
+} // end namespace Catch
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+// end catch_decomposer.h
+// start catch_interfaces_capture.h
+
+#include <string>
+#include <chrono>
+
+namespace Catch {
+
+ class AssertionResult;
+ struct AssertionInfo;
+ struct SectionInfo;
+ struct SectionEndInfo;
+ struct MessageInfo;
+ struct MessageBuilder;
+ struct Counts;
+ struct AssertionReaction;
+ struct SourceLineInfo;
+
+ struct ITransientExpression;
+ struct IGeneratorTracker;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ struct BenchmarkInfo;
+ template <typename Duration = std::chrono::duration<double, std::nano>>
+ struct BenchmarkStats;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ struct IResultCapture {
+
+ virtual ~IResultCapture();
+
+ virtual bool sectionStarted( SectionInfo const& sectionInfo,
+ Counts& assertions ) = 0;
+ virtual void sectionEnded( SectionEndInfo const& endInfo ) = 0;
+ virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) = 0;
+
+ virtual auto acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker& = 0;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ virtual void benchmarkPreparing( std::string const& name ) = 0;
+ virtual void benchmarkStarting( BenchmarkInfo const& info ) = 0;
+ virtual void benchmarkEnded( BenchmarkStats<> const& stats ) = 0;
+ virtual void benchmarkFailed( std::string const& error ) = 0;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ virtual void pushScopedMessage( MessageInfo const& message ) = 0;
+ virtual void popScopedMessage( MessageInfo const& message ) = 0;
+
+ virtual void emplaceUnscopedMessage( MessageBuilder const& builder ) = 0;
+
+ virtual void handleFatalErrorCondition( StringRef message ) = 0;
+
+ virtual void handleExpr
+ ( AssertionInfo const& info,
+ ITransientExpression const& expr,
+ AssertionReaction& reaction ) = 0;
+ virtual void handleMessage
+ ( AssertionInfo const& info,
+ ResultWas::OfType resultType,
+ StringRef const& message,
+ AssertionReaction& reaction ) = 0;
+ virtual void handleUnexpectedExceptionNotThrown
+ ( AssertionInfo const& info,
+ AssertionReaction& reaction ) = 0;
+ virtual void handleUnexpectedInflightException
+ ( AssertionInfo const& info,
+ std::string const& message,
+ AssertionReaction& reaction ) = 0;
+ virtual void handleIncomplete
+ ( AssertionInfo const& info ) = 0;
+ virtual void handleNonExpr
+ ( AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ AssertionReaction &reaction ) = 0;
+
+ virtual bool lastAssertionPassed() = 0;
+ virtual void assertionPassed() = 0;
+
+ // Deprecated, do not use:
+ virtual std::string getCurrentTestName() const = 0;
+ virtual const AssertionResult* getLastResult() const = 0;
+ virtual void exceptionEarlyReported() = 0;
+ };
+
+ IResultCapture& getResultCapture();
+}
+
+// end catch_interfaces_capture.h
+namespace Catch {
+
+ struct TestFailureException{};
+ struct AssertionResultData;
+ struct IResultCapture;
+ class RunContext;
+
+ class LazyExpression {
+ friend class AssertionHandler;
+ friend struct AssertionStats;
+ friend class RunContext;
+
+ ITransientExpression const* m_transientExpression = nullptr;
+ bool m_isNegated;
+ public:
+ LazyExpression( bool isNegated );
+ LazyExpression( LazyExpression const& other );
+ LazyExpression& operator = ( LazyExpression const& ) = delete;
+
+ explicit operator bool() const;
+
+ friend auto operator << ( std::ostream& os, LazyExpression const& lazyExpr ) -> std::ostream&;
+ };
+
+ struct AssertionReaction {
+ bool shouldDebugBreak = false;
+ bool shouldThrow = false;
+ };
+
+ class AssertionHandler {
+ AssertionInfo m_assertionInfo;
+ AssertionReaction m_reaction;
+ bool m_completed = false;
+ IResultCapture& m_resultCapture;
+
+ public:
+ AssertionHandler
+ ( StringRef const& macroName,
+ SourceLineInfo const& lineInfo,
+ StringRef capturedExpression,
+ ResultDisposition::Flags resultDisposition );
+ ~AssertionHandler() {
+ if ( !m_completed ) {
+ m_resultCapture.handleIncomplete( m_assertionInfo );
+ }
+ }
+
+ template<typename T>
+ void handleExpr( ExprLhs<T> const& expr ) {
+ handleExpr( expr.makeUnaryExpr() );
+ }
+ void handleExpr( ITransientExpression const& expr );
+
+ void handleMessage(ResultWas::OfType resultType, StringRef const& message);
+
+ void handleExceptionThrownAsExpected();
+ void handleUnexpectedExceptionNotThrown();
+ void handleExceptionNotThrownAsExpected();
+ void handleThrowingCallSkipped();
+ void handleUnexpectedInflightException();
+
+ void complete();
+ void setCompleted();
+
+ // query
+ auto allowThrows() const -> bool;
+ };
+
+ void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef const& matcherString );
+
+} // namespace Catch
+
+// end catch_assertionhandler.h
+// start catch_message.h
+
+#include <string>
+#include <vector>
+
+namespace Catch {
+
+ struct MessageInfo {
+ MessageInfo( StringRef const& _macroName,
+ SourceLineInfo const& _lineInfo,
+ ResultWas::OfType _type );
+
+ StringRef macroName;
+ std::string message;
+ SourceLineInfo lineInfo;
+ ResultWas::OfType type;
+ unsigned int sequence;
+
+ bool operator == ( MessageInfo const& other ) const;
+ bool operator < ( MessageInfo const& other ) const;
+ private:
+ static unsigned int globalCount;
+ };
+
+ struct MessageStream {
+
+ template<typename T>
+ MessageStream& operator << ( T const& value ) {
+ m_stream << value;
+ return *this;
+ }
+
+ ReusableStringStream m_stream;
+ };
+
+ struct MessageBuilder : MessageStream {
+ MessageBuilder( StringRef const& macroName,
+ SourceLineInfo const& lineInfo,
+ ResultWas::OfType type );
+
+ template<typename T>
+ MessageBuilder& operator << ( T const& value ) {
+ m_stream << value;
+ return *this;
+ }
+
+ MessageInfo m_info;
+ };
+
+ class ScopedMessage {
+ public:
+ explicit ScopedMessage( MessageBuilder const& builder );
+ ScopedMessage( ScopedMessage& duplicate ) = delete;
+ ScopedMessage( ScopedMessage&& old );
+ ~ScopedMessage();
+
+ MessageInfo m_info;
+ bool m_moved;
+ };
+
+ class Capturer {
+ std::vector<MessageInfo> m_messages;
+ IResultCapture& m_resultCapture = getResultCapture();
+ size_t m_captured = 0;
+ public:
+ Capturer( StringRef macroName, SourceLineInfo const& lineInfo, ResultWas::OfType resultType, StringRef names );
+ ~Capturer();
+
+ void captureValue( size_t index, std::string const& value );
+
+ template<typename T>
+ void captureValues( size_t index, T const& value ) {
+ captureValue( index, Catch::Detail::stringify( value ) );
+ }
+
+ template<typename T, typename... Ts>
+ void captureValues( size_t index, T const& value, Ts const&... values ) {
+ captureValue( index, Catch::Detail::stringify(value) );
+ captureValues( index+1, values... );
+ }
+ };
+
+} // end namespace Catch
+
+// end catch_message.h
+#if !defined(CATCH_CONFIG_DISABLE)
+
+#if !defined(CATCH_CONFIG_DISABLE_STRINGIFICATION)
+ #define CATCH_INTERNAL_STRINGIFY(...) #__VA_ARGS__
+#else
+ #define CATCH_INTERNAL_STRINGIFY(...) "Disabled by CATCH_CONFIG_DISABLE_STRINGIFICATION"
+#endif
+
+#if defined(CATCH_CONFIG_FAST_COMPILE) || defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+
+///////////////////////////////////////////////////////////////////////////////
+// Another way to speed-up compilation is to omit local try-catch for REQUIRE*
+// macros.
+#define INTERNAL_CATCH_TRY
+#define INTERNAL_CATCH_CATCH( capturer )
+
+#else // CATCH_CONFIG_FAST_COMPILE
+
+#define INTERNAL_CATCH_TRY try
+#define INTERNAL_CATCH_CATCH( handler ) catch(...) { handler.handleUnexpectedInflightException(); }
+
+#endif
+
+#define INTERNAL_CATCH_REACT( handler ) handler.complete();
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_TEST( macroName, resultDisposition, ... ) \
+ do { \
+ CATCH_INTERNAL_IGNORE_BUT_WARN(__VA_ARGS__); \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__), resultDisposition ); \
+ INTERNAL_CATCH_TRY { \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \
+ catchAssertionHandler.handleExpr( Catch::Decomposer() <= __VA_ARGS__ ); \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ } INTERNAL_CATCH_CATCH( catchAssertionHandler ) \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( (void)0, (false) && static_cast<bool>( !!(__VA_ARGS__) ) )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_IF( macroName, resultDisposition, ... ) \
+ INTERNAL_CATCH_TEST( macroName, resultDisposition, __VA_ARGS__ ); \
+ if( Catch::getResultCapture().lastAssertionPassed() )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_ELSE( macroName, resultDisposition, ... ) \
+ INTERNAL_CATCH_TEST( macroName, resultDisposition, __VA_ARGS__ ); \
+ if( !Catch::getResultCapture().lastAssertionPassed() )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_NO_THROW( macroName, resultDisposition, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__), resultDisposition ); \
+ try { \
+ static_cast<void>(__VA_ARGS__); \
+ catchAssertionHandler.handleExceptionNotThrownAsExpected(); \
+ } \
+ catch( ... ) { \
+ catchAssertionHandler.handleUnexpectedInflightException(); \
+ } \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_THROWS( macroName, resultDisposition, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__), resultDisposition); \
+ if( catchAssertionHandler.allowThrows() ) \
+ try { \
+ static_cast<void>(__VA_ARGS__); \
+ catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \
+ } \
+ catch( ... ) { \
+ catchAssertionHandler.handleExceptionThrownAsExpected(); \
+ } \
+ else \
+ catchAssertionHandler.handleThrowingCallSkipped(); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_THROWS_AS( macroName, exceptionType, resultDisposition, expr ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(expr) ", " CATCH_INTERNAL_STRINGIFY(exceptionType), resultDisposition ); \
+ if( catchAssertionHandler.allowThrows() ) \
+ try { \
+ static_cast<void>(expr); \
+ catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \
+ } \
+ catch( exceptionType const& ) { \
+ catchAssertionHandler.handleExceptionThrownAsExpected(); \
+ } \
+ catch( ... ) { \
+ catchAssertionHandler.handleUnexpectedInflightException(); \
+ } \
+ else \
+ catchAssertionHandler.handleThrowingCallSkipped(); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_MSG( macroName, messageType, resultDisposition, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::StringRef(), resultDisposition ); \
+ catchAssertionHandler.handleMessage( messageType, ( Catch::MessageStream() << __VA_ARGS__ + ::Catch::StreamEndStop() ).m_stream.str() ); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_CAPTURE( varName, macroName, ... ) \
+ auto varName = Catch::Capturer( macroName, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info, #__VA_ARGS__ ); \
+ varName.captureValues( 0, __VA_ARGS__ )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_INFO( macroName, log ) \
+ Catch::ScopedMessage INTERNAL_CATCH_UNIQUE_NAME( scopedMessage )( Catch::MessageBuilder( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log );
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_UNSCOPED_INFO( macroName, log ) \
+ Catch::getResultCapture().emplaceUnscopedMessage( Catch::MessageBuilder( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log )
+
+///////////////////////////////////////////////////////////////////////////////
+// Although this is matcher-based, it can be used with just a string
+#define INTERNAL_CATCH_THROWS_STR_MATCHES( macroName, resultDisposition, matcher, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__) ", " CATCH_INTERNAL_STRINGIFY(matcher), resultDisposition ); \
+ if( catchAssertionHandler.allowThrows() ) \
+ try { \
+ static_cast<void>(__VA_ARGS__); \
+ catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \
+ } \
+ catch( ... ) { \
+ Catch::handleExceptionMatchExpr( catchAssertionHandler, matcher, #matcher##_catch_sr ); \
+ } \
+ else \
+ catchAssertionHandler.handleThrowingCallSkipped(); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+#endif // CATCH_CONFIG_DISABLE
+
+// end catch_capture.hpp
+// start catch_section.h
+
+// start catch_section_info.h
+
+// start catch_totals.h
+
+#include <cstddef>
+
+namespace Catch {
+
+ struct Counts {
+ Counts operator - ( Counts const& other ) const;
+ Counts& operator += ( Counts const& other );
+
+ std::size_t total() const;
+ bool allPassed() const;
+ bool allOk() const;
+
+ std::size_t passed = 0;
+ std::size_t failed = 0;
+ std::size_t failedButOk = 0;
+ };
+
+ struct Totals {
+
+ Totals operator - ( Totals const& other ) const;
+ Totals& operator += ( Totals const& other );
+
+ Totals delta( Totals const& prevTotals ) const;
+
+ int error = 0;
+ Counts assertions;
+ Counts testCases;
+ };
+}
+
+// end catch_totals.h
+#include <string>
+
+namespace Catch {
+
+ struct SectionInfo {
+ SectionInfo
+ ( SourceLineInfo const& _lineInfo,
+ std::string const& _name );
+
+ // Deprecated
+ SectionInfo
+ ( SourceLineInfo const& _lineInfo,
+ std::string const& _name,
+ std::string const& ) : SectionInfo( _lineInfo, _name ) {}
+
+ std::string name;
+ std::string description; // !Deprecated: this will always be empty
+ SourceLineInfo lineInfo;
+ };
+
+ struct SectionEndInfo {
+ SectionInfo sectionInfo;
+ Counts prevAssertions;
+ double durationInSeconds;
+ };
+
+} // end namespace Catch
+
+// end catch_section_info.h
+// start catch_timer.h
+
+#include <cstdint>
+
+namespace Catch {
+
+ auto getCurrentNanosecondsSinceEpoch() -> uint64_t;
+ auto getEstimatedClockResolution() -> uint64_t;
+
+ class Timer {
+ uint64_t m_nanoseconds = 0;
+ public:
+ void start();
+ auto getElapsedNanoseconds() const -> uint64_t;
+ auto getElapsedMicroseconds() const -> uint64_t;
+ auto getElapsedMilliseconds() const -> unsigned int;
+ auto getElapsedSeconds() const -> double;
+ };
+
+} // namespace Catch
+
+// end catch_timer.h
+#include <string>
+
+namespace Catch {
+
+ class Section : NonCopyable {
+ public:
+ Section( SectionInfo const& info );
+ ~Section();
+
+ // This indicates whether the section should be executed or not
+ explicit operator bool() const;
+
+ private:
+ SectionInfo m_info;
+
+ std::string m_name;
+ Counts m_assertions;
+ bool m_sectionIncluded;
+ Timer m_timer;
+ };
+
+} // end namespace Catch
+
+#define INTERNAL_CATCH_SECTION( ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \
+ if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, __VA_ARGS__ ) ) \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+#define INTERNAL_CATCH_DYNAMIC_SECTION( ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \
+ if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, (Catch::ReusableStringStream() << __VA_ARGS__).str() ) ) \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+// end catch_section.h
+// start catch_interfaces_exception.h
+
+// start catch_interfaces_registry_hub.h
+
+#include <string>
+#include <memory>
+
+namespace Catch {
+
+ class TestCase;
+ struct ITestCaseRegistry;
+ struct IExceptionTranslatorRegistry;
+ struct IExceptionTranslator;
+ struct IReporterRegistry;
+ struct IReporterFactory;
+ struct ITagAliasRegistry;
+ struct IMutableEnumValuesRegistry;
+
+ class StartupExceptionRegistry;
+
+ using IReporterFactoryPtr = std::shared_ptr<IReporterFactory>;
+
+ struct IRegistryHub {
+ virtual ~IRegistryHub();
+
+ virtual IReporterRegistry const& getReporterRegistry() const = 0;
+ virtual ITestCaseRegistry const& getTestCaseRegistry() const = 0;
+ virtual ITagAliasRegistry const& getTagAliasRegistry() const = 0;
+ virtual IExceptionTranslatorRegistry const& getExceptionTranslatorRegistry() const = 0;
+
+ virtual StartupExceptionRegistry const& getStartupExceptionRegistry() const = 0;
+ };
+
+ struct IMutableRegistryHub {
+ virtual ~IMutableRegistryHub();
+ virtual void registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) = 0;
+ virtual void registerListener( IReporterFactoryPtr const& factory ) = 0;
+ virtual void registerTest( TestCase const& testInfo ) = 0;
+ virtual void registerTranslator( const IExceptionTranslator* translator ) = 0;
+ virtual void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) = 0;
+ virtual void registerStartupException() noexcept = 0;
+ virtual IMutableEnumValuesRegistry& getMutableEnumValuesRegistry() = 0;
+ };
+
+ IRegistryHub const& getRegistryHub();
+ IMutableRegistryHub& getMutableRegistryHub();
+ void cleanUp();
+ std::string translateActiveException();
+
+}
+
+// end catch_interfaces_registry_hub.h
+#if defined(CATCH_CONFIG_DISABLE)
+ #define INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( translatorName, signature) \
+ static std::string translatorName( signature )
+#endif
+
+#include <exception>
+#include <string>
+#include <vector>
+
+namespace Catch {
+ using exceptionTranslateFunction = std::string(*)();
+
+ struct IExceptionTranslator;
+ using ExceptionTranslators = std::vector<std::unique_ptr<IExceptionTranslator const>>;
+
+ struct IExceptionTranslator {
+ virtual ~IExceptionTranslator();
+ virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const = 0;
+ };
+
+ struct IExceptionTranslatorRegistry {
+ virtual ~IExceptionTranslatorRegistry();
+
+ virtual std::string translateActiveException() const = 0;
+ };
+
+ class ExceptionTranslatorRegistrar {
+ template<typename T>
+ class ExceptionTranslator : public IExceptionTranslator {
+ public:
+
+ ExceptionTranslator( std::string(*translateFunction)( T& ) )
+ : m_translateFunction( translateFunction )
+ {}
+
+ std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const override {
+#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ return "";
+#else
+ try {
+ if( it == itEnd )
+ std::rethrow_exception(std::current_exception());
+ else
+ return (*it)->translate( it+1, itEnd );
+ }
+ catch( T& ex ) {
+ return m_translateFunction( ex );
+ }
+#endif
+ }
+
+ protected:
+ std::string(*m_translateFunction)( T& );
+ };
+
+ public:
+ template<typename T>
+ ExceptionTranslatorRegistrar( std::string(*translateFunction)( T& ) ) {
+ getMutableRegistryHub().registerTranslator
+ ( new ExceptionTranslator<T>( translateFunction ) );
+ }
+ };
+}
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_TRANSLATE_EXCEPTION2( translatorName, signature ) \
+ static std::string translatorName( signature ); \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::ExceptionTranslatorRegistrar INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionRegistrar )( &translatorName ); } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ static std::string translatorName( signature )
+
+#define INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION2( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature )
+
+// end catch_interfaces_exception.h
+// start catch_approx.h
+
+#include <type_traits>
+
+namespace Catch {
+namespace Detail {
+
+ class Approx {
+ private:
+ bool equalityComparisonImpl(double other) const;
+ // Validates the new margin (margin >= 0)
+ // out-of-line to avoid including stdexcept in the header
+ void setMargin(double margin);
+ // Validates the new epsilon (0 < epsilon < 1)
+ // out-of-line to avoid including stdexcept in the header
+ void setEpsilon(double epsilon);
+
+ public:
+ explicit Approx ( double value );
+
+ static Approx custom();
+
+ Approx operator-() const;
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ Approx operator()( T const& value ) const {
+ Approx approx( static_cast<double>(value) );
+ approx.m_epsilon = m_epsilon;
+ approx.m_margin = m_margin;
+ approx.m_scale = m_scale;
+ return approx;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ explicit Approx( T const& value ): Approx(static_cast<double>(value))
+ {}
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator == ( const T& lhs, Approx const& rhs ) {
+ auto lhs_v = static_cast<double>(lhs);
+ return rhs.equalityComparisonImpl(lhs_v);
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator == ( Approx const& lhs, const T& rhs ) {
+ return operator==( rhs, lhs );
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator != ( T const& lhs, Approx const& rhs ) {
+ return !operator==( lhs, rhs );
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator != ( Approx const& lhs, T const& rhs ) {
+ return !operator==( rhs, lhs );
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator <= ( T const& lhs, Approx const& rhs ) {
+ return static_cast<double>(lhs) < rhs.m_value || lhs == rhs;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator <= ( Approx const& lhs, T const& rhs ) {
+ return lhs.m_value < static_cast<double>(rhs) || lhs == rhs;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator >= ( T const& lhs, Approx const& rhs ) {
+ return static_cast<double>(lhs) > rhs.m_value || lhs == rhs;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator >= ( Approx const& lhs, T const& rhs ) {
+ return lhs.m_value > static_cast<double>(rhs) || lhs == rhs;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ Approx& epsilon( T const& newEpsilon ) {
+ double epsilonAsDouble = static_cast<double>(newEpsilon);
+ setEpsilon(epsilonAsDouble);
+ return *this;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ Approx& margin( T const& newMargin ) {
+ double marginAsDouble = static_cast<double>(newMargin);
+ setMargin(marginAsDouble);
+ return *this;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ Approx& scale( T const& newScale ) {
+ m_scale = static_cast<double>(newScale);
+ return *this;
+ }
+
+ std::string toString() const;
+
+ private:
+ double m_epsilon;
+ double m_margin;
+ double m_scale;
+ double m_value;
+ };
+} // end namespace Detail
+
+namespace literals {
+ Detail::Approx operator "" _a(long double val);
+ Detail::Approx operator "" _a(unsigned long long val);
+} // end namespace literals
+
+template<>
+struct StringMaker<Catch::Detail::Approx> {
+ static std::string convert(Catch::Detail::Approx const& value);
+};
+
+} // end namespace Catch
+
+// end catch_approx.h
+// start catch_string_manip.h
+
+#include <string>
+#include <iosfwd>
+#include <vector>
+
+namespace Catch {
+
+ bool startsWith( std::string const& s, std::string const& prefix );
+ bool startsWith( std::string const& s, char prefix );
+ bool endsWith( std::string const& s, std::string const& suffix );
+ bool endsWith( std::string const& s, char suffix );
+ bool contains( std::string const& s, std::string const& infix );
+ void toLowerInPlace( std::string& s );
+ std::string toLower( std::string const& s );
+ //! Returns a new string without whitespace at the start/end
+ std::string trim( std::string const& str );
+ //! Returns a substring of the original ref without whitespace. Beware lifetimes!
+ StringRef trim(StringRef ref);
+
+ // !!! Be aware, returns refs into original string - make sure original string outlives them
+ std::vector<StringRef> splitStringRef( StringRef str, char delimiter );
+ bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis );
+
+ struct pluralise {
+ pluralise( std::size_t count, std::string const& label );
+
+ friend std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser );
+
+ std::size_t m_count;
+ std::string m_label;
+ };
+}
+
+// end catch_string_manip.h
+#ifndef CATCH_CONFIG_DISABLE_MATCHERS
+// start catch_capture_matchers.h
+
+// start catch_matchers.h
+
+#include <string>
+#include <vector>
+
+namespace Catch {
+namespace Matchers {
+ namespace Impl {
+
+ template<typename ArgT> struct MatchAllOf;
+ template<typename ArgT> struct MatchAnyOf;
+ template<typename ArgT> struct MatchNotOf;
+
+ class MatcherUntypedBase {
+ public:
+ MatcherUntypedBase() = default;
+ MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
+ MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = delete;
+ std::string toString() const;
+
+ protected:
+ virtual ~MatcherUntypedBase();
+ virtual std::string describe() const = 0;
+ mutable std::string m_cachedToString;
+ };
+
+#ifdef __clang__
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wnon-virtual-dtor"
+#endif
+
+ template<typename ObjectT>
+ struct MatcherMethod {
+ virtual bool match( ObjectT const& arg ) const = 0;
+ };
+
+#if defined(__OBJC__)
+ // Hack to fix Catch GH issue #1661. Could use id for generic Object support.
+ // use of const for Object pointers is very uncommon and under ARC it causes some kind of signature mismatch that breaks compilation
+ template<>
+ struct MatcherMethod<NSString*> {
+ virtual bool match( NSString* arg ) const = 0;
+ };
+#endif
+
+#ifdef __clang__
+# pragma clang diagnostic pop
+#endif
+
+ template<typename T>
+ struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
+
+ MatchAllOf<T> operator && ( MatcherBase const& other ) const;
+ MatchAnyOf<T> operator || ( MatcherBase const& other ) const;
+ MatchNotOf<T> operator ! () const;
+ };
+
+ template<typename ArgT>
+ struct MatchAllOf : MatcherBase<ArgT> {
+ bool match( ArgT const& arg ) const override {
+ for( auto matcher : m_matchers ) {
+ if (!matcher->match(arg))
+ return false;
+ }
+ return true;
+ }
+ std::string describe() const override {
+ std::string description;
+ description.reserve( 4 + m_matchers.size()*32 );
+ description += "( ";
+ bool first = true;
+ for( auto matcher : m_matchers ) {
+ if( first )
+ first = false;
+ else
+ description += " and ";
+ description += matcher->toString();
+ }
+ description += " )";
+ return description;
+ }
+
+ MatchAllOf<ArgT> operator && ( MatcherBase<ArgT> const& other ) {
+ auto copy(*this);
+ copy.m_matchers.push_back( &other );
+ return copy;
+ }
+
+ std::vector<MatcherBase<ArgT> const*> m_matchers;
+ };
+ template<typename ArgT>
+ struct MatchAnyOf : MatcherBase<ArgT> {
+
+ bool match( ArgT const& arg ) const override {
+ for( auto matcher : m_matchers ) {
+ if (matcher->match(arg))
+ return true;
+ }
+ return false;
+ }
+ std::string describe() const override {
+ std::string description;
+ description.reserve( 4 + m_matchers.size()*32 );
+ description += "( ";
+ bool first = true;
+ for( auto matcher : m_matchers ) {
+ if( first )
+ first = false;
+ else
+ description += " or ";
+ description += matcher->toString();
+ }
+ description += " )";
+ return description;
+ }
+
+ MatchAnyOf<ArgT> operator || ( MatcherBase<ArgT> const& other ) {
+ auto copy(*this);
+ copy.m_matchers.push_back( &other );
+ return copy;
+ }
+
+ std::vector<MatcherBase<ArgT> const*> m_matchers;
+ };
+
+ template<typename ArgT>
+ struct MatchNotOf : MatcherBase<ArgT> {
+
+ MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_underlyingMatcher( underlyingMatcher ) {}
+
+ bool match( ArgT const& arg ) const override {
+ return !m_underlyingMatcher.match( arg );
+ }
+
+ std::string describe() const override {
+ return "not " + m_underlyingMatcher.toString();
+ }
+ MatcherBase<ArgT> const& m_underlyingMatcher;
+ };
+
+ template<typename T>
+ MatchAllOf<T> MatcherBase<T>::operator && ( MatcherBase const& other ) const {
+ return MatchAllOf<T>() && *this && other;
+ }
+ template<typename T>
+ MatchAnyOf<T> MatcherBase<T>::operator || ( MatcherBase const& other ) const {
+ return MatchAnyOf<T>() || *this || other;
+ }
+ template<typename T>
+ MatchNotOf<T> MatcherBase<T>::operator ! () const {
+ return MatchNotOf<T>( *this );
+ }
+
+ } // namespace Impl
+
+} // namespace Matchers
+
+using namespace Matchers;
+using Matchers::Impl::MatcherBase;
+
+} // namespace Catch
+
+// end catch_matchers.h
+// start catch_matchers_exception.hpp
+
+namespace Catch {
+namespace Matchers {
+namespace Exception {
+
+class ExceptionMessageMatcher : public MatcherBase<std::exception> {
+ std::string m_message;
+public:
+
+ ExceptionMessageMatcher(std::string const& message):
+ m_message(message)
+ {}
+
+ bool match(std::exception const& ex) const override;
+
+ std::string describe() const override;
+};
+
+} // namespace Exception
+
+Exception::ExceptionMessageMatcher Message(std::string const& message);
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_exception.hpp
+// start catch_matchers_floating.h
+
+namespace Catch {
+namespace Matchers {
+
+ namespace Floating {
+
+ enum class FloatingPointKind : uint8_t;
+
+ struct WithinAbsMatcher : MatcherBase<double> {
+ WithinAbsMatcher(double target, double margin);
+ bool match(double const& matchee) const override;
+ std::string describe() const override;
+ private:
+ double m_target;
+ double m_margin;
+ };
+
+ struct WithinUlpsMatcher : MatcherBase<double> {
+ WithinUlpsMatcher(double target, uint64_t ulps, FloatingPointKind baseType);
+ bool match(double const& matchee) const override;
+ std::string describe() const override;
+ private:
+ double m_target;
+ uint64_t m_ulps;
+ FloatingPointKind m_type;
+ };
+
+ // Given IEEE-754 format for floats and doubles, we can assume
+ // that float -> double promotion is lossless. Given this, we can
+ // assume that if we do the standard relative comparison of
+ // |lhs - rhs| <= epsilon * max(fabs(lhs), fabs(rhs)), then we get
+ // the same result if we do this for floats, as if we do this for
+ // doubles that were promoted from floats.
+ struct WithinRelMatcher : MatcherBase<double> {
+ WithinRelMatcher(double target, double epsilon);
+ bool match(double const& matchee) const override;
+ std::string describe() const override;
+ private:
+ double m_target;
+ double m_epsilon;
+ };
+
+ } // namespace Floating
+
+ // The following functions create the actual matcher objects.
+ // This allows the types to be inferred
+ Floating::WithinUlpsMatcher WithinULP(double target, uint64_t maxUlpDiff);
+ Floating::WithinUlpsMatcher WithinULP(float target, uint64_t maxUlpDiff);
+ Floating::WithinAbsMatcher WithinAbs(double target, double margin);
+ Floating::WithinRelMatcher WithinRel(double target, double eps);
+ // defaults epsilon to 100*numeric_limits<double>::epsilon()
+ Floating::WithinRelMatcher WithinRel(double target);
+ Floating::WithinRelMatcher WithinRel(float target, float eps);
+ // defaults epsilon to 100*numeric_limits<float>::epsilon()
+ Floating::WithinRelMatcher WithinRel(float target);
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_floating.h
+// start catch_matchers_generic.hpp
+
+#include <functional>
+#include <string>
+
+namespace Catch {
+namespace Matchers {
+namespace Generic {
+
+namespace Detail {
+ std::string finalizeDescription(const std::string& desc);
+}
+
+template <typename T>
+class PredicateMatcher : public MatcherBase<T> {
+ std::function<bool(T const&)> m_predicate;
+ std::string m_description;
+public:
+
+ PredicateMatcher(std::function<bool(T const&)> const& elem, std::string const& descr)
+ :m_predicate(std::move(elem)),
+ m_description(Detail::finalizeDescription(descr))
+ {}
+
+ bool match( T const& item ) const override {
+ return m_predicate(item);
+ }
+
+ std::string describe() const override {
+ return m_description;
+ }
+};
+
+} // namespace Generic
+
+ // The following functions create the actual matcher objects.
+ // The user has to explicitly specify type to the function, because
+ // inferring std::function<bool(T const&)> is hard (but possible) and
+ // requires a lot of TMP.
+ template<typename T>
+ Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)> const& predicate, std::string const& description = "") {
+ return Generic::PredicateMatcher<T>(predicate, description);
+ }
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_generic.hpp
+// start catch_matchers_string.h
+
+#include <string>
+
+namespace Catch {
+namespace Matchers {
+
+ namespace StdString {
+
+ struct CasedString
+ {
+ CasedString( std::string const& str, CaseSensitive::Choice caseSensitivity );
+ std::string adjustString( std::string const& str ) const;
+ std::string caseSensitivitySuffix() const;
+
+ CaseSensitive::Choice m_caseSensitivity;
+ std::string m_str;
+ };
+
+ struct StringMatcherBase : MatcherBase<std::string> {
+ StringMatcherBase( std::string const& operation, CasedString const& comparator );
+ std::string describe() const override;
+
+ CasedString m_comparator;
+ std::string m_operation;
+ };
+
+ struct EqualsMatcher : StringMatcherBase {
+ EqualsMatcher( CasedString const& comparator );
+ bool match( std::string const& source ) const override;
+ };
+ struct ContainsMatcher : StringMatcherBase {
+ ContainsMatcher( CasedString const& comparator );
+ bool match( std::string const& source ) const override;
+ };
+ struct StartsWithMatcher : StringMatcherBase {
+ StartsWithMatcher( CasedString const& comparator );
+ bool match( std::string const& source ) const override;
+ };
+ struct EndsWithMatcher : StringMatcherBase {
+ EndsWithMatcher( CasedString const& comparator );
+ bool match( std::string const& source ) const override;
+ };
+
+ struct RegexMatcher : MatcherBase<std::string> {
+ RegexMatcher( std::string regex, CaseSensitive::Choice caseSensitivity );
+ bool match( std::string const& matchee ) const override;
+ std::string describe() const override;
+
+ private:
+ std::string m_regex;
+ CaseSensitive::Choice m_caseSensitivity;
+ };
+
+ } // namespace StdString
+
+ // The following functions create the actual matcher objects.
+ // This allows the types to be inferred
+
+ StdString::EqualsMatcher Equals( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+ StdString::ContainsMatcher Contains( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+ StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+ StdString::StartsWithMatcher StartsWith( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+ StdString::RegexMatcher Matches( std::string const& regex, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_string.h
+// start catch_matchers_vector.h
+
+#include <algorithm>
+
+namespace Catch {
+namespace Matchers {
+
+ namespace Vector {
+ template<typename T, typename Alloc>
+ struct ContainsElementMatcher : MatcherBase<std::vector<T, Alloc>> {
+
+ ContainsElementMatcher(T const &comparator) : m_comparator( comparator) {}
+
+ bool match(std::vector<T, Alloc> const &v) const override {
+ for (auto const& el : v) {
+ if (el == m_comparator) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ std::string describe() const override {
+ return "Contains: " + ::Catch::Detail::stringify( m_comparator );
+ }
+
+ T const& m_comparator;
+ };
+
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct ContainsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
+
+ ContainsMatcher(std::vector<T, AllocComp> const &comparator) : m_comparator( comparator ) {}
+
+ bool match(std::vector<T, AllocMatch> const &v) const override {
+ // !TBD: see note in EqualsMatcher
+ if (m_comparator.size() > v.size())
+ return false;
+ for (auto const& comparator : m_comparator) {
+ auto present = false;
+ for (const auto& el : v) {
+ if (el == comparator) {
+ present = true;
+ break;
+ }
+ }
+ if (!present) {
+ return false;
+ }
+ }
+ return true;
+ }
+ std::string describe() const override {
+ return "Contains: " + ::Catch::Detail::stringify( m_comparator );
+ }
+
+ std::vector<T, AllocComp> const& m_comparator;
+ };
+
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct EqualsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
+
+ EqualsMatcher(std::vector<T, AllocComp> const &comparator) : m_comparator( comparator ) {}
+
+ bool match(std::vector<T, AllocMatch> const &v) const override {
+ // !TBD: This currently works if all elements can be compared using !=
+ // - a more general approach would be via a compare template that defaults
+ // to using !=. but could be specialised for, e.g. std::vector<T, Alloc> etc
+ // - then just call that directly
+ if (m_comparator.size() != v.size())
+ return false;
+ for (std::size_t i = 0; i < v.size(); ++i)
+ if (m_comparator[i] != v[i])
+ return false;
+ return true;
+ }
+ std::string describe() const override {
+ return "Equals: " + ::Catch::Detail::stringify( m_comparator );
+ }
+ std::vector<T, AllocComp> const& m_comparator;
+ };
+
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct ApproxMatcher : MatcherBase<std::vector<T, AllocMatch>> {
+
+ ApproxMatcher(std::vector<T, AllocComp> const& comparator) : m_comparator( comparator ) {}
+
+ bool match(std::vector<T, AllocMatch> const &v) const override {
+ if (m_comparator.size() != v.size())
+ return false;
+ for (std::size_t i = 0; i < v.size(); ++i)
+ if (m_comparator[i] != approx(v[i]))
+ return false;
+ return true;
+ }
+ std::string describe() const override {
+ return "is approx: " + ::Catch::Detail::stringify( m_comparator );
+ }
+ template <typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ ApproxMatcher& epsilon( T const& newEpsilon ) {
+ approx.epsilon(newEpsilon);
+ return *this;
+ }
+ template <typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ ApproxMatcher& margin( T const& newMargin ) {
+ approx.margin(newMargin);
+ return *this;
+ }
+ template <typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ ApproxMatcher& scale( T const& newScale ) {
+ approx.scale(newScale);
+ return *this;
+ }
+
+ std::vector<T, AllocComp> const& m_comparator;
+ mutable Catch::Detail::Approx approx = Catch::Detail::Approx::custom();
+ };
+
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct UnorderedEqualsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
+ UnorderedEqualsMatcher(std::vector<T, AllocComp> const& target) : m_target(target) {}
+ bool match(std::vector<T, AllocMatch> const& vec) const override {
+ if (m_target.size() != vec.size()) {
+ return false;
+ }
+ return std::is_permutation(m_target.begin(), m_target.end(), vec.begin());
+ }
+
+ std::string describe() const override {
+ return "UnorderedEquals: " + ::Catch::Detail::stringify(m_target);
+ }
+ private:
+ std::vector<T, AllocComp> const& m_target;
+ };
+
+ } // namespace Vector
+
+ // The following functions create the actual matcher objects.
+ // This allows the types to be inferred
+
+ template<typename T, typename AllocComp = std::allocator<T>, typename AllocMatch = AllocComp>
+ Vector::ContainsMatcher<T, AllocComp, AllocMatch> Contains( std::vector<T, AllocComp> const& comparator ) {
+ return Vector::ContainsMatcher<T, AllocComp, AllocMatch>( comparator );
+ }
+
+ template<typename T, typename Alloc = std::allocator<T>>
+ Vector::ContainsElementMatcher<T, Alloc> VectorContains( T const& comparator ) {
+ return Vector::ContainsElementMatcher<T, Alloc>( comparator );
+ }
+
+ template<typename T, typename AllocComp = std::allocator<T>, typename AllocMatch = AllocComp>
+ Vector::EqualsMatcher<T, AllocComp, AllocMatch> Equals( std::vector<T, AllocComp> const& comparator ) {
+ return Vector::EqualsMatcher<T, AllocComp, AllocMatch>( comparator );
+ }
+
+ template<typename T, typename AllocComp = std::allocator<T>, typename AllocMatch = AllocComp>
+ Vector::ApproxMatcher<T, AllocComp, AllocMatch> Approx( std::vector<T, AllocComp> const& comparator ) {
+ return Vector::ApproxMatcher<T, AllocComp, AllocMatch>( comparator );
+ }
+
+ template<typename T, typename AllocComp = std::allocator<T>, typename AllocMatch = AllocComp>
+ Vector::UnorderedEqualsMatcher<T, AllocComp, AllocMatch> UnorderedEquals(std::vector<T, AllocComp> const& target) {
+ return Vector::UnorderedEqualsMatcher<T, AllocComp, AllocMatch>( target );
+ }
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_vector.h
+namespace Catch {
+
+ template<typename ArgT, typename MatcherT>
+ class MatchExpr : public ITransientExpression {
+ ArgT const& m_arg;
+ MatcherT m_matcher;
+ StringRef m_matcherString;
+ public:
+ MatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef const& matcherString )
+ : ITransientExpression{ true, matcher.match( arg ) },
+ m_arg( arg ),
+ m_matcher( matcher ),
+ m_matcherString( matcherString )
+ {}
+
+ void streamReconstructedExpression( std::ostream &os ) const override {
+ auto matcherAsString = m_matcher.toString();
+ os << Catch::Detail::stringify( m_arg ) << ' ';
+ if( matcherAsString == Detail::unprintableString )
+ os << m_matcherString;
+ else
+ os << matcherAsString;
+ }
+ };
+
+ using StringMatcher = Matchers::Impl::MatcherBase<std::string>;
+
+ void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef const& matcherString );
+
+ template<typename ArgT, typename MatcherT>
+ auto makeMatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef const& matcherString ) -> MatchExpr<ArgT, MatcherT> {
+ return MatchExpr<ArgT, MatcherT>( arg, matcher, matcherString );
+ }
+
+} // namespace Catch
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CHECK_THAT( macroName, matcher, resultDisposition, arg ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(arg) ", " CATCH_INTERNAL_STRINGIFY(matcher), resultDisposition ); \
+ INTERNAL_CATCH_TRY { \
+ catchAssertionHandler.handleExpr( Catch::makeMatchExpr( arg, matcher, #matcher##_catch_sr ) ); \
+ } INTERNAL_CATCH_CATCH( catchAssertionHandler ) \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_THROWS_MATCHES( macroName, exceptionType, resultDisposition, matcher, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__) ", " CATCH_INTERNAL_STRINGIFY(exceptionType) ", " CATCH_INTERNAL_STRINGIFY(matcher), resultDisposition ); \
+ if( catchAssertionHandler.allowThrows() ) \
+ try { \
+ static_cast<void>(__VA_ARGS__ ); \
+ catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \
+ } \
+ catch( exceptionType const& ex ) { \
+ catchAssertionHandler.handleExpr( Catch::makeMatchExpr( ex, matcher, #matcher##_catch_sr ) ); \
+ } \
+ catch( ... ) { \
+ catchAssertionHandler.handleUnexpectedInflightException(); \
+ } \
+ else \
+ catchAssertionHandler.handleThrowingCallSkipped(); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+// end catch_capture_matchers.h
+#endif
+// start catch_generators.hpp
+
+// start catch_interfaces_generatortracker.h
+
+
+#include <memory>
+
+namespace Catch {
+
+ namespace Generators {
+ class GeneratorUntypedBase {
+ public:
+ GeneratorUntypedBase() = default;
+ virtual ~GeneratorUntypedBase();
+ // Attempts to move the generator to the next element
+ //
+ // Returns true iff the move succeeded (and a valid element
+ // can be retrieved).
+ virtual bool next() = 0;
+ };
+ using GeneratorBasePtr = std::unique_ptr<GeneratorUntypedBase>;
+
+ } // namespace Generators
+
+ struct IGeneratorTracker {
+ virtual ~IGeneratorTracker();
+ virtual auto hasGenerator() const -> bool = 0;
+ virtual auto getGenerator() const -> Generators::GeneratorBasePtr const& = 0;
+ virtual void setGenerator( Generators::GeneratorBasePtr&& generator ) = 0;
+ };
+
+} // namespace Catch
+
+// end catch_interfaces_generatortracker.h
+// start catch_enforce.h
+
+#include <exception>
+
+namespace Catch {
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ template <typename Ex>
+ [[noreturn]]
+ void throw_exception(Ex const& e) {
+ throw e;
+ }
+#else // ^^ Exceptions are enabled // Exceptions are disabled vv
+ [[noreturn]]
+ void throw_exception(std::exception const& e);
+#endif
+
+ [[noreturn]]
+ void throw_logic_error(std::string const& msg);
+ [[noreturn]]
+ void throw_domain_error(std::string const& msg);
+ [[noreturn]]
+ void throw_runtime_error(std::string const& msg);
+
+} // namespace Catch;
+
+#define CATCH_MAKE_MSG(...) \
+ (Catch::ReusableStringStream() << __VA_ARGS__).str()
+
+#define CATCH_INTERNAL_ERROR(...) \
+ Catch::throw_logic_error(CATCH_MAKE_MSG( CATCH_INTERNAL_LINEINFO << ": Internal Catch2 error: " << __VA_ARGS__))
+
+#define CATCH_ERROR(...) \
+ Catch::throw_domain_error(CATCH_MAKE_MSG( __VA_ARGS__ ))
+
+#define CATCH_RUNTIME_ERROR(...) \
+ Catch::throw_runtime_error(CATCH_MAKE_MSG( __VA_ARGS__ ))
+
+#define CATCH_ENFORCE( condition, ... ) \
+ do{ if( !(condition) ) CATCH_ERROR( __VA_ARGS__ ); } while(false)
+
+// end catch_enforce.h
+#include <memory>
+#include <vector>
+#include <cassert>
+
+#include <utility>
+#include <exception>
+
+namespace Catch {
+
+class GeneratorException : public std::exception {
+ const char* const m_msg = "";
+
+public:
+ GeneratorException(const char* msg):
+ m_msg(msg)
+ {}
+
+ const char* what() const noexcept override final;
+};
+
+namespace Generators {
+
+ // !TBD move this into its own location?
+ namespace pf{
+ template<typename T, typename... Args>
+ std::unique_ptr<T> make_unique( Args&&... args ) {
+ return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
+ }
+ }
+
+ template<typename T>
+ struct IGenerator : GeneratorUntypedBase {
+ virtual ~IGenerator() = default;
+
+ // Returns the current element of the generator
+ //
+ // \Precondition The generator is either freshly constructed,
+ // or the last call to `next()` returned true
+ virtual T const& get() const = 0;
+ using type = T;
+ };
+
+ template<typename T>
+ class SingleValueGenerator final : public IGenerator<T> {
+ T m_value;
+ public:
+ SingleValueGenerator(T&& value) : m_value(std::move(value)) {}
+
+ T const& get() const override {
+ return m_value;
+ }
+ bool next() override {
+ return false;
+ }
+ };
+
+ template<typename T>
+ class FixedValuesGenerator final : public IGenerator<T> {
+ static_assert(!std::is_same<T, bool>::value,
+ "FixedValuesGenerator does not support bools because of std::vector<bool>"
+ "specialization, use SingleValue Generator instead.");
+ std::vector<T> m_values;
+ size_t m_idx = 0;
+ public:
+ FixedValuesGenerator( std::initializer_list<T> values ) : m_values( values ) {}
+
+ T const& get() const override {
+ return m_values[m_idx];
+ }
+ bool next() override {
+ ++m_idx;
+ return m_idx < m_values.size();
+ }
+ };
+
+ template <typename T>
+ class GeneratorWrapper final {
+ std::unique_ptr<IGenerator<T>> m_generator;
+ public:
+ GeneratorWrapper(std::unique_ptr<IGenerator<T>> generator):
+ m_generator(std::move(generator))
+ {}
+ T const& get() const {
+ return m_generator->get();
+ }
+ bool next() {
+ return m_generator->next();
+ }
+ };
+
+ template <typename T>
+ GeneratorWrapper<T> value(T&& value) {
+ return GeneratorWrapper<T>(pf::make_unique<SingleValueGenerator<T>>(std::forward<T>(value)));
+ }
+ template <typename T>
+ GeneratorWrapper<T> values(std::initializer_list<T> values) {
+ return GeneratorWrapper<T>(pf::make_unique<FixedValuesGenerator<T>>(values));
+ }
+
+ template<typename T>
+ class Generators : public IGenerator<T> {
+ std::vector<GeneratorWrapper<T>> m_generators;
+ size_t m_current = 0;
+
+ void populate(GeneratorWrapper<T>&& generator) {
+ m_generators.emplace_back(std::move(generator));
+ }
+ void populate(T&& val) {
+ m_generators.emplace_back(value(std::forward<T>(val)));
+ }
+ template<typename U>
+ void populate(U&& val) {
+ populate(T(std::forward<U>(val)));
+ }
+ template<typename U, typename... Gs>
+ void populate(U&& valueOrGenerator, Gs &&... moreGenerators) {
+ populate(std::forward<U>(valueOrGenerator));
+ populate(std::forward<Gs>(moreGenerators)...);
+ }
+
+ public:
+ template <typename... Gs>
+ Generators(Gs &&... moreGenerators) {
+ m_generators.reserve(sizeof...(Gs));
+ populate(std::forward<Gs>(moreGenerators)...);
+ }
+
+ T const& get() const override {
+ return m_generators[m_current].get();
+ }
+
+ bool next() override {
+ if (m_current >= m_generators.size()) {
+ return false;
+ }
+ const bool current_status = m_generators[m_current].next();
+ if (!current_status) {
+ ++m_current;
+ }
+ return m_current < m_generators.size();
+ }
+ };
+
+ template<typename... Ts>
+ GeneratorWrapper<std::tuple<Ts...>> table( std::initializer_list<std::tuple<typename std::decay<Ts>::type...>> tuples ) {
+ return values<std::tuple<Ts...>>( tuples );
+ }
+
+ // Tag type to signal that a generator sequence should convert arguments to a specific type
+ template <typename T>
+ struct as {};
+
+ template<typename T, typename... Gs>
+ auto makeGenerators( GeneratorWrapper<T>&& generator, Gs &&... moreGenerators ) -> Generators<T> {
+ return Generators<T>(std::move(generator), std::forward<Gs>(moreGenerators)...);
+ }
+ template<typename T>
+ auto makeGenerators( GeneratorWrapper<T>&& generator ) -> Generators<T> {
+ return Generators<T>(std::move(generator));
+ }
+ template<typename T, typename... Gs>
+ auto makeGenerators( T&& val, Gs &&... moreGenerators ) -> Generators<T> {
+ return makeGenerators( value( std::forward<T>( val ) ), std::forward<Gs>( moreGenerators )... );
+ }
+ template<typename T, typename U, typename... Gs>
+ auto makeGenerators( as<T>, U&& val, Gs &&... moreGenerators ) -> Generators<T> {
+ return makeGenerators( value( T( std::forward<U>( val ) ) ), std::forward<Gs>( moreGenerators )... );
+ }
+
+ auto acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker&;
+
+ template<typename L>
+ // Note: The type after -> is weird, because VS2015 cannot parse
+ // the expression used in the typedef inside, when it is in
+ // return type. Yeah.
+ auto generate( StringRef generatorName, SourceLineInfo const& lineInfo, L const& generatorExpression ) -> decltype(std::declval<decltype(generatorExpression())>().get()) {
+ using UnderlyingType = typename decltype(generatorExpression())::type;
+
+ IGeneratorTracker& tracker = acquireGeneratorTracker( generatorName, lineInfo );
+ if (!tracker.hasGenerator()) {
+ tracker.setGenerator(pf::make_unique<Generators<UnderlyingType>>(generatorExpression()));
+ }
+
+ auto const& generator = static_cast<IGenerator<UnderlyingType> const&>( *tracker.getGenerator() );
+ return generator.get();
+ }
+
+} // namespace Generators
+} // namespace Catch
+
+#define GENERATE( ... ) \
+ Catch::Generators::generate( INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \
+ CATCH_INTERNAL_LINEINFO, \
+ [ ]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+#define GENERATE_COPY( ... ) \
+ Catch::Generators::generate( INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \
+ CATCH_INTERNAL_LINEINFO, \
+ [=]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+#define GENERATE_REF( ... ) \
+ Catch::Generators::generate( INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \
+ CATCH_INTERNAL_LINEINFO, \
+ [&]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+
+// end catch_generators.hpp
+// start catch_generators_generic.hpp
+
+namespace Catch {
+namespace Generators {
+
+ template <typename T>
+ class TakeGenerator : public IGenerator<T> {
+ GeneratorWrapper<T> m_generator;
+ size_t m_returned = 0;
+ size_t m_target;
+ public:
+ TakeGenerator(size_t target, GeneratorWrapper<T>&& generator):
+ m_generator(std::move(generator)),
+ m_target(target)
+ {
+ assert(target != 0 && "Empty generators are not allowed");
+ }
+ T const& get() const override {
+ return m_generator.get();
+ }
+ bool next() override {
+ ++m_returned;
+ if (m_returned >= m_target) {
+ return false;
+ }
+
+ const auto success = m_generator.next();
+ // If the underlying generator does not contain enough values
+ // then we cut short as well
+ if (!success) {
+ m_returned = m_target;
+ }
+ return success;
+ }
+ };
+
+ template <typename T>
+ GeneratorWrapper<T> take(size_t target, GeneratorWrapper<T>&& generator) {
+ return GeneratorWrapper<T>(pf::make_unique<TakeGenerator<T>>(target, std::move(generator)));
+ }
+
+ template <typename T, typename Predicate>
+ class FilterGenerator : public IGenerator<T> {
+ GeneratorWrapper<T> m_generator;
+ Predicate m_predicate;
+ public:
+ template <typename P = Predicate>
+ FilterGenerator(P&& pred, GeneratorWrapper<T>&& generator):
+ m_generator(std::move(generator)),
+ m_predicate(std::forward<P>(pred))
+ {
+ if (!m_predicate(m_generator.get())) {
+ // It might happen that there are no values that pass the
+ // filter. In that case we throw an exception.
+ auto has_initial_value = nextImpl();
+ if (!has_initial_value) {
+ Catch::throw_exception(GeneratorException("No valid value found in filtered generator"));
+ }
+ }
+ }
+
+ T const& get() const override {
+ return m_generator.get();
+ }
+
+ bool next() override {
+ return nextImpl();
+ }
+
+ private:
+ bool nextImpl() {
+ bool success = m_generator.next();
+ if (!success) {
+ return false;
+ }
+ while (!m_predicate(m_generator.get()) && (success = m_generator.next()) == true);
+ return success;
+ }
+ };
+
+ template <typename T, typename Predicate>
+ GeneratorWrapper<T> filter(Predicate&& pred, GeneratorWrapper<T>&& generator) {
+ return GeneratorWrapper<T>(std::unique_ptr<IGenerator<T>>(pf::make_unique<FilterGenerator<T, Predicate>>(std::forward<Predicate>(pred), std::move(generator))));
+ }
+
+ template <typename T>
+ class RepeatGenerator : public IGenerator<T> {
+ static_assert(!std::is_same<T, bool>::value,
+ "RepeatGenerator currently does not support bools"
+ "because of std::vector<bool> specialization");
+ GeneratorWrapper<T> m_generator;
+ mutable std::vector<T> m_returned;
+ size_t m_target_repeats;
+ size_t m_current_repeat = 0;
+ size_t m_repeat_index = 0;
+ public:
+ RepeatGenerator(size_t repeats, GeneratorWrapper<T>&& generator):
+ m_generator(std::move(generator)),
+ m_target_repeats(repeats)
+ {
+ assert(m_target_repeats > 0 && "Repeat generator must repeat at least once");
+ }
+
+ T const& get() const override {
+ if (m_current_repeat == 0) {
+ m_returned.push_back(m_generator.get());
+ return m_returned.back();
+ }
+ return m_returned[m_repeat_index];
+ }
+
+ bool next() override {
+ // There are 2 basic cases:
+ // 1) We are still reading the generator
+ // 2) We are reading our own cache
+
+ // In the first case, we need to poke the underlying generator.
+ // If it happily moves, we are left in that state, otherwise it is time to start reading from our cache
+ if (m_current_repeat == 0) {
+ const auto success = m_generator.next();
+ if (!success) {
+ ++m_current_repeat;
+ }
+ return m_current_repeat < m_target_repeats;
+ }
+
+ // In the second case, we need to move indices forward and check that we haven't run up against the end
+ ++m_repeat_index;
+ if (m_repeat_index == m_returned.size()) {
+ m_repeat_index = 0;
+ ++m_current_repeat;
+ }
+ return m_current_repeat < m_target_repeats;
+ }
+ };
+
+ template <typename T>
+ GeneratorWrapper<T> repeat(size_t repeats, GeneratorWrapper<T>&& generator) {
+ return GeneratorWrapper<T>(pf::make_unique<RepeatGenerator<T>>(repeats, std::move(generator)));
+ }
+
+ template <typename T, typename U, typename Func>
+ class MapGenerator : public IGenerator<T> {
+ // TBD: provide static assert for mapping function, for friendly error message
+ GeneratorWrapper<U> m_generator;
+ Func m_function;
+ // To avoid returning dangling reference, we have to save the values
+ T m_cache;
+ public:
+ template <typename F2 = Func>
+ MapGenerator(F2&& function, GeneratorWrapper<U>&& generator) :
+ m_generator(std::move(generator)),
+ m_function(std::forward<F2>(function)),
+ m_cache(m_function(m_generator.get()))
+ {}
+
+ T const& get() const override {
+ return m_cache;
+ }
+ bool next() override {
+ const auto success = m_generator.next();
+ if (success) {
+ m_cache = m_function(m_generator.get());
+ }
+ return success;
+ }
+ };
+
+ template <typename Func, typename U, typename T = FunctionReturnType<Func, U>>
+ GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& generator) {
+ return GeneratorWrapper<T>(
+ pf::make_unique<MapGenerator<T, U, Func>>(std::forward<Func>(function), std::move(generator))
+ );
+ }
+
+ template <typename T, typename U, typename Func>
+ GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& generator) {
+ return GeneratorWrapper<T>(
+ pf::make_unique<MapGenerator<T, U, Func>>(std::forward<Func>(function), std::move(generator))
+ );
+ }
+
+ template <typename T>
+ class ChunkGenerator final : public IGenerator<std::vector<T>> {
+ std::vector<T> m_chunk;
+ size_t m_chunk_size;
+ GeneratorWrapper<T> m_generator;
+ bool m_used_up = false;
+ public:
+ ChunkGenerator(size_t size, GeneratorWrapper<T> generator) :
+ m_chunk_size(size), m_generator(std::move(generator))
+ {
+ m_chunk.reserve(m_chunk_size);
+ if (m_chunk_size != 0) {
+ m_chunk.push_back(m_generator.get());
+ for (size_t i = 1; i < m_chunk_size; ++i) {
+ if (!m_generator.next()) {
+ Catch::throw_exception(GeneratorException("Not enough values to initialize the first chunk"));
+ }
+ m_chunk.push_back(m_generator.get());
+ }
+ }
+ }
+ std::vector<T> const& get() const override {
+ return m_chunk;
+ }
+ bool next() override {
+ m_chunk.clear();
+ for (size_t idx = 0; idx < m_chunk_size; ++idx) {
+ if (!m_generator.next()) {
+ return false;
+ }
+ m_chunk.push_back(m_generator.get());
+ }
+ return true;
+ }
+ };
+
+ template <typename T>
+ GeneratorWrapper<std::vector<T>> chunk(size_t size, GeneratorWrapper<T>&& generator) {
+ return GeneratorWrapper<std::vector<T>>(
+ pf::make_unique<ChunkGenerator<T>>(size, std::move(generator))
+ );
+ }
+
+} // namespace Generators
+} // namespace Catch
+
+// end catch_generators_generic.hpp
+// start catch_generators_specific.hpp
+
+// start catch_context.h
+
+#include <memory>
+
+namespace Catch {
+
+ struct IResultCapture;
+ struct IRunner;
+ struct IConfig;
+ struct IMutableContext;
+
+ using IConfigPtr = std::shared_ptr<IConfig const>;
+
+ struct IContext
+ {
+ virtual ~IContext();
+
+ virtual IResultCapture* getResultCapture() = 0;
+ virtual IRunner* getRunner() = 0;
+ virtual IConfigPtr const& getConfig() const = 0;
+ };
+
+ struct IMutableContext : IContext
+ {
+ virtual ~IMutableContext();
+ virtual void setResultCapture( IResultCapture* resultCapture ) = 0;
+ virtual void setRunner( IRunner* runner ) = 0;
+ virtual void setConfig( IConfigPtr const& config ) = 0;
+
+ private:
+ static IMutableContext *currentContext;
+ friend IMutableContext& getCurrentMutableContext();
+ friend void cleanUpContext();
+ static void createContext();
+ };
+
+ inline IMutableContext& getCurrentMutableContext()
+ {
+ if( !IMutableContext::currentContext )
+ IMutableContext::createContext();
+ // NOLINTNEXTLINE(clang-analyzer-core.uninitialized.UndefReturn)
+ return *IMutableContext::currentContext;
+ }
+
+ inline IContext& getCurrentContext()
+ {
+ return getCurrentMutableContext();
+ }
+
+ void cleanUpContext();
+
+ class SimplePcg32;
+ SimplePcg32& rng();
+}
+
+// end catch_context.h
+// start catch_interfaces_config.h
+
+// start catch_option.hpp
+
+namespace Catch {
+
+ // An optional type
+ template<typename T>
+ class Option {
+ public:
+ Option() : nullableValue( nullptr ) {}
+ Option( T const& _value )
+ : nullableValue( new( storage ) T( _value ) )
+ {}
+ Option( Option const& _other )
+ : nullableValue( _other ? new( storage ) T( *_other ) : nullptr )
+ {}
+
+ ~Option() {
+ reset();
+ }
+
+ Option& operator= ( Option const& _other ) {
+ if( &_other != this ) {
+ reset();
+ if( _other )
+ nullableValue = new( storage ) T( *_other );
+ }
+ return *this;
+ }
+ Option& operator = ( T const& _value ) {
+ reset();
+ nullableValue = new( storage ) T( _value );
+ return *this;
+ }
+
+ void reset() {
+ if( nullableValue )
+ nullableValue->~T();
+ nullableValue = nullptr;
+ }
+
+ T& operator*() { return *nullableValue; }
+ T const& operator*() const { return *nullableValue; }
+ T* operator->() { return nullableValue; }
+ const T* operator->() const { return nullableValue; }
+
+ T valueOr( T const& defaultValue ) const {
+ return nullableValue ? *nullableValue : defaultValue;
+ }
+
+ bool some() const { return nullableValue != nullptr; }
+ bool none() const { return nullableValue == nullptr; }
+
+ bool operator !() const { return nullableValue == nullptr; }
+ explicit operator bool() const {
+ return some();
+ }
+
+ private:
+ T *nullableValue;
+ alignas(alignof(T)) char storage[sizeof(T)];
+ };
+
+} // end namespace Catch
+
+// end catch_option.hpp
+#include <chrono>
+#include <iosfwd>
+#include <string>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ enum class Verbosity {
+ Quiet = 0,
+ Normal,
+ High
+ };
+
+ struct WarnAbout { enum What {
+ Nothing = 0x00,
+ NoAssertions = 0x01,
+ NoTests = 0x02
+ }; };
+
+ struct ShowDurations { enum OrNot {
+ DefaultForReporter,
+ Always,
+ Never
+ }; };
+ struct RunTests { enum InWhatOrder {
+ InDeclarationOrder,
+ InLexicographicalOrder,
+ InRandomOrder
+ }; };
+ struct UseColour { enum YesOrNo {
+ Auto,
+ Yes,
+ No
+ }; };
+ struct WaitForKeypress { enum When {
+ Never,
+ BeforeStart = 1,
+ BeforeExit = 2,
+ BeforeStartAndExit = BeforeStart | BeforeExit
+ }; };
+
+ class TestSpec;
+
+ struct IConfig : NonCopyable {
+
+ virtual ~IConfig();
+
+ virtual bool allowThrows() const = 0;
+ virtual std::ostream& stream() const = 0;
+ virtual std::string name() const = 0;
+ virtual bool includeSuccessfulResults() const = 0;
+ virtual bool shouldDebugBreak() const = 0;
+ virtual bool warnAboutMissingAssertions() const = 0;
+ virtual bool warnAboutNoTests() const = 0;
+ virtual int abortAfter() const = 0;
+ virtual bool showInvisibles() const = 0;
+ virtual ShowDurations::OrNot showDurations() const = 0;
+ virtual double minDuration() const = 0;
+ virtual TestSpec const& testSpec() const = 0;
+ virtual bool hasTestFilters() const = 0;
+ virtual std::vector<std::string> const& getTestsOrTags() const = 0;
+ virtual RunTests::InWhatOrder runOrder() const = 0;
+ virtual unsigned int rngSeed() const = 0;
+ virtual UseColour::YesOrNo useColour() const = 0;
+ virtual std::vector<std::string> const& getSectionsToRun() const = 0;
+ virtual Verbosity verbosity() const = 0;
+
+ virtual bool benchmarkNoAnalysis() const = 0;
+ virtual int benchmarkSamples() const = 0;
+ virtual double benchmarkConfidenceInterval() const = 0;
+ virtual unsigned int benchmarkResamples() const = 0;
+ virtual std::chrono::milliseconds benchmarkWarmupTime() const = 0;
+ };
+
+ using IConfigPtr = std::shared_ptr<IConfig const>;
+}
+
+// end catch_interfaces_config.h
+// start catch_random_number_generator.h
+
+#include <cstdint>
+
+namespace Catch {
+
+ // This is a simple implementation of C++11 Uniform Random Number
+ // Generator. It does not provide all operators, because Catch2
+ // does not use it, but it should behave as expected inside stdlib's
+ // distributions.
+ // The implementation is based on the PCG family (http://pcg-random.org)
+ class SimplePcg32 {
+ using state_type = std::uint64_t;
+ public:
+ using result_type = std::uint32_t;
+ static constexpr result_type (min)() {
+ return 0;
+ }
+ static constexpr result_type (max)() {
+ return static_cast<result_type>(-1);
+ }
+
+ // Provide some default initial state for the default constructor
+ SimplePcg32():SimplePcg32(0xed743cc4U) {}
+
+ explicit SimplePcg32(result_type seed_);
+
+ void seed(result_type seed_);
+ void discard(uint64_t skip);
+
+ result_type operator()();
+
+ private:
+ friend bool operator==(SimplePcg32 const& lhs, SimplePcg32 const& rhs);
+ friend bool operator!=(SimplePcg32 const& lhs, SimplePcg32 const& rhs);
+
+ // In theory we also need operator<< and operator>>
+ // In practice we do not use them, so we will skip them for now
+
+ std::uint64_t m_state;
+ // This part of the state determines which "stream" of the numbers
+ // is chosen -- we take it as a constant for Catch2, so we only
+ // need to deal with seeding the main state.
+ // Picked by reading 8 bytes from `/dev/random` :-)
+ static const std::uint64_t s_inc = (0x13ed0cc53f939476ULL << 1ULL) | 1ULL;
+ };
+
+} // end namespace Catch
+
+// end catch_random_number_generator.h
+#include <random>
+
+namespace Catch {
+namespace Generators {
+
+template <typename Float>
+class RandomFloatingGenerator final : public IGenerator<Float> {
+ Catch::SimplePcg32& m_rng;
+ std::uniform_real_distribution<Float> m_dist;
+ Float m_current_number;
+public:
+
+ RandomFloatingGenerator(Float a, Float b):
+ m_rng(rng()),
+ m_dist(a, b) {
+ static_cast<void>(next());
+ }
+
+ Float const& get() const override {
+ return m_current_number;
+ }
+ bool next() override {
+ m_current_number = m_dist(m_rng);
+ return true;
+ }
+};
+
+template <typename Integer>
+class RandomIntegerGenerator final : public IGenerator<Integer> {
+ Catch::SimplePcg32& m_rng;
+ std::uniform_int_distribution<Integer> m_dist;
+ Integer m_current_number;
+public:
+
+ RandomIntegerGenerator(Integer a, Integer b):
+ m_rng(rng()),
+ m_dist(a, b) {
+ static_cast<void>(next());
+ }
+
+ Integer const& get() const override {
+ return m_current_number;
+ }
+ bool next() override {
+ m_current_number = m_dist(m_rng);
+ return true;
+ }
+};
+
+// TODO: Ideally this would be also constrained against the various char types,
+// but I don't expect users to run into that in practice.
+template <typename T>
+typename std::enable_if<std::is_integral<T>::value && !std::is_same<T, bool>::value,
+GeneratorWrapper<T>>::type
+random(T a, T b) {
+ return GeneratorWrapper<T>(
+ pf::make_unique<RandomIntegerGenerator<T>>(a, b)
+ );
+}
+
+template <typename T>
+typename std::enable_if<std::is_floating_point<T>::value,
+GeneratorWrapper<T>>::type
+random(T a, T b) {
+ return GeneratorWrapper<T>(
+ pf::make_unique<RandomFloatingGenerator<T>>(a, b)
+ );
+}
+
+template <typename T>
+class RangeGenerator final : public IGenerator<T> {
+ T m_current;
+ T m_end;
+ T m_step;
+ bool m_positive;
+
+public:
+ RangeGenerator(T const& start, T const& end, T const& step):
+ m_current(start),
+ m_end(end),
+ m_step(step),
+ m_positive(m_step > T(0))
+ {
+ assert(m_current != m_end && "Range start and end cannot be equal");
+ assert(m_step != T(0) && "Step size cannot be zero");
+ assert(((m_positive && m_current <= m_end) || (!m_positive && m_current >= m_end)) && "Step moves away from end");
+ }
+
+ RangeGenerator(T const& start, T const& end):
+ RangeGenerator(start, end, (start < end) ? T(1) : T(-1))
+ {}
+
+ T const& get() const override {
+ return m_current;
+ }
+
+ bool next() override {
+ m_current += m_step;
+ return (m_positive) ? (m_current < m_end) : (m_current > m_end);
+ }
+};
+
+template <typename T>
+GeneratorWrapper<T> range(T const& start, T const& end, T const& step) {
+ static_assert(std::is_arithmetic<T>::value && !std::is_same<T, bool>::value, "Type must be numeric");
+ return GeneratorWrapper<T>(pf::make_unique<RangeGenerator<T>>(start, end, step));
+}
+
+template <typename T>
+GeneratorWrapper<T> range(T const& start, T const& end) {
+ static_assert(std::is_integral<T>::value && !std::is_same<T, bool>::value, "Type must be an integer");
+ return GeneratorWrapper<T>(pf::make_unique<RangeGenerator<T>>(start, end));
+}
+
+template <typename T>
+class IteratorGenerator final : public IGenerator<T> {
+ static_assert(!std::is_same<T, bool>::value,
+ "IteratorGenerator currently does not support bools"
+ "because of std::vector<bool> specialization");
+
+ std::vector<T> m_elems;
+ size_t m_current = 0;
+public:
+ template <typename InputIterator, typename InputSentinel>
+ IteratorGenerator(InputIterator first, InputSentinel last):m_elems(first, last) {
+ if (m_elems.empty()) {
+ Catch::throw_exception(GeneratorException("IteratorGenerator received no valid values"));
+ }
+ }
+
+ T const& get() const override {
+ return m_elems[m_current];
+ }
+
+ bool next() override {
+ ++m_current;
+ return m_current != m_elems.size();
+ }
+};
+
+template <typename InputIterator,
+ typename InputSentinel,
+ typename ResultType = typename std::iterator_traits<InputIterator>::value_type>
+GeneratorWrapper<ResultType> from_range(InputIterator from, InputSentinel to) {
+ return GeneratorWrapper<ResultType>(pf::make_unique<IteratorGenerator<ResultType>>(from, to));
+}
+
+template <typename Container,
+ typename ResultType = typename Container::value_type>
+GeneratorWrapper<ResultType> from_range(Container const& cnt) {
+ return GeneratorWrapper<ResultType>(pf::make_unique<IteratorGenerator<ResultType>>(cnt.begin(), cnt.end()));
+}
+
+} // namespace Generators
+} // namespace Catch
+
+// end catch_generators_specific.hpp
+
+// These files are included here so the single_include script doesn't put them
+// in the conditionally compiled sections
+// start catch_test_case_info.h
+
+#include <string>
+#include <vector>
+#include <memory>
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpadded"
+#endif
+
+namespace Catch {
+
+ struct ITestInvoker;
+
+ struct TestCaseInfo {
+ enum SpecialProperties{
+ None = 0,
+ IsHidden = 1 << 1,
+ ShouldFail = 1 << 2,
+ MayFail = 1 << 3,
+ Throws = 1 << 4,
+ NonPortable = 1 << 5,
+ Benchmark = 1 << 6
+ };
+
+ TestCaseInfo( std::string const& _name,
+ std::string const& _className,
+ std::string const& _description,
+ std::vector<std::string> const& _tags,
+ SourceLineInfo const& _lineInfo );
+
+ friend void setTags( TestCaseInfo& testCaseInfo, std::vector<std::string> tags );
+
+ bool isHidden() const;
+ bool throws() const;
+ bool okToFail() const;
+ bool expectedToFail() const;
+
+ std::string tagsAsString() const;
+
+ std::string name;
+ std::string className;
+ std::string description;
+ std::vector<std::string> tags;
+ std::vector<std::string> lcaseTags;
+ SourceLineInfo lineInfo;
+ SpecialProperties properties;
+ };
+
+ class TestCase : public TestCaseInfo {
+ public:
+
+ TestCase( ITestInvoker* testCase, TestCaseInfo&& info );
+
+ TestCase withName( std::string const& _newName ) const;
+
+ void invoke() const;
+
+ TestCaseInfo const& getTestCaseInfo() const;
+
+ bool operator == ( TestCase const& other ) const;
+ bool operator < ( TestCase const& other ) const;
+
+ private:
+ std::shared_ptr<ITestInvoker> test;
+ };
+
+ TestCase makeTestCase( ITestInvoker* testCase,
+ std::string const& className,
+ NameAndTags const& nameAndTags,
+ SourceLineInfo const& lineInfo );
+}
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// end catch_test_case_info.h
+// start catch_interfaces_runner.h
+
+namespace Catch {
+
+ struct IRunner {
+ virtual ~IRunner();
+ virtual bool aborting() const = 0;
+ };
+}
+
+// end catch_interfaces_runner.h
+
+#ifdef __OBJC__
+// start catch_objc.hpp
+
+#import <objc/runtime.h>
+
+#include <string>
+
+// NB. Any general catch headers included here must be included
+// in catch.hpp first to make sure they are included by the single
+// header for non obj-usage
+
+///////////////////////////////////////////////////////////////////////////////
+// This protocol is really only here for (self) documenting purposes, since
+// all its methods are optional.
+@protocol OcFixture
+
+@optional
+
+-(void) setUp;
+-(void) tearDown;
+
+@end
+
+namespace Catch {
+
+ class OcMethod : public ITestInvoker {
+
+ public:
+ OcMethod( Class cls, SEL sel ) : m_cls( cls ), m_sel( sel ) {}
+
+ virtual void invoke() const {
+ id obj = [[m_cls alloc] init];
+
+ performOptionalSelector( obj, @selector(setUp) );
+ performOptionalSelector( obj, m_sel );
+ performOptionalSelector( obj, @selector(tearDown) );
+
+ arcSafeRelease( obj );
+ }
+ private:
+ virtual ~OcMethod() {}
+
+ Class m_cls;
+ SEL m_sel;
+ };
+
+ namespace Detail{
+
+ inline std::string getAnnotation( Class cls,
+ std::string const& annotationName,
+ std::string const& testCaseName ) {
+ NSString* selStr = [[NSString alloc] initWithFormat:@"Catch_%s_%s", annotationName.c_str(), testCaseName.c_str()];
+ SEL sel = NSSelectorFromString( selStr );
+ arcSafeRelease( selStr );
+ id value = performOptionalSelector( cls, sel );
+ if( value )
+ return [(NSString*)value UTF8String];
+ return "";
+ }
+ }
+
+ inline std::size_t registerTestMethods() {
+ std::size_t noTestMethods = 0;
+ int noClasses = objc_getClassList( nullptr, 0 );
+
+ Class* classes = (CATCH_UNSAFE_UNRETAINED Class *)malloc( sizeof(Class) * noClasses);
+ objc_getClassList( classes, noClasses );
+
+ for( int c = 0; c < noClasses; c++ ) {
+ Class cls = classes[c];
+ {
+ u_int count;
+ Method* methods = class_copyMethodList( cls, &count );
+ for( u_int m = 0; m < count ; m++ ) {
+ SEL selector = method_getName(methods[m]);
+ std::string methodName = sel_getName(selector);
+ if( startsWith( methodName, "Catch_TestCase_" ) ) {
+ std::string testCaseName = methodName.substr( 15 );
+ std::string name = Detail::getAnnotation( cls, "Name", testCaseName );
+ std::string desc = Detail::getAnnotation( cls, "Description", testCaseName );
+ const char* className = class_getName( cls );
+
+ getMutableRegistryHub().registerTest( makeTestCase( new OcMethod( cls, selector ), className, NameAndTags( name.c_str(), desc.c_str() ), SourceLineInfo("",0) ) );
+ noTestMethods++;
+ }
+ }
+ free(methods);
+ }
+ }
+ return noTestMethods;
+ }
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+
+ namespace Matchers {
+ namespace Impl {
+ namespace NSStringMatchers {
+
+ struct StringHolder : MatcherBase<NSString*>{
+ StringHolder( NSString* substr ) : m_substr( [substr copy] ){}
+ StringHolder( StringHolder const& other ) : m_substr( [other.m_substr copy] ){}
+ StringHolder() {
+ arcSafeRelease( m_substr );
+ }
+
+ bool match( NSString* str ) const override {
+ return false;
+ }
+
+ NSString* CATCH_ARC_STRONG m_substr;
+ };
+
+ struct Equals : StringHolder {
+ Equals( NSString* substr ) : StringHolder( substr ){}
+
+ bool match( NSString* str ) const override {
+ return (str != nil || m_substr == nil ) &&
+ [str isEqualToString:m_substr];
+ }
+
+ std::string describe() const override {
+ return "equals string: " + Catch::Detail::stringify( m_substr );
+ }
+ };
+
+ struct Contains : StringHolder {
+ Contains( NSString* substr ) : StringHolder( substr ){}
+
+ bool match( NSString* str ) const override {
+ return (str != nil || m_substr == nil ) &&
+ [str rangeOfString:m_substr].location != NSNotFound;
+ }
+
+ std::string describe() const override {
+ return "contains string: " + Catch::Detail::stringify( m_substr );
+ }
+ };
+
+ struct StartsWith : StringHolder {
+ StartsWith( NSString* substr ) : StringHolder( substr ){}
+
+ bool match( NSString* str ) const override {
+ return (str != nil || m_substr == nil ) &&
+ [str rangeOfString:m_substr].location == 0;
+ }
+
+ std::string describe() const override {
+ return "starts with: " + Catch::Detail::stringify( m_substr );
+ }
+ };
+ struct EndsWith : StringHolder {
+ EndsWith( NSString* substr ) : StringHolder( substr ){}
+
+ bool match( NSString* str ) const override {
+ return (str != nil || m_substr == nil ) &&
+ [str rangeOfString:m_substr].location == [str length] - [m_substr length];
+ }
+
+ std::string describe() const override {
+ return "ends with: " + Catch::Detail::stringify( m_substr );
+ }
+ };
+
+ } // namespace NSStringMatchers
+ } // namespace Impl
+
+ inline Impl::NSStringMatchers::Equals
+ Equals( NSString* substr ){ return Impl::NSStringMatchers::Equals( substr ); }
+
+ inline Impl::NSStringMatchers::Contains
+ Contains( NSString* substr ){ return Impl::NSStringMatchers::Contains( substr ); }
+
+ inline Impl::NSStringMatchers::StartsWith
+ StartsWith( NSString* substr ){ return Impl::NSStringMatchers::StartsWith( substr ); }
+
+ inline Impl::NSStringMatchers::EndsWith
+ EndsWith( NSString* substr ){ return Impl::NSStringMatchers::EndsWith( substr ); }
+
+ } // namespace Matchers
+
+ using namespace Matchers;
+
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+} // namespace Catch
+
+///////////////////////////////////////////////////////////////////////////////
+#define OC_MAKE_UNIQUE_NAME( root, uniqueSuffix ) root##uniqueSuffix
+#define OC_TEST_CASE2( name, desc, uniqueSuffix ) \
++(NSString*) OC_MAKE_UNIQUE_NAME( Catch_Name_test_, uniqueSuffix ) \
+{ \
+return @ name; \
+} \
++(NSString*) OC_MAKE_UNIQUE_NAME( Catch_Description_test_, uniqueSuffix ) \
+{ \
+return @ desc; \
+} \
+-(void) OC_MAKE_UNIQUE_NAME( Catch_TestCase_test_, uniqueSuffix )
+
+#define OC_TEST_CASE( name, desc ) OC_TEST_CASE2( name, desc, __LINE__ )
+
+// end catch_objc.hpp
+#endif
+
+// Benchmarking needs the externally-facing parts of reporters to work
+#if defined(CATCH_CONFIG_EXTERNAL_INTERFACES) || defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+// start catch_external_interfaces.h
+
+// start catch_reporter_bases.hpp
+
+// start catch_interfaces_reporter.h
+
+// start catch_config.hpp
+
+// start catch_test_spec_parser.h
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpadded"
+#endif
+
+// start catch_test_spec.h
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpadded"
+#endif
+
+// start catch_wildcard_pattern.h
+
+namespace Catch
+{
+ class WildcardPattern {
+ enum WildcardPosition {
+ NoWildcard = 0,
+ WildcardAtStart = 1,
+ WildcardAtEnd = 2,
+ WildcardAtBothEnds = WildcardAtStart | WildcardAtEnd
+ };
+
+ public:
+
+ WildcardPattern( std::string const& pattern, CaseSensitive::Choice caseSensitivity );
+ virtual ~WildcardPattern() = default;
+ virtual bool matches( std::string const& str ) const;
+
+ private:
+ std::string normaliseString( std::string const& str ) const;
+ CaseSensitive::Choice m_caseSensitivity;
+ WildcardPosition m_wildcard = NoWildcard;
+ std::string m_pattern;
+ };
+}
+
+// end catch_wildcard_pattern.h
+#include <string>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ struct IConfig;
+
+ class TestSpec {
+ class Pattern {
+ public:
+ explicit Pattern( std::string const& name );
+ virtual ~Pattern();
+ virtual bool matches( TestCaseInfo const& testCase ) const = 0;
+ std::string const& name() const;
+ private:
+ std::string const m_name;
+ };
+ using PatternPtr = std::shared_ptr<Pattern>;
+
+ class NamePattern : public Pattern {
+ public:
+ explicit NamePattern( std::string const& name, std::string const& filterString );
+ bool matches( TestCaseInfo const& testCase ) const override;
+ private:
+ WildcardPattern m_wildcardPattern;
+ };
+
+ class TagPattern : public Pattern {
+ public:
+ explicit TagPattern( std::string const& tag, std::string const& filterString );
+ bool matches( TestCaseInfo const& testCase ) const override;
+ private:
+ std::string m_tag;
+ };
+
+ class ExcludedPattern : public Pattern {
+ public:
+ explicit ExcludedPattern( PatternPtr const& underlyingPattern );
+ bool matches( TestCaseInfo const& testCase ) const override;
+ private:
+ PatternPtr m_underlyingPattern;
+ };
+
+ struct Filter {
+ std::vector<PatternPtr> m_patterns;
+
+ bool matches( TestCaseInfo const& testCase ) const;
+ std::string name() const;
+ };
+
+ public:
+ struct FilterMatch {
+ std::string name;
+ std::vector<TestCase const*> tests;
+ };
+ using Matches = std::vector<FilterMatch>;
+ using vectorStrings = std::vector<std::string>;
+
+ bool hasFilters() const;
+ bool matches( TestCaseInfo const& testCase ) const;
+ Matches matchesByFilter( std::vector<TestCase> const& testCases, IConfig const& config ) const;
+ const vectorStrings & getInvalidArgs() const;
+
+ private:
+ std::vector<Filter> m_filters;
+ std::vector<std::string> m_invalidArgs;
+ friend class TestSpecParser;
+ };
+}
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// end catch_test_spec.h
+// start catch_interfaces_tag_alias_registry.h
+
+#include <string>
+
+namespace Catch {
+
+ struct TagAlias;
+
+ struct ITagAliasRegistry {
+ virtual ~ITagAliasRegistry();
+ // Nullptr if not present
+ virtual TagAlias const* find( std::string const& alias ) const = 0;
+ virtual std::string expandAliases( std::string const& unexpandedTestSpec ) const = 0;
+
+ static ITagAliasRegistry const& get();
+ };
+
+} // end namespace Catch
+
+// end catch_interfaces_tag_alias_registry.h
+namespace Catch {
+
+ class TestSpecParser {
+ enum Mode{ None, Name, QuotedName, Tag, EscapedName };
+ Mode m_mode = None;
+ Mode lastMode = None;
+ bool m_exclusion = false;
+ std::size_t m_pos = 0;
+ std::size_t m_realPatternPos = 0;
+ std::string m_arg;
+ std::string m_substring;
+ std::string m_patternName;
+ std::vector<std::size_t> m_escapeChars;
+ TestSpec::Filter m_currentFilter;
+ TestSpec m_testSpec;
+ ITagAliasRegistry const* m_tagAliases = nullptr;
+
+ public:
+ TestSpecParser( ITagAliasRegistry const& tagAliases );
+
+ TestSpecParser& parse( std::string const& arg );
+ TestSpec testSpec();
+
+ private:
+ bool visitChar( char c );
+ void startNewMode( Mode mode );
+ bool processNoneChar( char c );
+ void processNameChar( char c );
+ bool processOtherChar( char c );
+ void endMode();
+ void escape();
+ bool isControlChar( char c ) const;
+ void saveLastMode();
+ void revertBackToLastMode();
+ void addFilter();
+ bool separate();
+
+ // Handles common preprocessing of the pattern for name/tag patterns
+ std::string preprocessPattern();
+ // Adds the current pattern as a test name
+ void addNamePattern();
+ // Adds the current pattern as a tag
+ void addTagPattern();
+
+ inline void addCharToPattern(char c) {
+ m_substring += c;
+ m_patternName += c;
+ m_realPatternPos++;
+ }
+
+ };
+ TestSpec parseTestSpec( std::string const& arg );
+
+} // namespace Catch
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// end catch_test_spec_parser.h
+// Libstdc++ doesn't like incomplete classes for unique_ptr
+
+#include <memory>
+#include <vector>
+#include <string>
+
+#ifndef CATCH_CONFIG_CONSOLE_WIDTH
+#define CATCH_CONFIG_CONSOLE_WIDTH 80
+#endif
+
+namespace Catch {
+
+ struct IStream;
+
+ struct ConfigData {
+ bool listTests = false;
+ bool listTags = false;
+ bool listReporters = false;
+ bool listTestNamesOnly = false;
+
+ bool showSuccessfulTests = false;
+ bool shouldDebugBreak = false;
+ bool noThrow = false;
+ bool showHelp = false;
+ bool showInvisibles = false;
+ bool filenamesAsTags = false;
+ bool libIdentify = false;
+
+ int abortAfter = -1;
+ unsigned int rngSeed = 0;
+
+ bool benchmarkNoAnalysis = false;
+ unsigned int benchmarkSamples = 100;
+ double benchmarkConfidenceInterval = 0.95;
+ unsigned int benchmarkResamples = 100000;
+ std::chrono::milliseconds::rep benchmarkWarmupTime = 100;
+
+ Verbosity verbosity = Verbosity::Normal;
+ WarnAbout::What warnings = WarnAbout::Nothing;
+ ShowDurations::OrNot showDurations = ShowDurations::DefaultForReporter;
+ double minDuration = -1;
+ RunTests::InWhatOrder runOrder = RunTests::InDeclarationOrder;
+ UseColour::YesOrNo useColour = UseColour::Auto;
+ WaitForKeypress::When waitForKeypress = WaitForKeypress::Never;
+
+ std::string outputFilename;
+ std::string name;
+ std::string processName;
+#ifndef CATCH_CONFIG_DEFAULT_REPORTER
+#define CATCH_CONFIG_DEFAULT_REPORTER "console"
+#endif
+ std::string reporterName = CATCH_CONFIG_DEFAULT_REPORTER;
+#undef CATCH_CONFIG_DEFAULT_REPORTER
+
+ std::vector<std::string> testsOrTags;
+ std::vector<std::string> sectionsToRun;
+ };
+
+ class Config : public IConfig {
+ public:
+
+ Config() = default;
+ Config( ConfigData const& data );
+ virtual ~Config() = default;
+
+ std::string const& getFilename() const;
+
+ bool listTests() const;
+ bool listTestNamesOnly() const;
+ bool listTags() const;
+ bool listReporters() const;
+
+ std::string getProcessName() const;
+ std::string const& getReporterName() const;
+
+ std::vector<std::string> const& getTestsOrTags() const override;
+ std::vector<std::string> const& getSectionsToRun() const override;
+
+ TestSpec const& testSpec() const override;
+ bool hasTestFilters() const override;
+
+ bool showHelp() const;
+
+ // IConfig interface
+ bool allowThrows() const override;
+ std::ostream& stream() const override;
+ std::string name() const override;
+ bool includeSuccessfulResults() const override;
+ bool warnAboutMissingAssertions() const override;
+ bool warnAboutNoTests() const override;
+ ShowDurations::OrNot showDurations() const override;
+ double minDuration() const override;
+ RunTests::InWhatOrder runOrder() const override;
+ unsigned int rngSeed() const override;
+ UseColour::YesOrNo useColour() const override;
+ bool shouldDebugBreak() const override;
+ int abortAfter() const override;
+ bool showInvisibles() const override;
+ Verbosity verbosity() const override;
+ bool benchmarkNoAnalysis() const override;
+ int benchmarkSamples() const override;
+ double benchmarkConfidenceInterval() const override;
+ unsigned int benchmarkResamples() const override;
+ std::chrono::milliseconds benchmarkWarmupTime() const override;
+
+ private:
+
+ IStream const* openStream();
+ ConfigData m_data;
+
+ std::unique_ptr<IStream const> m_stream;
+ TestSpec m_testSpec;
+ bool m_hasTestFilters = false;
+ };
+
+} // end namespace Catch
+
+// end catch_config.hpp
+// start catch_assertionresult.h
+
+#include <string>
+
+namespace Catch {
+
+ struct AssertionResultData
+ {
+ AssertionResultData() = delete;
+
+ AssertionResultData( ResultWas::OfType _resultType, LazyExpression const& _lazyExpression );
+
+ std::string message;
+ mutable std::string reconstructedExpression;
+ LazyExpression lazyExpression;
+ ResultWas::OfType resultType;
+
+ std::string reconstructExpression() const;
+ };
+
+ class AssertionResult {
+ public:
+ AssertionResult() = delete;
+ AssertionResult( AssertionInfo const& info, AssertionResultData const& data );
+
+ bool isOk() const;
+ bool succeeded() const;
+ ResultWas::OfType getResultType() const;
+ bool hasExpression() const;
+ bool hasMessage() const;
+ std::string getExpression() const;
+ std::string getExpressionInMacro() const;
+ bool hasExpandedExpression() const;
+ std::string getExpandedExpression() const;
+ std::string getMessage() const;
+ SourceLineInfo getSourceInfo() const;
+ StringRef getTestMacroName() const;
+
+ //protected:
+ AssertionInfo m_info;
+ AssertionResultData m_resultData;
+ };
+
+} // end namespace Catch
+
+// end catch_assertionresult.h
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+// start catch_estimate.hpp
+
+ // Statistics estimates
+
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration>
+ struct Estimate {
+ Duration point;
+ Duration lower_bound;
+ Duration upper_bound;
+ double confidence_interval;
+
+ template <typename Duration2>
+ operator Estimate<Duration2>() const {
+ return { point, lower_bound, upper_bound, confidence_interval };
+ }
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_estimate.hpp
+// start catch_outlier_classification.hpp
+
+// Outlier information
+
+namespace Catch {
+ namespace Benchmark {
+ struct OutlierClassification {
+ int samples_seen = 0;
+ int low_severe = 0; // more than 3 times IQR below Q1
+ int low_mild = 0; // 1.5 to 3 times IQR below Q1
+ int high_mild = 0; // 1.5 to 3 times IQR above Q3
+ int high_severe = 0; // more than 3 times IQR above Q3
+
+ int total() const {
+ return low_severe + low_mild + high_mild + high_severe;
+ }
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_outlier_classification.hpp
+
+#include <iterator>
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+#include <string>
+#include <iosfwd>
+#include <map>
+#include <set>
+#include <memory>
+#include <algorithm>
+
+namespace Catch {
+
+ struct ReporterConfig {
+ explicit ReporterConfig( IConfigPtr const& _fullConfig );
+
+ ReporterConfig( IConfigPtr const& _fullConfig, std::ostream& _stream );
+
+ std::ostream& stream() const;
+ IConfigPtr fullConfig() const;
+
+ private:
+ std::ostream* m_stream;
+ IConfigPtr m_fullConfig;
+ };
+
+ struct ReporterPreferences {
+ bool shouldRedirectStdOut = false;
+ bool shouldReportAllAssertions = false;
+ };
+
+ template<typename T>
+ struct LazyStat : Option<T> {
+ LazyStat& operator=( T const& _value ) {
+ Option<T>::operator=( _value );
+ used = false;
+ return *this;
+ }
+ void reset() {
+ Option<T>::reset();
+ used = false;
+ }
+ bool used = false;
+ };
+
+ struct TestRunInfo {
+ TestRunInfo( std::string const& _name );
+ std::string name;
+ };
+ struct GroupInfo {
+ GroupInfo( std::string const& _name,
+ std::size_t _groupIndex,
+ std::size_t _groupsCount );
+
+ std::string name;
+ std::size_t groupIndex;
+ std::size_t groupsCounts;
+ };
+
+ struct AssertionStats {
+ AssertionStats( AssertionResult const& _assertionResult,
+ std::vector<MessageInfo> const& _infoMessages,
+ Totals const& _totals );
+
+ AssertionStats( AssertionStats const& ) = default;
+ AssertionStats( AssertionStats && ) = default;
+ AssertionStats& operator = ( AssertionStats const& ) = delete;
+ AssertionStats& operator = ( AssertionStats && ) = delete;
+ virtual ~AssertionStats();
+
+ AssertionResult assertionResult;
+ std::vector<MessageInfo> infoMessages;
+ Totals totals;
+ };
+
+ struct SectionStats {
+ SectionStats( SectionInfo const& _sectionInfo,
+ Counts const& _assertions,
+ double _durationInSeconds,
+ bool _missingAssertions );
+ SectionStats( SectionStats const& ) = default;
+ SectionStats( SectionStats && ) = default;
+ SectionStats& operator = ( SectionStats const& ) = default;
+ SectionStats& operator = ( SectionStats && ) = default;
+ virtual ~SectionStats();
+
+ SectionInfo sectionInfo;
+ Counts assertions;
+ double durationInSeconds;
+ bool missingAssertions;
+ };
+
+ struct TestCaseStats {
+ TestCaseStats( TestCaseInfo const& _testInfo,
+ Totals const& _totals,
+ std::string const& _stdOut,
+ std::string const& _stdErr,
+ bool _aborting );
+
+ TestCaseStats( TestCaseStats const& ) = default;
+ TestCaseStats( TestCaseStats && ) = default;
+ TestCaseStats& operator = ( TestCaseStats const& ) = default;
+ TestCaseStats& operator = ( TestCaseStats && ) = default;
+ virtual ~TestCaseStats();
+
+ TestCaseInfo testInfo;
+ Totals totals;
+ std::string stdOut;
+ std::string stdErr;
+ bool aborting;
+ };
+
+ struct TestGroupStats {
+ TestGroupStats( GroupInfo const& _groupInfo,
+ Totals const& _totals,
+ bool _aborting );
+ TestGroupStats( GroupInfo const& _groupInfo );
+
+ TestGroupStats( TestGroupStats const& ) = default;
+ TestGroupStats( TestGroupStats && ) = default;
+ TestGroupStats& operator = ( TestGroupStats const& ) = default;
+ TestGroupStats& operator = ( TestGroupStats && ) = default;
+ virtual ~TestGroupStats();
+
+ GroupInfo groupInfo;
+ Totals totals;
+ bool aborting;
+ };
+
+ struct TestRunStats {
+ TestRunStats( TestRunInfo const& _runInfo,
+ Totals const& _totals,
+ bool _aborting );
+
+ TestRunStats( TestRunStats const& ) = default;
+ TestRunStats( TestRunStats && ) = default;
+ TestRunStats& operator = ( TestRunStats const& ) = default;
+ TestRunStats& operator = ( TestRunStats && ) = default;
+ virtual ~TestRunStats();
+
+ TestRunInfo runInfo;
+ Totals totals;
+ bool aborting;
+ };
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ struct BenchmarkInfo {
+ std::string name;
+ double estimatedDuration;
+ int iterations;
+ int samples;
+ unsigned int resamples;
+ double clockResolution;
+ double clockCost;
+ };
+
+ template <class Duration>
+ struct BenchmarkStats {
+ BenchmarkInfo info;
+
+ std::vector<Duration> samples;
+ Benchmark::Estimate<Duration> mean;
+ Benchmark::Estimate<Duration> standardDeviation;
+ Benchmark::OutlierClassification outliers;
+ double outlierVariance;
+
+ template <typename Duration2>
+ operator BenchmarkStats<Duration2>() const {
+ std::vector<Duration2> samples2;
+ samples2.reserve(samples.size());
+ std::transform(samples.begin(), samples.end(), std::back_inserter(samples2), [](Duration d) { return Duration2(d); });
+ return {
+ info,
+ std::move(samples2),
+ mean,
+ standardDeviation,
+ outliers,
+ outlierVariance,
+ };
+ }
+ };
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ struct IStreamingReporter {
+ virtual ~IStreamingReporter() = default;
+
+ // Implementing class must also provide the following static methods:
+ // static std::string getDescription();
+ // static std::set<Verbosity> getSupportedVerbosities()
+
+ virtual ReporterPreferences getPreferences() const = 0;
+
+ virtual void noMatchingTestCases( std::string const& spec ) = 0;
+
+ virtual void reportInvalidArguments(std::string const&) {}
+
+ virtual void testRunStarting( TestRunInfo const& testRunInfo ) = 0;
+ virtual void testGroupStarting( GroupInfo const& groupInfo ) = 0;
+
+ virtual void testCaseStarting( TestCaseInfo const& testInfo ) = 0;
+ virtual void sectionStarting( SectionInfo const& sectionInfo ) = 0;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ virtual void benchmarkPreparing( std::string const& ) {}
+ virtual void benchmarkStarting( BenchmarkInfo const& ) {}
+ virtual void benchmarkEnded( BenchmarkStats<> const& ) {}
+ virtual void benchmarkFailed( std::string const& ) {}
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ virtual void assertionStarting( AssertionInfo const& assertionInfo ) = 0;
+
+ // The return value indicates if the messages buffer should be cleared:
+ virtual bool assertionEnded( AssertionStats const& assertionStats ) = 0;
+
+ virtual void sectionEnded( SectionStats const& sectionStats ) = 0;
+ virtual void testCaseEnded( TestCaseStats const& testCaseStats ) = 0;
+ virtual void testGroupEnded( TestGroupStats const& testGroupStats ) = 0;
+ virtual void testRunEnded( TestRunStats const& testRunStats ) = 0;
+
+ virtual void skipTest( TestCaseInfo const& testInfo ) = 0;
+
+ // Default empty implementation provided
+ virtual void fatalErrorEncountered( StringRef name );
+
+ virtual bool isMulti() const;
+ };
+ using IStreamingReporterPtr = std::unique_ptr<IStreamingReporter>;
+
+ struct IReporterFactory {
+ virtual ~IReporterFactory();
+ virtual IStreamingReporterPtr create( ReporterConfig const& config ) const = 0;
+ virtual std::string getDescription() const = 0;
+ };
+ using IReporterFactoryPtr = std::shared_ptr<IReporterFactory>;
+
+ struct IReporterRegistry {
+ using FactoryMap = std::map<std::string, IReporterFactoryPtr>;
+ using Listeners = std::vector<IReporterFactoryPtr>;
+
+ virtual ~IReporterRegistry();
+ virtual IStreamingReporterPtr create( std::string const& name, IConfigPtr const& config ) const = 0;
+ virtual FactoryMap const& getFactories() const = 0;
+ virtual Listeners const& getListeners() const = 0;
+ };
+
+} // end namespace Catch
+
+// end catch_interfaces_reporter.h
+#include <algorithm>
+#include <cstring>
+#include <cfloat>
+#include <cstdio>
+#include <cassert>
+#include <memory>
+#include <ostream>
+
+namespace Catch {
+ void prepareExpandedExpression(AssertionResult& result);
+
+ // Returns double formatted as %.3f (format expected on output)
+ std::string getFormattedDuration( double duration );
+
+ //! Should the reporter show
+ bool shouldShowDuration( IConfig const& config, double duration );
+
+ std::string serializeFilters( std::vector<std::string> const& container );
+
+ template<typename DerivedT>
+ struct StreamingReporterBase : IStreamingReporter {
+
+ StreamingReporterBase( ReporterConfig const& _config )
+ : m_config( _config.fullConfig() ),
+ stream( _config.stream() )
+ {
+ m_reporterPrefs.shouldRedirectStdOut = false;
+ if( !DerivedT::getSupportedVerbosities().count( m_config->verbosity() ) )
+ CATCH_ERROR( "Verbosity level not supported by this reporter" );
+ }
+
+ ReporterPreferences getPreferences() const override {
+ return m_reporterPrefs;
+ }
+
+ static std::set<Verbosity> getSupportedVerbosities() {
+ return { Verbosity::Normal };
+ }
+
+ ~StreamingReporterBase() override = default;
+
+ void noMatchingTestCases(std::string const&) override {}
+
+ void reportInvalidArguments(std::string const&) override {}
+
+ void testRunStarting(TestRunInfo const& _testRunInfo) override {
+ currentTestRunInfo = _testRunInfo;
+ }
+
+ void testGroupStarting(GroupInfo const& _groupInfo) override {
+ currentGroupInfo = _groupInfo;
+ }
+
+ void testCaseStarting(TestCaseInfo const& _testInfo) override {
+ currentTestCaseInfo = _testInfo;
+ }
+ void sectionStarting(SectionInfo const& _sectionInfo) override {
+ m_sectionStack.push_back(_sectionInfo);
+ }
+
+ void sectionEnded(SectionStats const& /* _sectionStats */) override {
+ m_sectionStack.pop_back();
+ }
+ void testCaseEnded(TestCaseStats const& /* _testCaseStats */) override {
+ currentTestCaseInfo.reset();
+ }
+ void testGroupEnded(TestGroupStats const& /* _testGroupStats */) override {
+ currentGroupInfo.reset();
+ }
+ void testRunEnded(TestRunStats const& /* _testRunStats */) override {
+ currentTestCaseInfo.reset();
+ currentGroupInfo.reset();
+ currentTestRunInfo.reset();
+ }
+
+ void skipTest(TestCaseInfo const&) override {
+ // Don't do anything with this by default.
+ // It can optionally be overridden in the derived class.
+ }
+
+ IConfigPtr m_config;
+ std::ostream& stream;
+
+ LazyStat<TestRunInfo> currentTestRunInfo;
+ LazyStat<GroupInfo> currentGroupInfo;
+ LazyStat<TestCaseInfo> currentTestCaseInfo;
+
+ std::vector<SectionInfo> m_sectionStack;
+ ReporterPreferences m_reporterPrefs;
+ };
+
+ template<typename DerivedT>
+ struct CumulativeReporterBase : IStreamingReporter {
+ template<typename T, typename ChildNodeT>
+ struct Node {
+ explicit Node( T const& _value ) : value( _value ) {}
+ virtual ~Node() {}
+
+ using ChildNodes = std::vector<std::shared_ptr<ChildNodeT>>;
+ T value;
+ ChildNodes children;
+ };
+ struct SectionNode {
+ explicit SectionNode(SectionStats const& _stats) : stats(_stats) {}
+ virtual ~SectionNode() = default;
+
+ bool operator == (SectionNode const& other) const {
+ return stats.sectionInfo.lineInfo == other.stats.sectionInfo.lineInfo;
+ }
+ bool operator == (std::shared_ptr<SectionNode> const& other) const {
+ return operator==(*other);
+ }
+
+ SectionStats stats;
+ using ChildSections = std::vector<std::shared_ptr<SectionNode>>;
+ using Assertions = std::vector<AssertionStats>;
+ ChildSections childSections;
+ Assertions assertions;
+ std::string stdOut;
+ std::string stdErr;
+ };
+
+ struct BySectionInfo {
+ BySectionInfo( SectionInfo const& other ) : m_other( other ) {}
+ BySectionInfo( BySectionInfo const& other ) : m_other( other.m_other ) {}
+ bool operator() (std::shared_ptr<SectionNode> const& node) const {
+ return ((node->stats.sectionInfo.name == m_other.name) &&
+ (node->stats.sectionInfo.lineInfo == m_other.lineInfo));
+ }
+ void operator=(BySectionInfo const&) = delete;
+
+ private:
+ SectionInfo const& m_other;
+ };
+
+ using TestCaseNode = Node<TestCaseStats, SectionNode>;
+ using TestGroupNode = Node<TestGroupStats, TestCaseNode>;
+ using TestRunNode = Node<TestRunStats, TestGroupNode>;
+
+ CumulativeReporterBase( ReporterConfig const& _config )
+ : m_config( _config.fullConfig() ),
+ stream( _config.stream() )
+ {
+ m_reporterPrefs.shouldRedirectStdOut = false;
+ if( !DerivedT::getSupportedVerbosities().count( m_config->verbosity() ) )
+ CATCH_ERROR( "Verbosity level not supported by this reporter" );
+ }
+ ~CumulativeReporterBase() override = default;
+
+ ReporterPreferences getPreferences() const override {
+ return m_reporterPrefs;
+ }
+
+ static std::set<Verbosity> getSupportedVerbosities() {
+ return { Verbosity::Normal };
+ }
+
+ void testRunStarting( TestRunInfo const& ) override {}
+ void testGroupStarting( GroupInfo const& ) override {}
+
+ void testCaseStarting( TestCaseInfo const& ) override {}
+
+ void sectionStarting( SectionInfo const& sectionInfo ) override {
+ SectionStats incompleteStats( sectionInfo, Counts(), 0, false );
+ std::shared_ptr<SectionNode> node;
+ if( m_sectionStack.empty() ) {
+ if( !m_rootSection )
+ m_rootSection = std::make_shared<SectionNode>( incompleteStats );
+ node = m_rootSection;
+ }
+ else {
+ SectionNode& parentNode = *m_sectionStack.back();
+ auto it =
+ std::find_if( parentNode.childSections.begin(),
+ parentNode.childSections.end(),
+ BySectionInfo( sectionInfo ) );
+ if( it == parentNode.childSections.end() ) {
+ node = std::make_shared<SectionNode>( incompleteStats );
+ parentNode.childSections.push_back( node );
+ }
+ else
+ node = *it;
+ }
+ m_sectionStack.push_back( node );
+ m_deepestSection = std::move(node);
+ }
+
+ void assertionStarting(AssertionInfo const&) override {}
+
+ bool assertionEnded(AssertionStats const& assertionStats) override {
+ assert(!m_sectionStack.empty());
+ // AssertionResult holds a pointer to a temporary DecomposedExpression,
+ // which getExpandedExpression() calls to build the expression string.
+ // Our section stack copy of the assertionResult will likely outlive the
+ // temporary, so it must be expanded or discarded now to avoid calling
+ // a destroyed object later.
+ prepareExpandedExpression(const_cast<AssertionResult&>( assertionStats.assertionResult ) );
+ SectionNode& sectionNode = *m_sectionStack.back();
+ sectionNode.assertions.push_back(assertionStats);
+ return true;
+ }
+ void sectionEnded(SectionStats const& sectionStats) override {
+ assert(!m_sectionStack.empty());
+ SectionNode& node = *m_sectionStack.back();
+ node.stats = sectionStats;
+ m_sectionStack.pop_back();
+ }
+ void testCaseEnded(TestCaseStats const& testCaseStats) override {
+ auto node = std::make_shared<TestCaseNode>(testCaseStats);
+ assert(m_sectionStack.size() == 0);
+ node->children.push_back(m_rootSection);
+ m_testCases.push_back(node);
+ m_rootSection.reset();
+
+ assert(m_deepestSection);
+ m_deepestSection->stdOut = testCaseStats.stdOut;
+ m_deepestSection->stdErr = testCaseStats.stdErr;
+ }
+ void testGroupEnded(TestGroupStats const& testGroupStats) override {
+ auto node = std::make_shared<TestGroupNode>(testGroupStats);
+ node->children.swap(m_testCases);
+ m_testGroups.push_back(node);
+ }
+ void testRunEnded(TestRunStats const& testRunStats) override {
+ auto node = std::make_shared<TestRunNode>(testRunStats);
+ node->children.swap(m_testGroups);
+ m_testRuns.push_back(node);
+ testRunEndedCumulative();
+ }
+ virtual void testRunEndedCumulative() = 0;
+
+ void skipTest(TestCaseInfo const&) override {}
+
+ IConfigPtr m_config;
+ std::ostream& stream;
+ std::vector<AssertionStats> m_assertions;
+ std::vector<std::vector<std::shared_ptr<SectionNode>>> m_sections;
+ std::vector<std::shared_ptr<TestCaseNode>> m_testCases;
+ std::vector<std::shared_ptr<TestGroupNode>> m_testGroups;
+
+ std::vector<std::shared_ptr<TestRunNode>> m_testRuns;
+
+ std::shared_ptr<SectionNode> m_rootSection;
+ std::shared_ptr<SectionNode> m_deepestSection;
+ std::vector<std::shared_ptr<SectionNode>> m_sectionStack;
+ ReporterPreferences m_reporterPrefs;
+ };
+
+ template<char C>
+ char const* getLineOfChars() {
+ static char line[CATCH_CONFIG_CONSOLE_WIDTH] = {0};
+ if( !*line ) {
+ std::memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH-1 );
+ line[CATCH_CONFIG_CONSOLE_WIDTH-1] = 0;
+ }
+ return line;
+ }
+
+ struct TestEventListenerBase : StreamingReporterBase<TestEventListenerBase> {
+ TestEventListenerBase( ReporterConfig const& _config );
+
+ static std::set<Verbosity> getSupportedVerbosities();
+
+ void assertionStarting(AssertionInfo const&) override;
+ bool assertionEnded(AssertionStats const&) override;
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_bases.hpp
+// start catch_console_colour.h
+
+namespace Catch {
+
+ struct Colour {
+ enum Code {
+ None = 0,
+
+ White,
+ Red,
+ Green,
+ Blue,
+ Cyan,
+ Yellow,
+ Grey,
+
+ Bright = 0x10,
+
+ BrightRed = Bright | Red,
+ BrightGreen = Bright | Green,
+ LightGrey = Bright | Grey,
+ BrightWhite = Bright | White,
+ BrightYellow = Bright | Yellow,
+
+ // By intention
+ FileName = LightGrey,
+ Warning = BrightYellow,
+ ResultError = BrightRed,
+ ResultSuccess = BrightGreen,
+ ResultExpectedFailure = Warning,
+
+ Error = BrightRed,
+ Success = Green,
+
+ OriginalExpression = Cyan,
+ ReconstructedExpression = BrightYellow,
+
+ SecondaryText = LightGrey,
+ Headers = White
+ };
+
+ // Use constructed object for RAII guard
+ Colour( Code _colourCode );
+ Colour( Colour&& other ) noexcept;
+ Colour& operator=( Colour&& other ) noexcept;
+ ~Colour();
+
+ // Use static method for one-shot changes
+ static void use( Code _colourCode );
+
+ private:
+ bool m_moved = false;
+ };
+
+ std::ostream& operator << ( std::ostream& os, Colour const& );
+
+} // end namespace Catch
+
+// end catch_console_colour.h
+// start catch_reporter_registrars.hpp
+
+
+namespace Catch {
+
+ template<typename T>
+ class ReporterRegistrar {
+
+ class ReporterFactory : public IReporterFactory {
+
+ IStreamingReporterPtr create( ReporterConfig const& config ) const override {
+ return std::unique_ptr<T>( new T( config ) );
+ }
+
+ std::string getDescription() const override {
+ return T::getDescription();
+ }
+ };
+
+ public:
+
+ explicit ReporterRegistrar( std::string const& name ) {
+ getMutableRegistryHub().registerReporter( name, std::make_shared<ReporterFactory>() );
+ }
+ };
+
+ template<typename T>
+ class ListenerRegistrar {
+
+ class ListenerFactory : public IReporterFactory {
+
+ IStreamingReporterPtr create( ReporterConfig const& config ) const override {
+ return std::unique_ptr<T>( new T( config ) );
+ }
+ std::string getDescription() const override {
+ return std::string();
+ }
+ };
+
+ public:
+
+ ListenerRegistrar() {
+ getMutableRegistryHub().registerListener( std::make_shared<ListenerFactory>() );
+ }
+ };
+}
+
+#if !defined(CATCH_CONFIG_DISABLE)
+
+#define CATCH_REGISTER_REPORTER( name, reporterType ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::ReporterRegistrar<reporterType> catch_internal_RegistrarFor##reporterType( name ); } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+#define CATCH_REGISTER_LISTENER( listenerType ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::ListenerRegistrar<listenerType> catch_internal_RegistrarFor##listenerType; } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+#else // CATCH_CONFIG_DISABLE
+
+#define CATCH_REGISTER_REPORTER(name, reporterType)
+#define CATCH_REGISTER_LISTENER(listenerType)
+
+#endif // CATCH_CONFIG_DISABLE
+
+// end catch_reporter_registrars.hpp
+// Allow users to base their work off existing reporters
+// start catch_reporter_compact.h
+
+namespace Catch {
+
+ struct CompactReporter : StreamingReporterBase<CompactReporter> {
+
+ using StreamingReporterBase::StreamingReporterBase;
+
+ ~CompactReporter() override;
+
+ static std::string getDescription();
+
+ void noMatchingTestCases(std::string const& spec) override;
+
+ void assertionStarting(AssertionInfo const&) override;
+
+ bool assertionEnded(AssertionStats const& _assertionStats) override;
+
+ void sectionEnded(SectionStats const& _sectionStats) override;
+
+ void testRunEnded(TestRunStats const& _testRunStats) override;
+
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_compact.h
+// start catch_reporter_console.h
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4061) // Not all labels are EXPLICITLY handled in switch
+ // Note that 4062 (not all labels are handled
+ // and default is missing) is enabled
+#endif
+
+namespace Catch {
+ // Fwd decls
+ struct SummaryColumn;
+ class TablePrinter;
+
+ struct ConsoleReporter : StreamingReporterBase<ConsoleReporter> {
+ std::unique_ptr<TablePrinter> m_tablePrinter;
+
+ ConsoleReporter(ReporterConfig const& config);
+ ~ConsoleReporter() override;
+ static std::string getDescription();
+
+ void noMatchingTestCases(std::string const& spec) override;
+
+ void reportInvalidArguments(std::string const&arg) override;
+
+ void assertionStarting(AssertionInfo const&) override;
+
+ bool assertionEnded(AssertionStats const& _assertionStats) override;
+
+ void sectionStarting(SectionInfo const& _sectionInfo) override;
+ void sectionEnded(SectionStats const& _sectionStats) override;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void benchmarkPreparing(std::string const& name) override;
+ void benchmarkStarting(BenchmarkInfo const& info) override;
+ void benchmarkEnded(BenchmarkStats<> const& stats) override;
+ void benchmarkFailed(std::string const& error) override;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void testCaseEnded(TestCaseStats const& _testCaseStats) override;
+ void testGroupEnded(TestGroupStats const& _testGroupStats) override;
+ void testRunEnded(TestRunStats const& _testRunStats) override;
+ void testRunStarting(TestRunInfo const& _testRunInfo) override;
+ private:
+
+ void lazyPrint();
+
+ void lazyPrintWithoutClosingBenchmarkTable();
+ void lazyPrintRunInfo();
+ void lazyPrintGroupInfo();
+ void printTestCaseAndSectionHeader();
+
+ void printClosedHeader(std::string const& _name);
+ void printOpenHeader(std::string const& _name);
+
+ // if string has a : in first line will set indent to follow it on
+ // subsequent lines
+ void printHeaderString(std::string const& _string, std::size_t indent = 0);
+
+ void printTotals(Totals const& totals);
+ void printSummaryRow(std::string const& label, std::vector<SummaryColumn> const& cols, std::size_t row);
+
+ void printTotalsDivider(Totals const& totals);
+ void printSummaryDivider();
+ void printTestFilters();
+
+ private:
+ bool m_headerPrinted = false;
+ };
+
+} // end namespace Catch
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+// end catch_reporter_console.h
+// start catch_reporter_junit.h
+
+// start catch_xmlwriter.h
+
+#include <vector>
+
+namespace Catch {
+ enum class XmlFormatting {
+ None = 0x00,
+ Indent = 0x01,
+ Newline = 0x02,
+ };
+
+ XmlFormatting operator | (XmlFormatting lhs, XmlFormatting rhs);
+ XmlFormatting operator & (XmlFormatting lhs, XmlFormatting rhs);
+
+ class XmlEncode {
+ public:
+ enum ForWhat { ForTextNodes, ForAttributes };
+
+ XmlEncode( std::string const& str, ForWhat forWhat = ForTextNodes );
+
+ void encodeTo( std::ostream& os ) const;
+
+ friend std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode );
+
+ private:
+ std::string m_str;
+ ForWhat m_forWhat;
+ };
+
+ class XmlWriter {
+ public:
+
+ class ScopedElement {
+ public:
+ ScopedElement( XmlWriter* writer, XmlFormatting fmt );
+
+ ScopedElement( ScopedElement&& other ) noexcept;
+ ScopedElement& operator=( ScopedElement&& other ) noexcept;
+
+ ~ScopedElement();
+
+ ScopedElement& writeText( std::string const& text, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent );
+
+ template<typename T>
+ ScopedElement& writeAttribute( std::string const& name, T const& attribute ) {
+ m_writer->writeAttribute( name, attribute );
+ return *this;
+ }
+
+ private:
+ mutable XmlWriter* m_writer = nullptr;
+ XmlFormatting m_fmt;
+ };
+
+ XmlWriter( std::ostream& os = Catch::cout() );
+ ~XmlWriter();
+
+ XmlWriter( XmlWriter const& ) = delete;
+ XmlWriter& operator=( XmlWriter const& ) = delete;
+
+ XmlWriter& startElement( std::string const& name, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ ScopedElement scopedElement( std::string const& name, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ XmlWriter& endElement(XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ XmlWriter& writeAttribute( std::string const& name, std::string const& attribute );
+
+ XmlWriter& writeAttribute( std::string const& name, bool attribute );
+
+ template<typename T>
+ XmlWriter& writeAttribute( std::string const& name, T const& attribute ) {
+ ReusableStringStream rss;
+ rss << attribute;
+ return writeAttribute( name, rss.str() );
+ }
+
+ XmlWriter& writeText( std::string const& text, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ XmlWriter& writeComment(std::string const& text, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ void writeStylesheetRef( std::string const& url );
+
+ XmlWriter& writeBlankLine();
+
+ void ensureTagClosed();
+
+ private:
+
+ void applyFormatting(XmlFormatting fmt);
+
+ void writeDeclaration();
+
+ void newlineIfNecessary();
+
+ bool m_tagIsOpen = false;
+ bool m_needsNewline = false;
+ std::vector<std::string> m_tags;
+ std::string m_indent;
+ std::ostream& m_os;
+ };
+
+}
+
+// end catch_xmlwriter.h
+namespace Catch {
+
+ class JunitReporter : public CumulativeReporterBase<JunitReporter> {
+ public:
+ JunitReporter(ReporterConfig const& _config);
+
+ ~JunitReporter() override;
+
+ static std::string getDescription();
+
+ void noMatchingTestCases(std::string const& /*spec*/) override;
+
+ void testRunStarting(TestRunInfo const& runInfo) override;
+
+ void testGroupStarting(GroupInfo const& groupInfo) override;
+
+ void testCaseStarting(TestCaseInfo const& testCaseInfo) override;
+ bool assertionEnded(AssertionStats const& assertionStats) override;
+
+ void testCaseEnded(TestCaseStats const& testCaseStats) override;
+
+ void testGroupEnded(TestGroupStats const& testGroupStats) override;
+
+ void testRunEndedCumulative() override;
+
+ void writeGroup(TestGroupNode const& groupNode, double suiteTime);
+
+ void writeTestCase(TestCaseNode const& testCaseNode);
+
+ void writeSection( std::string const& className,
+ std::string const& rootName,
+ SectionNode const& sectionNode,
+ bool testOkToFail );
+
+ void writeAssertions(SectionNode const& sectionNode);
+ void writeAssertion(AssertionStats const& stats);
+
+ XmlWriter xml;
+ Timer suiteTimer;
+ std::string stdOutForSuite;
+ std::string stdErrForSuite;
+ unsigned int unexpectedExceptions = 0;
+ bool m_okToFail = false;
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_junit.h
+// start catch_reporter_xml.h
+
+namespace Catch {
+ class XmlReporter : public StreamingReporterBase<XmlReporter> {
+ public:
+ XmlReporter(ReporterConfig const& _config);
+
+ ~XmlReporter() override;
+
+ static std::string getDescription();
+
+ virtual std::string getStylesheetRef() const;
+
+ void writeSourceInfo(SourceLineInfo const& sourceInfo);
+
+ public: // StreamingReporterBase
+
+ void noMatchingTestCases(std::string const& s) override;
+
+ void testRunStarting(TestRunInfo const& testInfo) override;
+
+ void testGroupStarting(GroupInfo const& groupInfo) override;
+
+ void testCaseStarting(TestCaseInfo const& testInfo) override;
+
+ void sectionStarting(SectionInfo const& sectionInfo) override;
+
+ void assertionStarting(AssertionInfo const&) override;
+
+ bool assertionEnded(AssertionStats const& assertionStats) override;
+
+ void sectionEnded(SectionStats const& sectionStats) override;
+
+ void testCaseEnded(TestCaseStats const& testCaseStats) override;
+
+ void testGroupEnded(TestGroupStats const& testGroupStats) override;
+
+ void testRunEnded(TestRunStats const& testRunStats) override;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void benchmarkPreparing(std::string const& name) override;
+ void benchmarkStarting(BenchmarkInfo const&) override;
+ void benchmarkEnded(BenchmarkStats<> const&) override;
+ void benchmarkFailed(std::string const&) override;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ private:
+ Timer m_testCaseTimer;
+ XmlWriter m_xml;
+ int m_sectionDepth = 0;
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_xml.h
+
+// end catch_external_interfaces.h
+#endif
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+// start catch_benchmarking_all.hpp
+
+// A proxy header that includes all of the benchmarking headers to allow
+// concise include of the benchmarking features. You should prefer the
+// individual includes in standard use.
+
+// start catch_benchmark.hpp
+
+ // Benchmark
+
+// start catch_chronometer.hpp
+
+// User-facing chronometer
+
+
+// start catch_clock.hpp
+
+// Clocks
+
+
+#include <chrono>
+#include <ratio>
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Clock>
+ using ClockDuration = typename Clock::duration;
+ template <typename Clock>
+ using FloatDuration = std::chrono::duration<double, typename Clock::period>;
+
+ template <typename Clock>
+ using TimePoint = typename Clock::time_point;
+
+ using default_clock = std::chrono::steady_clock;
+
+ template <typename Clock>
+ struct now {
+ TimePoint<Clock> operator()() const {
+ return Clock::now();
+ }
+ };
+
+ using fp_seconds = std::chrono::duration<double, std::ratio<1>>;
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_clock.hpp
+// start catch_optimizer.hpp
+
+ // Hinting the optimizer
+
+
+#if defined(_MSC_VER)
+# include <atomic> // atomic_thread_fence
+#endif
+
+namespace Catch {
+ namespace Benchmark {
+#if defined(__GNUC__) || defined(__clang__)
+ template <typename T>
+ inline void keep_memory(T* p) {
+ asm volatile("" : : "g"(p) : "memory");
+ }
+ inline void keep_memory() {
+ asm volatile("" : : : "memory");
+ }
+
+ namespace Detail {
+ inline void optimizer_barrier() { keep_memory(); }
+ } // namespace Detail
+#elif defined(_MSC_VER)
+
+#pragma optimize("", off)
+ template <typename T>
+ inline void keep_memory(T* p) {
+ // thanks @milleniumbug
+ *reinterpret_cast<char volatile*>(p) = *reinterpret_cast<char const volatile*>(p);
+ }
+ // TODO equivalent keep_memory()
+#pragma optimize("", on)
+
+ namespace Detail {
+ inline void optimizer_barrier() {
+ std::atomic_thread_fence(std::memory_order_seq_cst);
+ }
+ } // namespace Detail
+
+#endif
+
+ template <typename T>
+ inline void deoptimize_value(T&& x) {
+ keep_memory(&x);
+ }
+
+ template <typename Fn, typename... Args>
+ inline auto invoke_deoptimized(Fn&& fn, Args&&... args) -> typename std::enable_if<!std::is_same<void, decltype(fn(args...))>::value>::type {
+ deoptimize_value(std::forward<Fn>(fn) (std::forward<Args...>(args...)));
+ }
+
+ template <typename Fn, typename... Args>
+ inline auto invoke_deoptimized(Fn&& fn, Args&&... args) -> typename std::enable_if<std::is_same<void, decltype(fn(args...))>::value>::type {
+ std::forward<Fn>(fn) (std::forward<Args...>(args...));
+ }
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_optimizer.hpp
+// start catch_complete_invoke.hpp
+
+// Invoke with a special case for void
+
+
+#include <type_traits>
+#include <utility>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename T>
+ struct CompleteType { using type = T; };
+ template <>
+ struct CompleteType<void> { struct type {}; };
+
+ template <typename T>
+ using CompleteType_t = typename CompleteType<T>::type;
+
+ template <typename Result>
+ struct CompleteInvoker {
+ template <typename Fun, typename... Args>
+ static Result invoke(Fun&& fun, Args&&... args) {
+ return std::forward<Fun>(fun)(std::forward<Args>(args)...);
+ }
+ };
+ template <>
+ struct CompleteInvoker<void> {
+ template <typename Fun, typename... Args>
+ static CompleteType_t<void> invoke(Fun&& fun, Args&&... args) {
+ std::forward<Fun>(fun)(std::forward<Args>(args)...);
+ return {};
+ }
+ };
+
+ // invoke and not return void :(
+ template <typename Fun, typename... Args>
+ CompleteType_t<FunctionReturnType<Fun, Args...>> complete_invoke(Fun&& fun, Args&&... args) {
+ return CompleteInvoker<FunctionReturnType<Fun, Args...>>::invoke(std::forward<Fun>(fun), std::forward<Args>(args)...);
+ }
+
+ const std::string benchmarkErrorMsg = "a benchmark failed to run successfully";
+ } // namespace Detail
+
+ template <typename Fun>
+ Detail::CompleteType_t<FunctionReturnType<Fun>> user_code(Fun&& fun) {
+ CATCH_TRY{
+ return Detail::complete_invoke(std::forward<Fun>(fun));
+ } CATCH_CATCH_ALL{
+ getResultCapture().benchmarkFailed(translateActiveException());
+ CATCH_RUNTIME_ERROR(Detail::benchmarkErrorMsg);
+ }
+ }
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_complete_invoke.hpp
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ struct ChronometerConcept {
+ virtual void start() = 0;
+ virtual void finish() = 0;
+ virtual ~ChronometerConcept() = default;
+ };
+ template <typename Clock>
+ struct ChronometerModel final : public ChronometerConcept {
+ void start() override { started = Clock::now(); }
+ void finish() override { finished = Clock::now(); }
+
+ ClockDuration<Clock> elapsed() const { return finished - started; }
+
+ TimePoint<Clock> started;
+ TimePoint<Clock> finished;
+ };
+ } // namespace Detail
+
+ struct Chronometer {
+ public:
+ template <typename Fun>
+ void measure(Fun&& fun) { measure(std::forward<Fun>(fun), is_callable<Fun(int)>()); }
+
+ int runs() const { return k; }
+
+ Chronometer(Detail::ChronometerConcept& meter, int k)
+ : impl(&meter)
+ , k(k) {}
+
+ private:
+ template <typename Fun>
+ void measure(Fun&& fun, std::false_type) {
+ measure([&fun](int) { return fun(); }, std::true_type());
+ }
+
+ template <typename Fun>
+ void measure(Fun&& fun, std::true_type) {
+ Detail::optimizer_barrier();
+ impl->start();
+ for (int i = 0; i < k; ++i) invoke_deoptimized(fun, i);
+ impl->finish();
+ Detail::optimizer_barrier();
+ }
+
+ Detail::ChronometerConcept* impl;
+ int k;
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_chronometer.hpp
+// start catch_environment.hpp
+
+// Environment information
+
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration>
+ struct EnvironmentEstimate {
+ Duration mean;
+ OutlierClassification outliers;
+
+ template <typename Duration2>
+ operator EnvironmentEstimate<Duration2>() const {
+ return { mean, outliers };
+ }
+ };
+ template <typename Clock>
+ struct Environment {
+ using clock_type = Clock;
+ EnvironmentEstimate<FloatDuration<Clock>> clock_resolution;
+ EnvironmentEstimate<FloatDuration<Clock>> clock_cost;
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_environment.hpp
+// start catch_execution_plan.hpp
+
+ // Execution plan
+
+
+// start catch_benchmark_function.hpp
+
+ // Dumb std::function implementation for consistent call overhead
+
+
+#include <cassert>
+#include <type_traits>
+#include <utility>
+#include <memory>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename T>
+ using Decay = typename std::decay<T>::type;
+ template <typename T, typename U>
+ struct is_related
+ : std::is_same<Decay<T>, Decay<U>> {};
+
+ /// We need to reinvent std::function because every piece of code that might add overhead
+ /// in a measurement context needs to have consistent performance characteristics so that we
+ /// can account for it in the measurement.
+ /// Implementations of std::function with optimizations that aren't always applicable, like
+ /// small buffer optimizations, are not uncommon.
+ /// This is effectively an implementation of std::function without any such optimizations;
+ /// it may be slow, but it is consistently slow.
+ struct BenchmarkFunction {
+ private:
+ struct callable {
+ virtual void call(Chronometer meter) const = 0;
+ virtual callable* clone() const = 0;
+ virtual ~callable() = default;
+ };
+ template <typename Fun>
+ struct model : public callable {
+ model(Fun&& fun) : fun(std::move(fun)) {}
+ model(Fun const& fun) : fun(fun) {}
+
+ model<Fun>* clone() const override { return new model<Fun>(*this); }
+
+ void call(Chronometer meter) const override {
+ call(meter, is_callable<Fun(Chronometer)>());
+ }
+ void call(Chronometer meter, std::true_type) const {
+ fun(meter);
+ }
+ void call(Chronometer meter, std::false_type) const {
+ meter.measure(fun);
+ }
+
+ Fun fun;
+ };
+
+ struct do_nothing { void operator()() const {} };
+
+ template <typename T>
+ BenchmarkFunction(model<T>* c) : f(c) {}
+
+ public:
+ BenchmarkFunction()
+ : f(new model<do_nothing>{ {} }) {}
+
+ template <typename Fun,
+ typename std::enable_if<!is_related<Fun, BenchmarkFunction>::value, int>::type = 0>
+ BenchmarkFunction(Fun&& fun)
+ : f(new model<typename std::decay<Fun>::type>(std::forward<Fun>(fun))) {}
+
+ BenchmarkFunction(BenchmarkFunction&& that)
+ : f(std::move(that.f)) {}
+
+ BenchmarkFunction(BenchmarkFunction const& that)
+ : f(that.f->clone()) {}
+
+ BenchmarkFunction& operator=(BenchmarkFunction&& that) {
+ f = std::move(that.f);
+ return *this;
+ }
+
+ BenchmarkFunction& operator=(BenchmarkFunction const& that) {
+ f.reset(that.f->clone());
+ return *this;
+ }
+
+ void operator()(Chronometer meter) const { f->call(meter); }
+
+ private:
+ std::unique_ptr<callable> f;
+ };
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_benchmark_function.hpp
+// start catch_repeat.hpp
+
+// repeat algorithm
+
+
+#include <type_traits>
+#include <utility>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Fun>
+ struct repeater {
+ void operator()(int k) const {
+ for (int i = 0; i < k; ++i) {
+ fun();
+ }
+ }
+ Fun fun;
+ };
+ template <typename Fun>
+ repeater<typename std::decay<Fun>::type> repeat(Fun&& fun) {
+ return { std::forward<Fun>(fun) };
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_repeat.hpp
+// start catch_run_for_at_least.hpp
+
+// Run a function for a minimum amount of time
+
+
+// start catch_measure.hpp
+
+// Measure
+
+
+// start catch_timing.hpp
+
+// Timing
+
+
+#include <tuple>
+#include <type_traits>
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration, typename Result>
+ struct Timing {
+ Duration elapsed;
+ Result result;
+ int iterations;
+ };
+ template <typename Clock, typename Func, typename... Args>
+ using TimingOf = Timing<ClockDuration<Clock>, Detail::CompleteType_t<FunctionReturnType<Func, Args...>>>;
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_timing.hpp
+#include <utility>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Clock, typename Fun, typename... Args>
+ TimingOf<Clock, Fun, Args...> measure(Fun&& fun, Args&&... args) {
+ auto start = Clock::now();
+ auto&& r = Detail::complete_invoke(fun, std::forward<Args>(args)...);
+ auto end = Clock::now();
+ auto delta = end - start;
+ return { delta, std::forward<decltype(r)>(r), 1 };
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_measure.hpp
+#include <utility>
+#include <type_traits>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Clock, typename Fun>
+ TimingOf<Clock, Fun, int> measure_one(Fun&& fun, int iters, std::false_type) {
+ return Detail::measure<Clock>(fun, iters);
+ }
+ template <typename Clock, typename Fun>
+ TimingOf<Clock, Fun, Chronometer> measure_one(Fun&& fun, int iters, std::true_type) {
+ Detail::ChronometerModel<Clock> meter;
+ auto&& result = Detail::complete_invoke(fun, Chronometer(meter, iters));
+
+ return { meter.elapsed(), std::move(result), iters };
+ }
+
+ template <typename Clock, typename Fun>
+ using run_for_at_least_argument_t = typename std::conditional<is_callable<Fun(Chronometer)>::value, Chronometer, int>::type;
+
+ struct optimized_away_error : std::exception {
+ const char* what() const noexcept override {
+ return "could not measure benchmark, maybe it was optimized away";
+ }
+ };
+
+ template <typename Clock, typename Fun>
+ TimingOf<Clock, Fun, run_for_at_least_argument_t<Clock, Fun>> run_for_at_least(ClockDuration<Clock> how_long, int seed, Fun&& fun) {
+ auto iters = seed;
+ while (iters < (1 << 30)) {
+ auto&& Timing = measure_one<Clock>(fun, iters, is_callable<Fun(Chronometer)>());
+
+ if (Timing.elapsed >= how_long) {
+ return { Timing.elapsed, std::move(Timing.result), iters };
+ }
+ iters *= 2;
+ }
+ Catch::throw_exception(optimized_away_error{});
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_run_for_at_least.hpp
+#include <algorithm>
+#include <iterator>
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration>
+ struct ExecutionPlan {
+ int iterations_per_sample;
+ Duration estimated_duration;
+ Detail::BenchmarkFunction benchmark;
+ Duration warmup_time;
+ int warmup_iterations;
+
+ template <typename Duration2>
+ operator ExecutionPlan<Duration2>() const {
+ return { iterations_per_sample, estimated_duration, benchmark, warmup_time, warmup_iterations };
+ }
+
+ template <typename Clock>
+ std::vector<FloatDuration<Clock>> run(const IConfig &cfg, Environment<FloatDuration<Clock>> env) const {
+ // warmup a bit
+ Detail::run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(warmup_time), warmup_iterations, Detail::repeat(now<Clock>{}));
+
+ std::vector<FloatDuration<Clock>> times;
+ times.reserve(cfg.benchmarkSamples());
+ std::generate_n(std::back_inserter(times), cfg.benchmarkSamples(), [this, env] {
+ Detail::ChronometerModel<Clock> model;
+ this->benchmark(Chronometer(model, iterations_per_sample));
+ auto sample_time = model.elapsed() - env.clock_cost.mean;
+ if (sample_time < FloatDuration<Clock>::zero()) sample_time = FloatDuration<Clock>::zero();
+ return sample_time / iterations_per_sample;
+ });
+ return times;
+ }
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_execution_plan.hpp
+// start catch_estimate_clock.hpp
+
+ // Environment measurement
+
+
+// start catch_stats.hpp
+
+// Statistical analysis tools
+
+
+#include <algorithm>
+#include <functional>
+#include <vector>
+#include <iterator>
+#include <numeric>
+#include <tuple>
+#include <cmath>
+#include <utility>
+#include <cstddef>
+#include <random>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ using sample = std::vector<double>;
+
+ double weighted_average_quantile(int k, int q, std::vector<double>::iterator first, std::vector<double>::iterator last);
+
+ template <typename Iterator>
+ OutlierClassification classify_outliers(Iterator first, Iterator last) {
+ std::vector<double> copy(first, last);
+
+ auto q1 = weighted_average_quantile(1, 4, copy.begin(), copy.end());
+ auto q3 = weighted_average_quantile(3, 4, copy.begin(), copy.end());
+ auto iqr = q3 - q1;
+ auto los = q1 - (iqr * 3.);
+ auto lom = q1 - (iqr * 1.5);
+ auto him = q3 + (iqr * 1.5);
+ auto his = q3 + (iqr * 3.);
+
+ OutlierClassification o;
+ for (; first != last; ++first) {
+ auto&& t = *first;
+ if (t < los) ++o.low_severe;
+ else if (t < lom) ++o.low_mild;
+ else if (t > his) ++o.high_severe;
+ else if (t > him) ++o.high_mild;
+ ++o.samples_seen;
+ }
+ return o;
+ }
+
+ template <typename Iterator>
+ double mean(Iterator first, Iterator last) {
+ auto count = last - first;
+ double sum = std::accumulate(first, last, 0.);
+ return sum / count;
+ }
+
+ template <typename URng, typename Iterator, typename Estimator>
+ sample resample(URng& rng, int resamples, Iterator first, Iterator last, Estimator& estimator) {
+ auto n = last - first;
+ std::uniform_int_distribution<decltype(n)> dist(0, n - 1);
+
+ sample out;
+ out.reserve(resamples);
+ std::generate_n(std::back_inserter(out), resamples, [n, first, &estimator, &dist, &rng] {
+ std::vector<double> resampled;
+ resampled.reserve(n);
+ std::generate_n(std::back_inserter(resampled), n, [first, &dist, &rng] { return first[dist(rng)]; });
+ return estimator(resampled.begin(), resampled.end());
+ });
+ std::sort(out.begin(), out.end());
+ return out;
+ }
+
+ template <typename Estimator, typename Iterator>
+ sample jackknife(Estimator&& estimator, Iterator first, Iterator last) {
+ auto n = last - first;
+ auto second = std::next(first);
+ sample results;
+ results.reserve(n);
+
+ for (auto it = first; it != last; ++it) {
+ std::iter_swap(it, first);
+ results.push_back(estimator(second, last));
+ }
+
+ return results;
+ }
+
+ inline double normal_cdf(double x) {
+ return std::erfc(-x / std::sqrt(2.0)) / 2.0;
+ }
+
+ double erfc_inv(double x);
+
+ double normal_quantile(double p);
+
+ template <typename Iterator, typename Estimator>
+ Estimate<double> bootstrap(double confidence_level, Iterator first, Iterator last, sample const& resample, Estimator&& estimator) {
+ auto n_samples = last - first;
+
+ double point = estimator(first, last);
+ // Degenerate case with a single sample
+ if (n_samples == 1) return { point, point, point, confidence_level };
+
+ sample jack = jackknife(estimator, first, last);
+ double jack_mean = mean(jack.begin(), jack.end());
+ double sum_squares, sum_cubes;
+ std::tie(sum_squares, sum_cubes) = std::accumulate(jack.begin(), jack.end(), std::make_pair(0., 0.), [jack_mean](std::pair<double, double> sqcb, double x) -> std::pair<double, double> {
+ auto d = jack_mean - x;
+ auto d2 = d * d;
+ auto d3 = d2 * d;
+ return { sqcb.first + d2, sqcb.second + d3 };
+ });
+
+ double accel = sum_cubes / (6 * std::pow(sum_squares, 1.5));
+ int n = static_cast<int>(resample.size());
+ double prob_n = std::count_if(resample.begin(), resample.end(), [point](double x) { return x < point; }) / (double)n;
+ // degenerate case with uniform samples
+ if (prob_n == 0) return { point, point, point, confidence_level };
+
+ double bias = normal_quantile(prob_n);
+ double z1 = normal_quantile((1. - confidence_level) / 2.);
+
+ auto cumn = [n](double x) -> int {
+ return std::lround(normal_cdf(x) * n); };
+ auto a = [bias, accel](double b) { return bias + b / (1. - accel * b); };
+ double b1 = bias + z1;
+ double b2 = bias - z1;
+ double a1 = a(b1);
+ double a2 = a(b2);
+ auto lo = (std::max)(cumn(a1), 0);
+ auto hi = (std::min)(cumn(a2), n - 1);
+
+ return { point, resample[lo], resample[hi], confidence_level };
+ }
+
+ double outlier_variance(Estimate<double> mean, Estimate<double> stddev, int n);
+
+ struct bootstrap_analysis {
+ Estimate<double> mean;
+ Estimate<double> standard_deviation;
+ double outlier_variance;
+ };
+
+ bootstrap_analysis analyse_samples(double confidence_level, int n_resamples, std::vector<double>::iterator first, std::vector<double>::iterator last);
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_stats.hpp
+#include <algorithm>
+#include <iterator>
+#include <tuple>
+#include <vector>
+#include <cmath>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Clock>
+ std::vector<double> resolution(int k) {
+ std::vector<TimePoint<Clock>> times;
+ times.reserve(k + 1);
+ std::generate_n(std::back_inserter(times), k + 1, now<Clock>{});
+
+ std::vector<double> deltas;
+ deltas.reserve(k);
+ std::transform(std::next(times.begin()), times.end(), times.begin(),
+ std::back_inserter(deltas),
+ [](TimePoint<Clock> a, TimePoint<Clock> b) { return static_cast<double>((a - b).count()); });
+
+ return deltas;
+ }
+
+ const auto warmup_iterations = 10000;
+ const auto warmup_time = std::chrono::milliseconds(100);
+ const auto minimum_ticks = 1000;
+ const auto warmup_seed = 10000;
+ const auto clock_resolution_estimation_time = std::chrono::milliseconds(500);
+ const auto clock_cost_estimation_time_limit = std::chrono::seconds(1);
+ const auto clock_cost_estimation_tick_limit = 100000;
+ const auto clock_cost_estimation_time = std::chrono::milliseconds(10);
+ const auto clock_cost_estimation_iterations = 10000;
+
+ template <typename Clock>
+ int warmup() {
+ return run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(warmup_time), warmup_seed, &resolution<Clock>)
+ .iterations;
+ }
+ template <typename Clock>
+ EnvironmentEstimate<FloatDuration<Clock>> estimate_clock_resolution(int iterations) {
+ auto r = run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(clock_resolution_estimation_time), iterations, &resolution<Clock>)
+ .result;
+ return {
+ FloatDuration<Clock>(mean(r.begin(), r.end())),
+ classify_outliers(r.begin(), r.end()),
+ };
+ }
+ template <typename Clock>
+ EnvironmentEstimate<FloatDuration<Clock>> estimate_clock_cost(FloatDuration<Clock> resolution) {
+ auto time_limit = (std::min)(
+ resolution * clock_cost_estimation_tick_limit,
+ FloatDuration<Clock>(clock_cost_estimation_time_limit));
+ auto time_clock = [](int k) {
+ return Detail::measure<Clock>([k] {
+ for (int i = 0; i < k; ++i) {
+ volatile auto ignored = Clock::now();
+ (void)ignored;
+ }
+ }).elapsed;
+ };
+ time_clock(1);
+ int iters = clock_cost_estimation_iterations;
+ auto&& r = run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(clock_cost_estimation_time), iters, time_clock);
+ std::vector<double> times;
+ int nsamples = static_cast<int>(std::ceil(time_limit / r.elapsed));
+ times.reserve(nsamples);
+ std::generate_n(std::back_inserter(times), nsamples, [time_clock, &r] {
+ return static_cast<double>((time_clock(r.iterations) / r.iterations).count());
+ });
+ return {
+ FloatDuration<Clock>(mean(times.begin(), times.end())),
+ classify_outliers(times.begin(), times.end()),
+ };
+ }
+
+ template <typename Clock>
+ Environment<FloatDuration<Clock>> measure_environment() {
+ static Environment<FloatDuration<Clock>>* env = nullptr;
+ if (env) {
+ return *env;
+ }
+
+ auto iters = Detail::warmup<Clock>();
+ auto resolution = Detail::estimate_clock_resolution<Clock>(iters);
+ auto cost = Detail::estimate_clock_cost<Clock>(resolution.mean);
+
+ env = new Environment<FloatDuration<Clock>>{ resolution, cost };
+ return *env;
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_estimate_clock.hpp
+// start catch_analyse.hpp
+
+ // Run and analyse one benchmark
+
+
+// start catch_sample_analysis.hpp
+
+// Benchmark results
+
+
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <iterator>
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration>
+ struct SampleAnalysis {
+ std::vector<Duration> samples;
+ Estimate<Duration> mean;
+ Estimate<Duration> standard_deviation;
+ OutlierClassification outliers;
+ double outlier_variance;
+
+ template <typename Duration2>
+ operator SampleAnalysis<Duration2>() const {
+ std::vector<Duration2> samples2;
+ samples2.reserve(samples.size());
+ std::transform(samples.begin(), samples.end(), std::back_inserter(samples2), [](Duration d) { return Duration2(d); });
+ return {
+ std::move(samples2),
+ mean,
+ standard_deviation,
+ outliers,
+ outlier_variance,
+ };
+ }
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_sample_analysis.hpp
+#include <algorithm>
+#include <iterator>
+#include <vector>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Duration, typename Iterator>
+ SampleAnalysis<Duration> analyse(const IConfig &cfg, Environment<Duration>, Iterator first, Iterator last) {
+ if (!cfg.benchmarkNoAnalysis()) {
+ std::vector<double> samples;
+ samples.reserve(last - first);
+ std::transform(first, last, std::back_inserter(samples), [](Duration d) { return d.count(); });
+
+ auto analysis = Catch::Benchmark::Detail::analyse_samples(cfg.benchmarkConfidenceInterval(), cfg.benchmarkResamples(), samples.begin(), samples.end());
+ auto outliers = Catch::Benchmark::Detail::classify_outliers(samples.begin(), samples.end());
+
+ auto wrap_estimate = [](Estimate<double> e) {
+ return Estimate<Duration> {
+ Duration(e.point),
+ Duration(e.lower_bound),
+ Duration(e.upper_bound),
+ e.confidence_interval,
+ };
+ };
+ std::vector<Duration> samples2;
+ samples2.reserve(samples.size());
+ std::transform(samples.begin(), samples.end(), std::back_inserter(samples2), [](double d) { return Duration(d); });
+ return {
+ std::move(samples2),
+ wrap_estimate(analysis.mean),
+ wrap_estimate(analysis.standard_deviation),
+ outliers,
+ analysis.outlier_variance,
+ };
+ } else {
+ std::vector<Duration> samples;
+ samples.reserve(last - first);
+
+ Duration mean = Duration(0);
+ int i = 0;
+ for (auto it = first; it < last; ++it, ++i) {
+ samples.push_back(Duration(*it));
+ mean += Duration(*it);
+ }
+ mean /= i;
+
+ return {
+ std::move(samples),
+ Estimate<Duration>{mean, mean, mean, 0.0},
+ Estimate<Duration>{Duration(0), Duration(0), Duration(0), 0.0},
+ OutlierClassification{},
+ 0.0
+ };
+ }
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_analyse.hpp
+#include <algorithm>
+#include <functional>
+#include <string>
+#include <vector>
+#include <cmath>
+
+namespace Catch {
+ namespace Benchmark {
+ struct Benchmark {
+ Benchmark(std::string &&name)
+ : name(std::move(name)) {}
+
+ template <class FUN>
+ Benchmark(std::string &&name, FUN &&func)
+ : fun(std::move(func)), name(std::move(name)) {}
+
+ template <typename Clock>
+ ExecutionPlan<FloatDuration<Clock>> prepare(const IConfig &cfg, Environment<FloatDuration<Clock>> env) const {
+ auto min_time = env.clock_resolution.mean * Detail::minimum_ticks;
+ auto run_time = std::max(min_time, std::chrono::duration_cast<decltype(min_time)>(cfg.benchmarkWarmupTime()));
+ auto&& test = Detail::run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(run_time), 1, fun);
+ int new_iters = static_cast<int>(std::ceil(min_time * test.iterations / test.elapsed));
+ return { new_iters, test.elapsed / test.iterations * new_iters * cfg.benchmarkSamples(), fun, std::chrono::duration_cast<FloatDuration<Clock>>(cfg.benchmarkWarmupTime()), Detail::warmup_iterations };
+ }
+
+ template <typename Clock = default_clock>
+ void run() {
+ IConfigPtr cfg = getCurrentContext().getConfig();
+
+ auto env = Detail::measure_environment<Clock>();
+
+ getResultCapture().benchmarkPreparing(name);
+ CATCH_TRY{
+ auto plan = user_code([&] {
+ return prepare<Clock>(*cfg, env);
+ });
+
+ BenchmarkInfo info {
+ name,
+ plan.estimated_duration.count(),
+ plan.iterations_per_sample,
+ cfg->benchmarkSamples(),
+ cfg->benchmarkResamples(),
+ env.clock_resolution.mean.count(),
+ env.clock_cost.mean.count()
+ };
+
+ getResultCapture().benchmarkStarting(info);
+
+ auto samples = user_code([&] {
+ return plan.template run<Clock>(*cfg, env);
+ });
+
+ auto analysis = Detail::analyse(*cfg, env, samples.begin(), samples.end());
+ BenchmarkStats<FloatDuration<Clock>> stats{ info, analysis.samples, analysis.mean, analysis.standard_deviation, analysis.outliers, analysis.outlier_variance };
+ getResultCapture().benchmarkEnded(stats);
+
+ } CATCH_CATCH_ALL{
+ if (translateActiveException() != Detail::benchmarkErrorMsg) // benchmark errors have been reported, otherwise rethrow.
+ std::rethrow_exception(std::current_exception());
+ }
+ }
+
+ // sets lambda to be used in fun *and* executes benchmark!
+ template <typename Fun,
+ typename std::enable_if<!Detail::is_related<Fun, Benchmark>::value, int>::type = 0>
+ Benchmark & operator=(Fun func) {
+ fun = Detail::BenchmarkFunction(func);
+ run();
+ return *this;
+ }
+
+ explicit operator bool() {
+ return true;
+ }
+
+ private:
+ Detail::BenchmarkFunction fun;
+ std::string name;
+ };
+ }
+} // namespace Catch
+
+#define INTERNAL_CATCH_GET_1_ARG(arg1, arg2, ...) arg1
+#define INTERNAL_CATCH_GET_2_ARG(arg1, arg2, ...) arg2
+
+#define INTERNAL_CATCH_BENCHMARK(BenchmarkName, name, benchmarkIndex)\
+ if( Catch::Benchmark::Benchmark BenchmarkName{name} ) \
+ BenchmarkName = [&](int benchmarkIndex)
+
+#define INTERNAL_CATCH_BENCHMARK_ADVANCED(BenchmarkName, name)\
+ if( Catch::Benchmark::Benchmark BenchmarkName{name} ) \
+ BenchmarkName = [&]
+
+// end catch_benchmark.hpp
+// start catch_constructor.hpp
+
+// Constructor and destructor helpers
+
+
+#include <type_traits>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename T, bool Destruct>
+ struct ObjectStorage
+ {
+ using TStorage = typename std::aligned_storage<sizeof(T), std::alignment_of<T>::value>::type;
+
+ ObjectStorage() : data() {}
+
+ ObjectStorage(const ObjectStorage& other)
+ {
+ new(&data) T(other.stored_object());
+ }
+
+ ObjectStorage(ObjectStorage&& other)
+ {
+ new(&data) T(std::move(other.stored_object()));
+ }
+
+ ~ObjectStorage() { destruct_on_exit<T>(); }
+
+ template <typename... Args>
+ void construct(Args&&... args)
+ {
+ new (&data) T(std::forward<Args>(args)...);
+ }
+
+ template <bool AllowManualDestruction = !Destruct>
+ typename std::enable_if<AllowManualDestruction>::type destruct()
+ {
+ stored_object().~T();
+ }
+
+ private:
+ // If this is a constructor benchmark, destruct the underlying object
+ template <typename U>
+ void destruct_on_exit(typename std::enable_if<Destruct, U>::type* = 0) { destruct<true>(); }
+ // Otherwise, don't
+ template <typename U>
+ void destruct_on_exit(typename std::enable_if<!Destruct, U>::type* = 0) { }
+
+ T& stored_object() {
+ return *static_cast<T*>(static_cast<void*>(&data));
+ }
+
+ T const& stored_object() const {
+ return *static_cast<T*>(static_cast<void*>(&data));
+ }
+
+ TStorage data;
+ };
+ }
+
+ template <typename T>
+ using storage_for = Detail::ObjectStorage<T, true>;
+
+ template <typename T>
+ using destructable_object = Detail::ObjectStorage<T, false>;
+ }
+}
+
+// end catch_constructor.hpp
+// end catch_benchmarking_all.hpp
+#endif
+
+#endif // ! CATCH_CONFIG_IMPL_ONLY
+
+#ifdef CATCH_IMPL
+// start catch_impl.hpp
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wweak-vtables"
+#endif
+
+// Keep these here for external reporters
+// start catch_test_case_tracker.h
+
+#include <string>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+namespace TestCaseTracking {
+
+ struct NameAndLocation {
+ std::string name;
+ SourceLineInfo location;
+
+ NameAndLocation( std::string const& _name, SourceLineInfo const& _location );
+ friend bool operator==(NameAndLocation const& lhs, NameAndLocation const& rhs) {
+ return lhs.name == rhs.name
+ && lhs.location == rhs.location;
+ }
+ };
+
+ class ITracker;
+
+ using ITrackerPtr = std::shared_ptr<ITracker>;
+
+ class ITracker {
+ NameAndLocation m_nameAndLocation;
+
+ public:
+ ITracker(NameAndLocation const& nameAndLoc) :
+ m_nameAndLocation(nameAndLoc)
+ {}
+
+ // static queries
+ NameAndLocation const& nameAndLocation() const {
+ return m_nameAndLocation;
+ }
+
+ virtual ~ITracker();
+
+ // dynamic queries
+ virtual bool isComplete() const = 0; // Successfully completed or failed
+ virtual bool isSuccessfullyCompleted() const = 0;
+ virtual bool isOpen() const = 0; // Started but not complete
+ virtual bool hasChildren() const = 0;
+ virtual bool hasStarted() const = 0;
+
+ virtual ITracker& parent() = 0;
+
+ // actions
+ virtual void close() = 0; // Successfully complete
+ virtual void fail() = 0;
+ virtual void markAsNeedingAnotherRun() = 0;
+
+ virtual void addChild( ITrackerPtr const& child ) = 0;
+ virtual ITrackerPtr findChild( NameAndLocation const& nameAndLocation ) = 0;
+ virtual void openChild() = 0;
+
+ // Debug/ checking
+ virtual bool isSectionTracker() const = 0;
+ virtual bool isGeneratorTracker() const = 0;
+ };
+
+ class TrackerContext {
+
+ enum RunState {
+ NotStarted,
+ Executing,
+ CompletedCycle
+ };
+
+ ITrackerPtr m_rootTracker;
+ ITracker* m_currentTracker = nullptr;
+ RunState m_runState = NotStarted;
+
+ public:
+
+ ITracker& startRun();
+ void endRun();
+
+ void startCycle();
+ void completeCycle();
+
+ bool completedCycle() const;
+ ITracker& currentTracker();
+ void setCurrentTracker( ITracker* tracker );
+ };
+
+ class TrackerBase : public ITracker {
+ protected:
+ enum CycleState {
+ NotStarted,
+ Executing,
+ ExecutingChildren,
+ NeedsAnotherRun,
+ CompletedSuccessfully,
+ Failed
+ };
+
+ using Children = std::vector<ITrackerPtr>;
+ TrackerContext& m_ctx;
+ ITracker* m_parent;
+ Children m_children;
+ CycleState m_runState = NotStarted;
+
+ public:
+ TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent );
+
+ bool isComplete() const override;
+ bool isSuccessfullyCompleted() const override;
+ bool isOpen() const override;
+ bool hasChildren() const override;
+ bool hasStarted() const override {
+ return m_runState != NotStarted;
+ }
+
+ void addChild( ITrackerPtr const& child ) override;
+
+ ITrackerPtr findChild( NameAndLocation const& nameAndLocation ) override;
+ ITracker& parent() override;
+
+ void openChild() override;
+
+ bool isSectionTracker() const override;
+ bool isGeneratorTracker() const override;
+
+ void open();
+
+ void close() override;
+ void fail() override;
+ void markAsNeedingAnotherRun() override;
+
+ private:
+ void moveToParent();
+ void moveToThis();
+ };
+
+ class SectionTracker : public TrackerBase {
+ std::vector<std::string> m_filters;
+ std::string m_trimmed_name;
+ public:
+ SectionTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent );
+
+ bool isSectionTracker() const override;
+
+ bool isComplete() const override;
+
+ static SectionTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation );
+
+ void tryOpen();
+
+ void addInitialFilters( std::vector<std::string> const& filters );
+ void addNextFilters( std::vector<std::string> const& filters );
+ //! Returns filters active in this tracker
+ std::vector<std::string> const& getFilters() const;
+ //! Returns whitespace-trimmed name of the tracked section
+ std::string const& trimmedName() const;
+ };
+
+} // namespace TestCaseTracking
+
+using TestCaseTracking::ITracker;
+using TestCaseTracking::TrackerContext;
+using TestCaseTracking::SectionTracker;
+
+} // namespace Catch
+
+// end catch_test_case_tracker.h
+
+// start catch_leak_detector.h
+
+namespace Catch {
+
+ struct LeakDetector {
+ LeakDetector();
+ ~LeakDetector();
+ };
+
+}
+// end catch_leak_detector.h
+// Cpp files will be included in the single-header file here
+// start catch_stats.cpp
+
+// Statistical analysis tools
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+
+#include <cassert>
+#include <random>
+
+#if defined(CATCH_CONFIG_USE_ASYNC)
+#include <future>
+#endif
+
+namespace {
+ double erf_inv(double x) {
+ // Code accompanying the article "Approximating the erfinv function" in GPU Computing Gems, Volume 2
+ double w, p;
+
+ w = -log((1.0 - x) * (1.0 + x));
+
+ if (w < 6.250000) {
+ w = w - 3.125000;
+ p = -3.6444120640178196996e-21;
+ p = -1.685059138182016589e-19 + p * w;
+ p = 1.2858480715256400167e-18 + p * w;
+ p = 1.115787767802518096e-17 + p * w;
+ p = -1.333171662854620906e-16 + p * w;
+ p = 2.0972767875968561637e-17 + p * w;
+ p = 6.6376381343583238325e-15 + p * w;
+ p = -4.0545662729752068639e-14 + p * w;
+ p = -8.1519341976054721522e-14 + p * w;
+ p = 2.6335093153082322977e-12 + p * w;
+ p = -1.2975133253453532498e-11 + p * w;
+ p = -5.4154120542946279317e-11 + p * w;
+ p = 1.051212273321532285e-09 + p * w;
+ p = -4.1126339803469836976e-09 + p * w;
+ p = -2.9070369957882005086e-08 + p * w;
+ p = 4.2347877827932403518e-07 + p * w;
+ p = -1.3654692000834678645e-06 + p * w;
+ p = -1.3882523362786468719e-05 + p * w;
+ p = 0.0001867342080340571352 + p * w;
+ p = -0.00074070253416626697512 + p * w;
+ p = -0.0060336708714301490533 + p * w;
+ p = 0.24015818242558961693 + p * w;
+ p = 1.6536545626831027356 + p * w;
+ } else if (w < 16.000000) {
+ w = sqrt(w) - 3.250000;
+ p = 2.2137376921775787049e-09;
+ p = 9.0756561938885390979e-08 + p * w;
+ p = -2.7517406297064545428e-07 + p * w;
+ p = 1.8239629214389227755e-08 + p * w;
+ p = 1.5027403968909827627e-06 + p * w;
+ p = -4.013867526981545969e-06 + p * w;
+ p = 2.9234449089955446044e-06 + p * w;
+ p = 1.2475304481671778723e-05 + p * w;
+ p = -4.7318229009055733981e-05 + p * w;
+ p = 6.8284851459573175448e-05 + p * w;
+ p = 2.4031110387097893999e-05 + p * w;
+ p = -0.0003550375203628474796 + p * w;
+ p = 0.00095328937973738049703 + p * w;
+ p = -0.0016882755560235047313 + p * w;
+ p = 0.0024914420961078508066 + p * w;
+ p = -0.0037512085075692412107 + p * w;
+ p = 0.005370914553590063617 + p * w;
+ p = 1.0052589676941592334 + p * w;
+ p = 3.0838856104922207635 + p * w;
+ } else {
+ w = sqrt(w) - 5.000000;
+ p = -2.7109920616438573243e-11;
+ p = -2.5556418169965252055e-10 + p * w;
+ p = 1.5076572693500548083e-09 + p * w;
+ p = -3.7894654401267369937e-09 + p * w;
+ p = 7.6157012080783393804e-09 + p * w;
+ p = -1.4960026627149240478e-08 + p * w;
+ p = 2.9147953450901080826e-08 + p * w;
+ p = -6.7711997758452339498e-08 + p * w;
+ p = 2.2900482228026654717e-07 + p * w;
+ p = -9.9298272942317002539e-07 + p * w;
+ p = 4.5260625972231537039e-06 + p * w;
+ p = -1.9681778105531670567e-05 + p * w;
+ p = 7.5995277030017761139e-05 + p * w;
+ p = -0.00021503011930044477347 + p * w;
+ p = -0.00013871931833623122026 + p * w;
+ p = 1.0103004648645343977 + p * w;
+ p = 4.8499064014085844221 + p * w;
+ }
+ return p * x;
+ }
+
+ double standard_deviation(std::vector<double>::iterator first, std::vector<double>::iterator last) {
+ auto m = Catch::Benchmark::Detail::mean(first, last);
+ double variance = std::accumulate(first, last, 0., [m](double a, double b) {
+ double diff = b - m;
+ return a + diff * diff;
+ }) / (last - first);
+ return std::sqrt(variance);
+ }
+
+}
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+
+ double weighted_average_quantile(int k, int q, std::vector<double>::iterator first, std::vector<double>::iterator last) {
+ auto count = last - first;
+ double idx = (count - 1) * k / static_cast<double>(q);
+ int j = static_cast<int>(idx);
+ double g = idx - j;
+ std::nth_element(first, first + j, last);
+ auto xj = first[j];
+ if (g == 0) return xj;
+
+ auto xj1 = *std::min_element(first + (j + 1), last);
+ return xj + g * (xj1 - xj);
+ }
+
+ double erfc_inv(double x) {
+ return erf_inv(1.0 - x);
+ }
+
+ double normal_quantile(double p) {
+ static const double ROOT_TWO = std::sqrt(2.0);
+
+ double result = 0.0;
+ assert(p >= 0 && p <= 1);
+ if (p < 0 || p > 1) {
+ return result;
+ }
+
+ result = -erfc_inv(2.0 * p);
+ // result *= normal distribution standard deviation (1.0) * sqrt(2)
+ result *= /*sd * */ ROOT_TWO;
+ // result += normal disttribution mean (0)
+ return result;
+ }
+
+ double outlier_variance(Estimate<double> mean, Estimate<double> stddev, int n) {
+ double sb = stddev.point;
+ double mn = mean.point / n;
+ double mg_min = mn / 2.;
+ double sg = (std::min)(mg_min / 4., sb / std::sqrt(n));
+ double sg2 = sg * sg;
+ double sb2 = sb * sb;
+
+ auto c_max = [n, mn, sb2, sg2](double x) -> double {
+ double k = mn - x;
+ double d = k * k;
+ double nd = n * d;
+ double k0 = -n * nd;
+ double k1 = sb2 - n * sg2 + nd;
+ double det = k1 * k1 - 4 * sg2 * k0;
+ return (int)(-2. * k0 / (k1 + std::sqrt(det)));
+ };
+
+ auto var_out = [n, sb2, sg2](double c) {
+ double nc = n - c;
+ return (nc / n) * (sb2 - nc * sg2);
+ };
+
+ return (std::min)(var_out(1), var_out((std::min)(c_max(0.), c_max(mg_min)))) / sb2;
+ }
+
+ bootstrap_analysis analyse_samples(double confidence_level, int n_resamples, std::vector<double>::iterator first, std::vector<double>::iterator last) {
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS
+ static std::random_device entropy;
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+ auto n = static_cast<int>(last - first); // seriously, one can't use integral types without hell in C++
+
+ auto mean = &Detail::mean<std::vector<double>::iterator>;
+ auto stddev = &standard_deviation;
+
+#if defined(CATCH_CONFIG_USE_ASYNC)
+ auto Estimate = [=](double(*f)(std::vector<double>::iterator, std::vector<double>::iterator)) {
+ auto seed = entropy();
+ return std::async(std::launch::async, [=] {
+ std::mt19937 rng(seed);
+ auto resampled = resample(rng, n_resamples, first, last, f);
+ return bootstrap(confidence_level, first, last, resampled, f);
+ });
+ };
+
+ auto mean_future = Estimate(mean);
+ auto stddev_future = Estimate(stddev);
+
+ auto mean_estimate = mean_future.get();
+ auto stddev_estimate = stddev_future.get();
+#else
+ auto Estimate = [=](double(*f)(std::vector<double>::iterator, std::vector<double>::iterator)) {
+ auto seed = entropy();
+ std::mt19937 rng(seed);
+ auto resampled = resample(rng, n_resamples, first, last, f);
+ return bootstrap(confidence_level, first, last, resampled, f);
+ };
+
+ auto mean_estimate = Estimate(mean);
+ auto stddev_estimate = Estimate(stddev);
+#endif // CATCH_USE_ASYNC
+
+ double outlier_variance = Detail::outlier_variance(mean_estimate, stddev_estimate, n);
+
+ return { mean_estimate, stddev_estimate, outlier_variance };
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+// end catch_stats.cpp
+// start catch_approx.cpp
+
+#include <cmath>
+#include <limits>
+
+namespace {
+
+// Performs equivalent check of std::fabs(lhs - rhs) <= margin
+// But without the subtraction to allow for INFINITY in comparison
+bool marginComparison(double lhs, double rhs, double margin) {
+ return (lhs + margin >= rhs) && (rhs + margin >= lhs);
+}
+
+}
+
+namespace Catch {
+namespace Detail {
+
+ Approx::Approx ( double value )
+ : m_epsilon( std::numeric_limits<float>::epsilon()*100 ),
+ m_margin( 0.0 ),
+ m_scale( 0.0 ),
+ m_value( value )
+ {}
+
+ Approx Approx::custom() {
+ return Approx( 0 );
+ }
+
+ Approx Approx::operator-() const {
+ auto temp(*this);
+ temp.m_value = -temp.m_value;
+ return temp;
+ }
+
+ std::string Approx::toString() const {
+ ReusableStringStream rss;
+ rss << "Approx( " << ::Catch::Detail::stringify( m_value ) << " )";
+ return rss.str();
+ }
+
+ bool Approx::equalityComparisonImpl(const double other) const {
+ // First try with fixed margin, then compute margin based on epsilon, scale and Approx's value
+ // Thanks to Richard Harris for his help refining the scaled margin value
+ return marginComparison(m_value, other, m_margin)
+ || marginComparison(m_value, other, m_epsilon * (m_scale + std::fabs(std::isinf(m_value)? 0 : m_value)));
+ }
+
+ void Approx::setMargin(double newMargin) {
+ CATCH_ENFORCE(newMargin >= 0,
+ "Invalid Approx::margin: " << newMargin << '.'
+ << " Approx::Margin has to be non-negative.");
+ m_margin = newMargin;
+ }
+
+ void Approx::setEpsilon(double newEpsilon) {
+ CATCH_ENFORCE(newEpsilon >= 0 && newEpsilon <= 1.0,
+ "Invalid Approx::epsilon: " << newEpsilon << '.'
+ << " Approx::epsilon has to be in [0, 1]");
+ m_epsilon = newEpsilon;
+ }
+
+} // end namespace Detail
+
+namespace literals {
+ Detail::Approx operator "" _a(long double val) {
+ return Detail::Approx(val);
+ }
+ Detail::Approx operator "" _a(unsigned long long val) {
+ return Detail::Approx(val);
+ }
+} // end namespace literals
+
+std::string StringMaker<Catch::Detail::Approx>::convert(Catch::Detail::Approx const& value) {
+ return value.toString();
+}
+
+} // end namespace Catch
+// end catch_approx.cpp
+// start catch_assertionhandler.cpp
+
+// start catch_debugger.h
+
+namespace Catch {
+ bool isDebuggerActive();
+}
+
+#ifdef CATCH_PLATFORM_MAC
+
+ #if defined(__i386__) || defined(__x86_64__)
+ #define CATCH_TRAP() __asm__("int $3\n" : : ) /* NOLINT */
+ #elif defined(__aarch64__)
+ #define CATCH_TRAP() __asm__(".inst 0xd4200000")
+ #endif
+
+#elif defined(CATCH_PLATFORM_IPHONE)
+
+ // use inline assembler
+ #if defined(__i386__) || defined(__x86_64__)
+ #define CATCH_TRAP() __asm__("int $3")
+ #elif defined(__aarch64__)
+ #define CATCH_TRAP() __asm__(".inst 0xd4200000")
+ #elif defined(__arm__) && !defined(__thumb__)
+ #define CATCH_TRAP() __asm__(".inst 0xe7f001f0")
+ #elif defined(__arm__) && defined(__thumb__)
+ #define CATCH_TRAP() __asm__(".inst 0xde01")
+ #endif
+
+#elif defined(CATCH_PLATFORM_LINUX)
+ // If we can use inline assembler, do it because this allows us to break
+ // directly at the location of the failing check instead of breaking inside
+ // raise() called from it, i.e. one stack frame below.
+ #if defined(__GNUC__) && (defined(__i386) || defined(__x86_64))
+ #define CATCH_TRAP() asm volatile ("int $3") /* NOLINT */
+ #else // Fall back to the generic way.
+ #include <signal.h>
+
+ #define CATCH_TRAP() raise(SIGTRAP)
+ #endif
+#elif defined(_MSC_VER)
+ #define CATCH_TRAP() __debugbreak()
+#elif defined(__MINGW32__)
+ extern "C" __declspec(dllimport) void __stdcall DebugBreak();
+ #define CATCH_TRAP() DebugBreak()
+#endif
+
+#ifndef CATCH_BREAK_INTO_DEBUGGER
+ #ifdef CATCH_TRAP
+ #define CATCH_BREAK_INTO_DEBUGGER() []{ if( Catch::isDebuggerActive() ) { CATCH_TRAP(); } }()
+ #else
+ #define CATCH_BREAK_INTO_DEBUGGER() []{}()
+ #endif
+#endif
+
+// end catch_debugger.h
+// start catch_run_context.h
+
+// start catch_fatal_condition.h
+
+#include <cassert>
+
+namespace Catch {
+
+ // Wrapper for platform-specific fatal error (signals/SEH) handlers
+ //
+ // Tries to be cooperative with other handlers, and not step over
+ // other handlers. This means that unknown structured exceptions
+ // are passed on, previous signal handlers are called, and so on.
+ //
+ // Can only be instantiated once, and assumes that once a signal
+ // is caught, the binary will end up terminating. Thus, there
+ class FatalConditionHandler {
+ bool m_started = false;
+
+ // Install/disengage implementation for specific platform.
+ // Should be if-defed to work on current platform, can assume
+ // engage-disengage 1:1 pairing.
+ void engage_platform();
+ void disengage_platform();
+ public:
+ // Should also have platform-specific implementations as needed
+ FatalConditionHandler();
+ ~FatalConditionHandler();
+
+ void engage() {
+ assert(!m_started && "Handler cannot be installed twice.");
+ m_started = true;
+ engage_platform();
+ }
+
+ void disengage() {
+ assert(m_started && "Handler cannot be uninstalled without being installed first");
+ m_started = false;
+ disengage_platform();
+ }
+ };
+
+ //! Simple RAII guard for (dis)engaging the FatalConditionHandler
+ class FatalConditionHandlerGuard {
+ FatalConditionHandler* m_handler;
+ public:
+ FatalConditionHandlerGuard(FatalConditionHandler* handler):
+ m_handler(handler) {
+ m_handler->engage();
+ }
+ ~FatalConditionHandlerGuard() {
+ m_handler->disengage();
+ }
+ };
+
+} // end namespace Catch
+
+// end catch_fatal_condition.h
+#include <string>
+
+namespace Catch {
+
+ struct IMutableContext;
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class RunContext : public IResultCapture, public IRunner {
+
+ public:
+ RunContext( RunContext const& ) = delete;
+ RunContext& operator =( RunContext const& ) = delete;
+
+ explicit RunContext( IConfigPtr const& _config, IStreamingReporterPtr&& reporter );
+
+ ~RunContext() override;
+
+ void testGroupStarting( std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount );
+ void testGroupEnded( std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount );
+
+ Totals runTest(TestCase const& testCase);
+
+ IConfigPtr config() const;
+ IStreamingReporter& reporter() const;
+
+ public: // IResultCapture
+
+ // Assertion handlers
+ void handleExpr
+ ( AssertionInfo const& info,
+ ITransientExpression const& expr,
+ AssertionReaction& reaction ) override;
+ void handleMessage
+ ( AssertionInfo const& info,
+ ResultWas::OfType resultType,
+ StringRef const& message,
+ AssertionReaction& reaction ) override;
+ void handleUnexpectedExceptionNotThrown
+ ( AssertionInfo const& info,
+ AssertionReaction& reaction ) override;
+ void handleUnexpectedInflightException
+ ( AssertionInfo const& info,
+ std::string const& message,
+ AssertionReaction& reaction ) override;
+ void handleIncomplete
+ ( AssertionInfo const& info ) override;
+ void handleNonExpr
+ ( AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ AssertionReaction &reaction ) override;
+
+ bool sectionStarted( SectionInfo const& sectionInfo, Counts& assertions ) override;
+
+ void sectionEnded( SectionEndInfo const& endInfo ) override;
+ void sectionEndedEarly( SectionEndInfo const& endInfo ) override;
+
+ auto acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker& override;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void benchmarkPreparing( std::string const& name ) override;
+ void benchmarkStarting( BenchmarkInfo const& info ) override;
+ void benchmarkEnded( BenchmarkStats<> const& stats ) override;
+ void benchmarkFailed( std::string const& error ) override;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void pushScopedMessage( MessageInfo const& message ) override;
+ void popScopedMessage( MessageInfo const& message ) override;
+
+ void emplaceUnscopedMessage( MessageBuilder const& builder ) override;
+
+ std::string getCurrentTestName() const override;
+
+ const AssertionResult* getLastResult() const override;
+
+ void exceptionEarlyReported() override;
+
+ void handleFatalErrorCondition( StringRef message ) override;
+
+ bool lastAssertionPassed() override;
+
+ void assertionPassed() override;
+
+ public:
+ // !TBD We need to do this another way!
+ bool aborting() const final;
+
+ private:
+
+ void runCurrentTest( std::string& redirectedCout, std::string& redirectedCerr );
+ void invokeActiveTestCase();
+
+ void resetAssertionInfo();
+ bool testForMissingAssertions( Counts& assertions );
+
+ void assertionEnded( AssertionResult const& result );
+ void reportExpr
+ ( AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ ITransientExpression const *expr,
+ bool negated );
+
+ void populateReaction( AssertionReaction& reaction );
+
+ private:
+
+ void handleUnfinishedSections();
+
+ TestRunInfo m_runInfo;
+ IMutableContext& m_context;
+ TestCase const* m_activeTestCase = nullptr;
+ ITracker* m_testCaseTracker = nullptr;
+ Option<AssertionResult> m_lastResult;
+
+ IConfigPtr m_config;
+ Totals m_totals;
+ IStreamingReporterPtr m_reporter;
+ std::vector<MessageInfo> m_messages;
+ std::vector<ScopedMessage> m_messageScopes; /* Keeps owners of so-called unscoped messages. */
+ AssertionInfo m_lastAssertionInfo;
+ std::vector<SectionEndInfo> m_unfinishedSections;
+ std::vector<ITracker*> m_activeSections;
+ TrackerContext m_trackerContext;
+ FatalConditionHandler m_fatalConditionhandler;
+ bool m_lastAssertionPassed = false;
+ bool m_shouldReportUnexpected = true;
+ bool m_includeSuccessfulResults;
+ };
+
+ void seedRng(IConfig const& config);
+ unsigned int rngSeed();
+} // end namespace Catch
+
+// end catch_run_context.h
+namespace Catch {
+
+ namespace {
+ auto operator <<( std::ostream& os, ITransientExpression const& expr ) -> std::ostream& {
+ expr.streamReconstructedExpression( os );
+ return os;
+ }
+ }
+
+ LazyExpression::LazyExpression( bool isNegated )
+ : m_isNegated( isNegated )
+ {}
+
+ LazyExpression::LazyExpression( LazyExpression const& other ) : m_isNegated( other.m_isNegated ) {}
+
+ LazyExpression::operator bool() const {
+ return m_transientExpression != nullptr;
+ }
+
+ auto operator << ( std::ostream& os, LazyExpression const& lazyExpr ) -> std::ostream& {
+ if( lazyExpr.m_isNegated )
+ os << "!";
+
+ if( lazyExpr ) {
+ if( lazyExpr.m_isNegated && lazyExpr.m_transientExpression->isBinaryExpression() )
+ os << "(" << *lazyExpr.m_transientExpression << ")";
+ else
+ os << *lazyExpr.m_transientExpression;
+ }
+ else {
+ os << "{** error - unchecked empty expression requested **}";
+ }
+ return os;
+ }
+
+ AssertionHandler::AssertionHandler
+ ( StringRef const& macroName,
+ SourceLineInfo const& lineInfo,
+ StringRef capturedExpression,
+ ResultDisposition::Flags resultDisposition )
+ : m_assertionInfo{ macroName, lineInfo, capturedExpression, resultDisposition },
+ m_resultCapture( getResultCapture() )
+ {}
+
+ void AssertionHandler::handleExpr( ITransientExpression const& expr ) {
+ m_resultCapture.handleExpr( m_assertionInfo, expr, m_reaction );
+ }
+ void AssertionHandler::handleMessage(ResultWas::OfType resultType, StringRef const& message) {
+ m_resultCapture.handleMessage( m_assertionInfo, resultType, message, m_reaction );
+ }
+
+ auto AssertionHandler::allowThrows() const -> bool {
+ return getCurrentContext().getConfig()->allowThrows();
+ }
+
+ void AssertionHandler::complete() {
+ setCompleted();
+ if( m_reaction.shouldDebugBreak ) {
+
+ // If you find your debugger stopping you here then go one level up on the
+ // call-stack for the code that caused it (typically a failed assertion)
+
+ // (To go back to the test and change execution, jump over the throw, next)
+ CATCH_BREAK_INTO_DEBUGGER();
+ }
+ if (m_reaction.shouldThrow) {
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ throw Catch::TestFailureException();
+#else
+ CATCH_ERROR( "Test failure requires aborting test!" );
+#endif
+ }
+ }
+ void AssertionHandler::setCompleted() {
+ m_completed = true;
+ }
+
+ void AssertionHandler::handleUnexpectedInflightException() {
+ m_resultCapture.handleUnexpectedInflightException( m_assertionInfo, Catch::translateActiveException(), m_reaction );
+ }
+
+ void AssertionHandler::handleExceptionThrownAsExpected() {
+ m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction);
+ }
+ void AssertionHandler::handleExceptionNotThrownAsExpected() {
+ m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction);
+ }
+
+ void AssertionHandler::handleUnexpectedExceptionNotThrown() {
+ m_resultCapture.handleUnexpectedExceptionNotThrown( m_assertionInfo, m_reaction );
+ }
+
+ void AssertionHandler::handleThrowingCallSkipped() {
+ m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction);
+ }
+
+ // This is the overload that takes a string and infers the Equals matcher from it
+ // The more general overload, that takes any string matcher, is in catch_capture_matchers.cpp
+ void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef const& matcherString ) {
+ handleExceptionMatchExpr( handler, Matchers::Equals( str ), matcherString );
+ }
+
+} // namespace Catch
+// end catch_assertionhandler.cpp
+// start catch_assertionresult.cpp
+
+namespace Catch {
+ AssertionResultData::AssertionResultData(ResultWas::OfType _resultType, LazyExpression const & _lazyExpression):
+ lazyExpression(_lazyExpression),
+ resultType(_resultType) {}
+
+ std::string AssertionResultData::reconstructExpression() const {
+
+ if( reconstructedExpression.empty() ) {
+ if( lazyExpression ) {
+ ReusableStringStream rss;
+ rss << lazyExpression;
+ reconstructedExpression = rss.str();
+ }
+ }
+ return reconstructedExpression;
+ }
+
+ AssertionResult::AssertionResult( AssertionInfo const& info, AssertionResultData const& data )
+ : m_info( info ),
+ m_resultData( data )
+ {}
+
+ // Result was a success
+ bool AssertionResult::succeeded() const {
+ return Catch::isOk( m_resultData.resultType );
+ }
+
+ // Result was a success, or failure is suppressed
+ bool AssertionResult::isOk() const {
+ return Catch::isOk( m_resultData.resultType ) || shouldSuppressFailure( m_info.resultDisposition );
+ }
+
+ ResultWas::OfType AssertionResult::getResultType() const {
+ return m_resultData.resultType;
+ }
+
+ bool AssertionResult::hasExpression() const {
+ return !m_info.capturedExpression.empty();
+ }
+
+ bool AssertionResult::hasMessage() const {
+ return !m_resultData.message.empty();
+ }
+
+ std::string AssertionResult::getExpression() const {
+ // Possibly overallocating by 3 characters should be basically free
+ std::string expr; expr.reserve(m_info.capturedExpression.size() + 3);
+ if (isFalseTest(m_info.resultDisposition)) {
+ expr += "!(";
+ }
+ expr += m_info.capturedExpression;
+ if (isFalseTest(m_info.resultDisposition)) {
+ expr += ')';
+ }
+ return expr;
+ }
+
+ std::string AssertionResult::getExpressionInMacro() const {
+ std::string expr;
+ if( m_info.macroName.empty() )
+ expr = static_cast<std::string>(m_info.capturedExpression);
+ else {
+ expr.reserve( m_info.macroName.size() + m_info.capturedExpression.size() + 4 );
+ expr += m_info.macroName;
+ expr += "( ";
+ expr += m_info.capturedExpression;
+ expr += " )";
+ }
+ return expr;
+ }
+
+ bool AssertionResult::hasExpandedExpression() const {
+ return hasExpression() && getExpandedExpression() != getExpression();
+ }
+
+ std::string AssertionResult::getExpandedExpression() const {
+ std::string expr = m_resultData.reconstructExpression();
+ return expr.empty()
+ ? getExpression()
+ : expr;
+ }
+
+ std::string AssertionResult::getMessage() const {
+ return m_resultData.message;
+ }
+ SourceLineInfo AssertionResult::getSourceInfo() const {
+ return m_info.lineInfo;
+ }
+
+ StringRef AssertionResult::getTestMacroName() const {
+ return m_info.macroName;
+ }
+
+} // end namespace Catch
+// end catch_assertionresult.cpp
+// start catch_capture_matchers.cpp
+
+namespace Catch {
+
+ using StringMatcher = Matchers::Impl::MatcherBase<std::string>;
+
+ // This is the general overload that takes a any string matcher
+ // There is another overload, in catch_assertionhandler.h/.cpp, that only takes a string and infers
+ // the Equals matcher (so the header does not mention matchers)
+ void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef const& matcherString ) {
+ std::string exceptionMessage = Catch::translateActiveException();
+ MatchExpr<std::string, StringMatcher const&> expr( exceptionMessage, matcher, matcherString );
+ handler.handleExpr( expr );
+ }
+
+} // namespace Catch
+// end catch_capture_matchers.cpp
+// start catch_commandline.cpp
+
+// start catch_commandline.h
+
+// start catch_clara.h
+
+// Use Catch's value for console width (store Clara's off to the side, if present)
+#ifdef CLARA_CONFIG_CONSOLE_WIDTH
+#define CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
+#undef CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
+#endif
+#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH CATCH_CONFIG_CONSOLE_WIDTH-1
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wweak-vtables"
+#pragma clang diagnostic ignored "-Wexit-time-destructors"
+#pragma clang diagnostic ignored "-Wshadow"
+#endif
+
+// start clara.hpp
+// Copyright 2017 Two Blue Cubes Ltd. All rights reserved.
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See https://github.com/philsquared/Clara for more details
+
+// Clara v1.1.5
+
+
+#ifndef CATCH_CLARA_CONFIG_CONSOLE_WIDTH
+#define CATCH_CLARA_CONFIG_CONSOLE_WIDTH 80
+#endif
+
+#ifndef CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
+#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH CATCH_CLARA_CONFIG_CONSOLE_WIDTH
+#endif
+
+#ifndef CLARA_CONFIG_OPTIONAL_TYPE
+#ifdef __has_include
+#if __has_include(<optional>) && __cplusplus >= 201703L
+#include <optional>
+#define CLARA_CONFIG_OPTIONAL_TYPE std::optional
+#endif
+#endif
+#endif
+
+// ----------- #included from clara_textflow.hpp -----------
+
+// TextFlowCpp
+//
+// A single-header library for wrapping and laying out basic text, by Phil Nash
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// This project is hosted at https://github.com/philsquared/textflowcpp
+
+
+#include <cassert>
+#include <ostream>
+#include <sstream>
+#include <vector>
+
+#ifndef CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
+#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH 80
+#endif
+
+namespace Catch {
+namespace clara {
+namespace TextFlow {
+
+inline auto isWhitespace(char c) -> bool {
+ static std::string chars = " \t\n\r";
+ return chars.find(c) != std::string::npos;
+}
+inline auto isBreakableBefore(char c) -> bool {
+ static std::string chars = "[({<|";
+ return chars.find(c) != std::string::npos;
+}
+inline auto isBreakableAfter(char c) -> bool {
+ static std::string chars = "])}>.,:;*+-=&/\\";
+ return chars.find(c) != std::string::npos;
+}
+
+class Columns;
+
+class Column {
+ std::vector<std::string> m_strings;
+ size_t m_width = CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH;
+ size_t m_indent = 0;
+ size_t m_initialIndent = std::string::npos;
+
+public:
+ class iterator {
+ friend Column;
+
+ Column const& m_column;
+ size_t m_stringIndex = 0;
+ size_t m_pos = 0;
+
+ size_t m_len = 0;
+ size_t m_end = 0;
+ bool m_suffix = false;
+
+ iterator(Column const& column, size_t stringIndex)
+ : m_column(column),
+ m_stringIndex(stringIndex) {}
+
+ auto line() const -> std::string const& { return m_column.m_strings[m_stringIndex]; }
+
+ auto isBoundary(size_t at) const -> bool {
+ assert(at > 0);
+ assert(at <= line().size());
+
+ return at == line().size() ||
+ (isWhitespace(line()[at]) && !isWhitespace(line()[at - 1])) ||
+ isBreakableBefore(line()[at]) ||
+ isBreakableAfter(line()[at - 1]);
+ }
+
+ void calcLength() {
+ assert(m_stringIndex < m_column.m_strings.size());
+
+ m_suffix = false;
+ auto width = m_column.m_width - indent();
+ m_end = m_pos;
+ if (line()[m_pos] == '\n') {
+ ++m_end;
+ }
+ while (m_end < line().size() && line()[m_end] != '\n')
+ ++m_end;
+
+ if (m_end < m_pos + width) {
+ m_len = m_end - m_pos;
+ } else {
+ size_t len = width;
+ while (len > 0 && !isBoundary(m_pos + len))
+ --len;
+ while (len > 0 && isWhitespace(line()[m_pos + len - 1]))
+ --len;
+
+ if (len > 0) {
+ m_len = len;
+ } else {
+ m_suffix = true;
+ m_len = width - 1;
+ }
+ }
+ }
+
+ auto indent() const -> size_t {
+ auto initial = m_pos == 0 && m_stringIndex == 0 ? m_column.m_initialIndent : std::string::npos;
+ return initial == std::string::npos ? m_column.m_indent : initial;
+ }
+
+ auto addIndentAndSuffix(std::string const &plain) const -> std::string {
+ return std::string(indent(), ' ') + (m_suffix ? plain + "-" : plain);
+ }
+
+ public:
+ using difference_type = std::ptrdiff_t;
+ using value_type = std::string;
+ using pointer = value_type * ;
+ using reference = value_type & ;
+ using iterator_category = std::forward_iterator_tag;
+
+ explicit iterator(Column const& column) : m_column(column) {
+ assert(m_column.m_width > m_column.m_indent);
+ assert(m_column.m_initialIndent == std::string::npos || m_column.m_width > m_column.m_initialIndent);
+ calcLength();
+ if (m_len == 0)
+ m_stringIndex++; // Empty string
+ }
+
+ auto operator *() const -> std::string {
+ assert(m_stringIndex < m_column.m_strings.size());
+ assert(m_pos <= m_end);
+ return addIndentAndSuffix(line().substr(m_pos, m_len));
+ }
+
+ auto operator ++() -> iterator& {
+ m_pos += m_len;
+ if (m_pos < line().size() && line()[m_pos] == '\n')
+ m_pos += 1;
+ else
+ while (m_pos < line().size() && isWhitespace(line()[m_pos]))
+ ++m_pos;
+
+ if (m_pos == line().size()) {
+ m_pos = 0;
+ ++m_stringIndex;
+ }
+ if (m_stringIndex < m_column.m_strings.size())
+ calcLength();
+ return *this;
+ }
+ auto operator ++(int) -> iterator {
+ iterator prev(*this);
+ operator++();
+ return prev;
+ }
+
+ auto operator ==(iterator const& other) const -> bool {
+ return
+ m_pos == other.m_pos &&
+ m_stringIndex == other.m_stringIndex &&
+ &m_column == &other.m_column;
+ }
+ auto operator !=(iterator const& other) const -> bool {
+ return !operator==(other);
+ }
+ };
+ using const_iterator = iterator;
+
+ explicit Column(std::string const& text) { m_strings.push_back(text); }
+
+ auto width(size_t newWidth) -> Column& {
+ assert(newWidth > 0);
+ m_width = newWidth;
+ return *this;
+ }
+ auto indent(size_t newIndent) -> Column& {
+ m_indent = newIndent;
+ return *this;
+ }
+ auto initialIndent(size_t newIndent) -> Column& {
+ m_initialIndent = newIndent;
+ return *this;
+ }
+
+ auto width() const -> size_t { return m_width; }
+ auto begin() const -> iterator { return iterator(*this); }
+ auto end() const -> iterator { return { *this, m_strings.size() }; }
+
+ inline friend std::ostream& operator << (std::ostream& os, Column const& col) {
+ bool first = true;
+ for (auto line : col) {
+ if (first)
+ first = false;
+ else
+ os << "\n";
+ os << line;
+ }
+ return os;
+ }
+
+ auto operator + (Column const& other)->Columns;
+
+ auto toString() const -> std::string {
+ std::ostringstream oss;
+ oss << *this;
+ return oss.str();
+ }
+};
+
+class Spacer : public Column {
+
+public:
+ explicit Spacer(size_t spaceWidth) : Column("") {
+ width(spaceWidth);
+ }
+};
+
+class Columns {
+ std::vector<Column> m_columns;
+
+public:
+
+ class iterator {
+ friend Columns;
+ struct EndTag {};
+
+ std::vector<Column> const& m_columns;
+ std::vector<Column::iterator> m_iterators;
+ size_t m_activeIterators;
+
+ iterator(Columns const& columns, EndTag)
+ : m_columns(columns.m_columns),
+ m_activeIterators(0) {
+ m_iterators.reserve(m_columns.size());
+
+ for (auto const& col : m_columns)
+ m_iterators.push_back(col.end());
+ }
+
+ public:
+ using difference_type = std::ptrdiff_t;
+ using value_type = std::string;
+ using pointer = value_type * ;
+ using reference = value_type & ;
+ using iterator_category = std::forward_iterator_tag;
+
+ explicit iterator(Columns const& columns)
+ : m_columns(columns.m_columns),
+ m_activeIterators(m_columns.size()) {
+ m_iterators.reserve(m_columns.size());
+
+ for (auto const& col : m_columns)
+ m_iterators.push_back(col.begin());
+ }
+
+ auto operator ==(iterator const& other) const -> bool {
+ return m_iterators == other.m_iterators;
+ }
+ auto operator !=(iterator const& other) const -> bool {
+ return m_iterators != other.m_iterators;
+ }
+ auto operator *() const -> std::string {
+ std::string row, padding;
+
+ for (size_t i = 0; i < m_columns.size(); ++i) {
+ auto width = m_columns[i].width();
+ if (m_iterators[i] != m_columns[i].end()) {
+ std::string col = *m_iterators[i];
+ row += padding + col;
+ if (col.size() < width)
+ padding = std::string(width - col.size(), ' ');
+ else
+ padding = "";
+ } else {
+ padding += std::string(width, ' ');
+ }
+ }
+ return row;
+ }
+ auto operator ++() -> iterator& {
+ for (size_t i = 0; i < m_columns.size(); ++i) {
+ if (m_iterators[i] != m_columns[i].end())
+ ++m_iterators[i];
+ }
+ return *this;
+ }
+ auto operator ++(int) -> iterator {
+ iterator prev(*this);
+ operator++();
+ return prev;
+ }
+ };
+ using const_iterator = iterator;
+
+ auto begin() const -> iterator { return iterator(*this); }
+ auto end() const -> iterator { return { *this, iterator::EndTag() }; }
+
+ auto operator += (Column const& col) -> Columns& {
+ m_columns.push_back(col);
+ return *this;
+ }
+ auto operator + (Column const& col) -> Columns {
+ Columns combined = *this;
+ combined += col;
+ return combined;
+ }
+
+ inline friend std::ostream& operator << (std::ostream& os, Columns const& cols) {
+
+ bool first = true;
+ for (auto line : cols) {
+ if (first)
+ first = false;
+ else
+ os << "\n";
+ os << line;
+ }
+ return os;
+ }
+
+ auto toString() const -> std::string {
+ std::ostringstream oss;
+ oss << *this;
+ return oss.str();
+ }
+};
+
+inline auto Column::operator + (Column const& other) -> Columns {
+ Columns cols;
+ cols += *this;
+ cols += other;
+ return cols;
+}
+}
+
+}
+}
+
+// ----------- end of #include from clara_textflow.hpp -----------
+// ........... back in clara.hpp
+
+#include <cctype>
+#include <string>
+#include <memory>
+#include <set>
+#include <algorithm>
+
+#if !defined(CATCH_PLATFORM_WINDOWS) && ( defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) )
+#define CATCH_PLATFORM_WINDOWS
+#endif
+
+namespace Catch { namespace clara {
+namespace detail {
+
+ // Traits for extracting arg and return type of lambdas (for single argument lambdas)
+ template<typename L>
+ struct UnaryLambdaTraits : UnaryLambdaTraits<decltype( &L::operator() )> {};
+
+ template<typename ClassT, typename ReturnT, typename... Args>
+ struct UnaryLambdaTraits<ReturnT( ClassT::* )( Args... ) const> {
+ static const bool isValid = false;
+ };
+
+ template<typename ClassT, typename ReturnT, typename ArgT>
+ struct UnaryLambdaTraits<ReturnT( ClassT::* )( ArgT ) const> {
+ static const bool isValid = true;
+ using ArgType = typename std::remove_const<typename std::remove_reference<ArgT>::type>::type;
+ using ReturnType = ReturnT;
+ };
+
+ class TokenStream;
+
+ // Transport for raw args (copied from main args, or supplied via init list for testing)
+ class Args {
+ friend TokenStream;
+ std::string m_exeName;
+ std::vector<std::string> m_args;
+
+ public:
+ Args( int argc, char const* const* argv )
+ : m_exeName(argv[0]),
+ m_args(argv + 1, argv + argc) {}
+
+ Args( std::initializer_list<std::string> args )
+ : m_exeName( *args.begin() ),
+ m_args( args.begin()+1, args.end() )
+ {}
+
+ auto exeName() const -> std::string {
+ return m_exeName;
+ }
+ };
+
+ // Wraps a token coming from a token stream. These may not directly correspond to strings as a single string
+ // may encode an option + its argument if the : or = form is used
+ enum class TokenType {
+ Option, Argument
+ };
+ struct Token {
+ TokenType type;
+ std::string token;
+ };
+
+ inline auto isOptPrefix( char c ) -> bool {
+ return c == '-'
+#ifdef CATCH_PLATFORM_WINDOWS
+ || c == '/'
+#endif
+ ;
+ }
+
+ // Abstracts iterators into args as a stream of tokens, with option arguments uniformly handled
+ class TokenStream {
+ using Iterator = std::vector<std::string>::const_iterator;
+ Iterator it;
+ Iterator itEnd;
+ std::vector<Token> m_tokenBuffer;
+
+ void loadBuffer() {
+ m_tokenBuffer.resize( 0 );
+
+ // Skip any empty strings
+ while( it != itEnd && it->empty() )
+ ++it;
+
+ if( it != itEnd ) {
+ auto const &next = *it;
+ if( isOptPrefix( next[0] ) ) {
+ auto delimiterPos = next.find_first_of( " :=" );
+ if( delimiterPos != std::string::npos ) {
+ m_tokenBuffer.push_back( { TokenType::Option, next.substr( 0, delimiterPos ) } );
+ m_tokenBuffer.push_back( { TokenType::Argument, next.substr( delimiterPos + 1 ) } );
+ } else {
+ if( next[1] != '-' && next.size() > 2 ) {
+ std::string opt = "- ";
+ for( size_t i = 1; i < next.size(); ++i ) {
+ opt[1] = next[i];
+ m_tokenBuffer.push_back( { TokenType::Option, opt } );
+ }
+ } else {
+ m_tokenBuffer.push_back( { TokenType::Option, next } );
+ }
+ }
+ } else {
+ m_tokenBuffer.push_back( { TokenType::Argument, next } );
+ }
+ }
+ }
+
+ public:
+ explicit TokenStream( Args const &args ) : TokenStream( args.m_args.begin(), args.m_args.end() ) {}
+
+ TokenStream( Iterator it, Iterator itEnd ) : it( it ), itEnd( itEnd ) {
+ loadBuffer();
+ }
+
+ explicit operator bool() const {
+ return !m_tokenBuffer.empty() || it != itEnd;
+ }
+
+ auto count() const -> size_t { return m_tokenBuffer.size() + (itEnd - it); }
+
+ auto operator*() const -> Token {
+ assert( !m_tokenBuffer.empty() );
+ return m_tokenBuffer.front();
+ }
+
+ auto operator->() const -> Token const * {
+ assert( !m_tokenBuffer.empty() );
+ return &m_tokenBuffer.front();
+ }
+
+ auto operator++() -> TokenStream & {
+ if( m_tokenBuffer.size() >= 2 ) {
+ m_tokenBuffer.erase( m_tokenBuffer.begin() );
+ } else {
+ if( it != itEnd )
+ ++it;
+ loadBuffer();
+ }
+ return *this;
+ }
+ };
+
+ class ResultBase {
+ public:
+ enum Type {
+ Ok, LogicError, RuntimeError
+ };
+
+ protected:
+ ResultBase( Type type ) : m_type( type ) {}
+ virtual ~ResultBase() = default;
+
+ virtual void enforceOk() const = 0;
+
+ Type m_type;
+ };
+
+ template<typename T>
+ class ResultValueBase : public ResultBase {
+ public:
+ auto value() const -> T const & {
+ enforceOk();
+ return m_value;
+ }
+
+ protected:
+ ResultValueBase( Type type ) : ResultBase( type ) {}
+
+ ResultValueBase( ResultValueBase const &other ) : ResultBase( other ) {
+ if( m_type == ResultBase::Ok )
+ new( &m_value ) T( other.m_value );
+ }
+
+ ResultValueBase( Type, T const &value ) : ResultBase( Ok ) {
+ new( &m_value ) T( value );
+ }
+
+ auto operator=( ResultValueBase const &other ) -> ResultValueBase & {
+ if( m_type == ResultBase::Ok )
+ m_value.~T();
+ ResultBase::operator=(other);
+ if( m_type == ResultBase::Ok )
+ new( &m_value ) T( other.m_value );
+ return *this;
+ }
+
+ ~ResultValueBase() override {
+ if( m_type == Ok )
+ m_value.~T();
+ }
+
+ union {
+ T m_value;
+ };
+ };
+
+ template<>
+ class ResultValueBase<void> : public ResultBase {
+ protected:
+ using ResultBase::ResultBase;
+ };
+
+ template<typename T = void>
+ class BasicResult : public ResultValueBase<T> {
+ public:
+ template<typename U>
+ explicit BasicResult( BasicResult<U> const &other )
+ : ResultValueBase<T>( other.type() ),
+ m_errorMessage( other.errorMessage() )
+ {
+ assert( type() != ResultBase::Ok );
+ }
+
+ template<typename U>
+ static auto ok( U const &value ) -> BasicResult { return { ResultBase::Ok, value }; }
+ static auto ok() -> BasicResult { return { ResultBase::Ok }; }
+ static auto logicError( std::string const &message ) -> BasicResult { return { ResultBase::LogicError, message }; }
+ static auto runtimeError( std::string const &message ) -> BasicResult { return { ResultBase::RuntimeError, message }; }
+
+ explicit operator bool() const { return m_type == ResultBase::Ok; }
+ auto type() const -> ResultBase::Type { return m_type; }
+ auto errorMessage() const -> std::string { return m_errorMessage; }
+
+ protected:
+ void enforceOk() const override {
+
+ // Errors shouldn't reach this point, but if they do
+ // the actual error message will be in m_errorMessage
+ assert( m_type != ResultBase::LogicError );
+ assert( m_type != ResultBase::RuntimeError );
+ if( m_type != ResultBase::Ok )
+ std::abort();
+ }
+
+ std::string m_errorMessage; // Only populated if resultType is an error
+
+ BasicResult( ResultBase::Type type, std::string const &message )
+ : ResultValueBase<T>(type),
+ m_errorMessage(message)
+ {
+ assert( m_type != ResultBase::Ok );
+ }
+
+ using ResultValueBase<T>::ResultValueBase;
+ using ResultBase::m_type;
+ };
+
+ enum class ParseResultType {
+ Matched, NoMatch, ShortCircuitAll, ShortCircuitSame
+ };
+
+ class ParseState {
+ public:
+
+ ParseState( ParseResultType type, TokenStream const &remainingTokens )
+ : m_type(type),
+ m_remainingTokens( remainingTokens )
+ {}
+
+ auto type() const -> ParseResultType { return m_type; }
+ auto remainingTokens() const -> TokenStream { return m_remainingTokens; }
+
+ private:
+ ParseResultType m_type;
+ TokenStream m_remainingTokens;
+ };
+
+ using Result = BasicResult<void>;
+ using ParserResult = BasicResult<ParseResultType>;
+ using InternalParseResult = BasicResult<ParseState>;
+
+ struct HelpColumns {
+ std::string left;
+ std::string right;
+ };
+
+ template<typename T>
+ inline auto convertInto( std::string const &source, T& target ) -> ParserResult {
+ std::stringstream ss;
+ ss << source;
+ ss >> target;
+ if( ss.fail() )
+ return ParserResult::runtimeError( "Unable to convert '" + source + "' to destination type" );
+ else
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ inline auto convertInto( std::string const &source, std::string& target ) -> ParserResult {
+ target = source;
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ inline auto convertInto( std::string const &source, bool &target ) -> ParserResult {
+ std::string srcLC = source;
+ std::transform( srcLC.begin(), srcLC.end(), srcLC.begin(), []( unsigned char c ) { return static_cast<char>( std::tolower(c) ); } );
+ if (srcLC == "y" || srcLC == "1" || srcLC == "true" || srcLC == "yes" || srcLC == "on")
+ target = true;
+ else if (srcLC == "n" || srcLC == "0" || srcLC == "false" || srcLC == "no" || srcLC == "off")
+ target = false;
+ else
+ return ParserResult::runtimeError( "Expected a boolean value but did not recognise: '" + source + "'" );
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+#ifdef CLARA_CONFIG_OPTIONAL_TYPE
+ template<typename T>
+ inline auto convertInto( std::string const &source, CLARA_CONFIG_OPTIONAL_TYPE<T>& target ) -> ParserResult {
+ T temp;
+ auto result = convertInto( source, temp );
+ if( result )
+ target = std::move(temp);
+ return result;
+ }
+#endif // CLARA_CONFIG_OPTIONAL_TYPE
+
+ struct NonCopyable {
+ NonCopyable() = default;
+ NonCopyable( NonCopyable const & ) = delete;
+ NonCopyable( NonCopyable && ) = delete;
+ NonCopyable &operator=( NonCopyable const & ) = delete;
+ NonCopyable &operator=( NonCopyable && ) = delete;
+ };
+
+ struct BoundRef : NonCopyable {
+ virtual ~BoundRef() = default;
+ virtual auto isContainer() const -> bool { return false; }
+ virtual auto isFlag() const -> bool { return false; }
+ };
+ struct BoundValueRefBase : BoundRef {
+ virtual auto setValue( std::string const &arg ) -> ParserResult = 0;
+ };
+ struct BoundFlagRefBase : BoundRef {
+ virtual auto setFlag( bool flag ) -> ParserResult = 0;
+ virtual auto isFlag() const -> bool { return true; }
+ };
+
+ template<typename T>
+ struct BoundValueRef : BoundValueRefBase {
+ T &m_ref;
+
+ explicit BoundValueRef( T &ref ) : m_ref( ref ) {}
+
+ auto setValue( std::string const &arg ) -> ParserResult override {
+ return convertInto( arg, m_ref );
+ }
+ };
+
+ template<typename T>
+ struct BoundValueRef<std::vector<T>> : BoundValueRefBase {
+ std::vector<T> &m_ref;
+
+ explicit BoundValueRef( std::vector<T> &ref ) : m_ref( ref ) {}
+
+ auto isContainer() const -> bool override { return true; }
+
+ auto setValue( std::string const &arg ) -> ParserResult override {
+ T temp;
+ auto result = convertInto( arg, temp );
+ if( result )
+ m_ref.push_back( temp );
+ return result;
+ }
+ };
+
+ struct BoundFlagRef : BoundFlagRefBase {
+ bool &m_ref;
+
+ explicit BoundFlagRef( bool &ref ) : m_ref( ref ) {}
+
+ auto setFlag( bool flag ) -> ParserResult override {
+ m_ref = flag;
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ };
+
+ template<typename ReturnType>
+ struct LambdaInvoker {
+ static_assert( std::is_same<ReturnType, ParserResult>::value, "Lambda must return void or clara::ParserResult" );
+
+ template<typename L, typename ArgType>
+ static auto invoke( L const &lambda, ArgType const &arg ) -> ParserResult {
+ return lambda( arg );
+ }
+ };
+
+ template<>
+ struct LambdaInvoker<void> {
+ template<typename L, typename ArgType>
+ static auto invoke( L const &lambda, ArgType const &arg ) -> ParserResult {
+ lambda( arg );
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ };
+
+ template<typename ArgType, typename L>
+ inline auto invokeLambda( L const &lambda, std::string const &arg ) -> ParserResult {
+ ArgType temp{};
+ auto result = convertInto( arg, temp );
+ return !result
+ ? result
+ : LambdaInvoker<typename UnaryLambdaTraits<L>::ReturnType>::invoke( lambda, temp );
+ }
+
+ template<typename L>
+ struct BoundLambda : BoundValueRefBase {
+ L m_lambda;
+
+ static_assert( UnaryLambdaTraits<L>::isValid, "Supplied lambda must take exactly one argument" );
+ explicit BoundLambda( L const &lambda ) : m_lambda( lambda ) {}
+
+ auto setValue( std::string const &arg ) -> ParserResult override {
+ return invokeLambda<typename UnaryLambdaTraits<L>::ArgType>( m_lambda, arg );
+ }
+ };
+
+ template<typename L>
+ struct BoundFlagLambda : BoundFlagRefBase {
+ L m_lambda;
+
+ static_assert( UnaryLambdaTraits<L>::isValid, "Supplied lambda must take exactly one argument" );
+ static_assert( std::is_same<typename UnaryLambdaTraits<L>::ArgType, bool>::value, "flags must be boolean" );
+
+ explicit BoundFlagLambda( L const &lambda ) : m_lambda( lambda ) {}
+
+ auto setFlag( bool flag ) -> ParserResult override {
+ return LambdaInvoker<typename UnaryLambdaTraits<L>::ReturnType>::invoke( m_lambda, flag );
+ }
+ };
+
+ enum class Optionality { Optional, Required };
+
+ struct Parser;
+
+ class ParserBase {
+ public:
+ virtual ~ParserBase() = default;
+ virtual auto validate() const -> Result { return Result::ok(); }
+ virtual auto parse( std::string const& exeName, TokenStream const &tokens) const -> InternalParseResult = 0;
+ virtual auto cardinality() const -> size_t { return 1; }
+
+ auto parse( Args const &args ) const -> InternalParseResult {
+ return parse( args.exeName(), TokenStream( args ) );
+ }
+ };
+
+ template<typename DerivedT>
+ class ComposableParserImpl : public ParserBase {
+ public:
+ template<typename T>
+ auto operator|( T const &other ) const -> Parser;
+
+ template<typename T>
+ auto operator+( T const &other ) const -> Parser;
+ };
+
+ // Common code and state for Args and Opts
+ template<typename DerivedT>
+ class ParserRefImpl : public ComposableParserImpl<DerivedT> {
+ protected:
+ Optionality m_optionality = Optionality::Optional;
+ std::shared_ptr<BoundRef> m_ref;
+ std::string m_hint;
+ std::string m_description;
+
+ explicit ParserRefImpl( std::shared_ptr<BoundRef> const &ref ) : m_ref( ref ) {}
+
+ public:
+ template<typename T>
+ ParserRefImpl( T &ref, std::string const &hint )
+ : m_ref( std::make_shared<BoundValueRef<T>>( ref ) ),
+ m_hint( hint )
+ {}
+
+ template<typename LambdaT>
+ ParserRefImpl( LambdaT const &ref, std::string const &hint )
+ : m_ref( std::make_shared<BoundLambda<LambdaT>>( ref ) ),
+ m_hint(hint)
+ {}
+
+ auto operator()( std::string const &description ) -> DerivedT & {
+ m_description = description;
+ return static_cast<DerivedT &>( *this );
+ }
+
+ auto optional() -> DerivedT & {
+ m_optionality = Optionality::Optional;
+ return static_cast<DerivedT &>( *this );
+ };
+
+ auto required() -> DerivedT & {
+ m_optionality = Optionality::Required;
+ return static_cast<DerivedT &>( *this );
+ };
+
+ auto isOptional() const -> bool {
+ return m_optionality == Optionality::Optional;
+ }
+
+ auto cardinality() const -> size_t override {
+ if( m_ref->isContainer() )
+ return 0;
+ else
+ return 1;
+ }
+
+ auto hint() const -> std::string { return m_hint; }
+ };
+
+ class ExeName : public ComposableParserImpl<ExeName> {
+ std::shared_ptr<std::string> m_name;
+ std::shared_ptr<BoundValueRefBase> m_ref;
+
+ template<typename LambdaT>
+ static auto makeRef(LambdaT const &lambda) -> std::shared_ptr<BoundValueRefBase> {
+ return std::make_shared<BoundLambda<LambdaT>>( lambda) ;
+ }
+
+ public:
+ ExeName() : m_name( std::make_shared<std::string>( "<executable>" ) ) {}
+
+ explicit ExeName( std::string &ref ) : ExeName() {
+ m_ref = std::make_shared<BoundValueRef<std::string>>( ref );
+ }
+
+ template<typename LambdaT>
+ explicit ExeName( LambdaT const& lambda ) : ExeName() {
+ m_ref = std::make_shared<BoundLambda<LambdaT>>( lambda );
+ }
+
+ // The exe name is not parsed out of the normal tokens, but is handled specially
+ auto parse( std::string const&, TokenStream const &tokens ) const -> InternalParseResult override {
+ return InternalParseResult::ok( ParseState( ParseResultType::NoMatch, tokens ) );
+ }
+
+ auto name() const -> std::string { return *m_name; }
+ auto set( std::string const& newName ) -> ParserResult {
+
+ auto lastSlash = newName.find_last_of( "\\/" );
+ auto filename = ( lastSlash == std::string::npos )
+ ? newName
+ : newName.substr( lastSlash+1 );
+
+ *m_name = filename;
+ if( m_ref )
+ return m_ref->setValue( filename );
+ else
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ };
+
+ class Arg : public ParserRefImpl<Arg> {
+ public:
+ using ParserRefImpl::ParserRefImpl;
+
+ auto parse( std::string const &, TokenStream const &tokens ) const -> InternalParseResult override {
+ auto validationResult = validate();
+ if( !validationResult )
+ return InternalParseResult( validationResult );
+
+ auto remainingTokens = tokens;
+ auto const &token = *remainingTokens;
+ if( token.type != TokenType::Argument )
+ return InternalParseResult::ok( ParseState( ParseResultType::NoMatch, remainingTokens ) );
+
+ assert( !m_ref->isFlag() );
+ auto valueRef = static_cast<detail::BoundValueRefBase*>( m_ref.get() );
+
+ auto result = valueRef->setValue( remainingTokens->token );
+ if( !result )
+ return InternalParseResult( result );
+ else
+ return InternalParseResult::ok( ParseState( ParseResultType::Matched, ++remainingTokens ) );
+ }
+ };
+
+ inline auto normaliseOpt( std::string const &optName ) -> std::string {
+#ifdef CATCH_PLATFORM_WINDOWS
+ if( optName[0] == '/' )
+ return "-" + optName.substr( 1 );
+ else
+#endif
+ return optName;
+ }
+
+ class Opt : public ParserRefImpl<Opt> {
+ protected:
+ std::vector<std::string> m_optNames;
+
+ public:
+ template<typename LambdaT>
+ explicit Opt( LambdaT const &ref ) : ParserRefImpl( std::make_shared<BoundFlagLambda<LambdaT>>( ref ) ) {}
+
+ explicit Opt( bool &ref ) : ParserRefImpl( std::make_shared<BoundFlagRef>( ref ) ) {}
+
+ template<typename LambdaT>
+ Opt( LambdaT const &ref, std::string const &hint ) : ParserRefImpl( ref, hint ) {}
+
+ template<typename T>
+ Opt( T &ref, std::string const &hint ) : ParserRefImpl( ref, hint ) {}
+
+ auto operator[]( std::string const &optName ) -> Opt & {
+ m_optNames.push_back( optName );
+ return *this;
+ }
+
+ auto getHelpColumns() const -> std::vector<HelpColumns> {
+ std::ostringstream oss;
+ bool first = true;
+ for( auto const &opt : m_optNames ) {
+ if (first)
+ first = false;
+ else
+ oss << ", ";
+ oss << opt;
+ }
+ if( !m_hint.empty() )
+ oss << " <" << m_hint << ">";
+ return { { oss.str(), m_description } };
+ }
+
+ auto isMatch( std::string const &optToken ) const -> bool {
+ auto normalisedToken = normaliseOpt( optToken );
+ for( auto const &name : m_optNames ) {
+ if( normaliseOpt( name ) == normalisedToken )
+ return true;
+ }
+ return false;
+ }
+
+ using ParserBase::parse;
+
+ auto parse( std::string const&, TokenStream const &tokens ) const -> InternalParseResult override {
+ auto validationResult = validate();
+ if( !validationResult )
+ return InternalParseResult( validationResult );
+
+ auto remainingTokens = tokens;
+ if( remainingTokens && remainingTokens->type == TokenType::Option ) {
+ auto const &token = *remainingTokens;
+ if( isMatch(token.token ) ) {
+ if( m_ref->isFlag() ) {
+ auto flagRef = static_cast<detail::BoundFlagRefBase*>( m_ref.get() );
+ auto result = flagRef->setFlag( true );
+ if( !result )
+ return InternalParseResult( result );
+ if( result.value() == ParseResultType::ShortCircuitAll )
+ return InternalParseResult::ok( ParseState( result.value(), remainingTokens ) );
+ } else {
+ auto valueRef = static_cast<detail::BoundValueRefBase*>( m_ref.get() );
+ ++remainingTokens;
+ if( !remainingTokens )
+ return InternalParseResult::runtimeError( "Expected argument following " + token.token );
+ auto const &argToken = *remainingTokens;
+ if( argToken.type != TokenType::Argument )
+ return InternalParseResult::runtimeError( "Expected argument following " + token.token );
+ auto result = valueRef->setValue( argToken.token );
+ if( !result )
+ return InternalParseResult( result );
+ if( result.value() == ParseResultType::ShortCircuitAll )
+ return InternalParseResult::ok( ParseState( result.value(), remainingTokens ) );
+ }
+ return InternalParseResult::ok( ParseState( ParseResultType::Matched, ++remainingTokens ) );
+ }
+ }
+ return InternalParseResult::ok( ParseState( ParseResultType::NoMatch, remainingTokens ) );
+ }
+
+ auto validate() const -> Result override {
+ if( m_optNames.empty() )
+ return Result::logicError( "No options supplied to Opt" );
+ for( auto const &name : m_optNames ) {
+ if( name.empty() )
+ return Result::logicError( "Option name cannot be empty" );
+#ifdef CATCH_PLATFORM_WINDOWS
+ if( name[0] != '-' && name[0] != '/' )
+ return Result::logicError( "Option name must begin with '-' or '/'" );
+#else
+ if( name[0] != '-' )
+ return Result::logicError( "Option name must begin with '-'" );
+#endif
+ }
+ return ParserRefImpl::validate();
+ }
+ };
+
+ struct Help : Opt {
+ Help( bool &showHelpFlag )
+ : Opt([&]( bool flag ) {
+ showHelpFlag = flag;
+ return ParserResult::ok( ParseResultType::ShortCircuitAll );
+ })
+ {
+ static_cast<Opt &>( *this )
+ ("display usage information")
+ ["-?"]["-h"]["--help"]
+ .optional();
+ }
+ };
+
+ struct Parser : ParserBase {
+
+ mutable ExeName m_exeName;
+ std::vector<Opt> m_options;
+ std::vector<Arg> m_args;
+
+ auto operator|=( ExeName const &exeName ) -> Parser & {
+ m_exeName = exeName;
+ return *this;
+ }
+
+ auto operator|=( Arg const &arg ) -> Parser & {
+ m_args.push_back(arg);
+ return *this;
+ }
+
+ auto operator|=( Opt const &opt ) -> Parser & {
+ m_options.push_back(opt);
+ return *this;
+ }
+
+ auto operator|=( Parser const &other ) -> Parser & {
+ m_options.insert(m_options.end(), other.m_options.begin(), other.m_options.end());
+ m_args.insert(m_args.end(), other.m_args.begin(), other.m_args.end());
+ return *this;
+ }
+
+ template<typename T>
+ auto operator|( T const &other ) const -> Parser {
+ return Parser( *this ) |= other;
+ }
+
+ // Forward deprecated interface with '+' instead of '|'
+ template<typename T>
+ auto operator+=( T const &other ) -> Parser & { return operator|=( other ); }
+ template<typename T>
+ auto operator+( T const &other ) const -> Parser { return operator|( other ); }
+
+ auto getHelpColumns() const -> std::vector<HelpColumns> {
+ std::vector<HelpColumns> cols;
+ for (auto const &o : m_options) {
+ auto childCols = o.getHelpColumns();
+ cols.insert( cols.end(), childCols.begin(), childCols.end() );
+ }
+ return cols;
+ }
+
+ void writeToStream( std::ostream &os ) const {
+ if (!m_exeName.name().empty()) {
+ os << "usage:\n" << " " << m_exeName.name() << " ";
+ bool required = true, first = true;
+ for( auto const &arg : m_args ) {
+ if (first)
+ first = false;
+ else
+ os << " ";
+ if( arg.isOptional() && required ) {
+ os << "[";
+ required = false;
+ }
+ os << "<" << arg.hint() << ">";
+ if( arg.cardinality() == 0 )
+ os << " ... ";
+ }
+ if( !required )
+ os << "]";
+ if( !m_options.empty() )
+ os << " options";
+ os << "\n\nwhere options are:" << std::endl;
+ }
+
+ auto rows = getHelpColumns();
+ size_t consoleWidth = CATCH_CLARA_CONFIG_CONSOLE_WIDTH;
+ size_t optWidth = 0;
+ for( auto const &cols : rows )
+ optWidth = (std::max)(optWidth, cols.left.size() + 2);
+
+ optWidth = (std::min)(optWidth, consoleWidth/2);
+
+ for( auto const &cols : rows ) {
+ auto row =
+ TextFlow::Column( cols.left ).width( optWidth ).indent( 2 ) +
+ TextFlow::Spacer(4) +
+ TextFlow::Column( cols.right ).width( consoleWidth - 7 - optWidth );
+ os << row << std::endl;
+ }
+ }
+
+ friend auto operator<<( std::ostream &os, Parser const &parser ) -> std::ostream& {
+ parser.writeToStream( os );
+ return os;
+ }
+
+ auto validate() const -> Result override {
+ for( auto const &opt : m_options ) {
+ auto result = opt.validate();
+ if( !result )
+ return result;
+ }
+ for( auto const &arg : m_args ) {
+ auto result = arg.validate();
+ if( !result )
+ return result;
+ }
+ return Result::ok();
+ }
+
+ using ParserBase::parse;
+
+ auto parse( std::string const& exeName, TokenStream const &tokens ) const -> InternalParseResult override {
+
+ struct ParserInfo {
+ ParserBase const* parser = nullptr;
+ size_t count = 0;
+ };
+ const size_t totalParsers = m_options.size() + m_args.size();
+ assert( totalParsers < 512 );
+ // ParserInfo parseInfos[totalParsers]; // <-- this is what we really want to do
+ ParserInfo parseInfos[512];
+
+ {
+ size_t i = 0;
+ for (auto const &opt : m_options) parseInfos[i++].parser = &opt;
+ for (auto const &arg : m_args) parseInfos[i++].parser = &arg;
+ }
+
+ m_exeName.set( exeName );
+
+ auto result = InternalParseResult::ok( ParseState( ParseResultType::NoMatch, tokens ) );
+ while( result.value().remainingTokens() ) {
+ bool tokenParsed = false;
+
+ for( size_t i = 0; i < totalParsers; ++i ) {
+ auto& parseInfo = parseInfos[i];
+ if( parseInfo.parser->cardinality() == 0 || parseInfo.count < parseInfo.parser->cardinality() ) {
+ result = parseInfo.parser->parse(exeName, result.value().remainingTokens());
+ if (!result)
+ return result;
+ if (result.value().type() != ParseResultType::NoMatch) {
+ tokenParsed = true;
+ ++parseInfo.count;
+ break;
+ }
+ }
+ }
+
+ if( result.value().type() == ParseResultType::ShortCircuitAll )
+ return result;
+ if( !tokenParsed )
+ return InternalParseResult::runtimeError( "Unrecognised token: " + result.value().remainingTokens()->token );
+ }
+ // !TBD Check missing required options
+ return result;
+ }
+ };
+
+ template<typename DerivedT>
+ template<typename T>
+ auto ComposableParserImpl<DerivedT>::operator|( T const &other ) const -> Parser {
+ return Parser() | static_cast<DerivedT const &>( *this ) | other;
+ }
+} // namespace detail
+
+// A Combined parser
+using detail::Parser;
+
+// A parser for options
+using detail::Opt;
+
+// A parser for arguments
+using detail::Arg;
+
+// Wrapper for argc, argv from main()
+using detail::Args;
+
+// Specifies the name of the executable
+using detail::ExeName;
+
+// Convenience wrapper for option parser that specifies the help option
+using detail::Help;
+
+// enum of result types from a parse
+using detail::ParseResultType;
+
+// Result type for parser operation
+using detail::ParserResult;
+
+}} // namespace Catch::clara
+
+// end clara.hpp
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// Restore Clara's value for console width, if present
+#ifdef CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH
+#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH
+#undef CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH
+#endif
+
+// end catch_clara.h
+namespace Catch {
+
+ clara::Parser makeCommandLineParser( ConfigData& config );
+
+} // end namespace Catch
+
+// end catch_commandline.h
+#include <fstream>
+#include <ctime>
+
+namespace Catch {
+
+ clara::Parser makeCommandLineParser( ConfigData& config ) {
+
+ using namespace clara;
+
+ auto const setWarning = [&]( std::string const& warning ) {
+ auto warningSet = [&]() {
+ if( warning == "NoAssertions" )
+ return WarnAbout::NoAssertions;
+
+ if ( warning == "NoTests" )
+ return WarnAbout::NoTests;
+
+ return WarnAbout::Nothing;
+ }();
+
+ if (warningSet == WarnAbout::Nothing)
+ return ParserResult::runtimeError( "Unrecognised warning: '" + warning + "'" );
+ config.warnings = static_cast<WarnAbout::What>( config.warnings | warningSet );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const loadTestNamesFromFile = [&]( std::string const& filename ) {
+ std::ifstream f( filename.c_str() );
+ if( !f.is_open() )
+ return ParserResult::runtimeError( "Unable to load input file: '" + filename + "'" );
+
+ std::string line;
+ while( std::getline( f, line ) ) {
+ line = trim(line);
+ if( !line.empty() && !startsWith( line, '#' ) ) {
+ if( !startsWith( line, '"' ) )
+ line = '"' + line + '"';
+ config.testsOrTags.push_back( line );
+ config.testsOrTags.emplace_back( "," );
+ }
+ }
+ //Remove comma in the end
+ if(!config.testsOrTags.empty())
+ config.testsOrTags.erase( config.testsOrTags.end()-1 );
+
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setTestOrder = [&]( std::string const& order ) {
+ if( startsWith( "declared", order ) )
+ config.runOrder = RunTests::InDeclarationOrder;
+ else if( startsWith( "lexical", order ) )
+ config.runOrder = RunTests::InLexicographicalOrder;
+ else if( startsWith( "random", order ) )
+ config.runOrder = RunTests::InRandomOrder;
+ else
+ return clara::ParserResult::runtimeError( "Unrecognised ordering: '" + order + "'" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setRngSeed = [&]( std::string const& seed ) {
+ if( seed != "time" )
+ return clara::detail::convertInto( seed, config.rngSeed );
+ config.rngSeed = static_cast<unsigned int>( std::time(nullptr) );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setColourUsage = [&]( std::string const& useColour ) {
+ auto mode = toLower( useColour );
+
+ if( mode == "yes" )
+ config.useColour = UseColour::Yes;
+ else if( mode == "no" )
+ config.useColour = UseColour::No;
+ else if( mode == "auto" )
+ config.useColour = UseColour::Auto;
+ else
+ return ParserResult::runtimeError( "colour mode must be one of: auto, yes or no. '" + useColour + "' not recognised" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setWaitForKeypress = [&]( std::string const& keypress ) {
+ auto keypressLc = toLower( keypress );
+ if (keypressLc == "never")
+ config.waitForKeypress = WaitForKeypress::Never;
+ else if( keypressLc == "start" )
+ config.waitForKeypress = WaitForKeypress::BeforeStart;
+ else if( keypressLc == "exit" )
+ config.waitForKeypress = WaitForKeypress::BeforeExit;
+ else if( keypressLc == "both" )
+ config.waitForKeypress = WaitForKeypress::BeforeStartAndExit;
+ else
+ return ParserResult::runtimeError( "keypress argument must be one of: never, start, exit or both. '" + keypress + "' not recognised" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setVerbosity = [&]( std::string const& verbosity ) {
+ auto lcVerbosity = toLower( verbosity );
+ if( lcVerbosity == "quiet" )
+ config.verbosity = Verbosity::Quiet;
+ else if( lcVerbosity == "normal" )
+ config.verbosity = Verbosity::Normal;
+ else if( lcVerbosity == "high" )
+ config.verbosity = Verbosity::High;
+ else
+ return ParserResult::runtimeError( "Unrecognised verbosity, '" + verbosity + "'" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setReporter = [&]( std::string const& reporter ) {
+ IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories();
+
+ auto lcReporter = toLower( reporter );
+ auto result = factories.find( lcReporter );
+
+ if( factories.end() != result )
+ config.reporterName = lcReporter;
+ else
+ return ParserResult::runtimeError( "Unrecognized reporter, '" + reporter + "'. Check available with --list-reporters" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+
+ auto cli
+ = ExeName( config.processName )
+ | Help( config.showHelp )
+ | Opt( config.listTests )
+ ["-l"]["--list-tests"]
+ ( "list all/matching test cases" )
+ | Opt( config.listTags )
+ ["-t"]["--list-tags"]
+ ( "list all/matching tags" )
+ | Opt( config.showSuccessfulTests )
+ ["-s"]["--success"]
+ ( "include successful tests in output" )
+ | Opt( config.shouldDebugBreak )
+ ["-b"]["--break"]
+ ( "break into debugger on failure" )
+ | Opt( config.noThrow )
+ ["-e"]["--nothrow"]
+ ( "skip exception tests" )
+ | Opt( config.showInvisibles )
+ ["-i"]["--invisibles"]
+ ( "show invisibles (tabs, newlines)" )
+ | Opt( config.outputFilename, "filename" )
+ ["-o"]["--out"]
+ ( "output filename" )
+ | Opt( setReporter, "name" )
+ ["-r"]["--reporter"]
+ ( "reporter to use (defaults to console)" )
+ | Opt( config.name, "name" )
+ ["-n"]["--name"]
+ ( "suite name" )
+ | Opt( [&]( bool ){ config.abortAfter = 1; } )
+ ["-a"]["--abort"]
+ ( "abort at first failure" )
+ | Opt( [&]( int x ){ config.abortAfter = x; }, "no. failures" )
+ ["-x"]["--abortx"]
+ ( "abort after x failures" )
+ | Opt( setWarning, "warning name" )
+ ["-w"]["--warn"]
+ ( "enable warnings" )
+ | Opt( [&]( bool flag ) { config.showDurations = flag ? ShowDurations::Always : ShowDurations::Never; }, "yes|no" )
+ ["-d"]["--durations"]
+ ( "show test durations" )
+ | Opt( config.minDuration, "seconds" )
+ ["-D"]["--min-duration"]
+ ( "show test durations for tests taking at least the given number of seconds" )
+ | Opt( loadTestNamesFromFile, "filename" )
+ ["-f"]["--input-file"]
+ ( "load test names to run from a file" )
+ | Opt( config.filenamesAsTags )
+ ["-#"]["--filenames-as-tags"]
+ ( "adds a tag for the filename" )
+ | Opt( config.sectionsToRun, "section name" )
+ ["-c"]["--section"]
+ ( "specify section to run" )
+ | Opt( setVerbosity, "quiet|normal|high" )
+ ["-v"]["--verbosity"]
+ ( "set output verbosity" )
+ | Opt( config.listTestNamesOnly )
+ ["--list-test-names-only"]
+ ( "list all/matching test cases names only" )
+ | Opt( config.listReporters )
+ ["--list-reporters"]
+ ( "list all reporters" )
+ | Opt( setTestOrder, "decl|lex|rand" )
+ ["--order"]
+ ( "test case order (defaults to decl)" )
+ | Opt( setRngSeed, "'time'|number" )
+ ["--rng-seed"]
+ ( "set a specific seed for random numbers" )
+ | Opt( setColourUsage, "yes|no" )
+ ["--use-colour"]
+ ( "should output be colourised" )
+ | Opt( config.libIdentify )
+ ["--libidentify"]
+ ( "report name and version according to libidentify standard" )
+ | Opt( setWaitForKeypress, "never|start|exit|both" )
+ ["--wait-for-keypress"]
+ ( "waits for a keypress before exiting" )
+ | Opt( config.benchmarkSamples, "samples" )
+ ["--benchmark-samples"]
+ ( "number of samples to collect (default: 100)" )
+ | Opt( config.benchmarkResamples, "resamples" )
+ ["--benchmark-resamples"]
+ ( "number of resamples for the bootstrap (default: 100000)" )
+ | Opt( config.benchmarkConfidenceInterval, "confidence interval" )
+ ["--benchmark-confidence-interval"]
+ ( "confidence interval for the bootstrap (between 0 and 1, default: 0.95)" )
+ | Opt( config.benchmarkNoAnalysis )
+ ["--benchmark-no-analysis"]
+ ( "perform only measurements; do not perform any analysis" )
+ | Opt( config.benchmarkWarmupTime, "benchmarkWarmupTime" )
+ ["--benchmark-warmup-time"]
+ ( "amount of time in milliseconds spent on warming up each test (default: 100)" )
+ | Arg( config.testsOrTags, "test name|pattern|tags" )
+ ( "which test or tests to use" );
+
+ return cli;
+ }
+
+} // end namespace Catch
+// end catch_commandline.cpp
+// start catch_common.cpp
+
+#include <cstring>
+#include <ostream>
+
+namespace Catch {
+
+ bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const noexcept {
+ return line == other.line && (file == other.file || std::strcmp(file, other.file) == 0);
+ }
+ bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const noexcept {
+ // We can assume that the same file will usually have the same pointer.
+ // Thus, if the pointers are the same, there is no point in calling the strcmp
+ return line < other.line || ( line == other.line && file != other.file && (std::strcmp(file, other.file) < 0));
+ }
+
+ std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) {
+#ifndef __GNUG__
+ os << info.file << '(' << info.line << ')';
+#else
+ os << info.file << ':' << info.line;
+#endif
+ return os;
+ }
+
+ std::string StreamEndStop::operator+() const {
+ return std::string();
+ }
+
+ NonCopyable::NonCopyable() = default;
+ NonCopyable::~NonCopyable() = default;
+
+}
+// end catch_common.cpp
+// start catch_config.cpp
+
+namespace Catch {
+
+ Config::Config( ConfigData const& data )
+ : m_data( data ),
+ m_stream( openStream() )
+ {
+ // We need to trim filter specs to avoid trouble with superfluous
+ // whitespace (esp. important for bdd macros, as those are manually
+ // aligned with whitespace).
+
+ for (auto& elem : m_data.testsOrTags) {
+ elem = trim(elem);
+ }
+ for (auto& elem : m_data.sectionsToRun) {
+ elem = trim(elem);
+ }
+
+ TestSpecParser parser(ITagAliasRegistry::get());
+ if (!m_data.testsOrTags.empty()) {
+ m_hasTestFilters = true;
+ for (auto const& testOrTags : m_data.testsOrTags) {
+ parser.parse(testOrTags);
+ }
+ }
+ m_testSpec = parser.testSpec();
+ }
+
+ std::string const& Config::getFilename() const {
+ return m_data.outputFilename ;
+ }
+
+ bool Config::listTests() const { return m_data.listTests; }
+ bool Config::listTestNamesOnly() const { return m_data.listTestNamesOnly; }
+ bool Config::listTags() const { return m_data.listTags; }
+ bool Config::listReporters() const { return m_data.listReporters; }
+
+ std::string Config::getProcessName() const { return m_data.processName; }
+ std::string const& Config::getReporterName() const { return m_data.reporterName; }
+
+ std::vector<std::string> const& Config::getTestsOrTags() const { return m_data.testsOrTags; }
+ std::vector<std::string> const& Config::getSectionsToRun() const { return m_data.sectionsToRun; }
+
+ TestSpec const& Config::testSpec() const { return m_testSpec; }
+ bool Config::hasTestFilters() const { return m_hasTestFilters; }
+
+ bool Config::showHelp() const { return m_data.showHelp; }
+
+ // IConfig interface
+ bool Config::allowThrows() const { return !m_data.noThrow; }
+ std::ostream& Config::stream() const { return m_stream->stream(); }
+ std::string Config::name() const { return m_data.name.empty() ? m_data.processName : m_data.name; }
+ bool Config::includeSuccessfulResults() const { return m_data.showSuccessfulTests; }
+ bool Config::warnAboutMissingAssertions() const { return !!(m_data.warnings & WarnAbout::NoAssertions); }
+ bool Config::warnAboutNoTests() const { return !!(m_data.warnings & WarnAbout::NoTests); }
+ ShowDurations::OrNot Config::showDurations() const { return m_data.showDurations; }
+ double Config::minDuration() const { return m_data.minDuration; }
+ RunTests::InWhatOrder Config::runOrder() const { return m_data.runOrder; }
+ unsigned int Config::rngSeed() const { return m_data.rngSeed; }
+ UseColour::YesOrNo Config::useColour() const { return m_data.useColour; }
+ bool Config::shouldDebugBreak() const { return m_data.shouldDebugBreak; }
+ int Config::abortAfter() const { return m_data.abortAfter; }
+ bool Config::showInvisibles() const { return m_data.showInvisibles; }
+ Verbosity Config::verbosity() const { return m_data.verbosity; }
+
+ bool Config::benchmarkNoAnalysis() const { return m_data.benchmarkNoAnalysis; }
+ int Config::benchmarkSamples() const { return m_data.benchmarkSamples; }
+ double Config::benchmarkConfidenceInterval() const { return m_data.benchmarkConfidenceInterval; }
+ unsigned int Config::benchmarkResamples() const { return m_data.benchmarkResamples; }
+ std::chrono::milliseconds Config::benchmarkWarmupTime() const { return std::chrono::milliseconds(m_data.benchmarkWarmupTime); }
+
+ IStream const* Config::openStream() {
+ return Catch::makeStream(m_data.outputFilename);
+ }
+
+} // end namespace Catch
+// end catch_config.cpp
+// start catch_console_colour.cpp
+
+#if defined(__clang__)
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wexit-time-destructors"
+#endif
+
+// start catch_errno_guard.h
+
+namespace Catch {
+
+ class ErrnoGuard {
+ public:
+ ErrnoGuard();
+ ~ErrnoGuard();
+ private:
+ int m_oldErrno;
+ };
+
+}
+
+// end catch_errno_guard.h
+// start catch_windows_h_proxy.h
+
+
+#if defined(CATCH_PLATFORM_WINDOWS)
+
+#if !defined(NOMINMAX) && !defined(CATCH_CONFIG_NO_NOMINMAX)
+# define CATCH_DEFINED_NOMINMAX
+# define NOMINMAX
+#endif
+#if !defined(WIN32_LEAN_AND_MEAN) && !defined(CATCH_CONFIG_NO_WIN32_LEAN_AND_MEAN)
+# define CATCH_DEFINED_WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+
+#ifdef __AFXDLL
+#include <AfxWin.h>
+#else
+#include <windows.h>
+#endif
+
+#ifdef CATCH_DEFINED_NOMINMAX
+# undef NOMINMAX
+#endif
+#ifdef CATCH_DEFINED_WIN32_LEAN_AND_MEAN
+# undef WIN32_LEAN_AND_MEAN
+#endif
+
+#endif // defined(CATCH_PLATFORM_WINDOWS)
+
+// end catch_windows_h_proxy.h
+#include <sstream>
+
+namespace Catch {
+ namespace {
+
+ struct IColourImpl {
+ virtual ~IColourImpl() = default;
+ virtual void use( Colour::Code _colourCode ) = 0;
+ };
+
+ struct NoColourImpl : IColourImpl {
+ void use( Colour::Code ) override {}
+
+ static IColourImpl* instance() {
+ static NoColourImpl s_instance;
+ return &s_instance;
+ }
+ };
+
+ } // anon namespace
+} // namespace Catch
+
+#if !defined( CATCH_CONFIG_COLOUR_NONE ) && !defined( CATCH_CONFIG_COLOUR_WINDOWS ) && !defined( CATCH_CONFIG_COLOUR_ANSI )
+# ifdef CATCH_PLATFORM_WINDOWS
+# define CATCH_CONFIG_COLOUR_WINDOWS
+# else
+# define CATCH_CONFIG_COLOUR_ANSI
+# endif
+#endif
+
+#if defined ( CATCH_CONFIG_COLOUR_WINDOWS ) /////////////////////////////////////////
+
+namespace Catch {
+namespace {
+
+ class Win32ColourImpl : public IColourImpl {
+ public:
+ Win32ColourImpl() : stdoutHandle( GetStdHandle(STD_OUTPUT_HANDLE) )
+ {
+ CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
+ GetConsoleScreenBufferInfo( stdoutHandle, &csbiInfo );
+ originalForegroundAttributes = csbiInfo.wAttributes & ~( BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_INTENSITY );
+ originalBackgroundAttributes = csbiInfo.wAttributes & ~( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY );
+ }
+
+ void use( Colour::Code _colourCode ) override {
+ switch( _colourCode ) {
+ case Colour::None: return setTextAttribute( originalForegroundAttributes );
+ case Colour::White: return setTextAttribute( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE );
+ case Colour::Red: return setTextAttribute( FOREGROUND_RED );
+ case Colour::Green: return setTextAttribute( FOREGROUND_GREEN );
+ case Colour::Blue: return setTextAttribute( FOREGROUND_BLUE );
+ case Colour::Cyan: return setTextAttribute( FOREGROUND_BLUE | FOREGROUND_GREEN );
+ case Colour::Yellow: return setTextAttribute( FOREGROUND_RED | FOREGROUND_GREEN );
+ case Colour::Grey: return setTextAttribute( 0 );
+
+ case Colour::LightGrey: return setTextAttribute( FOREGROUND_INTENSITY );
+ case Colour::BrightRed: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_RED );
+ case Colour::BrightGreen: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN );
+ case Colour::BrightWhite: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE );
+ case Colour::BrightYellow: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN );
+
+ case Colour::Bright: CATCH_INTERNAL_ERROR( "not a colour" );
+
+ default:
+ CATCH_ERROR( "Unknown colour requested" );
+ }
+ }
+
+ private:
+ void setTextAttribute( WORD _textAttribute ) {
+ SetConsoleTextAttribute( stdoutHandle, _textAttribute | originalBackgroundAttributes );
+ }
+ HANDLE stdoutHandle;
+ WORD originalForegroundAttributes;
+ WORD originalBackgroundAttributes;
+ };
+
+ IColourImpl* platformColourInstance() {
+ static Win32ColourImpl s_instance;
+
+ IConfigPtr config = getCurrentContext().getConfig();
+ UseColour::YesOrNo colourMode = config
+ ? config->useColour()
+ : UseColour::Auto;
+ if( colourMode == UseColour::Auto )
+ colourMode = UseColour::Yes;
+ return colourMode == UseColour::Yes
+ ? &s_instance
+ : NoColourImpl::instance();
+ }
+
+} // end anon namespace
+} // end namespace Catch
+
+#elif defined( CATCH_CONFIG_COLOUR_ANSI ) //////////////////////////////////////
+
+#include <unistd.h>
+
+namespace Catch {
+namespace {
+
+ // use POSIX/ ANSI console terminal codes
+ // Thanks to Adam Strzelecki for original contribution
+ // (http://github.com/nanoant)
+ // https://github.com/philsquared/Catch/pull/131
+ class PosixColourImpl : public IColourImpl {
+ public:
+ void use( Colour::Code _colourCode ) override {
+ switch( _colourCode ) {
+ case Colour::None:
+ case Colour::White: return setColour( "[0m" );
+ case Colour::Red: return setColour( "[0;31m" );
+ case Colour::Green: return setColour( "[0;32m" );
+ case Colour::Blue: return setColour( "[0;34m" );
+ case Colour::Cyan: return setColour( "[0;36m" );
+ case Colour::Yellow: return setColour( "[0;33m" );
+ case Colour::Grey: return setColour( "[1;30m" );
+
+ case Colour::LightGrey: return setColour( "[0;37m" );
+ case Colour::BrightRed: return setColour( "[1;31m" );
+ case Colour::BrightGreen: return setColour( "[1;32m" );
+ case Colour::BrightWhite: return setColour( "[1;37m" );
+ case Colour::BrightYellow: return setColour( "[1;33m" );
+
+ case Colour::Bright: CATCH_INTERNAL_ERROR( "not a colour" );
+ default: CATCH_INTERNAL_ERROR( "Unknown colour requested" );
+ }
+ }
+ static IColourImpl* instance() {
+ static PosixColourImpl s_instance;
+ return &s_instance;
+ }
+
+ private:
+ void setColour( const char* _escapeCode ) {
+ getCurrentContext().getConfig()->stream()
+ << '\033' << _escapeCode;
+ }
+ };
+
+ bool useColourOnPlatform() {
+ return
+#if defined(CATCH_PLATFORM_MAC) || defined(CATCH_PLATFORM_IPHONE)
+ !isDebuggerActive() &&
+#endif
+#if !(defined(__DJGPP__) && defined(__STRICT_ANSI__))
+ isatty(STDOUT_FILENO)
+#else
+ false
+#endif
+ ;
+ }
+ IColourImpl* platformColourInstance() {
+ ErrnoGuard guard;
+ IConfigPtr config = getCurrentContext().getConfig();
+ UseColour::YesOrNo colourMode = config
+ ? config->useColour()
+ : UseColour::Auto;
+ if( colourMode == UseColour::Auto )
+ colourMode = useColourOnPlatform()
+ ? UseColour::Yes
+ : UseColour::No;
+ return colourMode == UseColour::Yes
+ ? PosixColourImpl::instance()
+ : NoColourImpl::instance();
+ }
+
+} // end anon namespace
+} // end namespace Catch
+
+#else // not Windows or ANSI ///////////////////////////////////////////////
+
+namespace Catch {
+
+ static IColourImpl* platformColourInstance() { return NoColourImpl::instance(); }
+
+} // end namespace Catch
+
+#endif // Windows/ ANSI/ None
+
+namespace Catch {
+
+ Colour::Colour( Code _colourCode ) { use( _colourCode ); }
+ Colour::Colour( Colour&& other ) noexcept {
+ m_moved = other.m_moved;
+ other.m_moved = true;
+ }
+ Colour& Colour::operator=( Colour&& other ) noexcept {
+ m_moved = other.m_moved;
+ other.m_moved = true;
+ return *this;
+ }
+
+ Colour::~Colour(){ if( !m_moved ) use( None ); }
+
+ void Colour::use( Code _colourCode ) {
+ static IColourImpl* impl = platformColourInstance();
+ // Strictly speaking, this cannot possibly happen.
+ // However, under some conditions it does happen (see #1626),
+ // and this change is small enough that we can let practicality
+ // triumph over purity in this case.
+ if (impl != nullptr) {
+ impl->use( _colourCode );
+ }
+ }
+
+ std::ostream& operator << ( std::ostream& os, Colour const& ) {
+ return os;
+ }
+
+} // end namespace Catch
+
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#endif
+
+// end catch_console_colour.cpp
+// start catch_context.cpp
+
+namespace Catch {
+
+ class Context : public IMutableContext, NonCopyable {
+
+ public: // IContext
+ IResultCapture* getResultCapture() override {
+ return m_resultCapture;
+ }
+ IRunner* getRunner() override {
+ return m_runner;
+ }
+
+ IConfigPtr const& getConfig() const override {
+ return m_config;
+ }
+
+ ~Context() override;
+
+ public: // IMutableContext
+ void setResultCapture( IResultCapture* resultCapture ) override {
+ m_resultCapture = resultCapture;
+ }
+ void setRunner( IRunner* runner ) override {
+ m_runner = runner;
+ }
+ void setConfig( IConfigPtr const& config ) override {
+ m_config = config;
+ }
+
+ friend IMutableContext& getCurrentMutableContext();
+
+ private:
+ IConfigPtr m_config;
+ IRunner* m_runner = nullptr;
+ IResultCapture* m_resultCapture = nullptr;
+ };
+
+ IMutableContext *IMutableContext::currentContext = nullptr;
+
+ void IMutableContext::createContext()
+ {
+ currentContext = new Context();
+ }
+
+ void cleanUpContext() {
+ delete IMutableContext::currentContext;
+ IMutableContext::currentContext = nullptr;
+ }
+ IContext::~IContext() = default;
+ IMutableContext::~IMutableContext() = default;
+ Context::~Context() = default;
+
+ SimplePcg32& rng() {
+ static SimplePcg32 s_rng;
+ return s_rng;
+ }
+
+}
+// end catch_context.cpp
+// start catch_debug_console.cpp
+
+// start catch_debug_console.h
+
+#include <string>
+
+namespace Catch {
+ void writeToDebugConsole( std::string const& text );
+}
+
+// end catch_debug_console.h
+#if defined(CATCH_CONFIG_ANDROID_LOGWRITE)
+#include <android/log.h>
+
+ namespace Catch {
+ void writeToDebugConsole( std::string const& text ) {
+ __android_log_write( ANDROID_LOG_DEBUG, "Catch", text.c_str() );
+ }
+ }
+
+#elif defined(CATCH_PLATFORM_WINDOWS)
+
+ namespace Catch {
+ void writeToDebugConsole( std::string const& text ) {
+ ::OutputDebugStringA( text.c_str() );
+ }
+ }
+
+#else
+
+ namespace Catch {
+ void writeToDebugConsole( std::string const& text ) {
+ // !TBD: Need a version for Mac/ XCode and other IDEs
+ Catch::cout() << text;
+ }
+ }
+
+#endif // Platform
+// end catch_debug_console.cpp
+// start catch_debugger.cpp
+
+#if defined(CATCH_PLATFORM_MAC) || defined(CATCH_PLATFORM_IPHONE)
+
+# include <cassert>
+# include <sys/types.h>
+# include <unistd.h>
+# include <cstddef>
+# include <ostream>
+
+#ifdef __apple_build_version__
+ // These headers will only compile with AppleClang (XCode)
+ // For other compilers (Clang, GCC, ... ) we need to exclude them
+# include <sys/sysctl.h>
+#endif
+
+ namespace Catch {
+ #ifdef __apple_build_version__
+ // The following function is taken directly from the following technical note:
+ // https://developer.apple.com/library/archive/qa/qa1361/_index.html
+
+ // Returns true if the current process is being debugged (either
+ // running under the debugger or has a debugger attached post facto).
+ bool isDebuggerActive(){
+ int mib[4];
+ struct kinfo_proc info;
+ std::size_t size;
+
+ // Initialize the flags so that, if sysctl fails for some bizarre
+ // reason, we get a predictable result.
+
+ info.kp_proc.p_flag = 0;
+
+ // Initialize mib, which tells sysctl the info we want, in this case
+ // we're looking for information about a specific process ID.
+
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PROC;
+ mib[2] = KERN_PROC_PID;
+ mib[3] = getpid();
+
+ // Call sysctl.
+
+ size = sizeof(info);
+ if( sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, nullptr, 0) != 0 ) {
+ Catch::cerr() << "\n** Call to sysctl failed - unable to determine if debugger is active **\n" << std::endl;
+ return false;
+ }
+
+ // We're being debugged if the P_TRACED flag is set.
+
+ return ( (info.kp_proc.p_flag & P_TRACED) != 0 );
+ }
+ #else
+ bool isDebuggerActive() {
+ // We need to find another way to determine this for non-appleclang compilers on macOS
+ return false;
+ }
+ #endif
+ } // namespace Catch
+
+#elif defined(CATCH_PLATFORM_LINUX)
+ #include <fstream>
+ #include <string>
+
+ namespace Catch{
+ // The standard POSIX way of detecting a debugger is to attempt to
+ // ptrace() the process, but this needs to be done from a child and not
+ // this process itself to still allow attaching to this process later
+ // if wanted, so is rather heavy. Under Linux we have the PID of the
+ // "debugger" (which doesn't need to be gdb, of course, it could also
+ // be strace, for example) in /proc/$PID/status, so just get it from
+ // there instead.
+ bool isDebuggerActive(){
+ // Libstdc++ has a bug, where std::ifstream sets errno to 0
+ // This way our users can properly assert over errno values
+ ErrnoGuard guard;
+ std::ifstream in("/proc/self/status");
+ for( std::string line; std::getline(in, line); ) {
+ static const int PREFIX_LEN = 11;
+ if( line.compare(0, PREFIX_LEN, "TracerPid:\t") == 0 ) {
+ // We're traced if the PID is not 0 and no other PID starts
+ // with 0 digit, so it's enough to check for just a single
+ // character.
+ return line.length() > PREFIX_LEN && line[PREFIX_LEN] != '0';
+ }
+ }
+
+ return false;
+ }
+ } // namespace Catch
+#elif defined(_MSC_VER)
+ extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent();
+ namespace Catch {
+ bool isDebuggerActive() {
+ return IsDebuggerPresent() != 0;
+ }
+ }
+#elif defined(__MINGW32__)
+ extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent();
+ namespace Catch {
+ bool isDebuggerActive() {
+ return IsDebuggerPresent() != 0;
+ }
+ }
+#else
+ namespace Catch {
+ bool isDebuggerActive() { return false; }
+ }
+#endif // Platform
+// end catch_debugger.cpp
+// start catch_decomposer.cpp
+
+namespace Catch {
+
+ ITransientExpression::~ITransientExpression() = default;
+
+ void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs ) {
+ if( lhs.size() + rhs.size() < 40 &&
+ lhs.find('\n') == std::string::npos &&
+ rhs.find('\n') == std::string::npos )
+ os << lhs << " " << op << " " << rhs;
+ else
+ os << lhs << "\n" << op << "\n" << rhs;
+ }
+}
+// end catch_decomposer.cpp
+// start catch_enforce.cpp
+
+#include <stdexcept>
+
+namespace Catch {
+#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) && !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER)
+ [[noreturn]]
+ void throw_exception(std::exception const& e) {
+ Catch::cerr() << "Catch will terminate because it needed to throw an exception.\n"
+ << "The message was: " << e.what() << '\n';
+ std::terminate();
+ }
+#endif
+
+ [[noreturn]]
+ void throw_logic_error(std::string const& msg) {
+ throw_exception(std::logic_error(msg));
+ }
+
+ [[noreturn]]
+ void throw_domain_error(std::string const& msg) {
+ throw_exception(std::domain_error(msg));
+ }
+
+ [[noreturn]]
+ void throw_runtime_error(std::string const& msg) {
+ throw_exception(std::runtime_error(msg));
+ }
+
+} // namespace Catch;
+// end catch_enforce.cpp
+// start catch_enum_values_registry.cpp
+// start catch_enum_values_registry.h
+
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ namespace Detail {
+
+ std::unique_ptr<EnumInfo> makeEnumInfo( StringRef enumName, StringRef allValueNames, std::vector<int> const& values );
+
+ class EnumValuesRegistry : public IMutableEnumValuesRegistry {
+
+ std::vector<std::unique_ptr<EnumInfo>> m_enumInfos;
+
+ EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::vector<int> const& values) override;
+ };
+
+ std::vector<StringRef> parseEnums( StringRef enums );
+
+ } // Detail
+
+} // Catch
+
+// end catch_enum_values_registry.h
+
+#include <map>
+#include <cassert>
+
+namespace Catch {
+
+ IMutableEnumValuesRegistry::~IMutableEnumValuesRegistry() {}
+
+ namespace Detail {
+
+ namespace {
+ // Extracts the actual name part of an enum instance
+ // In other words, it returns the Blue part of Bikeshed::Colour::Blue
+ StringRef extractInstanceName(StringRef enumInstance) {
+ // Find last occurrence of ":"
+ size_t name_start = enumInstance.size();
+ while (name_start > 0 && enumInstance[name_start - 1] != ':') {
+ --name_start;
+ }
+ return enumInstance.substr(name_start, enumInstance.size() - name_start);
+ }
+ }
+
+ std::vector<StringRef> parseEnums( StringRef enums ) {
+ auto enumValues = splitStringRef( enums, ',' );
+ std::vector<StringRef> parsed;
+ parsed.reserve( enumValues.size() );
+ for( auto const& enumValue : enumValues ) {
+ parsed.push_back(trim(extractInstanceName(enumValue)));
+ }
+ return parsed;
+ }
+
+ EnumInfo::~EnumInfo() {}
+
+ StringRef EnumInfo::lookup( int value ) const {
+ for( auto const& valueToName : m_values ) {
+ if( valueToName.first == value )
+ return valueToName.second;
+ }
+ return "{** unexpected enum value **}"_sr;
+ }
+
+ std::unique_ptr<EnumInfo> makeEnumInfo( StringRef enumName, StringRef allValueNames, std::vector<int> const& values ) {
+ std::unique_ptr<EnumInfo> enumInfo( new EnumInfo );
+ enumInfo->m_name = enumName;
+ enumInfo->m_values.reserve( values.size() );
+
+ const auto valueNames = Catch::Detail::parseEnums( allValueNames );
+ assert( valueNames.size() == values.size() );
+ std::size_t i = 0;
+ for( auto value : values )
+ enumInfo->m_values.emplace_back(value, valueNames[i++]);
+
+ return enumInfo;
+ }
+
+ EnumInfo const& EnumValuesRegistry::registerEnum( StringRef enumName, StringRef allValueNames, std::vector<int> const& values ) {
+ m_enumInfos.push_back(makeEnumInfo(enumName, allValueNames, values));
+ return *m_enumInfos.back();
+ }
+
+ } // Detail
+} // Catch
+
+// end catch_enum_values_registry.cpp
+// start catch_errno_guard.cpp
+
+#include <cerrno>
+
+namespace Catch {
+ ErrnoGuard::ErrnoGuard():m_oldErrno(errno){}
+ ErrnoGuard::~ErrnoGuard() { errno = m_oldErrno; }
+}
+// end catch_errno_guard.cpp
+// start catch_exception_translator_registry.cpp
+
+// start catch_exception_translator_registry.h
+
+#include <vector>
+#include <string>
+#include <memory>
+
+namespace Catch {
+
+ class ExceptionTranslatorRegistry : public IExceptionTranslatorRegistry {
+ public:
+ ~ExceptionTranslatorRegistry();
+ virtual void registerTranslator( const IExceptionTranslator* translator );
+ std::string translateActiveException() const override;
+ std::string tryTranslators() const;
+
+ private:
+ std::vector<std::unique_ptr<IExceptionTranslator const>> m_translators;
+ };
+}
+
+// end catch_exception_translator_registry.h
+#ifdef __OBJC__
+#import "Foundation/Foundation.h"
+#endif
+
+namespace Catch {
+
+ ExceptionTranslatorRegistry::~ExceptionTranslatorRegistry() {
+ }
+
+ void ExceptionTranslatorRegistry::registerTranslator( const IExceptionTranslator* translator ) {
+ m_translators.push_back( std::unique_ptr<const IExceptionTranslator>( translator ) );
+ }
+
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ std::string ExceptionTranslatorRegistry::translateActiveException() const {
+ try {
+#ifdef __OBJC__
+ // In Objective-C try objective-c exceptions first
+ @try {
+ return tryTranslators();
+ }
+ @catch (NSException *exception) {
+ return Catch::Detail::stringify( [exception description] );
+ }
+#else
+ // Compiling a mixed mode project with MSVC means that CLR
+ // exceptions will be caught in (...) as well. However, these
+ // do not fill-in std::current_exception and thus lead to crash
+ // when attempting rethrow.
+ // /EHa switch also causes structured exceptions to be caught
+ // here, but they fill-in current_exception properly, so
+ // at worst the output should be a little weird, instead of
+ // causing a crash.
+ if (std::current_exception() == nullptr) {
+ return "Non C++ exception. Possibly a CLR exception.";
+ }
+ return tryTranslators();
+#endif
+ }
+ catch( TestFailureException& ) {
+ std::rethrow_exception(std::current_exception());
+ }
+ catch( std::exception& ex ) {
+ return ex.what();
+ }
+ catch( std::string& msg ) {
+ return msg;
+ }
+ catch( const char* msg ) {
+ return msg;
+ }
+ catch(...) {
+ return "Unknown exception";
+ }
+ }
+
+ std::string ExceptionTranslatorRegistry::tryTranslators() const {
+ if (m_translators.empty()) {
+ std::rethrow_exception(std::current_exception());
+ } else {
+ return m_translators[0]->translate(m_translators.begin() + 1, m_translators.end());
+ }
+ }
+
+#else // ^^ Exceptions are enabled // Exceptions are disabled vv
+ std::string ExceptionTranslatorRegistry::translateActiveException() const {
+ CATCH_INTERNAL_ERROR("Attempted to translate active exception under CATCH_CONFIG_DISABLE_EXCEPTIONS!");
+ }
+
+ std::string ExceptionTranslatorRegistry::tryTranslators() const {
+ CATCH_INTERNAL_ERROR("Attempted to use exception translators under CATCH_CONFIG_DISABLE_EXCEPTIONS!");
+ }
+#endif
+
+}
+// end catch_exception_translator_registry.cpp
+// start catch_fatal_condition.cpp
+
+#include <algorithm>
+
+#if !defined( CATCH_CONFIG_WINDOWS_SEH ) && !defined( CATCH_CONFIG_POSIX_SIGNALS )
+
+namespace Catch {
+
+ // If neither SEH nor signal handling is required, the handler impls
+ // do not have to do anything, and can be empty.
+ void FatalConditionHandler::engage_platform() {}
+ void FatalConditionHandler::disengage_platform() {}
+ FatalConditionHandler::FatalConditionHandler() = default;
+ FatalConditionHandler::~FatalConditionHandler() = default;
+
+} // end namespace Catch
+
+#endif // !CATCH_CONFIG_WINDOWS_SEH && !CATCH_CONFIG_POSIX_SIGNALS
+
+#if defined( CATCH_CONFIG_WINDOWS_SEH ) && defined( CATCH_CONFIG_POSIX_SIGNALS )
+#error "Inconsistent configuration: Windows' SEH handling and POSIX signals cannot be enabled at the same time"
+#endif // CATCH_CONFIG_WINDOWS_SEH && CATCH_CONFIG_POSIX_SIGNALS
+
+#if defined( CATCH_CONFIG_WINDOWS_SEH ) || defined( CATCH_CONFIG_POSIX_SIGNALS )
+
+namespace {
+ //! Signals fatal error message to the run context
+ void reportFatal( char const * const message ) {
+ Catch::getCurrentContext().getResultCapture()->handleFatalErrorCondition( message );
+ }
+
+ //! Minimal size Catch2 needs for its own fatal error handling.
+ //! Picked anecdotally, so it might not be sufficient on all
+ //! platforms, and for all configurations.
+ constexpr std::size_t minStackSizeForErrors = 32 * 1024;
+} // end unnamed namespace
+
+#endif // CATCH_CONFIG_WINDOWS_SEH || CATCH_CONFIG_POSIX_SIGNALS
+
+#if defined( CATCH_CONFIG_WINDOWS_SEH )
+
+namespace Catch {
+
+ struct SignalDefs { DWORD id; const char* name; };
+
+ // There is no 1-1 mapping between signals and windows exceptions.
+ // Windows can easily distinguish between SO and SigSegV,
+ // but SigInt, SigTerm, etc are handled differently.
+ static SignalDefs signalDefs[] = {
+ { static_cast<DWORD>(EXCEPTION_ILLEGAL_INSTRUCTION), "SIGILL - Illegal instruction signal" },
+ { static_cast<DWORD>(EXCEPTION_STACK_OVERFLOW), "SIGSEGV - Stack overflow" },
+ { static_cast<DWORD>(EXCEPTION_ACCESS_VIOLATION), "SIGSEGV - Segmentation violation signal" },
+ { static_cast<DWORD>(EXCEPTION_INT_DIVIDE_BY_ZERO), "Divide by zero error" },
+ };
+
+ static LONG CALLBACK handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) {
+ for (auto const& def : signalDefs) {
+ if (ExceptionInfo->ExceptionRecord->ExceptionCode == def.id) {
+ reportFatal(def.name);
+ }
+ }
+ // If its not an exception we care about, pass it along.
+ // This stops us from eating debugger breaks etc.
+ return EXCEPTION_CONTINUE_SEARCH;
+ }
+
+ // Since we do not support multiple instantiations, we put these
+ // into global variables and rely on cleaning them up in outlined
+ // constructors/destructors
+ static PVOID exceptionHandlerHandle = nullptr;
+
+ // For MSVC, we reserve part of the stack memory for handling
+ // memory overflow structured exception.
+ FatalConditionHandler::FatalConditionHandler() {
+ ULONG guaranteeSize = static_cast<ULONG>(minStackSizeForErrors);
+ if (!SetThreadStackGuarantee(&guaranteeSize)) {
+ // We do not want to fully error out, because needing
+ // the stack reserve should be rare enough anyway.
+ Catch::cerr()
+ << "Failed to reserve piece of stack."
+ << " Stack overflows will not be reported successfully.";
+ }
+ }
+
+ // We do not attempt to unset the stack guarantee, because
+ // Windows does not support lowering the stack size guarantee.
+ FatalConditionHandler::~FatalConditionHandler() = default;
+
+ void FatalConditionHandler::engage_platform() {
+ // Register as first handler in current chain
+ exceptionHandlerHandle = AddVectoredExceptionHandler(1, handleVectoredException);
+ if (!exceptionHandlerHandle) {
+ CATCH_RUNTIME_ERROR("Could not register vectored exception handler");
+ }
+ }
+
+ void FatalConditionHandler::disengage_platform() {
+ if (!RemoveVectoredExceptionHandler(exceptionHandlerHandle)) {
+ CATCH_RUNTIME_ERROR("Could not unregister vectored exception handler");
+ }
+ exceptionHandlerHandle = nullptr;
+ }
+
+} // end namespace Catch
+
+#endif // CATCH_CONFIG_WINDOWS_SEH
+
+#if defined( CATCH_CONFIG_POSIX_SIGNALS )
+
+#include <signal.h>
+
+namespace Catch {
+
+ struct SignalDefs {
+ int id;
+ const char* name;
+ };
+
+ static SignalDefs signalDefs[] = {
+ { SIGINT, "SIGINT - Terminal interrupt signal" },
+ { SIGILL, "SIGILL - Illegal instruction signal" },
+ { SIGFPE, "SIGFPE - Floating point error signal" },
+ { SIGSEGV, "SIGSEGV - Segmentation violation signal" },
+ { SIGTERM, "SIGTERM - Termination request signal" },
+ { SIGABRT, "SIGABRT - Abort (abnormal termination) signal" }
+ };
+
+// Older GCCs trigger -Wmissing-field-initializers for T foo = {}
+// which is zero initialization, but not explicit. We want to avoid
+// that.
+#if defined(__GNUC__)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+#endif
+
+ static char* altStackMem = nullptr;
+ static std::size_t altStackSize = 0;
+ static stack_t oldSigStack{};
+ static struct sigaction oldSigActions[sizeof(signalDefs) / sizeof(SignalDefs)]{};
+
+ static void restorePreviousSignalHandlers() {
+ // We set signal handlers back to the previous ones. Hopefully
+ // nobody overwrote them in the meantime, and doesn't expect
+ // their signal handlers to live past ours given that they
+ // installed them after ours..
+ for (std::size_t i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) {
+ sigaction(signalDefs[i].id, &oldSigActions[i], nullptr);
+ }
+ // Return the old stack
+ sigaltstack(&oldSigStack, nullptr);
+ }
+
+ static void handleSignal( int sig ) {
+ char const * name = "<unknown signal>";
+ for (auto const& def : signalDefs) {
+ if (sig == def.id) {
+ name = def.name;
+ break;
+ }
+ }
+ // We need to restore previous signal handlers and let them do
+ // their thing, so that the users can have the debugger break
+ // when a signal is raised, and so on.
+ restorePreviousSignalHandlers();
+ reportFatal( name );
+ raise( sig );
+ }
+
+ FatalConditionHandler::FatalConditionHandler() {
+ assert(!altStackMem && "Cannot initialize POSIX signal handler when one already exists");
+ if (altStackSize == 0) {
+ altStackSize = std::max(static_cast<size_t>(SIGSTKSZ), minStackSizeForErrors);
+ }
+ altStackMem = new char[altStackSize]();
+ }
+
+ FatalConditionHandler::~FatalConditionHandler() {
+ delete[] altStackMem;
+ // We signal that another instance can be constructed by zeroing
+ // out the pointer.
+ altStackMem = nullptr;
+ }
+
+ void FatalConditionHandler::engage_platform() {
+ stack_t sigStack;
+ sigStack.ss_sp = altStackMem;
+ sigStack.ss_size = altStackSize;
+ sigStack.ss_flags = 0;
+ sigaltstack(&sigStack, &oldSigStack);
+ struct sigaction sa = { };
+
+ sa.sa_handler = handleSignal;
+ sa.sa_flags = SA_ONSTACK;
+ for (std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i) {
+ sigaction(signalDefs[i].id, &sa, &oldSigActions[i]);
+ }
+ }
+
+#if defined(__GNUC__)
+# pragma GCC diagnostic pop
+#endif
+
+ void FatalConditionHandler::disengage_platform() {
+ restorePreviousSignalHandlers();
+ }
+
+} // end namespace Catch
+
+#endif // CATCH_CONFIG_POSIX_SIGNALS
+// end catch_fatal_condition.cpp
+// start catch_generators.cpp
+
+#include <limits>
+#include <set>
+
+namespace Catch {
+
+IGeneratorTracker::~IGeneratorTracker() {}
+
+const char* GeneratorException::what() const noexcept {
+ return m_msg;
+}
+
+namespace Generators {
+
+ GeneratorUntypedBase::~GeneratorUntypedBase() {}
+
+ auto acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker& {
+ return getResultCapture().acquireGeneratorTracker( generatorName, lineInfo );
+ }
+
+} // namespace Generators
+} // namespace Catch
+// end catch_generators.cpp
+// start catch_interfaces_capture.cpp
+
+namespace Catch {
+ IResultCapture::~IResultCapture() = default;
+}
+// end catch_interfaces_capture.cpp
+// start catch_interfaces_config.cpp
+
+namespace Catch {
+ IConfig::~IConfig() = default;
+}
+// end catch_interfaces_config.cpp
+// start catch_interfaces_exception.cpp
+
+namespace Catch {
+ IExceptionTranslator::~IExceptionTranslator() = default;
+ IExceptionTranslatorRegistry::~IExceptionTranslatorRegistry() = default;
+}
+// end catch_interfaces_exception.cpp
+// start catch_interfaces_registry_hub.cpp
+
+namespace Catch {
+ IRegistryHub::~IRegistryHub() = default;
+ IMutableRegistryHub::~IMutableRegistryHub() = default;
+}
+// end catch_interfaces_registry_hub.cpp
+// start catch_interfaces_reporter.cpp
+
+// start catch_reporter_listening.h
+
+namespace Catch {
+
+ class ListeningReporter : public IStreamingReporter {
+ using Reporters = std::vector<IStreamingReporterPtr>;
+ Reporters m_listeners;
+ IStreamingReporterPtr m_reporter = nullptr;
+ ReporterPreferences m_preferences;
+
+ public:
+ ListeningReporter();
+
+ void addListener( IStreamingReporterPtr&& listener );
+ void addReporter( IStreamingReporterPtr&& reporter );
+
+ public: // IStreamingReporter
+
+ ReporterPreferences getPreferences() const override;
+
+ void noMatchingTestCases( std::string const& spec ) override;
+
+ void reportInvalidArguments(std::string const&arg) override;
+
+ static std::set<Verbosity> getSupportedVerbosities();
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void benchmarkPreparing(std::string const& name) override;
+ void benchmarkStarting( BenchmarkInfo const& benchmarkInfo ) override;
+ void benchmarkEnded( BenchmarkStats<> const& benchmarkStats ) override;
+ void benchmarkFailed(std::string const&) override;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void testRunStarting( TestRunInfo const& testRunInfo ) override;
+ void testGroupStarting( GroupInfo const& groupInfo ) override;
+ void testCaseStarting( TestCaseInfo const& testInfo ) override;
+ void sectionStarting( SectionInfo const& sectionInfo ) override;
+ void assertionStarting( AssertionInfo const& assertionInfo ) override;
+
+ // The return value indicates if the messages buffer should be cleared:
+ bool assertionEnded( AssertionStats const& assertionStats ) override;
+ void sectionEnded( SectionStats const& sectionStats ) override;
+ void testCaseEnded( TestCaseStats const& testCaseStats ) override;
+ void testGroupEnded( TestGroupStats const& testGroupStats ) override;
+ void testRunEnded( TestRunStats const& testRunStats ) override;
+
+ void skipTest( TestCaseInfo const& testInfo ) override;
+ bool isMulti() const override;
+
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_listening.h
+namespace Catch {
+
+ ReporterConfig::ReporterConfig( IConfigPtr const& _fullConfig )
+ : m_stream( &_fullConfig->stream() ), m_fullConfig( _fullConfig ) {}
+
+ ReporterConfig::ReporterConfig( IConfigPtr const& _fullConfig, std::ostream& _stream )
+ : m_stream( &_stream ), m_fullConfig( _fullConfig ) {}
+
+ std::ostream& ReporterConfig::stream() const { return *m_stream; }
+ IConfigPtr ReporterConfig::fullConfig() const { return m_fullConfig; }
+
+ TestRunInfo::TestRunInfo( std::string const& _name ) : name( _name ) {}
+
+ GroupInfo::GroupInfo( std::string const& _name,
+ std::size_t _groupIndex,
+ std::size_t _groupsCount )
+ : name( _name ),
+ groupIndex( _groupIndex ),
+ groupsCounts( _groupsCount )
+ {}
+
+ AssertionStats::AssertionStats( AssertionResult const& _assertionResult,
+ std::vector<MessageInfo> const& _infoMessages,
+ Totals const& _totals )
+ : assertionResult( _assertionResult ),
+ infoMessages( _infoMessages ),
+ totals( _totals )
+ {
+ assertionResult.m_resultData.lazyExpression.m_transientExpression = _assertionResult.m_resultData.lazyExpression.m_transientExpression;
+
+ if( assertionResult.hasMessage() ) {
+ // Copy message into messages list.
+ // !TBD This should have been done earlier, somewhere
+ MessageBuilder builder( assertionResult.getTestMacroName(), assertionResult.getSourceInfo(), assertionResult.getResultType() );
+ builder << assertionResult.getMessage();
+ builder.m_info.message = builder.m_stream.str();
+
+ infoMessages.push_back( builder.m_info );
+ }
+ }
+
+ AssertionStats::~AssertionStats() = default;
+
+ SectionStats::SectionStats( SectionInfo const& _sectionInfo,
+ Counts const& _assertions,
+ double _durationInSeconds,
+ bool _missingAssertions )
+ : sectionInfo( _sectionInfo ),
+ assertions( _assertions ),
+ durationInSeconds( _durationInSeconds ),
+ missingAssertions( _missingAssertions )
+ {}
+
+ SectionStats::~SectionStats() = default;
+
+ TestCaseStats::TestCaseStats( TestCaseInfo const& _testInfo,
+ Totals const& _totals,
+ std::string const& _stdOut,
+ std::string const& _stdErr,
+ bool _aborting )
+ : testInfo( _testInfo ),
+ totals( _totals ),
+ stdOut( _stdOut ),
+ stdErr( _stdErr ),
+ aborting( _aborting )
+ {}
+
+ TestCaseStats::~TestCaseStats() = default;
+
+ TestGroupStats::TestGroupStats( GroupInfo const& _groupInfo,
+ Totals const& _totals,
+ bool _aborting )
+ : groupInfo( _groupInfo ),
+ totals( _totals ),
+ aborting( _aborting )
+ {}
+
+ TestGroupStats::TestGroupStats( GroupInfo const& _groupInfo )
+ : groupInfo( _groupInfo ),
+ aborting( false )
+ {}
+
+ TestGroupStats::~TestGroupStats() = default;
+
+ TestRunStats::TestRunStats( TestRunInfo const& _runInfo,
+ Totals const& _totals,
+ bool _aborting )
+ : runInfo( _runInfo ),
+ totals( _totals ),
+ aborting( _aborting )
+ {}
+
+ TestRunStats::~TestRunStats() = default;
+
+ void IStreamingReporter::fatalErrorEncountered( StringRef ) {}
+ bool IStreamingReporter::isMulti() const { return false; }
+
+ IReporterFactory::~IReporterFactory() = default;
+ IReporterRegistry::~IReporterRegistry() = default;
+
+} // end namespace Catch
+// end catch_interfaces_reporter.cpp
+// start catch_interfaces_runner.cpp
+
+namespace Catch {
+ IRunner::~IRunner() = default;
+}
+// end catch_interfaces_runner.cpp
+// start catch_interfaces_testcase.cpp
+
+namespace Catch {
+ ITestInvoker::~ITestInvoker() = default;
+ ITestCaseRegistry::~ITestCaseRegistry() = default;
+}
+// end catch_interfaces_testcase.cpp
+// start catch_leak_detector.cpp
+
+#ifdef CATCH_CONFIG_WINDOWS_CRTDBG
+#include <crtdbg.h>
+
+namespace Catch {
+
+ LeakDetector::LeakDetector() {
+ int flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
+ flag |= _CRTDBG_LEAK_CHECK_DF;
+ flag |= _CRTDBG_ALLOC_MEM_DF;
+ _CrtSetDbgFlag(flag);
+ _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
+ // Change this to leaking allocation's number to break there
+ _CrtSetBreakAlloc(-1);
+ }
+}
+
+#else
+
+ Catch::LeakDetector::LeakDetector() {}
+
+#endif
+
+Catch::LeakDetector::~LeakDetector() {
+ Catch::cleanUp();
+}
+// end catch_leak_detector.cpp
+// start catch_list.cpp
+
+// start catch_list.h
+
+#include <set>
+
+namespace Catch {
+
+ std::size_t listTests( Config const& config );
+
+ std::size_t listTestsNamesOnly( Config const& config );
+
+ struct TagInfo {
+ void add( std::string const& spelling );
+ std::string all() const;
+
+ std::set<std::string> spellings;
+ std::size_t count = 0;
+ };
+
+ std::size_t listTags( Config const& config );
+
+ std::size_t listReporters();
+
+ Option<std::size_t> list( std::shared_ptr<Config> const& config );
+
+} // end namespace Catch
+
+// end catch_list.h
+// start catch_text.h
+
+namespace Catch {
+ using namespace clara::TextFlow;
+}
+
+// end catch_text.h
+#include <limits>
+#include <algorithm>
+#include <iomanip>
+
+namespace Catch {
+
+ std::size_t listTests( Config const& config ) {
+ TestSpec const& testSpec = config.testSpec();
+ if( config.hasTestFilters() )
+ Catch::cout() << "Matching test cases:\n";
+ else {
+ Catch::cout() << "All available test cases:\n";
+ }
+
+ auto matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config );
+ for( auto const& testCaseInfo : matchedTestCases ) {
+ Colour::Code colour = testCaseInfo.isHidden()
+ ? Colour::SecondaryText
+ : Colour::None;
+ Colour colourGuard( colour );
+
+ Catch::cout() << Column( testCaseInfo.name ).initialIndent( 2 ).indent( 4 ) << "\n";
+ if( config.verbosity() >= Verbosity::High ) {
+ Catch::cout() << Column( Catch::Detail::stringify( testCaseInfo.lineInfo ) ).indent(4) << std::endl;
+ std::string description = testCaseInfo.description;
+ if( description.empty() )
+ description = "(NO DESCRIPTION)";
+ Catch::cout() << Column( description ).indent(4) << std::endl;
+ }
+ if( !testCaseInfo.tags.empty() )
+ Catch::cout() << Column( testCaseInfo.tagsAsString() ).indent( 6 ) << "\n";
+ }
+
+ if( !config.hasTestFilters() )
+ Catch::cout() << pluralise( matchedTestCases.size(), "test case" ) << '\n' << std::endl;
+ else
+ Catch::cout() << pluralise( matchedTestCases.size(), "matching test case" ) << '\n' << std::endl;
+ return matchedTestCases.size();
+ }
+
+ std::size_t listTestsNamesOnly( Config const& config ) {
+ TestSpec const& testSpec = config.testSpec();
+ std::size_t matchedTests = 0;
+ std::vector<TestCase> matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config );
+ for( auto const& testCaseInfo : matchedTestCases ) {
+ matchedTests++;
+ if( startsWith( testCaseInfo.name, '#' ) )
+ Catch::cout() << '"' << testCaseInfo.name << '"';
+ else
+ Catch::cout() << testCaseInfo.name;
+ if ( config.verbosity() >= Verbosity::High )
+ Catch::cout() << "\t@" << testCaseInfo.lineInfo;
+ Catch::cout() << std::endl;
+ }
+ return matchedTests;
+ }
+
+ void TagInfo::add( std::string const& spelling ) {
+ ++count;
+ spellings.insert( spelling );
+ }
+
+ std::string TagInfo::all() const {
+ size_t size = 0;
+ for (auto const& spelling : spellings) {
+ // Add 2 for the brackes
+ size += spelling.size() + 2;
+ }
+
+ std::string out; out.reserve(size);
+ for (auto const& spelling : spellings) {
+ out += '[';
+ out += spelling;
+ out += ']';
+ }
+ return out;
+ }
+
+ std::size_t listTags( Config const& config ) {
+ TestSpec const& testSpec = config.testSpec();
+ if( config.hasTestFilters() )
+ Catch::cout() << "Tags for matching test cases:\n";
+ else {
+ Catch::cout() << "All available tags:\n";
+ }
+
+ std::map<std::string, TagInfo> tagCounts;
+
+ std::vector<TestCase> matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config );
+ for( auto const& testCase : matchedTestCases ) {
+ for( auto const& tagName : testCase.getTestCaseInfo().tags ) {
+ std::string lcaseTagName = toLower( tagName );
+ auto countIt = tagCounts.find( lcaseTagName );
+ if( countIt == tagCounts.end() )
+ countIt = tagCounts.insert( std::make_pair( lcaseTagName, TagInfo() ) ).first;
+ countIt->second.add( tagName );
+ }
+ }
+
+ for( auto const& tagCount : tagCounts ) {
+ ReusableStringStream rss;
+ rss << " " << std::setw(2) << tagCount.second.count << " ";
+ auto str = rss.str();
+ auto wrapper = Column( tagCount.second.all() )
+ .initialIndent( 0 )
+ .indent( str.size() )
+ .width( CATCH_CONFIG_CONSOLE_WIDTH-10 );
+ Catch::cout() << str << wrapper << '\n';
+ }
+ Catch::cout() << pluralise( tagCounts.size(), "tag" ) << '\n' << std::endl;
+ return tagCounts.size();
+ }
+
+ std::size_t listReporters() {
+ Catch::cout() << "Available reporters:\n";
+ IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories();
+ std::size_t maxNameLen = 0;
+ for( auto const& factoryKvp : factories )
+ maxNameLen = (std::max)( maxNameLen, factoryKvp.first.size() );
+
+ for( auto const& factoryKvp : factories ) {
+ Catch::cout()
+ << Column( factoryKvp.first + ":" )
+ .indent(2)
+ .width( 5+maxNameLen )
+ + Column( factoryKvp.second->getDescription() )
+ .initialIndent(0)
+ .indent(2)
+ .width( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen-8 )
+ << "\n";
+ }
+ Catch::cout() << std::endl;
+ return factories.size();
+ }
+
+ Option<std::size_t> list( std::shared_ptr<Config> const& config ) {
+ Option<std::size_t> listedCount;
+ getCurrentMutableContext().setConfig( config );
+ if( config->listTests() )
+ listedCount = listedCount.valueOr(0) + listTests( *config );
+ if( config->listTestNamesOnly() )
+ listedCount = listedCount.valueOr(0) + listTestsNamesOnly( *config );
+ if( config->listTags() )
+ listedCount = listedCount.valueOr(0) + listTags( *config );
+ if( config->listReporters() )
+ listedCount = listedCount.valueOr(0) + listReporters();
+ return listedCount;
+ }
+
+} // end namespace Catch
+// end catch_list.cpp
+// start catch_matchers.cpp
+
+namespace Catch {
+namespace Matchers {
+ namespace Impl {
+
+ std::string MatcherUntypedBase::toString() const {
+ if( m_cachedToString.empty() )
+ m_cachedToString = describe();
+ return m_cachedToString;
+ }
+
+ MatcherUntypedBase::~MatcherUntypedBase() = default;
+
+ } // namespace Impl
+} // namespace Matchers
+
+using namespace Matchers;
+using Matchers::Impl::MatcherBase;
+
+} // namespace Catch
+// end catch_matchers.cpp
+// start catch_matchers_exception.cpp
+
+namespace Catch {
+namespace Matchers {
+namespace Exception {
+
+bool ExceptionMessageMatcher::match(std::exception const& ex) const {
+ return ex.what() == m_message;
+}
+
+std::string ExceptionMessageMatcher::describe() const {
+ return "exception message matches \"" + m_message + "\"";
+}
+
+}
+Exception::ExceptionMessageMatcher Message(std::string const& message) {
+ return Exception::ExceptionMessageMatcher(message);
+}
+
+// namespace Exception
+} // namespace Matchers
+} // namespace Catch
+// end catch_matchers_exception.cpp
+// start catch_matchers_floating.cpp
+
+// start catch_polyfills.hpp
+
+namespace Catch {
+ bool isnan(float f);
+ bool isnan(double d);
+}
+
+// end catch_polyfills.hpp
+// start catch_to_string.hpp
+
+#include <string>
+
+namespace Catch {
+ template <typename T>
+ std::string to_string(T const& t) {
+#if defined(CATCH_CONFIG_CPP11_TO_STRING)
+ return std::to_string(t);
+#else
+ ReusableStringStream rss;
+ rss << t;
+ return rss.str();
+#endif
+ }
+} // end namespace Catch
+
+// end catch_to_string.hpp
+#include <algorithm>
+#include <cmath>
+#include <cstdlib>
+#include <cstdint>
+#include <cstring>
+#include <sstream>
+#include <type_traits>
+#include <iomanip>
+#include <limits>
+
+namespace Catch {
+namespace {
+
+ int32_t convert(float f) {
+ static_assert(sizeof(float) == sizeof(int32_t), "Important ULP matcher assumption violated");
+ int32_t i;
+ std::memcpy(&i, &f, sizeof(f));
+ return i;
+ }
+
+ int64_t convert(double d) {
+ static_assert(sizeof(double) == sizeof(int64_t), "Important ULP matcher assumption violated");
+ int64_t i;
+ std::memcpy(&i, &d, sizeof(d));
+ return i;
+ }
+
+ template <typename FP>
+ bool almostEqualUlps(FP lhs, FP rhs, uint64_t maxUlpDiff) {
+ // Comparison with NaN should always be false.
+ // This way we can rule it out before getting into the ugly details
+ if (Catch::isnan(lhs) || Catch::isnan(rhs)) {
+ return false;
+ }
+
+ auto lc = convert(lhs);
+ auto rc = convert(rhs);
+
+ if ((lc < 0) != (rc < 0)) {
+ // Potentially we can have +0 and -0
+ return lhs == rhs;
+ }
+
+ // static cast as a workaround for IBM XLC
+ auto ulpDiff = std::abs(static_cast<FP>(lc - rc));
+ return static_cast<uint64_t>(ulpDiff) <= maxUlpDiff;
+ }
+
+#if defined(CATCH_CONFIG_GLOBAL_NEXTAFTER)
+
+ float nextafter(float x, float y) {
+ return ::nextafterf(x, y);
+ }
+
+ double nextafter(double x, double y) {
+ return ::nextafter(x, y);
+ }
+
+#endif // ^^^ CATCH_CONFIG_GLOBAL_NEXTAFTER ^^^
+
+template <typename FP>
+FP step(FP start, FP direction, uint64_t steps) {
+ for (uint64_t i = 0; i < steps; ++i) {
+#if defined(CATCH_CONFIG_GLOBAL_NEXTAFTER)
+ start = Catch::nextafter(start, direction);
+#else
+ start = std::nextafter(start, direction);
+#endif
+ }
+ return start;
+}
+
+// Performs equivalent check of std::fabs(lhs - rhs) <= margin
+// But without the subtraction to allow for INFINITY in comparison
+bool marginComparison(double lhs, double rhs, double margin) {
+ return (lhs + margin >= rhs) && (rhs + margin >= lhs);
+}
+
+template <typename FloatingPoint>
+void write(std::ostream& out, FloatingPoint num) {
+ out << std::scientific
+ << std::setprecision(std::numeric_limits<FloatingPoint>::max_digits10 - 1)
+ << num;
+}
+
+} // end anonymous namespace
+
+namespace Matchers {
+namespace Floating {
+
+ enum class FloatingPointKind : uint8_t {
+ Float,
+ Double
+ };
+
+ WithinAbsMatcher::WithinAbsMatcher(double target, double margin)
+ :m_target{ target }, m_margin{ margin } {
+ CATCH_ENFORCE(margin >= 0, "Invalid margin: " << margin << '.'
+ << " Margin has to be non-negative.");
+ }
+
+ // Performs equivalent check of std::fabs(lhs - rhs) <= margin
+ // But without the subtraction to allow for INFINITY in comparison
+ bool WithinAbsMatcher::match(double const& matchee) const {
+ return (matchee + m_margin >= m_target) && (m_target + m_margin >= matchee);
+ }
+
+ std::string WithinAbsMatcher::describe() const {
+ return "is within " + ::Catch::Detail::stringify(m_margin) + " of " + ::Catch::Detail::stringify(m_target);
+ }
+
+ WithinUlpsMatcher::WithinUlpsMatcher(double target, uint64_t ulps, FloatingPointKind baseType)
+ :m_target{ target }, m_ulps{ ulps }, m_type{ baseType } {
+ CATCH_ENFORCE(m_type == FloatingPointKind::Double
+ || m_ulps < (std::numeric_limits<uint32_t>::max)(),
+ "Provided ULP is impossibly large for a float comparison.");
+ }
+
+#if defined(__clang__)
+#pragma clang diagnostic push
+// Clang <3.5 reports on the default branch in the switch below
+#pragma clang diagnostic ignored "-Wunreachable-code"
+#endif
+
+ bool WithinUlpsMatcher::match(double const& matchee) const {
+ switch (m_type) {
+ case FloatingPointKind::Float:
+ return almostEqualUlps<float>(static_cast<float>(matchee), static_cast<float>(m_target), m_ulps);
+ case FloatingPointKind::Double:
+ return almostEqualUlps<double>(matchee, m_target, m_ulps);
+ default:
+ CATCH_INTERNAL_ERROR( "Unknown FloatingPointKind value" );
+ }
+ }
+
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
+ std::string WithinUlpsMatcher::describe() const {
+ std::stringstream ret;
+
+ ret << "is within " << m_ulps << " ULPs of ";
+
+ if (m_type == FloatingPointKind::Float) {
+ write(ret, static_cast<float>(m_target));
+ ret << 'f';
+ } else {
+ write(ret, m_target);
+ }
+
+ ret << " ([";
+ if (m_type == FloatingPointKind::Double) {
+ write(ret, step(m_target, static_cast<double>(-INFINITY), m_ulps));
+ ret << ", ";
+ write(ret, step(m_target, static_cast<double>( INFINITY), m_ulps));
+ } else {
+ // We have to cast INFINITY to float because of MinGW, see #1782
+ write(ret, step(static_cast<float>(m_target), static_cast<float>(-INFINITY), m_ulps));
+ ret << ", ";
+ write(ret, step(static_cast<float>(m_target), static_cast<float>( INFINITY), m_ulps));
+ }
+ ret << "])";
+
+ return ret.str();
+ }
+
+ WithinRelMatcher::WithinRelMatcher(double target, double epsilon):
+ m_target(target),
+ m_epsilon(epsilon){
+ CATCH_ENFORCE(m_epsilon >= 0., "Relative comparison with epsilon < 0 does not make sense.");
+ CATCH_ENFORCE(m_epsilon < 1., "Relative comparison with epsilon >= 1 does not make sense.");
+ }
+
+ bool WithinRelMatcher::match(double const& matchee) const {
+ const auto relMargin = m_epsilon * (std::max)(std::fabs(matchee), std::fabs(m_target));
+ return marginComparison(matchee, m_target,
+ std::isinf(relMargin)? 0 : relMargin);
+ }
+
+ std::string WithinRelMatcher::describe() const {
+ Catch::ReusableStringStream sstr;
+ sstr << "and " << m_target << " are within " << m_epsilon * 100. << "% of each other";
+ return sstr.str();
+ }
+
+}// namespace Floating
+
+Floating::WithinUlpsMatcher WithinULP(double target, uint64_t maxUlpDiff) {
+ return Floating::WithinUlpsMatcher(target, maxUlpDiff, Floating::FloatingPointKind::Double);
+}
+
+Floating::WithinUlpsMatcher WithinULP(float target, uint64_t maxUlpDiff) {
+ return Floating::WithinUlpsMatcher(target, maxUlpDiff, Floating::FloatingPointKind::Float);
+}
+
+Floating::WithinAbsMatcher WithinAbs(double target, double margin) {
+ return Floating::WithinAbsMatcher(target, margin);
+}
+
+Floating::WithinRelMatcher WithinRel(double target, double eps) {
+ return Floating::WithinRelMatcher(target, eps);
+}
+
+Floating::WithinRelMatcher WithinRel(double target) {
+ return Floating::WithinRelMatcher(target, std::numeric_limits<double>::epsilon() * 100);
+}
+
+Floating::WithinRelMatcher WithinRel(float target, float eps) {
+ return Floating::WithinRelMatcher(target, eps);
+}
+
+Floating::WithinRelMatcher WithinRel(float target) {
+ return Floating::WithinRelMatcher(target, std::numeric_limits<float>::epsilon() * 100);
+}
+
+} // namespace Matchers
+} // namespace Catch
+// end catch_matchers_floating.cpp
+// start catch_matchers_generic.cpp
+
+std::string Catch::Matchers::Generic::Detail::finalizeDescription(const std::string& desc) {
+ if (desc.empty()) {
+ return "matches undescribed predicate";
+ } else {
+ return "matches predicate: \"" + desc + '"';
+ }
+}
+// end catch_matchers_generic.cpp
+// start catch_matchers_string.cpp
+
+#include <regex>
+
+namespace Catch {
+namespace Matchers {
+
+ namespace StdString {
+
+ CasedString::CasedString( std::string const& str, CaseSensitive::Choice caseSensitivity )
+ : m_caseSensitivity( caseSensitivity ),
+ m_str( adjustString( str ) )
+ {}
+ std::string CasedString::adjustString( std::string const& str ) const {
+ return m_caseSensitivity == CaseSensitive::No
+ ? toLower( str )
+ : str;
+ }
+ std::string CasedString::caseSensitivitySuffix() const {
+ return m_caseSensitivity == CaseSensitive::No
+ ? " (case insensitive)"
+ : std::string();
+ }
+
+ StringMatcherBase::StringMatcherBase( std::string const& operation, CasedString const& comparator )
+ : m_comparator( comparator ),
+ m_operation( operation ) {
+ }
+
+ std::string StringMatcherBase::describe() const {
+ std::string description;
+ description.reserve(5 + m_operation.size() + m_comparator.m_str.size() +
+ m_comparator.caseSensitivitySuffix().size());
+ description += m_operation;
+ description += ": \"";
+ description += m_comparator.m_str;
+ description += "\"";
+ description += m_comparator.caseSensitivitySuffix();
+ return description;
+ }
+
+ EqualsMatcher::EqualsMatcher( CasedString const& comparator ) : StringMatcherBase( "equals", comparator ) {}
+
+ bool EqualsMatcher::match( std::string const& source ) const {
+ return m_comparator.adjustString( source ) == m_comparator.m_str;
+ }
+
+ ContainsMatcher::ContainsMatcher( CasedString const& comparator ) : StringMatcherBase( "contains", comparator ) {}
+
+ bool ContainsMatcher::match( std::string const& source ) const {
+ return contains( m_comparator.adjustString( source ), m_comparator.m_str );
+ }
+
+ StartsWithMatcher::StartsWithMatcher( CasedString const& comparator ) : StringMatcherBase( "starts with", comparator ) {}
+
+ bool StartsWithMatcher::match( std::string const& source ) const {
+ return startsWith( m_comparator.adjustString( source ), m_comparator.m_str );
+ }
+
+ EndsWithMatcher::EndsWithMatcher( CasedString const& comparator ) : StringMatcherBase( "ends with", comparator ) {}
+
+ bool EndsWithMatcher::match( std::string const& source ) const {
+ return endsWith( m_comparator.adjustString( source ), m_comparator.m_str );
+ }
+
+ RegexMatcher::RegexMatcher(std::string regex, CaseSensitive::Choice caseSensitivity): m_regex(std::move(regex)), m_caseSensitivity(caseSensitivity) {}
+
+ bool RegexMatcher::match(std::string const& matchee) const {
+ auto flags = std::regex::ECMAScript; // ECMAScript is the default syntax option anyway
+ if (m_caseSensitivity == CaseSensitive::Choice::No) {
+ flags |= std::regex::icase;
+ }
+ auto reg = std::regex(m_regex, flags);
+ return std::regex_match(matchee, reg);
+ }
+
+ std::string RegexMatcher::describe() const {
+ return "matches " + ::Catch::Detail::stringify(m_regex) + ((m_caseSensitivity == CaseSensitive::Choice::Yes)? " case sensitively" : " case insensitively");
+ }
+
+ } // namespace StdString
+
+ StdString::EqualsMatcher Equals( std::string const& str, CaseSensitive::Choice caseSensitivity ) {
+ return StdString::EqualsMatcher( StdString::CasedString( str, caseSensitivity) );
+ }
+ StdString::ContainsMatcher Contains( std::string const& str, CaseSensitive::Choice caseSensitivity ) {
+ return StdString::ContainsMatcher( StdString::CasedString( str, caseSensitivity) );
+ }
+ StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSensitive::Choice caseSensitivity ) {
+ return StdString::EndsWithMatcher( StdString::CasedString( str, caseSensitivity) );
+ }
+ StdString::StartsWithMatcher StartsWith( std::string const& str, CaseSensitive::Choice caseSensitivity ) {
+ return StdString::StartsWithMatcher( StdString::CasedString( str, caseSensitivity) );
+ }
+
+ StdString::RegexMatcher Matches(std::string const& regex, CaseSensitive::Choice caseSensitivity) {
+ return StdString::RegexMatcher(regex, caseSensitivity);
+ }
+
+} // namespace Matchers
+} // namespace Catch
+// end catch_matchers_string.cpp
+// start catch_message.cpp
+
+// start catch_uncaught_exceptions.h
+
+namespace Catch {
+ bool uncaught_exceptions();
+} // end namespace Catch
+
+// end catch_uncaught_exceptions.h
+#include <cassert>
+#include <stack>
+
+namespace Catch {
+
+ MessageInfo::MessageInfo( StringRef const& _macroName,
+ SourceLineInfo const& _lineInfo,
+ ResultWas::OfType _type )
+ : macroName( _macroName ),
+ lineInfo( _lineInfo ),
+ type( _type ),
+ sequence( ++globalCount )
+ {}
+
+ bool MessageInfo::operator==( MessageInfo const& other ) const {
+ return sequence == other.sequence;
+ }
+
+ bool MessageInfo::operator<( MessageInfo const& other ) const {
+ return sequence < other.sequence;
+ }
+
+ // This may need protecting if threading support is added
+ unsigned int MessageInfo::globalCount = 0;
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ Catch::MessageBuilder::MessageBuilder( StringRef const& macroName,
+ SourceLineInfo const& lineInfo,
+ ResultWas::OfType type )
+ :m_info(macroName, lineInfo, type) {}
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ ScopedMessage::ScopedMessage( MessageBuilder const& builder )
+ : m_info( builder.m_info ), m_moved()
+ {
+ m_info.message = builder.m_stream.str();
+ getResultCapture().pushScopedMessage( m_info );
+ }
+
+ ScopedMessage::ScopedMessage( ScopedMessage&& old )
+ : m_info( old.m_info ), m_moved()
+ {
+ old.m_moved = true;
+ }
+
+ ScopedMessage::~ScopedMessage() {
+ if ( !uncaught_exceptions() && !m_moved ){
+ getResultCapture().popScopedMessage(m_info);
+ }
+ }
+
+ Capturer::Capturer( StringRef macroName, SourceLineInfo const& lineInfo, ResultWas::OfType resultType, StringRef names ) {
+ auto trimmed = [&] (size_t start, size_t end) {
+ while (names[start] == ',' || isspace(static_cast<unsigned char>(names[start]))) {
+ ++start;
+ }
+ while (names[end] == ',' || isspace(static_cast<unsigned char>(names[end]))) {
+ --end;
+ }
+ return names.substr(start, end - start + 1);
+ };
+ auto skipq = [&] (size_t start, char quote) {
+ for (auto i = start + 1; i < names.size() ; ++i) {
+ if (names[i] == quote)
+ return i;
+ if (names[i] == '\\')
+ ++i;
+ }
+ CATCH_INTERNAL_ERROR("CAPTURE parsing encountered unmatched quote");
+ };
+
+ size_t start = 0;
+ std::stack<char> openings;
+ for (size_t pos = 0; pos < names.size(); ++pos) {
+ char c = names[pos];
+ switch (c) {
+ case '[':
+ case '{':
+ case '(':
+ // It is basically impossible to disambiguate between
+ // comparison and start of template args in this context
+// case '<':
+ openings.push(c);
+ break;
+ case ']':
+ case '}':
+ case ')':
+// case '>':
+ openings.pop();
+ break;
+ case '"':
+ case '\'':
+ pos = skipq(pos, c);
+ break;
+ case ',':
+ if (start != pos && openings.empty()) {
+ m_messages.emplace_back(macroName, lineInfo, resultType);
+ m_messages.back().message = static_cast<std::string>(trimmed(start, pos));
+ m_messages.back().message += " := ";
+ start = pos;
+ }
+ }
+ }
+ assert(openings.empty() && "Mismatched openings");
+ m_messages.emplace_back(macroName, lineInfo, resultType);
+ m_messages.back().message = static_cast<std::string>(trimmed(start, names.size() - 1));
+ m_messages.back().message += " := ";
+ }
+ Capturer::~Capturer() {
+ if ( !uncaught_exceptions() ){
+ assert( m_captured == m_messages.size() );
+ for( size_t i = 0; i < m_captured; ++i )
+ m_resultCapture.popScopedMessage( m_messages[i] );
+ }
+ }
+
+ void Capturer::captureValue( size_t index, std::string const& value ) {
+ assert( index < m_messages.size() );
+ m_messages[index].message += value;
+ m_resultCapture.pushScopedMessage( m_messages[index] );
+ m_captured++;
+ }
+
+} // end namespace Catch
+// end catch_message.cpp
+// start catch_output_redirect.cpp
+
+// start catch_output_redirect.h
+#ifndef TWOBLUECUBES_CATCH_OUTPUT_REDIRECT_H
+#define TWOBLUECUBES_CATCH_OUTPUT_REDIRECT_H
+
+#include <cstdio>
+#include <iosfwd>
+#include <string>
+
+namespace Catch {
+
+ class RedirectedStream {
+ std::ostream& m_originalStream;
+ std::ostream& m_redirectionStream;
+ std::streambuf* m_prevBuf;
+
+ public:
+ RedirectedStream( std::ostream& originalStream, std::ostream& redirectionStream );
+ ~RedirectedStream();
+ };
+
+ class RedirectedStdOut {
+ ReusableStringStream m_rss;
+ RedirectedStream m_cout;
+ public:
+ RedirectedStdOut();
+ auto str() const -> std::string;
+ };
+
+ // StdErr has two constituent streams in C++, std::cerr and std::clog
+ // This means that we need to redirect 2 streams into 1 to keep proper
+ // order of writes
+ class RedirectedStdErr {
+ ReusableStringStream m_rss;
+ RedirectedStream m_cerr;
+ RedirectedStream m_clog;
+ public:
+ RedirectedStdErr();
+ auto str() const -> std::string;
+ };
+
+ class RedirectedStreams {
+ public:
+ RedirectedStreams(RedirectedStreams const&) = delete;
+ RedirectedStreams& operator=(RedirectedStreams const&) = delete;
+ RedirectedStreams(RedirectedStreams&&) = delete;
+ RedirectedStreams& operator=(RedirectedStreams&&) = delete;
+
+ RedirectedStreams(std::string& redirectedCout, std::string& redirectedCerr);
+ ~RedirectedStreams();
+ private:
+ std::string& m_redirectedCout;
+ std::string& m_redirectedCerr;
+ RedirectedStdOut m_redirectedStdOut;
+ RedirectedStdErr m_redirectedStdErr;
+ };
+
+#if defined(CATCH_CONFIG_NEW_CAPTURE)
+
+ // Windows's implementation of std::tmpfile is terrible (it tries
+ // to create a file inside system folder, thus requiring elevated
+ // privileges for the binary), so we have to use tmpnam(_s) and
+ // create the file ourselves there.
+ class TempFile {
+ public:
+ TempFile(TempFile const&) = delete;
+ TempFile& operator=(TempFile const&) = delete;
+ TempFile(TempFile&&) = delete;
+ TempFile& operator=(TempFile&&) = delete;
+
+ TempFile();
+ ~TempFile();
+
+ std::FILE* getFile();
+ std::string getContents();
+
+ private:
+ std::FILE* m_file = nullptr;
+ #if defined(_MSC_VER)
+ char m_buffer[L_tmpnam] = { 0 };
+ #endif
+ };
+
+ class OutputRedirect {
+ public:
+ OutputRedirect(OutputRedirect const&) = delete;
+ OutputRedirect& operator=(OutputRedirect const&) = delete;
+ OutputRedirect(OutputRedirect&&) = delete;
+ OutputRedirect& operator=(OutputRedirect&&) = delete;
+
+ OutputRedirect(std::string& stdout_dest, std::string& stderr_dest);
+ ~OutputRedirect();
+
+ private:
+ int m_originalStdout = -1;
+ int m_originalStderr = -1;
+ TempFile m_stdoutFile;
+ TempFile m_stderrFile;
+ std::string& m_stdoutDest;
+ std::string& m_stderrDest;
+ };
+
+#endif
+
+} // end namespace Catch
+
+#endif // TWOBLUECUBES_CATCH_OUTPUT_REDIRECT_H
+// end catch_output_redirect.h
+#include <cstdio>
+#include <cstring>
+#include <fstream>
+#include <sstream>
+#include <stdexcept>
+
+#if defined(CATCH_CONFIG_NEW_CAPTURE)
+ #if defined(_MSC_VER)
+ #include <io.h> //_dup and _dup2
+ #define dup _dup
+ #define dup2 _dup2
+ #define fileno _fileno
+ #else
+ #include <unistd.h> // dup and dup2
+ #endif
+#endif
+
+namespace Catch {
+
+ RedirectedStream::RedirectedStream( std::ostream& originalStream, std::ostream& redirectionStream )
+ : m_originalStream( originalStream ),
+ m_redirectionStream( redirectionStream ),
+ m_prevBuf( m_originalStream.rdbuf() )
+ {
+ m_originalStream.rdbuf( m_redirectionStream.rdbuf() );
+ }
+
+ RedirectedStream::~RedirectedStream() {
+ m_originalStream.rdbuf( m_prevBuf );
+ }
+
+ RedirectedStdOut::RedirectedStdOut() : m_cout( Catch::cout(), m_rss.get() ) {}
+ auto RedirectedStdOut::str() const -> std::string { return m_rss.str(); }
+
+ RedirectedStdErr::RedirectedStdErr()
+ : m_cerr( Catch::cerr(), m_rss.get() ),
+ m_clog( Catch::clog(), m_rss.get() )
+ {}
+ auto RedirectedStdErr::str() const -> std::string { return m_rss.str(); }
+
+ RedirectedStreams::RedirectedStreams(std::string& redirectedCout, std::string& redirectedCerr)
+ : m_redirectedCout(redirectedCout),
+ m_redirectedCerr(redirectedCerr)
+ {}
+
+ RedirectedStreams::~RedirectedStreams() {
+ m_redirectedCout += m_redirectedStdOut.str();
+ m_redirectedCerr += m_redirectedStdErr.str();
+ }
+
+#if defined(CATCH_CONFIG_NEW_CAPTURE)
+
+#if defined(_MSC_VER)
+ TempFile::TempFile() {
+ if (tmpnam_s(m_buffer)) {
+ CATCH_RUNTIME_ERROR("Could not get a temp filename");
+ }
+ if (fopen_s(&m_file, m_buffer, "w+")) {
+ char buffer[100];
+ if (strerror_s(buffer, errno)) {
+ CATCH_RUNTIME_ERROR("Could not translate errno to a string");
+ }
+ CATCH_RUNTIME_ERROR("Could not open the temp file: '" << m_buffer << "' because: " << buffer);
+ }
+ }
+#else
+ TempFile::TempFile() {
+ m_file = std::tmpfile();
+ if (!m_file) {
+ CATCH_RUNTIME_ERROR("Could not create a temp file.");
+ }
+ }
+
+#endif
+
+ TempFile::~TempFile() {
+ // TBD: What to do about errors here?
+ std::fclose(m_file);
+ // We manually create the file on Windows only, on Linux
+ // it will be autodeleted
+#if defined(_MSC_VER)
+ std::remove(m_buffer);
+#endif
+ }
+
+ FILE* TempFile::getFile() {
+ return m_file;
+ }
+
+ std::string TempFile::getContents() {
+ std::stringstream sstr;
+ char buffer[100] = {};
+ std::rewind(m_file);
+ while (std::fgets(buffer, sizeof(buffer), m_file)) {
+ sstr << buffer;
+ }
+ return sstr.str();
+ }
+
+ OutputRedirect::OutputRedirect(std::string& stdout_dest, std::string& stderr_dest) :
+ m_originalStdout(dup(1)),
+ m_originalStderr(dup(2)),
+ m_stdoutDest(stdout_dest),
+ m_stderrDest(stderr_dest) {
+ dup2(fileno(m_stdoutFile.getFile()), 1);
+ dup2(fileno(m_stderrFile.getFile()), 2);
+ }
+
+ OutputRedirect::~OutputRedirect() {
+ Catch::cout() << std::flush;
+ fflush(stdout);
+ // Since we support overriding these streams, we flush cerr
+ // even though std::cerr is unbuffered
+ Catch::cerr() << std::flush;
+ Catch::clog() << std::flush;
+ fflush(stderr);
+
+ dup2(m_originalStdout, 1);
+ dup2(m_originalStderr, 2);
+
+ m_stdoutDest += m_stdoutFile.getContents();
+ m_stderrDest += m_stderrFile.getContents();
+ }
+
+#endif // CATCH_CONFIG_NEW_CAPTURE
+
+} // namespace Catch
+
+#if defined(CATCH_CONFIG_NEW_CAPTURE)
+ #if defined(_MSC_VER)
+ #undef dup
+ #undef dup2
+ #undef fileno
+ #endif
+#endif
+// end catch_output_redirect.cpp
+// start catch_polyfills.cpp
+
+#include <cmath>
+
+namespace Catch {
+
+#if !defined(CATCH_CONFIG_POLYFILL_ISNAN)
+ bool isnan(float f) {
+ return std::isnan(f);
+ }
+ bool isnan(double d) {
+ return std::isnan(d);
+ }
+#else
+ // For now we only use this for embarcadero
+ bool isnan(float f) {
+ return std::_isnan(f);
+ }
+ bool isnan(double d) {
+ return std::_isnan(d);
+ }
+#endif
+
+} // end namespace Catch
+// end catch_polyfills.cpp
+// start catch_random_number_generator.cpp
+
+namespace Catch {
+
+namespace {
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4146) // we negate uint32 during the rotate
+#endif
+ // Safe rotr implementation thanks to John Regehr
+ uint32_t rotate_right(uint32_t val, uint32_t count) {
+ const uint32_t mask = 31;
+ count &= mask;
+ return (val >> count) | (val << (-count & mask));
+ }
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+}
+
+ SimplePcg32::SimplePcg32(result_type seed_) {
+ seed(seed_);
+ }
+
+ void SimplePcg32::seed(result_type seed_) {
+ m_state = 0;
+ (*this)();
+ m_state += seed_;
+ (*this)();
+ }
+
+ void SimplePcg32::discard(uint64_t skip) {
+ // We could implement this to run in O(log n) steps, but this
+ // should suffice for our use case.
+ for (uint64_t s = 0; s < skip; ++s) {
+ static_cast<void>((*this)());
+ }
+ }
+
+ SimplePcg32::result_type SimplePcg32::operator()() {
+ // prepare the output value
+ const uint32_t xorshifted = static_cast<uint32_t>(((m_state >> 18u) ^ m_state) >> 27u);
+ const auto output = rotate_right(xorshifted, m_state >> 59u);
+
+ // advance state
+ m_state = m_state * 6364136223846793005ULL + s_inc;
+
+ return output;
+ }
+
+ bool operator==(SimplePcg32 const& lhs, SimplePcg32 const& rhs) {
+ return lhs.m_state == rhs.m_state;
+ }
+
+ bool operator!=(SimplePcg32 const& lhs, SimplePcg32 const& rhs) {
+ return lhs.m_state != rhs.m_state;
+ }
+}
+// end catch_random_number_generator.cpp
+// start catch_registry_hub.cpp
+
+// start catch_test_case_registry_impl.h
+
+#include <vector>
+#include <set>
+#include <algorithm>
+#include <ios>
+
+namespace Catch {
+
+ class TestCase;
+ struct IConfig;
+
+ std::vector<TestCase> sortTests( IConfig const& config, std::vector<TestCase> const& unsortedTestCases );
+
+ bool isThrowSafe( TestCase const& testCase, IConfig const& config );
+ bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config );
+
+ void enforceNoDuplicateTestCases( std::vector<TestCase> const& functions );
+
+ std::vector<TestCase> filterTests( std::vector<TestCase> const& testCases, TestSpec const& testSpec, IConfig const& config );
+ std::vector<TestCase> const& getAllTestCasesSorted( IConfig const& config );
+
+ class TestRegistry : public ITestCaseRegistry {
+ public:
+ virtual ~TestRegistry() = default;
+
+ virtual void registerTest( TestCase const& testCase );
+
+ std::vector<TestCase> const& getAllTests() const override;
+ std::vector<TestCase> const& getAllTestsSorted( IConfig const& config ) const override;
+
+ private:
+ std::vector<TestCase> m_functions;
+ mutable RunTests::InWhatOrder m_currentSortOrder = RunTests::InDeclarationOrder;
+ mutable std::vector<TestCase> m_sortedFunctions;
+ std::size_t m_unnamedCount = 0;
+ std::ios_base::Init m_ostreamInit; // Forces cout/ cerr to be initialised
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class TestInvokerAsFunction : public ITestInvoker {
+ void(*m_testAsFunction)();
+ public:
+ TestInvokerAsFunction( void(*testAsFunction)() ) noexcept;
+
+ void invoke() const override;
+ };
+
+ std::string extractClassName( StringRef const& classOrQualifiedMethodName );
+
+ ///////////////////////////////////////////////////////////////////////////
+
+} // end namespace Catch
+
+// end catch_test_case_registry_impl.h
+// start catch_reporter_registry.h
+
+#include <map>
+
+namespace Catch {
+
+ class ReporterRegistry : public IReporterRegistry {
+
+ public:
+
+ ~ReporterRegistry() override;
+
+ IStreamingReporterPtr create( std::string const& name, IConfigPtr const& config ) const override;
+
+ void registerReporter( std::string const& name, IReporterFactoryPtr const& factory );
+ void registerListener( IReporterFactoryPtr const& factory );
+
+ FactoryMap const& getFactories() const override;
+ Listeners const& getListeners() const override;
+
+ private:
+ FactoryMap m_factories;
+ Listeners m_listeners;
+ };
+}
+
+// end catch_reporter_registry.h
+// start catch_tag_alias_registry.h
+
+// start catch_tag_alias.h
+
+#include <string>
+
+namespace Catch {
+
+ struct TagAlias {
+ TagAlias(std::string const& _tag, SourceLineInfo _lineInfo);
+
+ std::string tag;
+ SourceLineInfo lineInfo;
+ };
+
+} // end namespace Catch
+
+// end catch_tag_alias.h
+#include <map>
+
+namespace Catch {
+
+ class TagAliasRegistry : public ITagAliasRegistry {
+ public:
+ ~TagAliasRegistry() override;
+ TagAlias const* find( std::string const& alias ) const override;
+ std::string expandAliases( std::string const& unexpandedTestSpec ) const override;
+ void add( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo );
+
+ private:
+ std::map<std::string, TagAlias> m_registry;
+ };
+
+} // end namespace Catch
+
+// end catch_tag_alias_registry.h
+// start catch_startup_exception_registry.h
+
+#include <vector>
+#include <exception>
+
+namespace Catch {
+
+ class StartupExceptionRegistry {
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ public:
+ void add(std::exception_ptr const& exception) noexcept;
+ std::vector<std::exception_ptr> const& getExceptions() const noexcept;
+ private:
+ std::vector<std::exception_ptr> m_exceptions;
+#endif
+ };
+
+} // end namespace Catch
+
+// end catch_startup_exception_registry.h
+// start catch_singletons.hpp
+
+namespace Catch {
+
+ struct ISingleton {
+ virtual ~ISingleton();
+ };
+
+ void addSingleton( ISingleton* singleton );
+ void cleanupSingletons();
+
+ template<typename SingletonImplT, typename InterfaceT = SingletonImplT, typename MutableInterfaceT = InterfaceT>
+ class Singleton : SingletonImplT, public ISingleton {
+
+ static auto getInternal() -> Singleton* {
+ static Singleton* s_instance = nullptr;
+ if( !s_instance ) {
+ s_instance = new Singleton;
+ addSingleton( s_instance );
+ }
+ return s_instance;
+ }
+
+ public:
+ static auto get() -> InterfaceT const& {
+ return *getInternal();
+ }
+ static auto getMutable() -> MutableInterfaceT& {
+ return *getInternal();
+ }
+ };
+
+} // namespace Catch
+
+// end catch_singletons.hpp
+namespace Catch {
+
+ namespace {
+
+ class RegistryHub : public IRegistryHub, public IMutableRegistryHub,
+ private NonCopyable {
+
+ public: // IRegistryHub
+ RegistryHub() = default;
+ IReporterRegistry const& getReporterRegistry() const override {
+ return m_reporterRegistry;
+ }
+ ITestCaseRegistry const& getTestCaseRegistry() const override {
+ return m_testCaseRegistry;
+ }
+ IExceptionTranslatorRegistry const& getExceptionTranslatorRegistry() const override {
+ return m_exceptionTranslatorRegistry;
+ }
+ ITagAliasRegistry const& getTagAliasRegistry() const override {
+ return m_tagAliasRegistry;
+ }
+ StartupExceptionRegistry const& getStartupExceptionRegistry() const override {
+ return m_exceptionRegistry;
+ }
+
+ public: // IMutableRegistryHub
+ void registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) override {
+ m_reporterRegistry.registerReporter( name, factory );
+ }
+ void registerListener( IReporterFactoryPtr const& factory ) override {
+ m_reporterRegistry.registerListener( factory );
+ }
+ void registerTest( TestCase const& testInfo ) override {
+ m_testCaseRegistry.registerTest( testInfo );
+ }
+ void registerTranslator( const IExceptionTranslator* translator ) override {
+ m_exceptionTranslatorRegistry.registerTranslator( translator );
+ }
+ void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) override {
+ m_tagAliasRegistry.add( alias, tag, lineInfo );
+ }
+ void registerStartupException() noexcept override {
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ m_exceptionRegistry.add(std::current_exception());
+#else
+ CATCH_INTERNAL_ERROR("Attempted to register active exception under CATCH_CONFIG_DISABLE_EXCEPTIONS!");
+#endif
+ }
+ IMutableEnumValuesRegistry& getMutableEnumValuesRegistry() override {
+ return m_enumValuesRegistry;
+ }
+
+ private:
+ TestRegistry m_testCaseRegistry;
+ ReporterRegistry m_reporterRegistry;
+ ExceptionTranslatorRegistry m_exceptionTranslatorRegistry;
+ TagAliasRegistry m_tagAliasRegistry;
+ StartupExceptionRegistry m_exceptionRegistry;
+ Detail::EnumValuesRegistry m_enumValuesRegistry;
+ };
+ }
+
+ using RegistryHubSingleton = Singleton<RegistryHub, IRegistryHub, IMutableRegistryHub>;
+
+ IRegistryHub const& getRegistryHub() {
+ return RegistryHubSingleton::get();
+ }
+ IMutableRegistryHub& getMutableRegistryHub() {
+ return RegistryHubSingleton::getMutable();
+ }
+ void cleanUp() {
+ cleanupSingletons();
+ cleanUpContext();
+ }
+ std::string translateActiveException() {
+ return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException();
+ }
+
+} // end namespace Catch
+// end catch_registry_hub.cpp
+// start catch_reporter_registry.cpp
+
+namespace Catch {
+
+ ReporterRegistry::~ReporterRegistry() = default;
+
+ IStreamingReporterPtr ReporterRegistry::create( std::string const& name, IConfigPtr const& config ) const {
+ auto it = m_factories.find( name );
+ if( it == m_factories.end() )
+ return nullptr;
+ return it->second->create( ReporterConfig( config ) );
+ }
+
+ void ReporterRegistry::registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) {
+ m_factories.emplace(name, factory);
+ }
+ void ReporterRegistry::registerListener( IReporterFactoryPtr const& factory ) {
+ m_listeners.push_back( factory );
+ }
+
+ IReporterRegistry::FactoryMap const& ReporterRegistry::getFactories() const {
+ return m_factories;
+ }
+ IReporterRegistry::Listeners const& ReporterRegistry::getListeners() const {
+ return m_listeners;
+ }
+
+}
+// end catch_reporter_registry.cpp
+// start catch_result_type.cpp
+
+namespace Catch {
+
+ bool isOk( ResultWas::OfType resultType ) {
+ return ( resultType & ResultWas::FailureBit ) == 0;
+ }
+ bool isJustInfo( int flags ) {
+ return flags == ResultWas::Info;
+ }
+
+ ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs ) {
+ return static_cast<ResultDisposition::Flags>( static_cast<int>( lhs ) | static_cast<int>( rhs ) );
+ }
+
+ bool shouldContinueOnFailure( int flags ) { return ( flags & ResultDisposition::ContinueOnFailure ) != 0; }
+ bool shouldSuppressFailure( int flags ) { return ( flags & ResultDisposition::SuppressFail ) != 0; }
+
+} // end namespace Catch
+// end catch_result_type.cpp
+// start catch_run_context.cpp
+
+#include <cassert>
+#include <algorithm>
+#include <sstream>
+
+namespace Catch {
+
+ namespace Generators {
+ struct GeneratorTracker : TestCaseTracking::TrackerBase, IGeneratorTracker {
+ GeneratorBasePtr m_generator;
+
+ GeneratorTracker( TestCaseTracking::NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent )
+ : TrackerBase( nameAndLocation, ctx, parent )
+ {}
+ ~GeneratorTracker();
+
+ static GeneratorTracker& acquire( TrackerContext& ctx, TestCaseTracking::NameAndLocation const& nameAndLocation ) {
+ std::shared_ptr<GeneratorTracker> tracker;
+
+ ITracker& currentTracker = ctx.currentTracker();
+ // Under specific circumstances, the generator we want
+ // to acquire is also the current tracker. If this is
+ // the case, we have to avoid looking through current
+ // tracker's children, and instead return the current
+ // tracker.
+ // A case where this check is important is e.g.
+ // for (int i = 0; i < 5; ++i) {
+ // int n = GENERATE(1, 2);
+ // }
+ //
+ // without it, the code above creates 5 nested generators.
+ if (currentTracker.nameAndLocation() == nameAndLocation) {
+ auto thisTracker = currentTracker.parent().findChild(nameAndLocation);
+ assert(thisTracker);
+ assert(thisTracker->isGeneratorTracker());
+ tracker = std::static_pointer_cast<GeneratorTracker>(thisTracker);
+ } else if ( TestCaseTracking::ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) {
+ assert( childTracker );
+ assert( childTracker->isGeneratorTracker() );
+ tracker = std::static_pointer_cast<GeneratorTracker>( childTracker );
+ } else {
+ tracker = std::make_shared<GeneratorTracker>( nameAndLocation, ctx, &currentTracker );
+ currentTracker.addChild( tracker );
+ }
+
+ if( !tracker->isComplete() ) {
+ tracker->open();
+ }
+
+ return *tracker;
+ }
+
+ // TrackerBase interface
+ bool isGeneratorTracker() const override { return true; }
+ auto hasGenerator() const -> bool override {
+ return !!m_generator;
+ }
+ void close() override {
+ TrackerBase::close();
+ // If a generator has a child (it is followed by a section)
+ // and none of its children have started, then we must wait
+ // until later to start consuming its values.
+ // This catches cases where `GENERATE` is placed between two
+ // `SECTION`s.
+ // **The check for m_children.empty cannot be removed**.
+ // doing so would break `GENERATE` _not_ followed by `SECTION`s.
+ const bool should_wait_for_child = [&]() {
+ // No children -> nobody to wait for
+ if ( m_children.empty() ) {
+ return false;
+ }
+ // If at least one child started executing, don't wait
+ if ( std::find_if(
+ m_children.begin(),
+ m_children.end(),
+ []( TestCaseTracking::ITrackerPtr tracker ) {
+ return tracker->hasStarted();
+ } ) != m_children.end() ) {
+ return false;
+ }
+
+ // No children have started. We need to check if they _can_
+ // start, and thus we should wait for them, or they cannot
+ // start (due to filters), and we shouldn't wait for them
+ auto* parent = m_parent;
+ // This is safe: there is always at least one section
+ // tracker in a test case tracking tree
+ while ( !parent->isSectionTracker() ) {
+ parent = &( parent->parent() );
+ }
+ assert( parent &&
+ "Missing root (test case) level section" );
+
+ auto const& parentSection =
+ static_cast<SectionTracker&>( *parent );
+ auto const& filters = parentSection.getFilters();
+ // No filters -> no restrictions on running sections
+ if ( filters.empty() ) {
+ return true;
+ }
+
+ for ( auto const& child : m_children ) {
+ if ( child->isSectionTracker() &&
+ std::find( filters.begin(),
+ filters.end(),
+ static_cast<SectionTracker&>( *child )
+ .trimmedName() ) !=
+ filters.end() ) {
+ return true;
+ }
+ }
+ return false;
+ }();
+
+ // This check is a bit tricky, because m_generator->next()
+ // has a side-effect, where it consumes generator's current
+ // value, but we do not want to invoke the side-effect if
+ // this generator is still waiting for any child to start.
+ if ( should_wait_for_child ||
+ ( m_runState == CompletedSuccessfully &&
+ m_generator->next() ) ) {
+ m_children.clear();
+ m_runState = Executing;
+ }
+ }
+
+ // IGeneratorTracker interface
+ auto getGenerator() const -> GeneratorBasePtr const& override {
+ return m_generator;
+ }
+ void setGenerator( GeneratorBasePtr&& generator ) override {
+ m_generator = std::move( generator );
+ }
+ };
+ GeneratorTracker::~GeneratorTracker() {}
+ }
+
+ RunContext::RunContext(IConfigPtr const& _config, IStreamingReporterPtr&& reporter)
+ : m_runInfo(_config->name()),
+ m_context(getCurrentMutableContext()),
+ m_config(_config),
+ m_reporter(std::move(reporter)),
+ m_lastAssertionInfo{ StringRef(), SourceLineInfo("",0), StringRef(), ResultDisposition::Normal },
+ m_includeSuccessfulResults( m_config->includeSuccessfulResults() || m_reporter->getPreferences().shouldReportAllAssertions )
+ {
+ m_context.setRunner(this);
+ m_context.setConfig(m_config);
+ m_context.setResultCapture(this);
+ m_reporter->testRunStarting(m_runInfo);
+ }
+
+ RunContext::~RunContext() {
+ m_reporter->testRunEnded(TestRunStats(m_runInfo, m_totals, aborting()));
+ }
+
+ void RunContext::testGroupStarting(std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount) {
+ m_reporter->testGroupStarting(GroupInfo(testSpec, groupIndex, groupsCount));
+ }
+
+ void RunContext::testGroupEnded(std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount) {
+ m_reporter->testGroupEnded(TestGroupStats(GroupInfo(testSpec, groupIndex, groupsCount), totals, aborting()));
+ }
+
+ Totals RunContext::runTest(TestCase const& testCase) {
+ Totals prevTotals = m_totals;
+
+ std::string redirectedCout;
+ std::string redirectedCerr;
+
+ auto const& testInfo = testCase.getTestCaseInfo();
+
+ m_reporter->testCaseStarting(testInfo);
+
+ m_activeTestCase = &testCase;
+
+ ITracker& rootTracker = m_trackerContext.startRun();
+ assert(rootTracker.isSectionTracker());
+ static_cast<SectionTracker&>(rootTracker).addInitialFilters(m_config->getSectionsToRun());
+ do {
+ m_trackerContext.startCycle();
+ m_testCaseTracker = &SectionTracker::acquire(m_trackerContext, TestCaseTracking::NameAndLocation(testInfo.name, testInfo.lineInfo));
+ runCurrentTest(redirectedCout, redirectedCerr);
+ } while (!m_testCaseTracker->isSuccessfullyCompleted() && !aborting());
+
+ Totals deltaTotals = m_totals.delta(prevTotals);
+ if (testInfo.expectedToFail() && deltaTotals.testCases.passed > 0) {
+ deltaTotals.assertions.failed++;
+ deltaTotals.testCases.passed--;
+ deltaTotals.testCases.failed++;
+ }
+ m_totals.testCases += deltaTotals.testCases;
+ m_reporter->testCaseEnded(TestCaseStats(testInfo,
+ deltaTotals,
+ redirectedCout,
+ redirectedCerr,
+ aborting()));
+
+ m_activeTestCase = nullptr;
+ m_testCaseTracker = nullptr;
+
+ return deltaTotals;
+ }
+
+ IConfigPtr RunContext::config() const {
+ return m_config;
+ }
+
+ IStreamingReporter& RunContext::reporter() const {
+ return *m_reporter;
+ }
+
+ void RunContext::assertionEnded(AssertionResult const & result) {
+ if (result.getResultType() == ResultWas::Ok) {
+ m_totals.assertions.passed++;
+ m_lastAssertionPassed = true;
+ } else if (!result.isOk()) {
+ m_lastAssertionPassed = false;
+ if( m_activeTestCase->getTestCaseInfo().okToFail() )
+ m_totals.assertions.failedButOk++;
+ else
+ m_totals.assertions.failed++;
+ }
+ else {
+ m_lastAssertionPassed = true;
+ }
+
+ // We have no use for the return value (whether messages should be cleared), because messages were made scoped
+ // and should be let to clear themselves out.
+ static_cast<void>(m_reporter->assertionEnded(AssertionStats(result, m_messages, m_totals)));
+
+ if (result.getResultType() != ResultWas::Warning)
+ m_messageScopes.clear();
+
+ // Reset working state
+ resetAssertionInfo();
+ m_lastResult = result;
+ }
+ void RunContext::resetAssertionInfo() {
+ m_lastAssertionInfo.macroName = StringRef();
+ m_lastAssertionInfo.capturedExpression = "{Unknown expression after the reported line}"_sr;
+ }
+
+ bool RunContext::sectionStarted(SectionInfo const & sectionInfo, Counts & assertions) {
+ ITracker& sectionTracker = SectionTracker::acquire(m_trackerContext, TestCaseTracking::NameAndLocation(sectionInfo.name, sectionInfo.lineInfo));
+ if (!sectionTracker.isOpen())
+ return false;
+ m_activeSections.push_back(&sectionTracker);
+
+ m_lastAssertionInfo.lineInfo = sectionInfo.lineInfo;
+
+ m_reporter->sectionStarting(sectionInfo);
+
+ assertions = m_totals.assertions;
+
+ return true;
+ }
+ auto RunContext::acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker& {
+ using namespace Generators;
+ GeneratorTracker& tracker = GeneratorTracker::acquire(m_trackerContext,
+ TestCaseTracking::NameAndLocation( static_cast<std::string>(generatorName), lineInfo ) );
+ m_lastAssertionInfo.lineInfo = lineInfo;
+ return tracker;
+ }
+
+ bool RunContext::testForMissingAssertions(Counts& assertions) {
+ if (assertions.total() != 0)
+ return false;
+ if (!m_config->warnAboutMissingAssertions())
+ return false;
+ if (m_trackerContext.currentTracker().hasChildren())
+ return false;
+ m_totals.assertions.failed++;
+ assertions.failed++;
+ return true;
+ }
+
+ void RunContext::sectionEnded(SectionEndInfo const & endInfo) {
+ Counts assertions = m_totals.assertions - endInfo.prevAssertions;
+ bool missingAssertions = testForMissingAssertions(assertions);
+
+ if (!m_activeSections.empty()) {
+ m_activeSections.back()->close();
+ m_activeSections.pop_back();
+ }
+
+ m_reporter->sectionEnded(SectionStats(endInfo.sectionInfo, assertions, endInfo.durationInSeconds, missingAssertions));
+ m_messages.clear();
+ m_messageScopes.clear();
+ }
+
+ void RunContext::sectionEndedEarly(SectionEndInfo const & endInfo) {
+ if (m_unfinishedSections.empty())
+ m_activeSections.back()->fail();
+ else
+ m_activeSections.back()->close();
+ m_activeSections.pop_back();
+
+ m_unfinishedSections.push_back(endInfo);
+ }
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void RunContext::benchmarkPreparing(std::string const& name) {
+ m_reporter->benchmarkPreparing(name);
+ }
+ void RunContext::benchmarkStarting( BenchmarkInfo const& info ) {
+ m_reporter->benchmarkStarting( info );
+ }
+ void RunContext::benchmarkEnded( BenchmarkStats<> const& stats ) {
+ m_reporter->benchmarkEnded( stats );
+ }
+ void RunContext::benchmarkFailed(std::string const & error) {
+ m_reporter->benchmarkFailed(error);
+ }
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void RunContext::pushScopedMessage(MessageInfo const & message) {
+ m_messages.push_back(message);
+ }
+
+ void RunContext::popScopedMessage(MessageInfo const & message) {
+ m_messages.erase(std::remove(m_messages.begin(), m_messages.end(), message), m_messages.end());
+ }
+
+ void RunContext::emplaceUnscopedMessage( MessageBuilder const& builder ) {
+ m_messageScopes.emplace_back( builder );
+ }
+
+ std::string RunContext::getCurrentTestName() const {
+ return m_activeTestCase
+ ? m_activeTestCase->getTestCaseInfo().name
+ : std::string();
+ }
+
+ const AssertionResult * RunContext::getLastResult() const {
+ return &(*m_lastResult);
+ }
+
+ void RunContext::exceptionEarlyReported() {
+ m_shouldReportUnexpected = false;
+ }
+
+ void RunContext::handleFatalErrorCondition( StringRef message ) {
+ // First notify reporter that bad things happened
+ m_reporter->fatalErrorEncountered(message);
+
+ // Don't rebuild the result -- the stringification itself can cause more fatal errors
+ // Instead, fake a result data.
+ AssertionResultData tempResult( ResultWas::FatalErrorCondition, { false } );
+ tempResult.message = static_cast<std::string>(message);
+ AssertionResult result(m_lastAssertionInfo, tempResult);
+
+ assertionEnded(result);
+
+ handleUnfinishedSections();
+
+ // Recreate section for test case (as we will lose the one that was in scope)
+ auto const& testCaseInfo = m_activeTestCase->getTestCaseInfo();
+ SectionInfo testCaseSection(testCaseInfo.lineInfo, testCaseInfo.name);
+
+ Counts assertions;
+ assertions.failed = 1;
+ SectionStats testCaseSectionStats(testCaseSection, assertions, 0, false);
+ m_reporter->sectionEnded(testCaseSectionStats);
+
+ auto const& testInfo = m_activeTestCase->getTestCaseInfo();
+
+ Totals deltaTotals;
+ deltaTotals.testCases.failed = 1;
+ deltaTotals.assertions.failed = 1;
+ m_reporter->testCaseEnded(TestCaseStats(testInfo,
+ deltaTotals,
+ std::string(),
+ std::string(),
+ false));
+ m_totals.testCases.failed++;
+ testGroupEnded(std::string(), m_totals, 1, 1);
+ m_reporter->testRunEnded(TestRunStats(m_runInfo, m_totals, false));
+ }
+
+ bool RunContext::lastAssertionPassed() {
+ return m_lastAssertionPassed;
+ }
+
+ void RunContext::assertionPassed() {
+ m_lastAssertionPassed = true;
+ ++m_totals.assertions.passed;
+ resetAssertionInfo();
+ m_messageScopes.clear();
+ }
+
+ bool RunContext::aborting() const {
+ return m_totals.assertions.failed >= static_cast<std::size_t>(m_config->abortAfter());
+ }
+
+ void RunContext::runCurrentTest(std::string & redirectedCout, std::string & redirectedCerr) {
+ auto const& testCaseInfo = m_activeTestCase->getTestCaseInfo();
+ SectionInfo testCaseSection(testCaseInfo.lineInfo, testCaseInfo.name);
+ m_reporter->sectionStarting(testCaseSection);
+ Counts prevAssertions = m_totals.assertions;
+ double duration = 0;
+ m_shouldReportUnexpected = true;
+ m_lastAssertionInfo = { "TEST_CASE"_sr, testCaseInfo.lineInfo, StringRef(), ResultDisposition::Normal };
+
+ seedRng(*m_config);
+
+ Timer timer;
+ CATCH_TRY {
+ if (m_reporter->getPreferences().shouldRedirectStdOut) {
+#if !defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT)
+ RedirectedStreams redirectedStreams(redirectedCout, redirectedCerr);
+
+ timer.start();
+ invokeActiveTestCase();
+#else
+ OutputRedirect r(redirectedCout, redirectedCerr);
+ timer.start();
+ invokeActiveTestCase();
+#endif
+ } else {
+ timer.start();
+ invokeActiveTestCase();
+ }
+ duration = timer.getElapsedSeconds();
+ } CATCH_CATCH_ANON (TestFailureException&) {
+ // This just means the test was aborted due to failure
+ } CATCH_CATCH_ALL {
+ // Under CATCH_CONFIG_FAST_COMPILE, unexpected exceptions under REQUIRE assertions
+ // are reported without translation at the point of origin.
+ if( m_shouldReportUnexpected ) {
+ AssertionReaction dummyReaction;
+ handleUnexpectedInflightException( m_lastAssertionInfo, translateActiveException(), dummyReaction );
+ }
+ }
+ Counts assertions = m_totals.assertions - prevAssertions;
+ bool missingAssertions = testForMissingAssertions(assertions);
+
+ m_testCaseTracker->close();
+ handleUnfinishedSections();
+ m_messages.clear();
+ m_messageScopes.clear();
+
+ SectionStats testCaseSectionStats(testCaseSection, assertions, duration, missingAssertions);
+ m_reporter->sectionEnded(testCaseSectionStats);
+ }
+
+ void RunContext::invokeActiveTestCase() {
+ FatalConditionHandlerGuard _(&m_fatalConditionhandler);
+ m_activeTestCase->invoke();
+ }
+
+ void RunContext::handleUnfinishedSections() {
+ // If sections ended prematurely due to an exception we stored their
+ // infos here so we can tear them down outside the unwind process.
+ for (auto it = m_unfinishedSections.rbegin(),
+ itEnd = m_unfinishedSections.rend();
+ it != itEnd;
+ ++it)
+ sectionEnded(*it);
+ m_unfinishedSections.clear();
+ }
+
+ void RunContext::handleExpr(
+ AssertionInfo const& info,
+ ITransientExpression const& expr,
+ AssertionReaction& reaction
+ ) {
+ m_reporter->assertionStarting( info );
+
+ bool negated = isFalseTest( info.resultDisposition );
+ bool result = expr.getResult() != negated;
+
+ if( result ) {
+ if (!m_includeSuccessfulResults) {
+ assertionPassed();
+ }
+ else {
+ reportExpr(info, ResultWas::Ok, &expr, negated);
+ }
+ }
+ else {
+ reportExpr(info, ResultWas::ExpressionFailed, &expr, negated );
+ populateReaction( reaction );
+ }
+ }
+ void RunContext::reportExpr(
+ AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ ITransientExpression const *expr,
+ bool negated ) {
+
+ m_lastAssertionInfo = info;
+ AssertionResultData data( resultType, LazyExpression( negated ) );
+
+ AssertionResult assertionResult{ info, data };
+ assertionResult.m_resultData.lazyExpression.m_transientExpression = expr;
+
+ assertionEnded( assertionResult );
+ }
+
+ void RunContext::handleMessage(
+ AssertionInfo const& info,
+ ResultWas::OfType resultType,
+ StringRef const& message,
+ AssertionReaction& reaction
+ ) {
+ m_reporter->assertionStarting( info );
+
+ m_lastAssertionInfo = info;
+
+ AssertionResultData data( resultType, LazyExpression( false ) );
+ data.message = static_cast<std::string>(message);
+ AssertionResult assertionResult{ m_lastAssertionInfo, data };
+ assertionEnded( assertionResult );
+ if( !assertionResult.isOk() )
+ populateReaction( reaction );
+ }
+ void RunContext::handleUnexpectedExceptionNotThrown(
+ AssertionInfo const& info,
+ AssertionReaction& reaction
+ ) {
+ handleNonExpr(info, Catch::ResultWas::DidntThrowException, reaction);
+ }
+
+ void RunContext::handleUnexpectedInflightException(
+ AssertionInfo const& info,
+ std::string const& message,
+ AssertionReaction& reaction
+ ) {
+ m_lastAssertionInfo = info;
+
+ AssertionResultData data( ResultWas::ThrewException, LazyExpression( false ) );
+ data.message = message;
+ AssertionResult assertionResult{ info, data };
+ assertionEnded( assertionResult );
+ populateReaction( reaction );
+ }
+
+ void RunContext::populateReaction( AssertionReaction& reaction ) {
+ reaction.shouldDebugBreak = m_config->shouldDebugBreak();
+ reaction.shouldThrow = aborting() || (m_lastAssertionInfo.resultDisposition & ResultDisposition::Normal);
+ }
+
+ void RunContext::handleIncomplete(
+ AssertionInfo const& info
+ ) {
+ m_lastAssertionInfo = info;
+
+ AssertionResultData data( ResultWas::ThrewException, LazyExpression( false ) );
+ data.message = "Exception translation was disabled by CATCH_CONFIG_FAST_COMPILE";
+ AssertionResult assertionResult{ info, data };
+ assertionEnded( assertionResult );
+ }
+ void RunContext::handleNonExpr(
+ AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ AssertionReaction &reaction
+ ) {
+ m_lastAssertionInfo = info;
+
+ AssertionResultData data( resultType, LazyExpression( false ) );
+ AssertionResult assertionResult{ info, data };
+ assertionEnded( assertionResult );
+
+ if( !assertionResult.isOk() )
+ populateReaction( reaction );
+ }
+
+ IResultCapture& getResultCapture() {
+ if (auto* capture = getCurrentContext().getResultCapture())
+ return *capture;
+ else
+ CATCH_INTERNAL_ERROR("No result capture instance");
+ }
+
+ void seedRng(IConfig const& config) {
+ if (config.rngSeed() != 0) {
+ std::srand(config.rngSeed());
+ rng().seed(config.rngSeed());
+ }
+ }
+
+ unsigned int rngSeed() {
+ return getCurrentContext().getConfig()->rngSeed();
+ }
+
+}
+// end catch_run_context.cpp
+// start catch_section.cpp
+
+namespace Catch {
+
+ Section::Section( SectionInfo const& info )
+ : m_info( info ),
+ m_sectionIncluded( getResultCapture().sectionStarted( m_info, m_assertions ) )
+ {
+ m_timer.start();
+ }
+
+ Section::~Section() {
+ if( m_sectionIncluded ) {
+ SectionEndInfo endInfo{ m_info, m_assertions, m_timer.getElapsedSeconds() };
+ if( uncaught_exceptions() )
+ getResultCapture().sectionEndedEarly( endInfo );
+ else
+ getResultCapture().sectionEnded( endInfo );
+ }
+ }
+
+ // This indicates whether the section should be executed or not
+ Section::operator bool() const {
+ return m_sectionIncluded;
+ }
+
+} // end namespace Catch
+// end catch_section.cpp
+// start catch_section_info.cpp
+
+namespace Catch {
+
+ SectionInfo::SectionInfo
+ ( SourceLineInfo const& _lineInfo,
+ std::string const& _name )
+ : name( _name ),
+ lineInfo( _lineInfo )
+ {}
+
+} // end namespace Catch
+// end catch_section_info.cpp
+// start catch_session.cpp
+
+// start catch_session.h
+
+#include <memory>
+
+namespace Catch {
+
+ class Session : NonCopyable {
+ public:
+
+ Session();
+ ~Session() override;
+
+ void showHelp() const;
+ void libIdentify();
+
+ int applyCommandLine( int argc, char const * const * argv );
+ #if defined(CATCH_CONFIG_WCHAR) && defined(_WIN32) && defined(UNICODE)
+ int applyCommandLine( int argc, wchar_t const * const * argv );
+ #endif
+
+ void useConfigData( ConfigData const& configData );
+
+ template<typename CharT>
+ int run(int argc, CharT const * const argv[]) {
+ if (m_startupExceptions)
+ return 1;
+ int returnCode = applyCommandLine(argc, argv);
+ if (returnCode == 0)
+ returnCode = run();
+ return returnCode;
+ }
+
+ int run();
+
+ clara::Parser const& cli() const;
+ void cli( clara::Parser const& newParser );
+ ConfigData& configData();
+ Config& config();
+ private:
+ int runInternal();
+
+ clara::Parser m_cli;
+ ConfigData m_configData;
+ std::shared_ptr<Config> m_config;
+ bool m_startupExceptions = false;
+ };
+
+} // end namespace Catch
+
+// end catch_session.h
+// start catch_version.h
+
+#include <iosfwd>
+
+namespace Catch {
+
+ // Versioning information
+ struct Version {
+ Version( Version const& ) = delete;
+ Version& operator=( Version const& ) = delete;
+ Version( unsigned int _majorVersion,
+ unsigned int _minorVersion,
+ unsigned int _patchNumber,
+ char const * const _branchName,
+ unsigned int _buildNumber );
+
+ unsigned int const majorVersion;
+ unsigned int const minorVersion;
+ unsigned int const patchNumber;
+
+ // buildNumber is only used if branchName is not null
+ char const * const branchName;
+ unsigned int const buildNumber;
+
+ friend std::ostream& operator << ( std::ostream& os, Version const& version );
+ };
+
+ Version const& libraryVersion();
+}
+
+// end catch_version.h
+#include <cstdlib>
+#include <iomanip>
+#include <set>
+#include <iterator>
+
+namespace Catch {
+
+ namespace {
+ const int MaxExitCode = 255;
+
+ IStreamingReporterPtr createReporter(std::string const& reporterName, IConfigPtr const& config) {
+ auto reporter = Catch::getRegistryHub().getReporterRegistry().create(reporterName, config);
+ CATCH_ENFORCE(reporter, "No reporter registered with name: '" << reporterName << "'");
+
+ return reporter;
+ }
+
+ IStreamingReporterPtr makeReporter(std::shared_ptr<Config> const& config) {
+ if (Catch::getRegistryHub().getReporterRegistry().getListeners().empty()) {
+ return createReporter(config->getReporterName(), config);
+ }
+
+ // On older platforms, returning std::unique_ptr<ListeningReporter>
+ // when the return type is std::unique_ptr<IStreamingReporter>
+ // doesn't compile without a std::move call. However, this causes
+ // a warning on newer platforms. Thus, we have to work around
+ // it a bit and downcast the pointer manually.
+ auto ret = std::unique_ptr<IStreamingReporter>(new ListeningReporter);
+ auto& multi = static_cast<ListeningReporter&>(*ret);
+ auto const& listeners = Catch::getRegistryHub().getReporterRegistry().getListeners();
+ for (auto const& listener : listeners) {
+ multi.addListener(listener->create(Catch::ReporterConfig(config)));
+ }
+ multi.addReporter(createReporter(config->getReporterName(), config));
+ return ret;
+ }
+
+ class TestGroup {
+ public:
+ explicit TestGroup(std::shared_ptr<Config> const& config)
+ : m_config{config}
+ , m_context{config, makeReporter(config)}
+ {
+ auto const& allTestCases = getAllTestCasesSorted(*m_config);
+ m_matches = m_config->testSpec().matchesByFilter(allTestCases, *m_config);
+ auto const& invalidArgs = m_config->testSpec().getInvalidArgs();
+
+ if (m_matches.empty() && invalidArgs.empty()) {
+ for (auto const& test : allTestCases)
+ if (!test.isHidden())
+ m_tests.emplace(&test);
+ } else {
+ for (auto const& match : m_matches)
+ m_tests.insert(match.tests.begin(), match.tests.end());
+ }
+ }
+
+ Totals execute() {
+ auto const& invalidArgs = m_config->testSpec().getInvalidArgs();
+ Totals totals;
+ m_context.testGroupStarting(m_config->name(), 1, 1);
+ for (auto const& testCase : m_tests) {
+ if (!m_context.aborting())
+ totals += m_context.runTest(*testCase);
+ else
+ m_context.reporter().skipTest(*testCase);
+ }
+
+ for (auto const& match : m_matches) {
+ if (match.tests.empty()) {
+ m_context.reporter().noMatchingTestCases(match.name);
+ totals.error = -1;
+ }
+ }
+
+ if (!invalidArgs.empty()) {
+ for (auto const& invalidArg: invalidArgs)
+ m_context.reporter().reportInvalidArguments(invalidArg);
+ }
+
+ m_context.testGroupEnded(m_config->name(), totals, 1, 1);
+ return totals;
+ }
+
+ private:
+ using Tests = std::set<TestCase const*>;
+
+ std::shared_ptr<Config> m_config;
+ RunContext m_context;
+ Tests m_tests;
+ TestSpec::Matches m_matches;
+ };
+
+ void applyFilenamesAsTags(Catch::IConfig const& config) {
+ auto& tests = const_cast<std::vector<TestCase>&>(getAllTestCasesSorted(config));
+ for (auto& testCase : tests) {
+ auto tags = testCase.tags;
+
+ std::string filename = testCase.lineInfo.file;
+ auto lastSlash = filename.find_last_of("\\/");
+ if (lastSlash != std::string::npos) {
+ filename.erase(0, lastSlash);
+ filename[0] = '#';
+ }
+ else
+ {
+ filename.insert(0, "#");
+ }
+
+ auto lastDot = filename.find_last_of('.');
+ if (lastDot != std::string::npos) {
+ filename.erase(lastDot);
+ }
+
+ tags.push_back(std::move(filename));
+ setTags(testCase, tags);
+ }
+ }
+
+ } // anon namespace
+
+ Session::Session() {
+ static bool alreadyInstantiated = false;
+ if( alreadyInstantiated ) {
+ CATCH_TRY { CATCH_INTERNAL_ERROR( "Only one instance of Catch::Session can ever be used" ); }
+ CATCH_CATCH_ALL { getMutableRegistryHub().registerStartupException(); }
+ }
+
+ // There cannot be exceptions at startup in no-exception mode.
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ const auto& exceptions = getRegistryHub().getStartupExceptionRegistry().getExceptions();
+ if ( !exceptions.empty() ) {
+ config();
+ getCurrentMutableContext().setConfig(m_config);
+
+ m_startupExceptions = true;
+ Colour colourGuard( Colour::Red );
+ Catch::cerr() << "Errors occurred during startup!" << '\n';
+ // iterate over all exceptions and notify user
+ for ( const auto& ex_ptr : exceptions ) {
+ try {
+ std::rethrow_exception(ex_ptr);
+ } catch ( std::exception const& ex ) {
+ Catch::cerr() << Column( ex.what() ).indent(2) << '\n';
+ }
+ }
+ }
+#endif
+
+ alreadyInstantiated = true;
+ m_cli = makeCommandLineParser( m_configData );
+ }
+ Session::~Session() {
+ Catch::cleanUp();
+ }
+
+ void Session::showHelp() const {
+ Catch::cout()
+ << "\nCatch v" << libraryVersion() << "\n"
+ << m_cli << std::endl
+ << "For more detailed usage please see the project docs\n" << std::endl;
+ }
+ void Session::libIdentify() {
+ Catch::cout()
+ << std::left << std::setw(16) << "description: " << "A Catch2 test executable\n"
+ << std::left << std::setw(16) << "category: " << "testframework\n"
+ << std::left << std::setw(16) << "framework: " << "Catch Test\n"
+ << std::left << std::setw(16) << "version: " << libraryVersion() << std::endl;
+ }
+
+ int Session::applyCommandLine( int argc, char const * const * argv ) {
+ if( m_startupExceptions )
+ return 1;
+
+ auto result = m_cli.parse( clara::Args( argc, argv ) );
+ if( !result ) {
+ config();
+ getCurrentMutableContext().setConfig(m_config);
+ Catch::cerr()
+ << Colour( Colour::Red )
+ << "\nError(s) in input:\n"
+ << Column( result.errorMessage() ).indent( 2 )
+ << "\n\n";
+ Catch::cerr() << "Run with -? for usage\n" << std::endl;
+ return MaxExitCode;
+ }
+
+ if( m_configData.showHelp )
+ showHelp();
+ if( m_configData.libIdentify )
+ libIdentify();
+ m_config.reset();
+ return 0;
+ }
+
+#if defined(CATCH_CONFIG_WCHAR) && defined(_WIN32) && defined(UNICODE)
+ int Session::applyCommandLine( int argc, wchar_t const * const * argv ) {
+
+ char **utf8Argv = new char *[ argc ];
+
+ for ( int i = 0; i < argc; ++i ) {
+ int bufSize = WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, nullptr, 0, nullptr, nullptr );
+
+ utf8Argv[ i ] = new char[ bufSize ];
+
+ WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, utf8Argv[i], bufSize, nullptr, nullptr );
+ }
+
+ int returnCode = applyCommandLine( argc, utf8Argv );
+
+ for ( int i = 0; i < argc; ++i )
+ delete [] utf8Argv[ i ];
+
+ delete [] utf8Argv;
+
+ return returnCode;
+ }
+#endif
+
+ void Session::useConfigData( ConfigData const& configData ) {
+ m_configData = configData;
+ m_config.reset();
+ }
+
+ int Session::run() {
+ if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeStart ) != 0 ) {
+ Catch::cout() << "...waiting for enter/ return before starting" << std::endl;
+ static_cast<void>(std::getchar());
+ }
+ int exitCode = runInternal();
+ if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeExit ) != 0 ) {
+ Catch::cout() << "...waiting for enter/ return before exiting, with code: " << exitCode << std::endl;
+ static_cast<void>(std::getchar());
+ }
+ return exitCode;
+ }
+
+ clara::Parser const& Session::cli() const {
+ return m_cli;
+ }
+ void Session::cli( clara::Parser const& newParser ) {
+ m_cli = newParser;
+ }
+ ConfigData& Session::configData() {
+ return m_configData;
+ }
+ Config& Session::config() {
+ if( !m_config )
+ m_config = std::make_shared<Config>( m_configData );
+ return *m_config;
+ }
+
+ int Session::runInternal() {
+ if( m_startupExceptions )
+ return 1;
+
+ if (m_configData.showHelp || m_configData.libIdentify) {
+ return 0;
+ }
+
+ CATCH_TRY {
+ config(); // Force config to be constructed
+
+ seedRng( *m_config );
+
+ if( m_configData.filenamesAsTags )
+ applyFilenamesAsTags( *m_config );
+
+ // Handle list request
+ if( Option<std::size_t> listed = list( m_config ) )
+ return static_cast<int>( *listed );
+
+ TestGroup tests { m_config };
+ auto const totals = tests.execute();
+
+ if( m_config->warnAboutNoTests() && totals.error == -1 )
+ return 2;
+
+ // Note that on unices only the lower 8 bits are usually used, clamping
+ // the return value to 255 prevents false negative when some multiple
+ // of 256 tests has failed
+ return (std::min) (MaxExitCode, (std::max) (totals.error, static_cast<int>(totals.assertions.failed)));
+ }
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ catch( std::exception& ex ) {
+ Catch::cerr() << ex.what() << std::endl;
+ return MaxExitCode;
+ }
+#endif
+ }
+
+} // end namespace Catch
+// end catch_session.cpp
+// start catch_singletons.cpp
+
+#include <vector>
+
+namespace Catch {
+
+ namespace {
+ static auto getSingletons() -> std::vector<ISingleton*>*& {
+ static std::vector<ISingleton*>* g_singletons = nullptr;
+ if( !g_singletons )
+ g_singletons = new std::vector<ISingleton*>();
+ return g_singletons;
+ }
+ }
+
+ ISingleton::~ISingleton() {}
+
+ void addSingleton(ISingleton* singleton ) {
+ getSingletons()->push_back( singleton );
+ }
+ void cleanupSingletons() {
+ auto& singletons = getSingletons();
+ for( auto singleton : *singletons )
+ delete singleton;
+ delete singletons;
+ singletons = nullptr;
+ }
+
+} // namespace Catch
+// end catch_singletons.cpp
+// start catch_startup_exception_registry.cpp
+
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+namespace Catch {
+void StartupExceptionRegistry::add( std::exception_ptr const& exception ) noexcept {
+ CATCH_TRY {
+ m_exceptions.push_back(exception);
+ } CATCH_CATCH_ALL {
+ // If we run out of memory during start-up there's really not a lot more we can do about it
+ std::terminate();
+ }
+ }
+
+ std::vector<std::exception_ptr> const& StartupExceptionRegistry::getExceptions() const noexcept {
+ return m_exceptions;
+ }
+
+} // end namespace Catch
+#endif
+// end catch_startup_exception_registry.cpp
+// start catch_stream.cpp
+
+#include <cstdio>
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ Catch::IStream::~IStream() = default;
+
+ namespace Detail { namespace {
+ template<typename WriterF, std::size_t bufferSize=256>
+ class StreamBufImpl : public std::streambuf {
+ char data[bufferSize];
+ WriterF m_writer;
+
+ public:
+ StreamBufImpl() {
+ setp( data, data + sizeof(data) );
+ }
+
+ ~StreamBufImpl() noexcept {
+ StreamBufImpl::sync();
+ }
+
+ private:
+ int overflow( int c ) override {
+ sync();
+
+ if( c != EOF ) {
+ if( pbase() == epptr() )
+ m_writer( std::string( 1, static_cast<char>( c ) ) );
+ else
+ sputc( static_cast<char>( c ) );
+ }
+ return 0;
+ }
+
+ int sync() override {
+ if( pbase() != pptr() ) {
+ m_writer( std::string( pbase(), static_cast<std::string::size_type>( pptr() - pbase() ) ) );
+ setp( pbase(), epptr() );
+ }
+ return 0;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ struct OutputDebugWriter {
+
+ void operator()( std::string const&str ) {
+ writeToDebugConsole( str );
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class FileStream : public IStream {
+ mutable std::ofstream m_ofs;
+ public:
+ FileStream( StringRef filename ) {
+ m_ofs.open( filename.c_str() );
+ CATCH_ENFORCE( !m_ofs.fail(), "Unable to open file: '" << filename << "'" );
+ }
+ ~FileStream() override = default;
+ public: // IStream
+ std::ostream& stream() const override {
+ return m_ofs;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class CoutStream : public IStream {
+ mutable std::ostream m_os;
+ public:
+ // Store the streambuf from cout up-front because
+ // cout may get redirected when running tests
+ CoutStream() : m_os( Catch::cout().rdbuf() ) {}
+ ~CoutStream() override = default;
+
+ public: // IStream
+ std::ostream& stream() const override { return m_os; }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class DebugOutStream : public IStream {
+ std::unique_ptr<StreamBufImpl<OutputDebugWriter>> m_streamBuf;
+ mutable std::ostream m_os;
+ public:
+ DebugOutStream()
+ : m_streamBuf( new StreamBufImpl<OutputDebugWriter>() ),
+ m_os( m_streamBuf.get() )
+ {}
+
+ ~DebugOutStream() override = default;
+
+ public: // IStream
+ std::ostream& stream() const override { return m_os; }
+ };
+
+ }} // namespace anon::detail
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ auto makeStream( StringRef const &filename ) -> IStream const* {
+ if( filename.empty() )
+ return new Detail::CoutStream();
+ else if( filename[0] == '%' ) {
+ if( filename == "%debug" )
+ return new Detail::DebugOutStream();
+ else
+ CATCH_ERROR( "Unrecognised stream: '" << filename << "'" );
+ }
+ else
+ return new Detail::FileStream( filename );
+ }
+
+ // This class encapsulates the idea of a pool of ostringstreams that can be reused.
+ struct StringStreams {
+ std::vector<std::unique_ptr<std::ostringstream>> m_streams;
+ std::vector<std::size_t> m_unused;
+ std::ostringstream m_referenceStream; // Used for copy state/ flags from
+
+ auto add() -> std::size_t {
+ if( m_unused.empty() ) {
+ m_streams.push_back( std::unique_ptr<std::ostringstream>( new std::ostringstream ) );
+ return m_streams.size()-1;
+ }
+ else {
+ auto index = m_unused.back();
+ m_unused.pop_back();
+ return index;
+ }
+ }
+
+ void release( std::size_t index ) {
+ m_streams[index]->copyfmt( m_referenceStream ); // Restore initial flags and other state
+ m_unused.push_back(index);
+ }
+ };
+
+ ReusableStringStream::ReusableStringStream()
+ : m_index( Singleton<StringStreams>::getMutable().add() ),
+ m_oss( Singleton<StringStreams>::getMutable().m_streams[m_index].get() )
+ {}
+
+ ReusableStringStream::~ReusableStringStream() {
+ static_cast<std::ostringstream*>( m_oss )->str("");
+ m_oss->clear();
+ Singleton<StringStreams>::getMutable().release( m_index );
+ }
+
+ auto ReusableStringStream::str() const -> std::string {
+ return static_cast<std::ostringstream*>( m_oss )->str();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+
+#ifndef CATCH_CONFIG_NOSTDOUT // If you #define this you must implement these functions
+ std::ostream& cout() { return std::cout; }
+ std::ostream& cerr() { return std::cerr; }
+ std::ostream& clog() { return std::clog; }
+#endif
+}
+// end catch_stream.cpp
+// start catch_string_manip.cpp
+
+#include <algorithm>
+#include <ostream>
+#include <cstring>
+#include <cctype>
+#include <vector>
+
+namespace Catch {
+
+ namespace {
+ char toLowerCh(char c) {
+ return static_cast<char>( std::tolower( static_cast<unsigned char>(c) ) );
+ }
+ }
+
+ bool startsWith( std::string const& s, std::string const& prefix ) {
+ return s.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), s.begin());
+ }
+ bool startsWith( std::string const& s, char prefix ) {
+ return !s.empty() && s[0] == prefix;
+ }
+ bool endsWith( std::string const& s, std::string const& suffix ) {
+ return s.size() >= suffix.size() && std::equal(suffix.rbegin(), suffix.rend(), s.rbegin());
+ }
+ bool endsWith( std::string const& s, char suffix ) {
+ return !s.empty() && s[s.size()-1] == suffix;
+ }
+ bool contains( std::string const& s, std::string const& infix ) {
+ return s.find( infix ) != std::string::npos;
+ }
+ void toLowerInPlace( std::string& s ) {
+ std::transform( s.begin(), s.end(), s.begin(), toLowerCh );
+ }
+ std::string toLower( std::string const& s ) {
+ std::string lc = s;
+ toLowerInPlace( lc );
+ return lc;
+ }
+ std::string trim( std::string const& str ) {
+ static char const* whitespaceChars = "\n\r\t ";
+ std::string::size_type start = str.find_first_not_of( whitespaceChars );
+ std::string::size_type end = str.find_last_not_of( whitespaceChars );
+
+ return start != std::string::npos ? str.substr( start, 1+end-start ) : std::string();
+ }
+
+ StringRef trim(StringRef ref) {
+ const auto is_ws = [](char c) {
+ return c == ' ' || c == '\t' || c == '\n' || c == '\r';
+ };
+ size_t real_begin = 0;
+ while (real_begin < ref.size() && is_ws(ref[real_begin])) { ++real_begin; }
+ size_t real_end = ref.size();
+ while (real_end > real_begin && is_ws(ref[real_end - 1])) { --real_end; }
+
+ return ref.substr(real_begin, real_end - real_begin);
+ }
+
+ bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ) {
+ bool replaced = false;
+ std::size_t i = str.find( replaceThis );
+ while( i != std::string::npos ) {
+ replaced = true;
+ str = str.substr( 0, i ) + withThis + str.substr( i+replaceThis.size() );
+ if( i < str.size()-withThis.size() )
+ i = str.find( replaceThis, i+withThis.size() );
+ else
+ i = std::string::npos;
+ }
+ return replaced;
+ }
+
+ std::vector<StringRef> splitStringRef( StringRef str, char delimiter ) {
+ std::vector<StringRef> subStrings;
+ std::size_t start = 0;
+ for(std::size_t pos = 0; pos < str.size(); ++pos ) {
+ if( str[pos] == delimiter ) {
+ if( pos - start > 1 )
+ subStrings.push_back( str.substr( start, pos-start ) );
+ start = pos+1;
+ }
+ }
+ if( start < str.size() )
+ subStrings.push_back( str.substr( start, str.size()-start ) );
+ return subStrings;
+ }
+
+ pluralise::pluralise( std::size_t count, std::string const& label )
+ : m_count( count ),
+ m_label( label )
+ {}
+
+ std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ) {
+ os << pluraliser.m_count << ' ' << pluraliser.m_label;
+ if( pluraliser.m_count != 1 )
+ os << 's';
+ return os;
+ }
+
+}
+// end catch_string_manip.cpp
+// start catch_stringref.cpp
+
+#include <algorithm>
+#include <ostream>
+#include <cstring>
+#include <cstdint>
+
+namespace Catch {
+ StringRef::StringRef( char const* rawChars ) noexcept
+ : StringRef( rawChars, static_cast<StringRef::size_type>(std::strlen(rawChars) ) )
+ {}
+
+ auto StringRef::c_str() const -> char const* {
+ CATCH_ENFORCE(isNullTerminated(), "Called StringRef::c_str() on a non-null-terminated instance");
+ return m_start;
+ }
+ auto StringRef::data() const noexcept -> char const* {
+ return m_start;
+ }
+
+ auto StringRef::substr( size_type start, size_type size ) const noexcept -> StringRef {
+ if (start < m_size) {
+ return StringRef(m_start + start, (std::min)(m_size - start, size));
+ } else {
+ return StringRef();
+ }
+ }
+ auto StringRef::operator == ( StringRef const& other ) const noexcept -> bool {
+ return m_size == other.m_size
+ && (std::memcmp( m_start, other.m_start, m_size ) == 0);
+ }
+
+ auto operator << ( std::ostream& os, StringRef const& str ) -> std::ostream& {
+ return os.write(str.data(), str.size());
+ }
+
+ auto operator+=( std::string& lhs, StringRef const& rhs ) -> std::string& {
+ lhs.append(rhs.data(), rhs.size());
+ return lhs;
+ }
+
+} // namespace Catch
+// end catch_stringref.cpp
+// start catch_tag_alias.cpp
+
+namespace Catch {
+ TagAlias::TagAlias(std::string const & _tag, SourceLineInfo _lineInfo): tag(_tag), lineInfo(_lineInfo) {}
+}
+// end catch_tag_alias.cpp
+// start catch_tag_alias_autoregistrar.cpp
+
+namespace Catch {
+
+ RegistrarForTagAliases::RegistrarForTagAliases(char const* alias, char const* tag, SourceLineInfo const& lineInfo) {
+ CATCH_TRY {
+ getMutableRegistryHub().registerTagAlias(alias, tag, lineInfo);
+ } CATCH_CATCH_ALL {
+ // Do not throw when constructing global objects, instead register the exception to be processed later
+ getMutableRegistryHub().registerStartupException();
+ }
+ }
+
+}
+// end catch_tag_alias_autoregistrar.cpp
+// start catch_tag_alias_registry.cpp
+
+#include <sstream>
+
+namespace Catch {
+
+ TagAliasRegistry::~TagAliasRegistry() {}
+
+ TagAlias const* TagAliasRegistry::find( std::string const& alias ) const {
+ auto it = m_registry.find( alias );
+ if( it != m_registry.end() )
+ return &(it->second);
+ else
+ return nullptr;
+ }
+
+ std::string TagAliasRegistry::expandAliases( std::string const& unexpandedTestSpec ) const {
+ std::string expandedTestSpec = unexpandedTestSpec;
+ for( auto const& registryKvp : m_registry ) {
+ std::size_t pos = expandedTestSpec.find( registryKvp.first );
+ if( pos != std::string::npos ) {
+ expandedTestSpec = expandedTestSpec.substr( 0, pos ) +
+ registryKvp.second.tag +
+ expandedTestSpec.substr( pos + registryKvp.first.size() );
+ }
+ }
+ return expandedTestSpec;
+ }
+
+ void TagAliasRegistry::add( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) {
+ CATCH_ENFORCE( startsWith(alias, "[@") && endsWith(alias, ']'),
+ "error: tag alias, '" << alias << "' is not of the form [@alias name].\n" << lineInfo );
+
+ CATCH_ENFORCE( m_registry.insert(std::make_pair(alias, TagAlias(tag, lineInfo))).second,
+ "error: tag alias, '" << alias << "' already registered.\n"
+ << "\tFirst seen at: " << find(alias)->lineInfo << "\n"
+ << "\tRedefined at: " << lineInfo );
+ }
+
+ ITagAliasRegistry::~ITagAliasRegistry() {}
+
+ ITagAliasRegistry const& ITagAliasRegistry::get() {
+ return getRegistryHub().getTagAliasRegistry();
+ }
+
+} // end namespace Catch
+// end catch_tag_alias_registry.cpp
+// start catch_test_case_info.cpp
+
+#include <cctype>
+#include <exception>
+#include <algorithm>
+#include <sstream>
+
+namespace Catch {
+
+ namespace {
+ TestCaseInfo::SpecialProperties parseSpecialTag( std::string const& tag ) {
+ if( startsWith( tag, '.' ) ||
+ tag == "!hide" )
+ return TestCaseInfo::IsHidden;
+ else if( tag == "!throws" )
+ return TestCaseInfo::Throws;
+ else if( tag == "!shouldfail" )
+ return TestCaseInfo::ShouldFail;
+ else if( tag == "!mayfail" )
+ return TestCaseInfo::MayFail;
+ else if( tag == "!nonportable" )
+ return TestCaseInfo::NonPortable;
+ else if( tag == "!benchmark" )
+ return static_cast<TestCaseInfo::SpecialProperties>( TestCaseInfo::Benchmark | TestCaseInfo::IsHidden );
+ else
+ return TestCaseInfo::None;
+ }
+ bool isReservedTag( std::string const& tag ) {
+ return parseSpecialTag( tag ) == TestCaseInfo::None && tag.size() > 0 && !std::isalnum( static_cast<unsigned char>(tag[0]) );
+ }
+ void enforceNotReservedTag( std::string const& tag, SourceLineInfo const& _lineInfo ) {
+ CATCH_ENFORCE( !isReservedTag(tag),
+ "Tag name: [" << tag << "] is not allowed.\n"
+ << "Tag names starting with non alphanumeric characters are reserved\n"
+ << _lineInfo );
+ }
+ }
+
+ TestCase makeTestCase( ITestInvoker* _testCase,
+ std::string const& _className,
+ NameAndTags const& nameAndTags,
+ SourceLineInfo const& _lineInfo )
+ {
+ bool isHidden = false;
+
+ // Parse out tags
+ std::vector<std::string> tags;
+ std::string desc, tag;
+ bool inTag = false;
+ for (char c : nameAndTags.tags) {
+ if( !inTag ) {
+ if( c == '[' )
+ inTag = true;
+ else
+ desc += c;
+ }
+ else {
+ if( c == ']' ) {
+ TestCaseInfo::SpecialProperties prop = parseSpecialTag( tag );
+ if( ( prop & TestCaseInfo::IsHidden ) != 0 )
+ isHidden = true;
+ else if( prop == TestCaseInfo::None )
+ enforceNotReservedTag( tag, _lineInfo );
+
+ // Merged hide tags like `[.approvals]` should be added as
+ // `[.][approvals]`. The `[.]` is added at later point, so
+ // we only strip the prefix
+ if (startsWith(tag, '.') && tag.size() > 1) {
+ tag.erase(0, 1);
+ }
+ tags.push_back( tag );
+ tag.clear();
+ inTag = false;
+ }
+ else
+ tag += c;
+ }
+ }
+ if( isHidden ) {
+ // Add all "hidden" tags to make them behave identically
+ tags.insert( tags.end(), { ".", "!hide" } );
+ }
+
+ TestCaseInfo info( static_cast<std::string>(nameAndTags.name), _className, desc, tags, _lineInfo );
+ return TestCase( _testCase, std::move(info) );
+ }
+
+ void setTags( TestCaseInfo& testCaseInfo, std::vector<std::string> tags ) {
+ std::sort(begin(tags), end(tags));
+ tags.erase(std::unique(begin(tags), end(tags)), end(tags));
+ testCaseInfo.lcaseTags.clear();
+
+ for( auto const& tag : tags ) {
+ std::string lcaseTag = toLower( tag );
+ testCaseInfo.properties = static_cast<TestCaseInfo::SpecialProperties>( testCaseInfo.properties | parseSpecialTag( lcaseTag ) );
+ testCaseInfo.lcaseTags.push_back( lcaseTag );
+ }
+ testCaseInfo.tags = std::move(tags);
+ }
+
+ TestCaseInfo::TestCaseInfo( std::string const& _name,
+ std::string const& _className,
+ std::string const& _description,
+ std::vector<std::string> const& _tags,
+ SourceLineInfo const& _lineInfo )
+ : name( _name ),
+ className( _className ),
+ description( _description ),
+ lineInfo( _lineInfo ),
+ properties( None )
+ {
+ setTags( *this, _tags );
+ }
+
+ bool TestCaseInfo::isHidden() const {
+ return ( properties & IsHidden ) != 0;
+ }
+ bool TestCaseInfo::throws() const {
+ return ( properties & Throws ) != 0;
+ }
+ bool TestCaseInfo::okToFail() const {
+ return ( properties & (ShouldFail | MayFail ) ) != 0;
+ }
+ bool TestCaseInfo::expectedToFail() const {
+ return ( properties & (ShouldFail ) ) != 0;
+ }
+
+ std::string TestCaseInfo::tagsAsString() const {
+ std::string ret;
+ // '[' and ']' per tag
+ std::size_t full_size = 2 * tags.size();
+ for (const auto& tag : tags) {
+ full_size += tag.size();
+ }
+ ret.reserve(full_size);
+ for (const auto& tag : tags) {
+ ret.push_back('[');
+ ret.append(tag);
+ ret.push_back(']');
+ }
+
+ return ret;
+ }
+
+ TestCase::TestCase( ITestInvoker* testCase, TestCaseInfo&& info ) : TestCaseInfo( std::move(info) ), test( testCase ) {}
+
+ TestCase TestCase::withName( std::string const& _newName ) const {
+ TestCase other( *this );
+ other.name = _newName;
+ return other;
+ }
+
+ void TestCase::invoke() const {
+ test->invoke();
+ }
+
+ bool TestCase::operator == ( TestCase const& other ) const {
+ return test.get() == other.test.get() &&
+ name == other.name &&
+ className == other.className;
+ }
+
+ bool TestCase::operator < ( TestCase const& other ) const {
+ return name < other.name;
+ }
+
+ TestCaseInfo const& TestCase::getTestCaseInfo() const
+ {
+ return *this;
+ }
+
+} // end namespace Catch
+// end catch_test_case_info.cpp
+// start catch_test_case_registry_impl.cpp
+
+#include <algorithm>
+#include <sstream>
+
+namespace Catch {
+
+ namespace {
+ struct TestHasher {
+ using hash_t = uint64_t;
+
+ explicit TestHasher( hash_t hashSuffix ):
+ m_hashSuffix{ hashSuffix } {}
+
+ uint32_t operator()( TestCase const& t ) const {
+ // FNV-1a hash with multiplication fold.
+ const hash_t prime = 1099511628211u;
+ hash_t hash = 14695981039346656037u;
+ for ( const char c : t.name ) {
+ hash ^= c;
+ hash *= prime;
+ }
+ hash ^= m_hashSuffix;
+ hash *= prime;
+ const uint32_t low{ static_cast<uint32_t>( hash ) };
+ const uint32_t high{ static_cast<uint32_t>( hash >> 32 ) };
+ return low * high;
+ }
+
+ private:
+ hash_t m_hashSuffix;
+ };
+ } // end unnamed namespace
+
+ std::vector<TestCase> sortTests( IConfig const& config, std::vector<TestCase> const& unsortedTestCases ) {
+ switch( config.runOrder() ) {
+ case RunTests::InDeclarationOrder:
+ // already in declaration order
+ break;
+
+ case RunTests::InLexicographicalOrder: {
+ std::vector<TestCase> sorted = unsortedTestCases;
+ std::sort( sorted.begin(), sorted.end() );
+ return sorted;
+ }
+
+ case RunTests::InRandomOrder: {
+ seedRng( config );
+ TestHasher h{ config.rngSeed() };
+
+ using hashedTest = std::pair<TestHasher::hash_t, TestCase const*>;
+ std::vector<hashedTest> indexed_tests;
+ indexed_tests.reserve( unsortedTestCases.size() );
+
+ for (auto const& testCase : unsortedTestCases) {
+ indexed_tests.emplace_back(h(testCase), &testCase);
+ }
+
+ std::sort(indexed_tests.begin(), indexed_tests.end(),
+ [](hashedTest const& lhs, hashedTest const& rhs) {
+ if (lhs.first == rhs.first) {
+ return lhs.second->name < rhs.second->name;
+ }
+ return lhs.first < rhs.first;
+ });
+
+ std::vector<TestCase> sorted;
+ sorted.reserve( indexed_tests.size() );
+
+ for (auto const& hashed : indexed_tests) {
+ sorted.emplace_back(*hashed.second);
+ }
+
+ return sorted;
+ }
+ }
+ return unsortedTestCases;
+ }
+
+ bool isThrowSafe( TestCase const& testCase, IConfig const& config ) {
+ return !testCase.throws() || config.allowThrows();
+ }
+
+ bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ) {
+ return testSpec.matches( testCase ) && isThrowSafe( testCase, config );
+ }
+
+ void enforceNoDuplicateTestCases( std::vector<TestCase> const& functions ) {
+ std::set<TestCase> seenFunctions;
+ for( auto const& function : functions ) {
+ auto prev = seenFunctions.insert( function );
+ CATCH_ENFORCE( prev.second,
+ "error: TEST_CASE( \"" << function.name << "\" ) already defined.\n"
+ << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << "\n"
+ << "\tRedefined at " << function.getTestCaseInfo().lineInfo );
+ }
+ }
+
+ std::vector<TestCase> filterTests( std::vector<TestCase> const& testCases, TestSpec const& testSpec, IConfig const& config ) {
+ std::vector<TestCase> filtered;
+ filtered.reserve( testCases.size() );
+ for (auto const& testCase : testCases) {
+ if ((!testSpec.hasFilters() && !testCase.isHidden()) ||
+ (testSpec.hasFilters() && matchTest(testCase, testSpec, config))) {
+ filtered.push_back(testCase);
+ }
+ }
+ return filtered;
+ }
+ std::vector<TestCase> const& getAllTestCasesSorted( IConfig const& config ) {
+ return getRegistryHub().getTestCaseRegistry().getAllTestsSorted( config );
+ }
+
+ void TestRegistry::registerTest( TestCase const& testCase ) {
+ std::string name = testCase.getTestCaseInfo().name;
+ if( name.empty() ) {
+ ReusableStringStream rss;
+ rss << "Anonymous test case " << ++m_unnamedCount;
+ return registerTest( testCase.withName( rss.str() ) );
+ }
+ m_functions.push_back( testCase );
+ }
+
+ std::vector<TestCase> const& TestRegistry::getAllTests() const {
+ return m_functions;
+ }
+ std::vector<TestCase> const& TestRegistry::getAllTestsSorted( IConfig const& config ) const {
+ if( m_sortedFunctions.empty() )
+ enforceNoDuplicateTestCases( m_functions );
+
+ if( m_currentSortOrder != config.runOrder() || m_sortedFunctions.empty() ) {
+ m_sortedFunctions = sortTests( config, m_functions );
+ m_currentSortOrder = config.runOrder();
+ }
+ return m_sortedFunctions;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ TestInvokerAsFunction::TestInvokerAsFunction( void(*testAsFunction)() ) noexcept : m_testAsFunction( testAsFunction ) {}
+
+ void TestInvokerAsFunction::invoke() const {
+ m_testAsFunction();
+ }
+
+ std::string extractClassName( StringRef const& classOrQualifiedMethodName ) {
+ std::string className(classOrQualifiedMethodName);
+ if( startsWith( className, '&' ) )
+ {
+ std::size_t lastColons = className.rfind( "::" );
+ std::size_t penultimateColons = className.rfind( "::", lastColons-1 );
+ if( penultimateColons == std::string::npos )
+ penultimateColons = 1;
+ className = className.substr( penultimateColons, lastColons-penultimateColons );
+ }
+ return className;
+ }
+
+} // end namespace Catch
+// end catch_test_case_registry_impl.cpp
+// start catch_test_case_tracker.cpp
+
+#include <algorithm>
+#include <cassert>
+#include <stdexcept>
+#include <memory>
+#include <sstream>
+
+#if defined(__clang__)
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wexit-time-destructors"
+#endif
+
+namespace Catch {
+namespace TestCaseTracking {
+
+ NameAndLocation::NameAndLocation( std::string const& _name, SourceLineInfo const& _location )
+ : name( _name ),
+ location( _location )
+ {}
+
+ ITracker::~ITracker() = default;
+
+ ITracker& TrackerContext::startRun() {
+ m_rootTracker = std::make_shared<SectionTracker>( NameAndLocation( "{root}", CATCH_INTERNAL_LINEINFO ), *this, nullptr );
+ m_currentTracker = nullptr;
+ m_runState = Executing;
+ return *m_rootTracker;
+ }
+
+ void TrackerContext::endRun() {
+ m_rootTracker.reset();
+ m_currentTracker = nullptr;
+ m_runState = NotStarted;
+ }
+
+ void TrackerContext::startCycle() {
+ m_currentTracker = m_rootTracker.get();
+ m_runState = Executing;
+ }
+ void TrackerContext::completeCycle() {
+ m_runState = CompletedCycle;
+ }
+
+ bool TrackerContext::completedCycle() const {
+ return m_runState == CompletedCycle;
+ }
+ ITracker& TrackerContext::currentTracker() {
+ return *m_currentTracker;
+ }
+ void TrackerContext::setCurrentTracker( ITracker* tracker ) {
+ m_currentTracker = tracker;
+ }
+
+ TrackerBase::TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ):
+ ITracker(nameAndLocation),
+ m_ctx( ctx ),
+ m_parent( parent )
+ {}
+
+ bool TrackerBase::isComplete() const {
+ return m_runState == CompletedSuccessfully || m_runState == Failed;
+ }
+ bool TrackerBase::isSuccessfullyCompleted() const {
+ return m_runState == CompletedSuccessfully;
+ }
+ bool TrackerBase::isOpen() const {
+ return m_runState != NotStarted && !isComplete();
+ }
+ bool TrackerBase::hasChildren() const {
+ return !m_children.empty();
+ }
+
+ void TrackerBase::addChild( ITrackerPtr const& child ) {
+ m_children.push_back( child );
+ }
+
+ ITrackerPtr TrackerBase::findChild( NameAndLocation const& nameAndLocation ) {
+ auto it = std::find_if( m_children.begin(), m_children.end(),
+ [&nameAndLocation]( ITrackerPtr const& tracker ){
+ return
+ tracker->nameAndLocation().location == nameAndLocation.location &&
+ tracker->nameAndLocation().name == nameAndLocation.name;
+ } );
+ return( it != m_children.end() )
+ ? *it
+ : nullptr;
+ }
+ ITracker& TrackerBase::parent() {
+ assert( m_parent ); // Should always be non-null except for root
+ return *m_parent;
+ }
+
+ void TrackerBase::openChild() {
+ if( m_runState != ExecutingChildren ) {
+ m_runState = ExecutingChildren;
+ if( m_parent )
+ m_parent->openChild();
+ }
+ }
+
+ bool TrackerBase::isSectionTracker() const { return false; }
+ bool TrackerBase::isGeneratorTracker() const { return false; }
+
+ void TrackerBase::open() {
+ m_runState = Executing;
+ moveToThis();
+ if( m_parent )
+ m_parent->openChild();
+ }
+
+ void TrackerBase::close() {
+
+ // Close any still open children (e.g. generators)
+ while( &m_ctx.currentTracker() != this )
+ m_ctx.currentTracker().close();
+
+ switch( m_runState ) {
+ case NeedsAnotherRun:
+ break;
+
+ case Executing:
+ m_runState = CompletedSuccessfully;
+ break;
+ case ExecutingChildren:
+ if( std::all_of(m_children.begin(), m_children.end(), [](ITrackerPtr const& t){ return t->isComplete(); }) )
+ m_runState = CompletedSuccessfully;
+ break;
+
+ case NotStarted:
+ case CompletedSuccessfully:
+ case Failed:
+ CATCH_INTERNAL_ERROR( "Illogical state: " << m_runState );
+
+ default:
+ CATCH_INTERNAL_ERROR( "Unknown state: " << m_runState );
+ }
+ moveToParent();
+ m_ctx.completeCycle();
+ }
+ void TrackerBase::fail() {
+ m_runState = Failed;
+ if( m_parent )
+ m_parent->markAsNeedingAnotherRun();
+ moveToParent();
+ m_ctx.completeCycle();
+ }
+ void TrackerBase::markAsNeedingAnotherRun() {
+ m_runState = NeedsAnotherRun;
+ }
+
+ void TrackerBase::moveToParent() {
+ assert( m_parent );
+ m_ctx.setCurrentTracker( m_parent );
+ }
+ void TrackerBase::moveToThis() {
+ m_ctx.setCurrentTracker( this );
+ }
+
+ SectionTracker::SectionTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent )
+ : TrackerBase( nameAndLocation, ctx, parent ),
+ m_trimmed_name(trim(nameAndLocation.name))
+ {
+ if( parent ) {
+ while( !parent->isSectionTracker() )
+ parent = &parent->parent();
+
+ SectionTracker& parentSection = static_cast<SectionTracker&>( *parent );
+ addNextFilters( parentSection.m_filters );
+ }
+ }
+
+ bool SectionTracker::isComplete() const {
+ bool complete = true;
+
+ if (m_filters.empty()
+ || m_filters[0] == ""
+ || std::find(m_filters.begin(), m_filters.end(), m_trimmed_name) != m_filters.end()) {
+ complete = TrackerBase::isComplete();
+ }
+ return complete;
+ }
+
+ bool SectionTracker::isSectionTracker() const { return true; }
+
+ SectionTracker& SectionTracker::acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation ) {
+ std::shared_ptr<SectionTracker> section;
+
+ ITracker& currentTracker = ctx.currentTracker();
+ if( ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) {
+ assert( childTracker );
+ assert( childTracker->isSectionTracker() );
+ section = std::static_pointer_cast<SectionTracker>( childTracker );
+ }
+ else {
+ section = std::make_shared<SectionTracker>( nameAndLocation, ctx, &currentTracker );
+ currentTracker.addChild( section );
+ }
+ if( !ctx.completedCycle() )
+ section->tryOpen();
+ return *section;
+ }
+
+ void SectionTracker::tryOpen() {
+ if( !isComplete() )
+ open();
+ }
+
+ void SectionTracker::addInitialFilters( std::vector<std::string> const& filters ) {
+ if( !filters.empty() ) {
+ m_filters.reserve( m_filters.size() + filters.size() + 2 );
+ m_filters.emplace_back(""); // Root - should never be consulted
+ m_filters.emplace_back(""); // Test Case - not a section filter
+ m_filters.insert( m_filters.end(), filters.begin(), filters.end() );
+ }
+ }
+ void SectionTracker::addNextFilters( std::vector<std::string> const& filters ) {
+ if( filters.size() > 1 )
+ m_filters.insert( m_filters.end(), filters.begin()+1, filters.end() );
+ }
+
+ std::vector<std::string> const& SectionTracker::getFilters() const {
+ return m_filters;
+ }
+
+ std::string const& SectionTracker::trimmedName() const {
+ return m_trimmed_name;
+ }
+
+} // namespace TestCaseTracking
+
+using TestCaseTracking::ITracker;
+using TestCaseTracking::TrackerContext;
+using TestCaseTracking::SectionTracker;
+
+} // namespace Catch
+
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#endif
+// end catch_test_case_tracker.cpp
+// start catch_test_registry.cpp
+
+namespace Catch {
+
+ auto makeTestInvoker( void(*testAsFunction)() ) noexcept -> ITestInvoker* {
+ return new(std::nothrow) TestInvokerAsFunction( testAsFunction );
+ }
+
+ NameAndTags::NameAndTags( StringRef const& name_ , StringRef const& tags_ ) noexcept : name( name_ ), tags( tags_ ) {}
+
+ AutoReg::AutoReg( ITestInvoker* invoker, SourceLineInfo const& lineInfo, StringRef const& classOrMethod, NameAndTags const& nameAndTags ) noexcept {
+ CATCH_TRY {
+ getMutableRegistryHub()
+ .registerTest(
+ makeTestCase(
+ invoker,
+ extractClassName( classOrMethod ),
+ nameAndTags,
+ lineInfo));
+ } CATCH_CATCH_ALL {
+ // Do not throw when constructing global objects, instead register the exception to be processed later
+ getMutableRegistryHub().registerStartupException();
+ }
+ }
+
+ AutoReg::~AutoReg() = default;
+}
+// end catch_test_registry.cpp
+// start catch_test_spec.cpp
+
+#include <algorithm>
+#include <string>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ TestSpec::Pattern::Pattern( std::string const& name )
+ : m_name( name )
+ {}
+
+ TestSpec::Pattern::~Pattern() = default;
+
+ std::string const& TestSpec::Pattern::name() const {
+ return m_name;
+ }
+
+ TestSpec::NamePattern::NamePattern( std::string const& name, std::string const& filterString )
+ : Pattern( filterString )
+ , m_wildcardPattern( toLower( name ), CaseSensitive::No )
+ {}
+
+ bool TestSpec::NamePattern::matches( TestCaseInfo const& testCase ) const {
+ return m_wildcardPattern.matches( testCase.name );
+ }
+
+ TestSpec::TagPattern::TagPattern( std::string const& tag, std::string const& filterString )
+ : Pattern( filterString )
+ , m_tag( toLower( tag ) )
+ {}
+
+ bool TestSpec::TagPattern::matches( TestCaseInfo const& testCase ) const {
+ return std::find(begin(testCase.lcaseTags),
+ end(testCase.lcaseTags),
+ m_tag) != end(testCase.lcaseTags);
+ }
+
+ TestSpec::ExcludedPattern::ExcludedPattern( PatternPtr const& underlyingPattern )
+ : Pattern( underlyingPattern->name() )
+ , m_underlyingPattern( underlyingPattern )
+ {}
+
+ bool TestSpec::ExcludedPattern::matches( TestCaseInfo const& testCase ) const {
+ return !m_underlyingPattern->matches( testCase );
+ }
+
+ bool TestSpec::Filter::matches( TestCaseInfo const& testCase ) const {
+ return std::all_of( m_patterns.begin(), m_patterns.end(), [&]( PatternPtr const& p ){ return p->matches( testCase ); } );
+ }
+
+ std::string TestSpec::Filter::name() const {
+ std::string name;
+ for( auto const& p : m_patterns )
+ name += p->name();
+ return name;
+ }
+
+ bool TestSpec::hasFilters() const {
+ return !m_filters.empty();
+ }
+
+ bool TestSpec::matches( TestCaseInfo const& testCase ) const {
+ return std::any_of( m_filters.begin(), m_filters.end(), [&]( Filter const& f ){ return f.matches( testCase ); } );
+ }
+
+ TestSpec::Matches TestSpec::matchesByFilter( std::vector<TestCase> const& testCases, IConfig const& config ) const
+ {
+ Matches matches( m_filters.size() );
+ std::transform( m_filters.begin(), m_filters.end(), matches.begin(), [&]( Filter const& filter ){
+ std::vector<TestCase const*> currentMatches;
+ for( auto const& test : testCases )
+ if( isThrowSafe( test, config ) && filter.matches( test ) )
+ currentMatches.emplace_back( &test );
+ return FilterMatch{ filter.name(), currentMatches };
+ } );
+ return matches;
+ }
+
+ const TestSpec::vectorStrings& TestSpec::getInvalidArgs() const{
+ return (m_invalidArgs);
+ }
+
+}
+// end catch_test_spec.cpp
+// start catch_test_spec_parser.cpp
+
+namespace Catch {
+
+ TestSpecParser::TestSpecParser( ITagAliasRegistry const& tagAliases ) : m_tagAliases( &tagAliases ) {}
+
+ TestSpecParser& TestSpecParser::parse( std::string const& arg ) {
+ m_mode = None;
+ m_exclusion = false;
+ m_arg = m_tagAliases->expandAliases( arg );
+ m_escapeChars.clear();
+ m_substring.reserve(m_arg.size());
+ m_patternName.reserve(m_arg.size());
+ m_realPatternPos = 0;
+
+ for( m_pos = 0; m_pos < m_arg.size(); ++m_pos )
+ //if visitChar fails
+ if( !visitChar( m_arg[m_pos] ) ){
+ m_testSpec.m_invalidArgs.push_back(arg);
+ break;
+ }
+ endMode();
+ return *this;
+ }
+ TestSpec TestSpecParser::testSpec() {
+ addFilter();
+ return m_testSpec;
+ }
+ bool TestSpecParser::visitChar( char c ) {
+ if( (m_mode != EscapedName) && (c == '\\') ) {
+ escape();
+ addCharToPattern(c);
+ return true;
+ }else if((m_mode != EscapedName) && (c == ',') ) {
+ return separate();
+ }
+
+ switch( m_mode ) {
+ case None:
+ if( processNoneChar( c ) )
+ return true;
+ break;
+ case Name:
+ processNameChar( c );
+ break;
+ case EscapedName:
+ endMode();
+ addCharToPattern(c);
+ return true;
+ default:
+ case Tag:
+ case QuotedName:
+ if( processOtherChar( c ) )
+ return true;
+ break;
+ }
+
+ m_substring += c;
+ if( !isControlChar( c ) ) {
+ m_patternName += c;
+ m_realPatternPos++;
+ }
+ return true;
+ }
+ // Two of the processing methods return true to signal the caller to return
+ // without adding the given character to the current pattern strings
+ bool TestSpecParser::processNoneChar( char c ) {
+ switch( c ) {
+ case ' ':
+ return true;
+ case '~':
+ m_exclusion = true;
+ return false;
+ case '[':
+ startNewMode( Tag );
+ return false;
+ case '"':
+ startNewMode( QuotedName );
+ return false;
+ default:
+ startNewMode( Name );
+ return false;
+ }
+ }
+ void TestSpecParser::processNameChar( char c ) {
+ if( c == '[' ) {
+ if( m_substring == "exclude:" )
+ m_exclusion = true;
+ else
+ endMode();
+ startNewMode( Tag );
+ }
+ }
+ bool TestSpecParser::processOtherChar( char c ) {
+ if( !isControlChar( c ) )
+ return false;
+ m_substring += c;
+ endMode();
+ return true;
+ }
+ void TestSpecParser::startNewMode( Mode mode ) {
+ m_mode = mode;
+ }
+ void TestSpecParser::endMode() {
+ switch( m_mode ) {
+ case Name:
+ case QuotedName:
+ return addNamePattern();
+ case Tag:
+ return addTagPattern();
+ case EscapedName:
+ revertBackToLastMode();
+ return;
+ case None:
+ default:
+ return startNewMode( None );
+ }
+ }
+ void TestSpecParser::escape() {
+ saveLastMode();
+ m_mode = EscapedName;
+ m_escapeChars.push_back(m_realPatternPos);
+ }
+ bool TestSpecParser::isControlChar( char c ) const {
+ switch( m_mode ) {
+ default:
+ return false;
+ case None:
+ return c == '~';
+ case Name:
+ return c == '[';
+ case EscapedName:
+ return true;
+ case QuotedName:
+ return c == '"';
+ case Tag:
+ return c == '[' || c == ']';
+ }
+ }
+
+ void TestSpecParser::addFilter() {
+ if( !m_currentFilter.m_patterns.empty() ) {
+ m_testSpec.m_filters.push_back( m_currentFilter );
+ m_currentFilter = TestSpec::Filter();
+ }
+ }
+
+ void TestSpecParser::saveLastMode() {
+ lastMode = m_mode;
+ }
+
+ void TestSpecParser::revertBackToLastMode() {
+ m_mode = lastMode;
+ }
+
+ bool TestSpecParser::separate() {
+ if( (m_mode==QuotedName) || (m_mode==Tag) ){
+ //invalid argument, signal failure to previous scope.
+ m_mode = None;
+ m_pos = m_arg.size();
+ m_substring.clear();
+ m_patternName.clear();
+ m_realPatternPos = 0;
+ return false;
+ }
+ endMode();
+ addFilter();
+ return true; //success
+ }
+
+ std::string TestSpecParser::preprocessPattern() {
+ std::string token = m_patternName;
+ for (std::size_t i = 0; i < m_escapeChars.size(); ++i)
+ token = token.substr(0, m_escapeChars[i] - i) + token.substr(m_escapeChars[i] - i + 1);
+ m_escapeChars.clear();
+ if (startsWith(token, "exclude:")) {
+ m_exclusion = true;
+ token = token.substr(8);
+ }
+
+ m_patternName.clear();
+ m_realPatternPos = 0;
+
+ return token;
+ }
+
+ void TestSpecParser::addNamePattern() {
+ auto token = preprocessPattern();
+
+ if (!token.empty()) {
+ TestSpec::PatternPtr pattern = std::make_shared<TestSpec::NamePattern>(token, m_substring);
+ if (m_exclusion)
+ pattern = std::make_shared<TestSpec::ExcludedPattern>(pattern);
+ m_currentFilter.m_patterns.push_back(pattern);
+ }
+ m_substring.clear();
+ m_exclusion = false;
+ m_mode = None;
+ }
+
+ void TestSpecParser::addTagPattern() {
+ auto token = preprocessPattern();
+
+ if (!token.empty()) {
+ // If the tag pattern is the "hide and tag" shorthand (e.g. [.foo])
+ // we have to create a separate hide tag and shorten the real one
+ if (token.size() > 1 && token[0] == '.') {
+ token.erase(token.begin());
+ TestSpec::PatternPtr pattern = std::make_shared<TestSpec::TagPattern>(".", m_substring);
+ if (m_exclusion) {
+ pattern = std::make_shared<TestSpec::ExcludedPattern>(pattern);
+ }
+ m_currentFilter.m_patterns.push_back(pattern);
+ }
+
+ TestSpec::PatternPtr pattern = std::make_shared<TestSpec::TagPattern>(token, m_substring);
+
+ if (m_exclusion) {
+ pattern = std::make_shared<TestSpec::ExcludedPattern>(pattern);
+ }
+ m_currentFilter.m_patterns.push_back(pattern);
+ }
+ m_substring.clear();
+ m_exclusion = false;
+ m_mode = None;
+ }
+
+ TestSpec parseTestSpec( std::string const& arg ) {
+ return TestSpecParser( ITagAliasRegistry::get() ).parse( arg ).testSpec();
+ }
+
+} // namespace Catch
+// end catch_test_spec_parser.cpp
+// start catch_timer.cpp
+
+#include <chrono>
+
+static const uint64_t nanosecondsInSecond = 1000000000;
+
+namespace Catch {
+
+ auto getCurrentNanosecondsSinceEpoch() -> uint64_t {
+ return std::chrono::duration_cast<std::chrono::nanoseconds>( std::chrono::high_resolution_clock::now().time_since_epoch() ).count();
+ }
+
+ namespace {
+ auto estimateClockResolution() -> uint64_t {
+ uint64_t sum = 0;
+ static const uint64_t iterations = 1000000;
+
+ auto startTime = getCurrentNanosecondsSinceEpoch();
+
+ for( std::size_t i = 0; i < iterations; ++i ) {
+
+ uint64_t ticks;
+ uint64_t baseTicks = getCurrentNanosecondsSinceEpoch();
+ do {
+ ticks = getCurrentNanosecondsSinceEpoch();
+ } while( ticks == baseTicks );
+
+ auto delta = ticks - baseTicks;
+ sum += delta;
+
+ // If we have been calibrating for over 3 seconds -- the clock
+ // is terrible and we should move on.
+ // TBD: How to signal that the measured resolution is probably wrong?
+ if (ticks > startTime + 3 * nanosecondsInSecond) {
+ return sum / ( i + 1u );
+ }
+ }
+
+ // We're just taking the mean, here. To do better we could take the std. dev and exclude outliers
+ // - and potentially do more iterations if there's a high variance.
+ return sum/iterations;
+ }
+ }
+ auto getEstimatedClockResolution() -> uint64_t {
+ static auto s_resolution = estimateClockResolution();
+ return s_resolution;
+ }
+
+ void Timer::start() {
+ m_nanoseconds = getCurrentNanosecondsSinceEpoch();
+ }
+ auto Timer::getElapsedNanoseconds() const -> uint64_t {
+ return getCurrentNanosecondsSinceEpoch() - m_nanoseconds;
+ }
+ auto Timer::getElapsedMicroseconds() const -> uint64_t {
+ return getElapsedNanoseconds()/1000;
+ }
+ auto Timer::getElapsedMilliseconds() const -> unsigned int {
+ return static_cast<unsigned int>(getElapsedMicroseconds()/1000);
+ }
+ auto Timer::getElapsedSeconds() const -> double {
+ return getElapsedMicroseconds()/1000000.0;
+ }
+
+} // namespace Catch
+// end catch_timer.cpp
+// start catch_tostring.cpp
+
+#if defined(__clang__)
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wexit-time-destructors"
+# pragma clang diagnostic ignored "-Wglobal-constructors"
+#endif
+
+// Enable specific decls locally
+#if !defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER)
+#define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
+#endif
+
+#include <cmath>
+#include <iomanip>
+
+namespace Catch {
+
+namespace Detail {
+
+ const std::string unprintableString = "{?}";
+
+ namespace {
+ const int hexThreshold = 255;
+
+ struct Endianness {
+ enum Arch { Big, Little };
+
+ static Arch which() {
+ int one = 1;
+ // If the lowest byte we read is non-zero, we can assume
+ // that little endian format is used.
+ auto value = *reinterpret_cast<char*>(&one);
+ return value ? Little : Big;
+ }
+ };
+ }
+
+ std::string rawMemoryToString( const void *object, std::size_t size ) {
+ // Reverse order for little endian architectures
+ int i = 0, end = static_cast<int>( size ), inc = 1;
+ if( Endianness::which() == Endianness::Little ) {
+ i = end-1;
+ end = inc = -1;
+ }
+
+ unsigned char const *bytes = static_cast<unsigned char const *>(object);
+ ReusableStringStream rss;
+ rss << "0x" << std::setfill('0') << std::hex;
+ for( ; i != end; i += inc )
+ rss << std::setw(2) << static_cast<unsigned>(bytes[i]);
+ return rss.str();
+ }
+}
+
+template<typename T>
+std::string fpToString( T value, int precision ) {
+ if (Catch::isnan(value)) {
+ return "nan";
+ }
+
+ ReusableStringStream rss;
+ rss << std::setprecision( precision )
+ << std::fixed
+ << value;
+ std::string d = rss.str();
+ std::size_t i = d.find_last_not_of( '0' );
+ if( i != std::string::npos && i != d.size()-1 ) {
+ if( d[i] == '.' )
+ i++;
+ d = d.substr( 0, i+1 );
+ }
+ return d;
+}
+
+//// ======================================================= ////
+//
+// Out-of-line defs for full specialization of StringMaker
+//
+//// ======================================================= ////
+
+std::string StringMaker<std::string>::convert(const std::string& str) {
+ if (!getCurrentContext().getConfig()->showInvisibles()) {
+ return '"' + str + '"';
+ }
+
+ std::string s("\"");
+ for (char c : str) {
+ switch (c) {
+ case '\n':
+ s.append("\\n");
+ break;
+ case '\t':
+ s.append("\\t");
+ break;
+ default:
+ s.push_back(c);
+ break;
+ }
+ }
+ s.append("\"");
+ return s;
+}
+
+#ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+std::string StringMaker<std::string_view>::convert(std::string_view str) {
+ return ::Catch::Detail::stringify(std::string{ str });
+}
+#endif
+
+std::string StringMaker<char const*>::convert(char const* str) {
+ if (str) {
+ return ::Catch::Detail::stringify(std::string{ str });
+ } else {
+ return{ "{null string}" };
+ }
+}
+std::string StringMaker<char*>::convert(char* str) {
+ if (str) {
+ return ::Catch::Detail::stringify(std::string{ str });
+ } else {
+ return{ "{null string}" };
+ }
+}
+
+#ifdef CATCH_CONFIG_WCHAR
+std::string StringMaker<std::wstring>::convert(const std::wstring& wstr) {
+ std::string s;
+ s.reserve(wstr.size());
+ for (auto c : wstr) {
+ s += (c <= 0xff) ? static_cast<char>(c) : '?';
+ }
+ return ::Catch::Detail::stringify(s);
+}
+
+# ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+std::string StringMaker<std::wstring_view>::convert(std::wstring_view str) {
+ return StringMaker<std::wstring>::convert(std::wstring(str));
+}
+# endif
+
+std::string StringMaker<wchar_t const*>::convert(wchar_t const * str) {
+ if (str) {
+ return ::Catch::Detail::stringify(std::wstring{ str });
+ } else {
+ return{ "{null string}" };
+ }
+}
+std::string StringMaker<wchar_t *>::convert(wchar_t * str) {
+ if (str) {
+ return ::Catch::Detail::stringify(std::wstring{ str });
+ } else {
+ return{ "{null string}" };
+ }
+}
+#endif
+
+#if defined(CATCH_CONFIG_CPP17_BYTE)
+#include <cstddef>
+std::string StringMaker<std::byte>::convert(std::byte value) {
+ return ::Catch::Detail::stringify(std::to_integer<unsigned long long>(value));
+}
+#endif // defined(CATCH_CONFIG_CPP17_BYTE)
+
+std::string StringMaker<int>::convert(int value) {
+ return ::Catch::Detail::stringify(static_cast<long long>(value));
+}
+std::string StringMaker<long>::convert(long value) {
+ return ::Catch::Detail::stringify(static_cast<long long>(value));
+}
+std::string StringMaker<long long>::convert(long long value) {
+ ReusableStringStream rss;
+ rss << value;
+ if (value > Detail::hexThreshold) {
+ rss << " (0x" << std::hex << value << ')';
+ }
+ return rss.str();
+}
+
+std::string StringMaker<unsigned int>::convert(unsigned int value) {
+ return ::Catch::Detail::stringify(static_cast<unsigned long long>(value));
+}
+std::string StringMaker<unsigned long>::convert(unsigned long value) {
+ return ::Catch::Detail::stringify(static_cast<unsigned long long>(value));
+}
+std::string StringMaker<unsigned long long>::convert(unsigned long long value) {
+ ReusableStringStream rss;
+ rss << value;
+ if (value > Detail::hexThreshold) {
+ rss << " (0x" << std::hex << value << ')';
+ }
+ return rss.str();
+}
+
+std::string StringMaker<bool>::convert(bool b) {
+ return b ? "true" : "false";
+}
+
+std::string StringMaker<signed char>::convert(signed char value) {
+ if (value == '\r') {
+ return "'\\r'";
+ } else if (value == '\f') {
+ return "'\\f'";
+ } else if (value == '\n') {
+ return "'\\n'";
+ } else if (value == '\t') {
+ return "'\\t'";
+ } else if ('\0' <= value && value < ' ') {
+ return ::Catch::Detail::stringify(static_cast<unsigned int>(value));
+ } else {
+ char chstr[] = "' '";
+ chstr[1] = value;
+ return chstr;
+ }
+}
+std::string StringMaker<char>::convert(char c) {
+ return ::Catch::Detail::stringify(static_cast<signed char>(c));
+}
+std::string StringMaker<unsigned char>::convert(unsigned char c) {
+ return ::Catch::Detail::stringify(static_cast<char>(c));
+}
+
+std::string StringMaker<std::nullptr_t>::convert(std::nullptr_t) {
+ return "nullptr";
+}
+
+int StringMaker<float>::precision = 5;
+
+std::string StringMaker<float>::convert(float value) {
+ return fpToString(value, precision) + 'f';
+}
+
+int StringMaker<double>::precision = 10;
+
+std::string StringMaker<double>::convert(double value) {
+ return fpToString(value, precision);
+}
+
+std::string ratio_string<std::atto>::symbol() { return "a"; }
+std::string ratio_string<std::femto>::symbol() { return "f"; }
+std::string ratio_string<std::pico>::symbol() { return "p"; }
+std::string ratio_string<std::nano>::symbol() { return "n"; }
+std::string ratio_string<std::micro>::symbol() { return "u"; }
+std::string ratio_string<std::milli>::symbol() { return "m"; }
+
+} // end namespace Catch
+
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#endif
+
+// end catch_tostring.cpp
+// start catch_totals.cpp
+
+namespace Catch {
+
+ Counts Counts::operator - ( Counts const& other ) const {
+ Counts diff;
+ diff.passed = passed - other.passed;
+ diff.failed = failed - other.failed;
+ diff.failedButOk = failedButOk - other.failedButOk;
+ return diff;
+ }
+
+ Counts& Counts::operator += ( Counts const& other ) {
+ passed += other.passed;
+ failed += other.failed;
+ failedButOk += other.failedButOk;
+ return *this;
+ }
+
+ std::size_t Counts::total() const {
+ return passed + failed + failedButOk;
+ }
+ bool Counts::allPassed() const {
+ return failed == 0 && failedButOk == 0;
+ }
+ bool Counts::allOk() const {
+ return failed == 0;
+ }
+
+ Totals Totals::operator - ( Totals const& other ) const {
+ Totals diff;
+ diff.assertions = assertions - other.assertions;
+ diff.testCases = testCases - other.testCases;
+ return diff;
+ }
+
+ Totals& Totals::operator += ( Totals const& other ) {
+ assertions += other.assertions;
+ testCases += other.testCases;
+ return *this;
+ }
+
+ Totals Totals::delta( Totals const& prevTotals ) const {
+ Totals diff = *this - prevTotals;
+ if( diff.assertions.failed > 0 )
+ ++diff.testCases.failed;
+ else if( diff.assertions.failedButOk > 0 )
+ ++diff.testCases.failedButOk;
+ else
+ ++diff.testCases.passed;
+ return diff;
+ }
+
+}
+// end catch_totals.cpp
+// start catch_uncaught_exceptions.cpp
+
+// start catch_config_uncaught_exceptions.hpp
+
+// Copyright Catch2 Authors
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// https://www.boost.org/LICENSE_1_0.txt)
+
+// SPDX-License-Identifier: BSL-1.0
+
+#ifndef CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP
+#define CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP
+
+#if defined(_MSC_VER)
+# if _MSC_VER >= 1900 // Visual Studio 2015 or newer
+# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
+# endif
+#endif
+
+#include <exception>
+
+#if defined(__cpp_lib_uncaught_exceptions) \
+ && !defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
+
+# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
+#endif // __cpp_lib_uncaught_exceptions
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) \
+ && !defined(CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS) \
+ && !defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
+
+# define CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
+#endif
+
+#endif // CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP
+// end catch_config_uncaught_exceptions.hpp
+#include <exception>
+
+namespace Catch {
+ bool uncaught_exceptions() {
+#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ return false;
+#elif defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
+ return std::uncaught_exceptions() > 0;
+#else
+ return std::uncaught_exception();
+#endif
+ }
+} // end namespace Catch
+// end catch_uncaught_exceptions.cpp
+// start catch_version.cpp
+
+#include <ostream>
+
+namespace Catch {
+
+ Version::Version
+ ( unsigned int _majorVersion,
+ unsigned int _minorVersion,
+ unsigned int _patchNumber,
+ char const * const _branchName,
+ unsigned int _buildNumber )
+ : majorVersion( _majorVersion ),
+ minorVersion( _minorVersion ),
+ patchNumber( _patchNumber ),
+ branchName( _branchName ),
+ buildNumber( _buildNumber )
+ {}
+
+ std::ostream& operator << ( std::ostream& os, Version const& version ) {
+ os << version.majorVersion << '.'
+ << version.minorVersion << '.'
+ << version.patchNumber;
+ // branchName is never null -> 0th char is \0 if it is empty
+ if (version.branchName[0]) {
+ os << '-' << version.branchName
+ << '.' << version.buildNumber;
+ }
+ return os;
+ }
+
+ Version const& libraryVersion() {
+ static Version version( 2, 13, 9, "", 0 );
+ return version;
+ }
+
+}
+// end catch_version.cpp
+// start catch_wildcard_pattern.cpp
+
+namespace Catch {
+
+ WildcardPattern::WildcardPattern( std::string const& pattern,
+ CaseSensitive::Choice caseSensitivity )
+ : m_caseSensitivity( caseSensitivity ),
+ m_pattern( normaliseString( pattern ) )
+ {
+ if( startsWith( m_pattern, '*' ) ) {
+ m_pattern = m_pattern.substr( 1 );
+ m_wildcard = WildcardAtStart;
+ }
+ if( endsWith( m_pattern, '*' ) ) {
+ m_pattern = m_pattern.substr( 0, m_pattern.size()-1 );
+ m_wildcard = static_cast<WildcardPosition>( m_wildcard | WildcardAtEnd );
+ }
+ }
+
+ bool WildcardPattern::matches( std::string const& str ) const {
+ switch( m_wildcard ) {
+ case NoWildcard:
+ return m_pattern == normaliseString( str );
+ case WildcardAtStart:
+ return endsWith( normaliseString( str ), m_pattern );
+ case WildcardAtEnd:
+ return startsWith( normaliseString( str ), m_pattern );
+ case WildcardAtBothEnds:
+ return contains( normaliseString( str ), m_pattern );
+ default:
+ CATCH_INTERNAL_ERROR( "Unknown enum" );
+ }
+ }
+
+ std::string WildcardPattern::normaliseString( std::string const& str ) const {
+ return trim( m_caseSensitivity == CaseSensitive::No ? toLower( str ) : str );
+ }
+}
+// end catch_wildcard_pattern.cpp
+// start catch_xmlwriter.cpp
+
+#include <iomanip>
+#include <type_traits>
+
+namespace Catch {
+
+namespace {
+
+ size_t trailingBytes(unsigned char c) {
+ if ((c & 0xE0) == 0xC0) {
+ return 2;
+ }
+ if ((c & 0xF0) == 0xE0) {
+ return 3;
+ }
+ if ((c & 0xF8) == 0xF0) {
+ return 4;
+ }
+ CATCH_INTERNAL_ERROR("Invalid multibyte utf-8 start byte encountered");
+ }
+
+ uint32_t headerValue(unsigned char c) {
+ if ((c & 0xE0) == 0xC0) {
+ return c & 0x1F;
+ }
+ if ((c & 0xF0) == 0xE0) {
+ return c & 0x0F;
+ }
+ if ((c & 0xF8) == 0xF0) {
+ return c & 0x07;
+ }
+ CATCH_INTERNAL_ERROR("Invalid multibyte utf-8 start byte encountered");
+ }
+
+ void hexEscapeChar(std::ostream& os, unsigned char c) {
+ std::ios_base::fmtflags f(os.flags());
+ os << "\\x"
+ << std::uppercase << std::hex << std::setfill('0') << std::setw(2)
+ << static_cast<int>(c);
+ os.flags(f);
+ }
+
+ bool shouldNewline(XmlFormatting fmt) {
+ return !!(static_cast<std::underlying_type<XmlFormatting>::type>(fmt & XmlFormatting::Newline));
+ }
+
+ bool shouldIndent(XmlFormatting fmt) {
+ return !!(static_cast<std::underlying_type<XmlFormatting>::type>(fmt & XmlFormatting::Indent));
+ }
+
+} // anonymous namespace
+
+ XmlFormatting operator | (XmlFormatting lhs, XmlFormatting rhs) {
+ return static_cast<XmlFormatting>(
+ static_cast<std::underlying_type<XmlFormatting>::type>(lhs) |
+ static_cast<std::underlying_type<XmlFormatting>::type>(rhs)
+ );
+ }
+
+ XmlFormatting operator & (XmlFormatting lhs, XmlFormatting rhs) {
+ return static_cast<XmlFormatting>(
+ static_cast<std::underlying_type<XmlFormatting>::type>(lhs) &
+ static_cast<std::underlying_type<XmlFormatting>::type>(rhs)
+ );
+ }
+
+ XmlEncode::XmlEncode( std::string const& str, ForWhat forWhat )
+ : m_str( str ),
+ m_forWhat( forWhat )
+ {}
+
+ void XmlEncode::encodeTo( std::ostream& os ) const {
+ // Apostrophe escaping not necessary if we always use " to write attributes
+ // (see: http://www.w3.org/TR/xml/#syntax)
+
+ for( std::size_t idx = 0; idx < m_str.size(); ++ idx ) {
+ unsigned char c = m_str[idx];
+ switch (c) {
+ case '<': os << "&lt;"; break;
+ case '&': os << "&amp;"; break;
+
+ case '>':
+ // See: http://www.w3.org/TR/xml/#syntax
+ if (idx > 2 && m_str[idx - 1] == ']' && m_str[idx - 2] == ']')
+ os << "&gt;";
+ else
+ os << c;
+ break;
+
+ case '\"':
+ if (m_forWhat == ForAttributes)
+ os << "&quot;";
+ else
+ os << c;
+ break;
+
+ default:
+ // Check for control characters and invalid utf-8
+
+ // Escape control characters in standard ascii
+ // see http://stackoverflow.com/questions/404107/why-are-control-characters-illegal-in-xml-1-0
+ if (c < 0x09 || (c > 0x0D && c < 0x20) || c == 0x7F) {
+ hexEscapeChar(os, c);
+ break;
+ }
+
+ // Plain ASCII: Write it to stream
+ if (c < 0x7F) {
+ os << c;
+ break;
+ }
+
+ // UTF-8 territory
+ // Check if the encoding is valid and if it is not, hex escape bytes.
+ // Important: We do not check the exact decoded values for validity, only the encoding format
+ // First check that this bytes is a valid lead byte:
+ // This means that it is not encoded as 1111 1XXX
+ // Or as 10XX XXXX
+ if (c < 0xC0 ||
+ c >= 0xF8) {
+ hexEscapeChar(os, c);
+ break;
+ }
+
+ auto encBytes = trailingBytes(c);
+ // Are there enough bytes left to avoid accessing out-of-bounds memory?
+ if (idx + encBytes - 1 >= m_str.size()) {
+ hexEscapeChar(os, c);
+ break;
+ }
+ // The header is valid, check data
+ // The next encBytes bytes must together be a valid utf-8
+ // This means: bitpattern 10XX XXXX and the extracted value is sane (ish)
+ bool valid = true;
+ uint32_t value = headerValue(c);
+ for (std::size_t n = 1; n < encBytes; ++n) {
+ unsigned char nc = m_str[idx + n];
+ valid &= ((nc & 0xC0) == 0x80);
+ value = (value << 6) | (nc & 0x3F);
+ }
+
+ if (
+ // Wrong bit pattern of following bytes
+ (!valid) ||
+ // Overlong encodings
+ (value < 0x80) ||
+ (0x80 <= value && value < 0x800 && encBytes > 2) ||
+ (0x800 < value && value < 0x10000 && encBytes > 3) ||
+ // Encoded value out of range
+ (value >= 0x110000)
+ ) {
+ hexEscapeChar(os, c);
+ break;
+ }
+
+ // If we got here, this is in fact a valid(ish) utf-8 sequence
+ for (std::size_t n = 0; n < encBytes; ++n) {
+ os << m_str[idx + n];
+ }
+ idx += encBytes - 1;
+ break;
+ }
+ }
+ }
+
+ std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode ) {
+ xmlEncode.encodeTo( os );
+ return os;
+ }
+
+ XmlWriter::ScopedElement::ScopedElement( XmlWriter* writer, XmlFormatting fmt )
+ : m_writer( writer ),
+ m_fmt(fmt)
+ {}
+
+ XmlWriter::ScopedElement::ScopedElement( ScopedElement&& other ) noexcept
+ : m_writer( other.m_writer ),
+ m_fmt(other.m_fmt)
+ {
+ other.m_writer = nullptr;
+ other.m_fmt = XmlFormatting::None;
+ }
+ XmlWriter::ScopedElement& XmlWriter::ScopedElement::operator=( ScopedElement&& other ) noexcept {
+ if ( m_writer ) {
+ m_writer->endElement();
+ }
+ m_writer = other.m_writer;
+ other.m_writer = nullptr;
+ m_fmt = other.m_fmt;
+ other.m_fmt = XmlFormatting::None;
+ return *this;
+ }
+
+ XmlWriter::ScopedElement::~ScopedElement() {
+ if (m_writer) {
+ m_writer->endElement(m_fmt);
+ }
+ }
+
+ XmlWriter::ScopedElement& XmlWriter::ScopedElement::writeText( std::string const& text, XmlFormatting fmt ) {
+ m_writer->writeText( text, fmt );
+ return *this;
+ }
+
+ XmlWriter::XmlWriter( std::ostream& os ) : m_os( os )
+ {
+ writeDeclaration();
+ }
+
+ XmlWriter::~XmlWriter() {
+ while (!m_tags.empty()) {
+ endElement();
+ }
+ newlineIfNecessary();
+ }
+
+ XmlWriter& XmlWriter::startElement( std::string const& name, XmlFormatting fmt ) {
+ ensureTagClosed();
+ newlineIfNecessary();
+ if (shouldIndent(fmt)) {
+ m_os << m_indent;
+ m_indent += " ";
+ }
+ m_os << '<' << name;
+ m_tags.push_back( name );
+ m_tagIsOpen = true;
+ applyFormatting(fmt);
+ return *this;
+ }
+
+ XmlWriter::ScopedElement XmlWriter::scopedElement( std::string const& name, XmlFormatting fmt ) {
+ ScopedElement scoped( this, fmt );
+ startElement( name, fmt );
+ return scoped;
+ }
+
+ XmlWriter& XmlWriter::endElement(XmlFormatting fmt) {
+ m_indent = m_indent.substr(0, m_indent.size() - 2);
+
+ if( m_tagIsOpen ) {
+ m_os << "/>";
+ m_tagIsOpen = false;
+ } else {
+ newlineIfNecessary();
+ if (shouldIndent(fmt)) {
+ m_os << m_indent;
+ }
+ m_os << "</" << m_tags.back() << ">";
+ }
+ m_os << std::flush;
+ applyFormatting(fmt);
+ m_tags.pop_back();
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeAttribute( std::string const& name, std::string const& attribute ) {
+ if( !name.empty() && !attribute.empty() )
+ m_os << ' ' << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << '"';
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeAttribute( std::string const& name, bool attribute ) {
+ m_os << ' ' << name << "=\"" << ( attribute ? "true" : "false" ) << '"';
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeText( std::string const& text, XmlFormatting fmt) {
+ if( !text.empty() ){
+ bool tagWasOpen = m_tagIsOpen;
+ ensureTagClosed();
+ if (tagWasOpen && shouldIndent(fmt)) {
+ m_os << m_indent;
+ }
+ m_os << XmlEncode( text );
+ applyFormatting(fmt);
+ }
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeComment( std::string const& text, XmlFormatting fmt) {
+ ensureTagClosed();
+ if (shouldIndent(fmt)) {
+ m_os << m_indent;
+ }
+ m_os << "<!--" << text << "-->";
+ applyFormatting(fmt);
+ return *this;
+ }
+
+ void XmlWriter::writeStylesheetRef( std::string const& url ) {
+ m_os << "<?xml-stylesheet type=\"text/xsl\" href=\"" << url << "\"?>\n";
+ }
+
+ XmlWriter& XmlWriter::writeBlankLine() {
+ ensureTagClosed();
+ m_os << '\n';
+ return *this;
+ }
+
+ void XmlWriter::ensureTagClosed() {
+ if( m_tagIsOpen ) {
+ m_os << '>' << std::flush;
+ newlineIfNecessary();
+ m_tagIsOpen = false;
+ }
+ }
+
+ void XmlWriter::applyFormatting(XmlFormatting fmt) {
+ m_needsNewline = shouldNewline(fmt);
+ }
+
+ void XmlWriter::writeDeclaration() {
+ m_os << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+ }
+
+ void XmlWriter::newlineIfNecessary() {
+ if( m_needsNewline ) {
+ m_os << std::endl;
+ m_needsNewline = false;
+ }
+ }
+}
+// end catch_xmlwriter.cpp
+// start catch_reporter_bases.cpp
+
+#include <cstring>
+#include <cfloat>
+#include <cstdio>
+#include <cassert>
+#include <memory>
+
+namespace Catch {
+ void prepareExpandedExpression(AssertionResult& result) {
+ result.getExpandedExpression();
+ }
+
+ // Because formatting using c++ streams is stateful, drop down to C is required
+ // Alternatively we could use stringstream, but its performance is... not good.
+ std::string getFormattedDuration( double duration ) {
+ // Max exponent + 1 is required to represent the whole part
+ // + 1 for decimal point
+ // + 3 for the 3 decimal places
+ // + 1 for null terminator
+ const std::size_t maxDoubleSize = DBL_MAX_10_EXP + 1 + 1 + 3 + 1;
+ char buffer[maxDoubleSize];
+
+ // Save previous errno, to prevent sprintf from overwriting it
+ ErrnoGuard guard;
+#ifdef _MSC_VER
+ sprintf_s(buffer, "%.3f", duration);
+#else
+ std::sprintf(buffer, "%.3f", duration);
+#endif
+ return std::string(buffer);
+ }
+
+ bool shouldShowDuration( IConfig const& config, double duration ) {
+ if ( config.showDurations() == ShowDurations::Always ) {
+ return true;
+ }
+ if ( config.showDurations() == ShowDurations::Never ) {
+ return false;
+ }
+ const double min = config.minDuration();
+ return min >= 0 && duration >= min;
+ }
+
+ std::string serializeFilters( std::vector<std::string> const& container ) {
+ ReusableStringStream oss;
+ bool first = true;
+ for (auto&& filter : container)
+ {
+ if (!first)
+ oss << ' ';
+ else
+ first = false;
+
+ oss << filter;
+ }
+ return oss.str();
+ }
+
+ TestEventListenerBase::TestEventListenerBase(ReporterConfig const & _config)
+ :StreamingReporterBase(_config) {}
+
+ std::set<Verbosity> TestEventListenerBase::getSupportedVerbosities() {
+ return { Verbosity::Quiet, Verbosity::Normal, Verbosity::High };
+ }
+
+ void TestEventListenerBase::assertionStarting(AssertionInfo const &) {}
+
+ bool TestEventListenerBase::assertionEnded(AssertionStats const &) {
+ return false;
+ }
+
+} // end namespace Catch
+// end catch_reporter_bases.cpp
+// start catch_reporter_compact.cpp
+
+namespace {
+
+#ifdef CATCH_PLATFORM_MAC
+ const char* failedString() { return "FAILED"; }
+ const char* passedString() { return "PASSED"; }
+#else
+ const char* failedString() { return "failed"; }
+ const char* passedString() { return "passed"; }
+#endif
+
+ // Colour::LightGrey
+ Catch::Colour::Code dimColour() { return Catch::Colour::FileName; }
+
+ std::string bothOrAll( std::size_t count ) {
+ return count == 1 ? std::string() :
+ count == 2 ? "both " : "all " ;
+ }
+
+} // anon namespace
+
+namespace Catch {
+namespace {
+// Colour, message variants:
+// - white: No tests ran.
+// - red: Failed [both/all] N test cases, failed [both/all] M assertions.
+// - white: Passed [both/all] N test cases (no assertions).
+// - red: Failed N tests cases, failed M assertions.
+// - green: Passed [both/all] N tests cases with M assertions.
+void printTotals(std::ostream& out, const Totals& totals) {
+ if (totals.testCases.total() == 0) {
+ out << "No tests ran.";
+ } else if (totals.testCases.failed == totals.testCases.total()) {
+ Colour colour(Colour::ResultError);
+ const std::string qualify_assertions_failed =
+ totals.assertions.failed == totals.assertions.total() ?
+ bothOrAll(totals.assertions.failed) : std::string();
+ out <<
+ "Failed " << bothOrAll(totals.testCases.failed)
+ << pluralise(totals.testCases.failed, "test case") << ", "
+ "failed " << qualify_assertions_failed <<
+ pluralise(totals.assertions.failed, "assertion") << '.';
+ } else if (totals.assertions.total() == 0) {
+ out <<
+ "Passed " << bothOrAll(totals.testCases.total())
+ << pluralise(totals.testCases.total(), "test case")
+ << " (no assertions).";
+ } else if (totals.assertions.failed) {
+ Colour colour(Colour::ResultError);
+ out <<
+ "Failed " << pluralise(totals.testCases.failed, "test case") << ", "
+ "failed " << pluralise(totals.assertions.failed, "assertion") << '.';
+ } else {
+ Colour colour(Colour::ResultSuccess);
+ out <<
+ "Passed " << bothOrAll(totals.testCases.passed)
+ << pluralise(totals.testCases.passed, "test case") <<
+ " with " << pluralise(totals.assertions.passed, "assertion") << '.';
+ }
+}
+
+// Implementation of CompactReporter formatting
+class AssertionPrinter {
+public:
+ AssertionPrinter& operator= (AssertionPrinter const&) = delete;
+ AssertionPrinter(AssertionPrinter const&) = delete;
+ AssertionPrinter(std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages)
+ : stream(_stream)
+ , result(_stats.assertionResult)
+ , messages(_stats.infoMessages)
+ , itMessage(_stats.infoMessages.begin())
+ , printInfoMessages(_printInfoMessages) {}
+
+ void print() {
+ printSourceInfo();
+
+ itMessage = messages.begin();
+
+ switch (result.getResultType()) {
+ case ResultWas::Ok:
+ printResultType(Colour::ResultSuccess, passedString());
+ printOriginalExpression();
+ printReconstructedExpression();
+ if (!result.hasExpression())
+ printRemainingMessages(Colour::None);
+ else
+ printRemainingMessages();
+ break;
+ case ResultWas::ExpressionFailed:
+ if (result.isOk())
+ printResultType(Colour::ResultSuccess, failedString() + std::string(" - but was ok"));
+ else
+ printResultType(Colour::Error, failedString());
+ printOriginalExpression();
+ printReconstructedExpression();
+ printRemainingMessages();
+ break;
+ case ResultWas::ThrewException:
+ printResultType(Colour::Error, failedString());
+ printIssue("unexpected exception with message:");
+ printMessage();
+ printExpressionWas();
+ printRemainingMessages();
+ break;
+ case ResultWas::FatalErrorCondition:
+ printResultType(Colour::Error, failedString());
+ printIssue("fatal error condition with message:");
+ printMessage();
+ printExpressionWas();
+ printRemainingMessages();
+ break;
+ case ResultWas::DidntThrowException:
+ printResultType(Colour::Error, failedString());
+ printIssue("expected exception, got none");
+ printExpressionWas();
+ printRemainingMessages();
+ break;
+ case ResultWas::Info:
+ printResultType(Colour::None, "info");
+ printMessage();
+ printRemainingMessages();
+ break;
+ case ResultWas::Warning:
+ printResultType(Colour::None, "warning");
+ printMessage();
+ printRemainingMessages();
+ break;
+ case ResultWas::ExplicitFailure:
+ printResultType(Colour::Error, failedString());
+ printIssue("explicitly");
+ printRemainingMessages(Colour::None);
+ break;
+ // These cases are here to prevent compiler warnings
+ case ResultWas::Unknown:
+ case ResultWas::FailureBit:
+ case ResultWas::Exception:
+ printResultType(Colour::Error, "** internal error **");
+ break;
+ }
+ }
+
+private:
+ void printSourceInfo() const {
+ Colour colourGuard(Colour::FileName);
+ stream << result.getSourceInfo() << ':';
+ }
+
+ void printResultType(Colour::Code colour, std::string const& passOrFail) const {
+ if (!passOrFail.empty()) {
+ {
+ Colour colourGuard(colour);
+ stream << ' ' << passOrFail;
+ }
+ stream << ':';
+ }
+ }
+
+ void printIssue(std::string const& issue) const {
+ stream << ' ' << issue;
+ }
+
+ void printExpressionWas() {
+ if (result.hasExpression()) {
+ stream << ';';
+ {
+ Colour colour(dimColour());
+ stream << " expression was:";
+ }
+ printOriginalExpression();
+ }
+ }
+
+ void printOriginalExpression() const {
+ if (result.hasExpression()) {
+ stream << ' ' << result.getExpression();
+ }
+ }
+
+ void printReconstructedExpression() const {
+ if (result.hasExpandedExpression()) {
+ {
+ Colour colour(dimColour());
+ stream << " for: ";
+ }
+ stream << result.getExpandedExpression();
+ }
+ }
+
+ void printMessage() {
+ if (itMessage != messages.end()) {
+ stream << " '" << itMessage->message << '\'';
+ ++itMessage;
+ }
+ }
+
+ void printRemainingMessages(Colour::Code colour = dimColour()) {
+ if (itMessage == messages.end())
+ return;
+
+ const auto itEnd = messages.cend();
+ const auto N = static_cast<std::size_t>(std::distance(itMessage, itEnd));
+
+ {
+ Colour colourGuard(colour);
+ stream << " with " << pluralise(N, "message") << ':';
+ }
+
+ while (itMessage != itEnd) {
+ // If this assertion is a warning ignore any INFO messages
+ if (printInfoMessages || itMessage->type != ResultWas::Info) {
+ printMessage();
+ if (itMessage != itEnd) {
+ Colour colourGuard(dimColour());
+ stream << " and";
+ }
+ continue;
+ }
+ ++itMessage;
+ }
+ }
+
+private:
+ std::ostream& stream;
+ AssertionResult const& result;
+ std::vector<MessageInfo> messages;
+ std::vector<MessageInfo>::const_iterator itMessage;
+ bool printInfoMessages;
+};
+
+} // anon namespace
+
+ std::string CompactReporter::getDescription() {
+ return "Reports test results on a single line, suitable for IDEs";
+ }
+
+ void CompactReporter::noMatchingTestCases( std::string const& spec ) {
+ stream << "No test cases matched '" << spec << '\'' << std::endl;
+ }
+
+ void CompactReporter::assertionStarting( AssertionInfo const& ) {}
+
+ bool CompactReporter::assertionEnded( AssertionStats const& _assertionStats ) {
+ AssertionResult const& result = _assertionStats.assertionResult;
+
+ bool printInfoMessages = true;
+
+ // Drop out if result was successful and we're not printing those
+ if( !m_config->includeSuccessfulResults() && result.isOk() ) {
+ if( result.getResultType() != ResultWas::Warning )
+ return false;
+ printInfoMessages = false;
+ }
+
+ AssertionPrinter printer( stream, _assertionStats, printInfoMessages );
+ printer.print();
+
+ stream << std::endl;
+ return true;
+ }
+
+ void CompactReporter::sectionEnded(SectionStats const& _sectionStats) {
+ double dur = _sectionStats.durationInSeconds;
+ if ( shouldShowDuration( *m_config, dur ) ) {
+ stream << getFormattedDuration( dur ) << " s: " << _sectionStats.sectionInfo.name << std::endl;
+ }
+ }
+
+ void CompactReporter::testRunEnded( TestRunStats const& _testRunStats ) {
+ printTotals( stream, _testRunStats.totals );
+ stream << '\n' << std::endl;
+ StreamingReporterBase::testRunEnded( _testRunStats );
+ }
+
+ CompactReporter::~CompactReporter() {}
+
+ CATCH_REGISTER_REPORTER( "compact", CompactReporter )
+
+} // end namespace Catch
+// end catch_reporter_compact.cpp
+// start catch_reporter_console.cpp
+
+#include <cfloat>
+#include <cstdio>
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4061) // Not all labels are EXPLICITLY handled in switch
+ // Note that 4062 (not all labels are handled and default is missing) is enabled
+#endif
+
+#if defined(__clang__)
+# pragma clang diagnostic push
+// For simplicity, benchmarking-only helpers are always enabled
+# pragma clang diagnostic ignored "-Wunused-function"
+#endif
+
+namespace Catch {
+
+namespace {
+
+// Formatter impl for ConsoleReporter
+class ConsoleAssertionPrinter {
+public:
+ ConsoleAssertionPrinter& operator= (ConsoleAssertionPrinter const&) = delete;
+ ConsoleAssertionPrinter(ConsoleAssertionPrinter const&) = delete;
+ ConsoleAssertionPrinter(std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages)
+ : stream(_stream),
+ stats(_stats),
+ result(_stats.assertionResult),
+ colour(Colour::None),
+ message(result.getMessage()),
+ messages(_stats.infoMessages),
+ printInfoMessages(_printInfoMessages) {
+ switch (result.getResultType()) {
+ case ResultWas::Ok:
+ colour = Colour::Success;
+ passOrFail = "PASSED";
+ //if( result.hasMessage() )
+ if (_stats.infoMessages.size() == 1)
+ messageLabel = "with message";
+ if (_stats.infoMessages.size() > 1)
+ messageLabel = "with messages";
+ break;
+ case ResultWas::ExpressionFailed:
+ if (result.isOk()) {
+ colour = Colour::Success;
+ passOrFail = "FAILED - but was ok";
+ } else {
+ colour = Colour::Error;
+ passOrFail = "FAILED";
+ }
+ if (_stats.infoMessages.size() == 1)
+ messageLabel = "with message";
+ if (_stats.infoMessages.size() > 1)
+ messageLabel = "with messages";
+ break;
+ case ResultWas::ThrewException:
+ colour = Colour::Error;
+ passOrFail = "FAILED";
+ messageLabel = "due to unexpected exception with ";
+ if (_stats.infoMessages.size() == 1)
+ messageLabel += "message";
+ if (_stats.infoMessages.size() > 1)
+ messageLabel += "messages";
+ break;
+ case ResultWas::FatalErrorCondition:
+ colour = Colour::Error;
+ passOrFail = "FAILED";
+ messageLabel = "due to a fatal error condition";
+ break;
+ case ResultWas::DidntThrowException:
+ colour = Colour::Error;
+ passOrFail = "FAILED";
+ messageLabel = "because no exception was thrown where one was expected";
+ break;
+ case ResultWas::Info:
+ messageLabel = "info";
+ break;
+ case ResultWas::Warning:
+ messageLabel = "warning";
+ break;
+ case ResultWas::ExplicitFailure:
+ passOrFail = "FAILED";
+ colour = Colour::Error;
+ if (_stats.infoMessages.size() == 1)
+ messageLabel = "explicitly with message";
+ if (_stats.infoMessages.size() > 1)
+ messageLabel = "explicitly with messages";
+ break;
+ // These cases are here to prevent compiler warnings
+ case ResultWas::Unknown:
+ case ResultWas::FailureBit:
+ case ResultWas::Exception:
+ passOrFail = "** internal error **";
+ colour = Colour::Error;
+ break;
+ }
+ }
+
+ void print() const {
+ printSourceInfo();
+ if (stats.totals.assertions.total() > 0) {
+ printResultType();
+ printOriginalExpression();
+ printReconstructedExpression();
+ } else {
+ stream << '\n';
+ }
+ printMessage();
+ }
+
+private:
+ void printResultType() const {
+ if (!passOrFail.empty()) {
+ Colour colourGuard(colour);
+ stream << passOrFail << ":\n";
+ }
+ }
+ void printOriginalExpression() const {
+ if (result.hasExpression()) {
+ Colour colourGuard(Colour::OriginalExpression);
+ stream << " ";
+ stream << result.getExpressionInMacro();
+ stream << '\n';
+ }
+ }
+ void printReconstructedExpression() const {
+ if (result.hasExpandedExpression()) {
+ stream << "with expansion:\n";
+ Colour colourGuard(Colour::ReconstructedExpression);
+ stream << Column(result.getExpandedExpression()).indent(2) << '\n';
+ }
+ }
+ void printMessage() const {
+ if (!messageLabel.empty())
+ stream << messageLabel << ':' << '\n';
+ for (auto const& msg : messages) {
+ // If this assertion is a warning ignore any INFO messages
+ if (printInfoMessages || msg.type != ResultWas::Info)
+ stream << Column(msg.message).indent(2) << '\n';
+ }
+ }
+ void printSourceInfo() const {
+ Colour colourGuard(Colour::FileName);
+ stream << result.getSourceInfo() << ": ";
+ }
+
+ std::ostream& stream;
+ AssertionStats const& stats;
+ AssertionResult const& result;
+ Colour::Code colour;
+ std::string passOrFail;
+ std::string messageLabel;
+ std::string message;
+ std::vector<MessageInfo> messages;
+ bool printInfoMessages;
+};
+
+std::size_t makeRatio(std::size_t number, std::size_t total) {
+ std::size_t ratio = total > 0 ? CATCH_CONFIG_CONSOLE_WIDTH * number / total : 0;
+ return (ratio == 0 && number > 0) ? 1 : ratio;
+}
+
+std::size_t& findMax(std::size_t& i, std::size_t& j, std::size_t& k) {
+ if (i > j && i > k)
+ return i;
+ else if (j > k)
+ return j;
+ else
+ return k;
+}
+
+struct ColumnInfo {
+ enum Justification { Left, Right };
+ std::string name;
+ int width;
+ Justification justification;
+};
+struct ColumnBreak {};
+struct RowBreak {};
+
+class Duration {
+ enum class Unit {
+ Auto,
+ Nanoseconds,
+ Microseconds,
+ Milliseconds,
+ Seconds,
+ Minutes
+ };
+ static const uint64_t s_nanosecondsInAMicrosecond = 1000;
+ static const uint64_t s_nanosecondsInAMillisecond = 1000 * s_nanosecondsInAMicrosecond;
+ static const uint64_t s_nanosecondsInASecond = 1000 * s_nanosecondsInAMillisecond;
+ static const uint64_t s_nanosecondsInAMinute = 60 * s_nanosecondsInASecond;
+
+ double m_inNanoseconds;
+ Unit m_units;
+
+public:
+ explicit Duration(double inNanoseconds, Unit units = Unit::Microseconds)
+ : m_inNanoseconds(inNanoseconds),
+ m_units(units) {
+ if (m_units == Unit::Auto) {
+ if (m_inNanoseconds < s_nanosecondsInAMicrosecond)
+ m_units = Unit::Nanoseconds;
+ else if (m_inNanoseconds < s_nanosecondsInAMillisecond)
+ m_units = Unit::Microseconds;
+ else if (m_inNanoseconds < s_nanosecondsInASecond)
+ m_units = Unit::Milliseconds;
+ else if (m_inNanoseconds < s_nanosecondsInAMinute)
+ m_units = Unit::Seconds;
+ else
+ m_units = Unit::Minutes;
+ }
+
+ }
+
+ auto value() const -> double {
+ switch (m_units) {
+ case Unit::Microseconds:
+ return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMicrosecond);
+ case Unit::Milliseconds:
+ return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMillisecond);
+ case Unit::Seconds:
+ return m_inNanoseconds / static_cast<double>(s_nanosecondsInASecond);
+ case Unit::Minutes:
+ return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMinute);
+ default:
+ return m_inNanoseconds;
+ }
+ }
+ auto unitsAsString() const -> std::string {
+ switch (m_units) {
+ case Unit::Nanoseconds:
+ return "ns";
+ case Unit::Microseconds:
+ return "us";
+ case Unit::Milliseconds:
+ return "ms";
+ case Unit::Seconds:
+ return "s";
+ case Unit::Minutes:
+ return "m";
+ default:
+ return "** internal error **";
+ }
+
+ }
+ friend auto operator << (std::ostream& os, Duration const& duration) -> std::ostream& {
+ return os << std::fixed << duration.value() << ' ' << duration.unitsAsString();
+ }
+};
+} // end anon namespace
+
+class TablePrinter {
+ std::ostream& m_os;
+ std::vector<ColumnInfo> m_columnInfos;
+ std::ostringstream m_oss;
+ int m_currentColumn = -1;
+ bool m_isOpen = false;
+
+public:
+ TablePrinter( std::ostream& os, std::vector<ColumnInfo> columnInfos )
+ : m_os( os ),
+ m_columnInfos( std::move( columnInfos ) ) {}
+
+ auto columnInfos() const -> std::vector<ColumnInfo> const& {
+ return m_columnInfos;
+ }
+
+ void open() {
+ if (!m_isOpen) {
+ m_isOpen = true;
+ *this << RowBreak();
+
+ Columns headerCols;
+ Spacer spacer(2);
+ for (auto const& info : m_columnInfos) {
+ headerCols += Column(info.name).width(static_cast<std::size_t>(info.width - 2));
+ headerCols += spacer;
+ }
+ m_os << headerCols << '\n';
+
+ m_os << Catch::getLineOfChars<'-'>() << '\n';
+ }
+ }
+ void close() {
+ if (m_isOpen) {
+ *this << RowBreak();
+ m_os << std::endl;
+ m_isOpen = false;
+ }
+ }
+
+ template<typename T>
+ friend TablePrinter& operator << (TablePrinter& tp, T const& value) {
+ tp.m_oss << value;
+ return tp;
+ }
+
+ friend TablePrinter& operator << (TablePrinter& tp, ColumnBreak) {
+ auto colStr = tp.m_oss.str();
+ const auto strSize = colStr.size();
+ tp.m_oss.str("");
+ tp.open();
+ if (tp.m_currentColumn == static_cast<int>(tp.m_columnInfos.size() - 1)) {
+ tp.m_currentColumn = -1;
+ tp.m_os << '\n';
+ }
+ tp.m_currentColumn++;
+
+ auto colInfo = tp.m_columnInfos[tp.m_currentColumn];
+ auto padding = (strSize + 1 < static_cast<std::size_t>(colInfo.width))
+ ? std::string(colInfo.width - (strSize + 1), ' ')
+ : std::string();
+ if (colInfo.justification == ColumnInfo::Left)
+ tp.m_os << colStr << padding << ' ';
+ else
+ tp.m_os << padding << colStr << ' ';
+ return tp;
+ }
+
+ friend TablePrinter& operator << (TablePrinter& tp, RowBreak) {
+ if (tp.m_currentColumn > 0) {
+ tp.m_os << '\n';
+ tp.m_currentColumn = -1;
+ }
+ return tp;
+ }
+};
+
+ConsoleReporter::ConsoleReporter(ReporterConfig const& config)
+ : StreamingReporterBase(config),
+ m_tablePrinter(new TablePrinter(config.stream(),
+ [&config]() -> std::vector<ColumnInfo> {
+ if (config.fullConfig()->benchmarkNoAnalysis())
+ {
+ return{
+ { "benchmark name", CATCH_CONFIG_CONSOLE_WIDTH - 43, ColumnInfo::Left },
+ { " samples", 14, ColumnInfo::Right },
+ { " iterations", 14, ColumnInfo::Right },
+ { " mean", 14, ColumnInfo::Right }
+ };
+ }
+ else
+ {
+ return{
+ { "benchmark name", CATCH_CONFIG_CONSOLE_WIDTH - 43, ColumnInfo::Left },
+ { "samples mean std dev", 14, ColumnInfo::Right },
+ { "iterations low mean low std dev", 14, ColumnInfo::Right },
+ { "estimated high mean high std dev", 14, ColumnInfo::Right }
+ };
+ }
+ }())) {}
+ConsoleReporter::~ConsoleReporter() = default;
+
+std::string ConsoleReporter::getDescription() {
+ return "Reports test results as plain lines of text";
+}
+
+void ConsoleReporter::noMatchingTestCases(std::string const& spec) {
+ stream << "No test cases matched '" << spec << '\'' << std::endl;
+}
+
+void ConsoleReporter::reportInvalidArguments(std::string const&arg){
+ stream << "Invalid Filter: " << arg << std::endl;
+}
+
+void ConsoleReporter::assertionStarting(AssertionInfo const&) {}
+
+bool ConsoleReporter::assertionEnded(AssertionStats const& _assertionStats) {
+ AssertionResult const& result = _assertionStats.assertionResult;
+
+ bool includeResults = m_config->includeSuccessfulResults() || !result.isOk();
+
+ // Drop out if result was successful but we're not printing them.
+ if (!includeResults && result.getResultType() != ResultWas::Warning)
+ return false;
+
+ lazyPrint();
+
+ ConsoleAssertionPrinter printer(stream, _assertionStats, includeResults);
+ printer.print();
+ stream << std::endl;
+ return true;
+}
+
+void ConsoleReporter::sectionStarting(SectionInfo const& _sectionInfo) {
+ m_tablePrinter->close();
+ m_headerPrinted = false;
+ StreamingReporterBase::sectionStarting(_sectionInfo);
+}
+void ConsoleReporter::sectionEnded(SectionStats const& _sectionStats) {
+ m_tablePrinter->close();
+ if (_sectionStats.missingAssertions) {
+ lazyPrint();
+ Colour colour(Colour::ResultError);
+ if (m_sectionStack.size() > 1)
+ stream << "\nNo assertions in section";
+ else
+ stream << "\nNo assertions in test case";
+ stream << " '" << _sectionStats.sectionInfo.name << "'\n" << std::endl;
+ }
+ double dur = _sectionStats.durationInSeconds;
+ if (shouldShowDuration(*m_config, dur)) {
+ stream << getFormattedDuration(dur) << " s: " << _sectionStats.sectionInfo.name << std::endl;
+ }
+ if (m_headerPrinted) {
+ m_headerPrinted = false;
+ }
+ StreamingReporterBase::sectionEnded(_sectionStats);
+}
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+void ConsoleReporter::benchmarkPreparing(std::string const& name) {
+ lazyPrintWithoutClosingBenchmarkTable();
+
+ auto nameCol = Column(name).width(static_cast<std::size_t>(m_tablePrinter->columnInfos()[0].width - 2));
+
+ bool firstLine = true;
+ for (auto line : nameCol) {
+ if (!firstLine)
+ (*m_tablePrinter) << ColumnBreak() << ColumnBreak() << ColumnBreak();
+ else
+ firstLine = false;
+
+ (*m_tablePrinter) << line << ColumnBreak();
+ }
+}
+
+void ConsoleReporter::benchmarkStarting(BenchmarkInfo const& info) {
+ (*m_tablePrinter) << info.samples << ColumnBreak()
+ << info.iterations << ColumnBreak();
+ if (!m_config->benchmarkNoAnalysis())
+ (*m_tablePrinter) << Duration(info.estimatedDuration) << ColumnBreak();
+}
+void ConsoleReporter::benchmarkEnded(BenchmarkStats<> const& stats) {
+ if (m_config->benchmarkNoAnalysis())
+ {
+ (*m_tablePrinter) << Duration(stats.mean.point.count()) << ColumnBreak();
+ }
+ else
+ {
+ (*m_tablePrinter) << ColumnBreak()
+ << Duration(stats.mean.point.count()) << ColumnBreak()
+ << Duration(stats.mean.lower_bound.count()) << ColumnBreak()
+ << Duration(stats.mean.upper_bound.count()) << ColumnBreak() << ColumnBreak()
+ << Duration(stats.standardDeviation.point.count()) << ColumnBreak()
+ << Duration(stats.standardDeviation.lower_bound.count()) << ColumnBreak()
+ << Duration(stats.standardDeviation.upper_bound.count()) << ColumnBreak() << ColumnBreak() << ColumnBreak() << ColumnBreak() << ColumnBreak();
+ }
+}
+
+void ConsoleReporter::benchmarkFailed(std::string const& error) {
+ Colour colour(Colour::Red);
+ (*m_tablePrinter)
+ << "Benchmark failed (" << error << ')'
+ << ColumnBreak() << RowBreak();
+}
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+void ConsoleReporter::testCaseEnded(TestCaseStats const& _testCaseStats) {
+ m_tablePrinter->close();
+ StreamingReporterBase::testCaseEnded(_testCaseStats);
+ m_headerPrinted = false;
+}
+void ConsoleReporter::testGroupEnded(TestGroupStats const& _testGroupStats) {
+ if (currentGroupInfo.used) {
+ printSummaryDivider();
+ stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n";
+ printTotals(_testGroupStats.totals);
+ stream << '\n' << std::endl;
+ }
+ StreamingReporterBase::testGroupEnded(_testGroupStats);
+}
+void ConsoleReporter::testRunEnded(TestRunStats const& _testRunStats) {
+ printTotalsDivider(_testRunStats.totals);
+ printTotals(_testRunStats.totals);
+ stream << std::endl;
+ StreamingReporterBase::testRunEnded(_testRunStats);
+}
+void ConsoleReporter::testRunStarting(TestRunInfo const& _testInfo) {
+ StreamingReporterBase::testRunStarting(_testInfo);
+ printTestFilters();
+}
+
+void ConsoleReporter::lazyPrint() {
+
+ m_tablePrinter->close();
+ lazyPrintWithoutClosingBenchmarkTable();
+}
+
+void ConsoleReporter::lazyPrintWithoutClosingBenchmarkTable() {
+
+ if (!currentTestRunInfo.used)
+ lazyPrintRunInfo();
+ if (!currentGroupInfo.used)
+ lazyPrintGroupInfo();
+
+ if (!m_headerPrinted) {
+ printTestCaseAndSectionHeader();
+ m_headerPrinted = true;
+ }
+}
+void ConsoleReporter::lazyPrintRunInfo() {
+ stream << '\n' << getLineOfChars<'~'>() << '\n';
+ Colour colour(Colour::SecondaryText);
+ stream << currentTestRunInfo->name
+ << " is a Catch v" << libraryVersion() << " host application.\n"
+ << "Run with -? for options\n\n";
+
+ if (m_config->rngSeed() != 0)
+ stream << "Randomness seeded to: " << m_config->rngSeed() << "\n\n";
+
+ currentTestRunInfo.used = true;
+}
+void ConsoleReporter::lazyPrintGroupInfo() {
+ if (!currentGroupInfo->name.empty() && currentGroupInfo->groupsCounts > 1) {
+ printClosedHeader("Group: " + currentGroupInfo->name);
+ currentGroupInfo.used = true;
+ }
+}
+void ConsoleReporter::printTestCaseAndSectionHeader() {
+ assert(!m_sectionStack.empty());
+ printOpenHeader(currentTestCaseInfo->name);
+
+ if (m_sectionStack.size() > 1) {
+ Colour colourGuard(Colour::Headers);
+
+ auto
+ it = m_sectionStack.begin() + 1, // Skip first section (test case)
+ itEnd = m_sectionStack.end();
+ for (; it != itEnd; ++it)
+ printHeaderString(it->name, 2);
+ }
+
+ SourceLineInfo lineInfo = m_sectionStack.back().lineInfo;
+
+ stream << getLineOfChars<'-'>() << '\n';
+ Colour colourGuard(Colour::FileName);
+ stream << lineInfo << '\n';
+ stream << getLineOfChars<'.'>() << '\n' << std::endl;
+}
+
+void ConsoleReporter::printClosedHeader(std::string const& _name) {
+ printOpenHeader(_name);
+ stream << getLineOfChars<'.'>() << '\n';
+}
+void ConsoleReporter::printOpenHeader(std::string const& _name) {
+ stream << getLineOfChars<'-'>() << '\n';
+ {
+ Colour colourGuard(Colour::Headers);
+ printHeaderString(_name);
+ }
+}
+
+// if string has a : in first line will set indent to follow it on
+// subsequent lines
+void ConsoleReporter::printHeaderString(std::string const& _string, std::size_t indent) {
+ std::size_t i = _string.find(": ");
+ if (i != std::string::npos)
+ i += 2;
+ else
+ i = 0;
+ stream << Column(_string).indent(indent + i).initialIndent(indent) << '\n';
+}
+
+struct SummaryColumn {
+
+ SummaryColumn( std::string _label, Colour::Code _colour )
+ : label( std::move( _label ) ),
+ colour( _colour ) {}
+ SummaryColumn addRow( std::size_t count ) {
+ ReusableStringStream rss;
+ rss << count;
+ std::string row = rss.str();
+ for (auto& oldRow : rows) {
+ while (oldRow.size() < row.size())
+ oldRow = ' ' + oldRow;
+ while (oldRow.size() > row.size())
+ row = ' ' + row;
+ }
+ rows.push_back(row);
+ return *this;
+ }
+
+ std::string label;
+ Colour::Code colour;
+ std::vector<std::string> rows;
+
+};
+
+void ConsoleReporter::printTotals( Totals const& totals ) {
+ if (totals.testCases.total() == 0) {
+ stream << Colour(Colour::Warning) << "No tests ran\n";
+ } else if (totals.assertions.total() > 0 && totals.testCases.allPassed()) {
+ stream << Colour(Colour::ResultSuccess) << "All tests passed";
+ stream << " ("
+ << pluralise(totals.assertions.passed, "assertion") << " in "
+ << pluralise(totals.testCases.passed, "test case") << ')'
+ << '\n';
+ } else {
+
+ std::vector<SummaryColumn> columns;
+ columns.push_back(SummaryColumn("", Colour::None)
+ .addRow(totals.testCases.total())
+ .addRow(totals.assertions.total()));
+ columns.push_back(SummaryColumn("passed", Colour::Success)
+ .addRow(totals.testCases.passed)
+ .addRow(totals.assertions.passed));
+ columns.push_back(SummaryColumn("failed", Colour::ResultError)
+ .addRow(totals.testCases.failed)
+ .addRow(totals.assertions.failed));
+ columns.push_back(SummaryColumn("failed as expected", Colour::ResultExpectedFailure)
+ .addRow(totals.testCases.failedButOk)
+ .addRow(totals.assertions.failedButOk));
+
+ printSummaryRow("test cases", columns, 0);
+ printSummaryRow("assertions", columns, 1);
+ }
+}
+void ConsoleReporter::printSummaryRow(std::string const& label, std::vector<SummaryColumn> const& cols, std::size_t row) {
+ for (auto col : cols) {
+ std::string value = col.rows[row];
+ if (col.label.empty()) {
+ stream << label << ": ";
+ if (value != "0")
+ stream << value;
+ else
+ stream << Colour(Colour::Warning) << "- none -";
+ } else if (value != "0") {
+ stream << Colour(Colour::LightGrey) << " | ";
+ stream << Colour(col.colour)
+ << value << ' ' << col.label;
+ }
+ }
+ stream << '\n';
+}
+
+void ConsoleReporter::printTotalsDivider(Totals const& totals) {
+ if (totals.testCases.total() > 0) {
+ std::size_t failedRatio = makeRatio(totals.testCases.failed, totals.testCases.total());
+ std::size_t failedButOkRatio = makeRatio(totals.testCases.failedButOk, totals.testCases.total());
+ std::size_t passedRatio = makeRatio(totals.testCases.passed, totals.testCases.total());
+ while (failedRatio + failedButOkRatio + passedRatio < CATCH_CONFIG_CONSOLE_WIDTH - 1)
+ findMax(failedRatio, failedButOkRatio, passedRatio)++;
+ while (failedRatio + failedButOkRatio + passedRatio > CATCH_CONFIG_CONSOLE_WIDTH - 1)
+ findMax(failedRatio, failedButOkRatio, passedRatio)--;
+
+ stream << Colour(Colour::Error) << std::string(failedRatio, '=');
+ stream << Colour(Colour::ResultExpectedFailure) << std::string(failedButOkRatio, '=');
+ if (totals.testCases.allPassed())
+ stream << Colour(Colour::ResultSuccess) << std::string(passedRatio, '=');
+ else
+ stream << Colour(Colour::Success) << std::string(passedRatio, '=');
+ } else {
+ stream << Colour(Colour::Warning) << std::string(CATCH_CONFIG_CONSOLE_WIDTH - 1, '=');
+ }
+ stream << '\n';
+}
+void ConsoleReporter::printSummaryDivider() {
+ stream << getLineOfChars<'-'>() << '\n';
+}
+
+void ConsoleReporter::printTestFilters() {
+ if (m_config->testSpec().hasFilters()) {
+ Colour guard(Colour::BrightYellow);
+ stream << "Filters: " << serializeFilters(m_config->getTestsOrTags()) << '\n';
+ }
+}
+
+CATCH_REGISTER_REPORTER("console", ConsoleReporter)
+
+} // end namespace Catch
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#endif
+// end catch_reporter_console.cpp
+// start catch_reporter_junit.cpp
+
+#include <cassert>
+#include <sstream>
+#include <ctime>
+#include <algorithm>
+#include <iomanip>
+
+namespace Catch {
+
+ namespace {
+ std::string getCurrentTimestamp() {
+ // Beware, this is not reentrant because of backward compatibility issues
+ // Also, UTC only, again because of backward compatibility (%z is C++11)
+ time_t rawtime;
+ std::time(&rawtime);
+ auto const timeStampSize = sizeof("2017-01-16T17:06:45Z");
+
+#ifdef _MSC_VER
+ std::tm timeInfo = {};
+ gmtime_s(&timeInfo, &rawtime);
+#else
+ std::tm* timeInfo;
+ timeInfo = std::gmtime(&rawtime);
+#endif
+
+ char timeStamp[timeStampSize];
+ const char * const fmt = "%Y-%m-%dT%H:%M:%SZ";
+
+#ifdef _MSC_VER
+ std::strftime(timeStamp, timeStampSize, fmt, &timeInfo);
+#else
+ std::strftime(timeStamp, timeStampSize, fmt, timeInfo);
+#endif
+ return std::string(timeStamp, timeStampSize-1);
+ }
+
+ std::string fileNameTag(const std::vector<std::string> &tags) {
+ auto it = std::find_if(begin(tags),
+ end(tags),
+ [] (std::string const& tag) {return tag.front() == '#'; });
+ if (it != tags.end())
+ return it->substr(1);
+ return std::string();
+ }
+
+ // Formats the duration in seconds to 3 decimal places.
+ // This is done because some genius defined Maven Surefire schema
+ // in a way that only accepts 3 decimal places, and tools like
+ // Jenkins use that schema for validation JUnit reporter output.
+ std::string formatDuration( double seconds ) {
+ ReusableStringStream rss;
+ rss << std::fixed << std::setprecision( 3 ) << seconds;
+ return rss.str();
+ }
+
+ } // anonymous namespace
+
+ JunitReporter::JunitReporter( ReporterConfig const& _config )
+ : CumulativeReporterBase( _config ),
+ xml( _config.stream() )
+ {
+ m_reporterPrefs.shouldRedirectStdOut = true;
+ m_reporterPrefs.shouldReportAllAssertions = true;
+ }
+
+ JunitReporter::~JunitReporter() {}
+
+ std::string JunitReporter::getDescription() {
+ return "Reports test results in an XML format that looks like Ant's junitreport target";
+ }
+
+ void JunitReporter::noMatchingTestCases( std::string const& /*spec*/ ) {}
+
+ void JunitReporter::testRunStarting( TestRunInfo const& runInfo ) {
+ CumulativeReporterBase::testRunStarting( runInfo );
+ xml.startElement( "testsuites" );
+ }
+
+ void JunitReporter::testGroupStarting( GroupInfo const& groupInfo ) {
+ suiteTimer.start();
+ stdOutForSuite.clear();
+ stdErrForSuite.clear();
+ unexpectedExceptions = 0;
+ CumulativeReporterBase::testGroupStarting( groupInfo );
+ }
+
+ void JunitReporter::testCaseStarting( TestCaseInfo const& testCaseInfo ) {
+ m_okToFail = testCaseInfo.okToFail();
+ }
+
+ bool JunitReporter::assertionEnded( AssertionStats const& assertionStats ) {
+ if( assertionStats.assertionResult.getResultType() == ResultWas::ThrewException && !m_okToFail )
+ unexpectedExceptions++;
+ return CumulativeReporterBase::assertionEnded( assertionStats );
+ }
+
+ void JunitReporter::testCaseEnded( TestCaseStats const& testCaseStats ) {
+ stdOutForSuite += testCaseStats.stdOut;
+ stdErrForSuite += testCaseStats.stdErr;
+ CumulativeReporterBase::testCaseEnded( testCaseStats );
+ }
+
+ void JunitReporter::testGroupEnded( TestGroupStats const& testGroupStats ) {
+ double suiteTime = suiteTimer.getElapsedSeconds();
+ CumulativeReporterBase::testGroupEnded( testGroupStats );
+ writeGroup( *m_testGroups.back(), suiteTime );
+ }
+
+ void JunitReporter::testRunEndedCumulative() {
+ xml.endElement();
+ }
+
+ void JunitReporter::writeGroup( TestGroupNode const& groupNode, double suiteTime ) {
+ XmlWriter::ScopedElement e = xml.scopedElement( "testsuite" );
+
+ TestGroupStats const& stats = groupNode.value;
+ xml.writeAttribute( "name", stats.groupInfo.name );
+ xml.writeAttribute( "errors", unexpectedExceptions );
+ xml.writeAttribute( "failures", stats.totals.assertions.failed-unexpectedExceptions );
+ xml.writeAttribute( "tests", stats.totals.assertions.total() );
+ xml.writeAttribute( "hostname", "tbd" ); // !TBD
+ if( m_config->showDurations() == ShowDurations::Never )
+ xml.writeAttribute( "time", "" );
+ else
+ xml.writeAttribute( "time", formatDuration( suiteTime ) );
+ xml.writeAttribute( "timestamp", getCurrentTimestamp() );
+
+ // Write properties if there are any
+ if (m_config->hasTestFilters() || m_config->rngSeed() != 0) {
+ auto properties = xml.scopedElement("properties");
+ if (m_config->hasTestFilters()) {
+ xml.scopedElement("property")
+ .writeAttribute("name", "filters")
+ .writeAttribute("value", serializeFilters(m_config->getTestsOrTags()));
+ }
+ if (m_config->rngSeed() != 0) {
+ xml.scopedElement("property")
+ .writeAttribute("name", "random-seed")
+ .writeAttribute("value", m_config->rngSeed());
+ }
+ }
+
+ // Write test cases
+ for( auto const& child : groupNode.children )
+ writeTestCase( *child );
+
+ xml.scopedElement( "system-out" ).writeText( trim( stdOutForSuite ), XmlFormatting::Newline );
+ xml.scopedElement( "system-err" ).writeText( trim( stdErrForSuite ), XmlFormatting::Newline );
+ }
+
+ void JunitReporter::writeTestCase( TestCaseNode const& testCaseNode ) {
+ TestCaseStats const& stats = testCaseNode.value;
+
+ // All test cases have exactly one section - which represents the
+ // test case itself. That section may have 0-n nested sections
+ assert( testCaseNode.children.size() == 1 );
+ SectionNode const& rootSection = *testCaseNode.children.front();
+
+ std::string className = stats.testInfo.className;
+
+ if( className.empty() ) {
+ className = fileNameTag(stats.testInfo.tags);
+ if ( className.empty() )
+ className = "global";
+ }
+
+ if ( !m_config->name().empty() )
+ className = m_config->name() + "." + className;
+
+ writeSection( className, "", rootSection, stats.testInfo.okToFail() );
+ }
+
+ void JunitReporter::writeSection( std::string const& className,
+ std::string const& rootName,
+ SectionNode const& sectionNode,
+ bool testOkToFail) {
+ std::string name = trim( sectionNode.stats.sectionInfo.name );
+ if( !rootName.empty() )
+ name = rootName + '/' + name;
+
+ if( !sectionNode.assertions.empty() ||
+ !sectionNode.stdOut.empty() ||
+ !sectionNode.stdErr.empty() ) {
+ XmlWriter::ScopedElement e = xml.scopedElement( "testcase" );
+ if( className.empty() ) {
+ xml.writeAttribute( "classname", name );
+ xml.writeAttribute( "name", "root" );
+ }
+ else {
+ xml.writeAttribute( "classname", className );
+ xml.writeAttribute( "name", name );
+ }
+ xml.writeAttribute( "time", formatDuration( sectionNode.stats.durationInSeconds ) );
+ // This is not ideal, but it should be enough to mimic gtest's
+ // junit output.
+ // Ideally the JUnit reporter would also handle `skipTest`
+ // events and write those out appropriately.
+ xml.writeAttribute( "status", "run" );
+
+ if (sectionNode.stats.assertions.failedButOk) {
+ xml.scopedElement("skipped")
+ .writeAttribute("message", "TEST_CASE tagged with !mayfail");
+ }
+
+ writeAssertions( sectionNode );
+
+ if( !sectionNode.stdOut.empty() )
+ xml.scopedElement( "system-out" ).writeText( trim( sectionNode.stdOut ), XmlFormatting::Newline );
+ if( !sectionNode.stdErr.empty() )
+ xml.scopedElement( "system-err" ).writeText( trim( sectionNode.stdErr ), XmlFormatting::Newline );
+ }
+ for( auto const& childNode : sectionNode.childSections )
+ if( className.empty() )
+ writeSection( name, "", *childNode, testOkToFail );
+ else
+ writeSection( className, name, *childNode, testOkToFail );
+ }
+
+ void JunitReporter::writeAssertions( SectionNode const& sectionNode ) {
+ for( auto const& assertion : sectionNode.assertions )
+ writeAssertion( assertion );
+ }
+
+ void JunitReporter::writeAssertion( AssertionStats const& stats ) {
+ AssertionResult const& result = stats.assertionResult;
+ if( !result.isOk() ) {
+ std::string elementName;
+ switch( result.getResultType() ) {
+ case ResultWas::ThrewException:
+ case ResultWas::FatalErrorCondition:
+ elementName = "error";
+ break;
+ case ResultWas::ExplicitFailure:
+ case ResultWas::ExpressionFailed:
+ case ResultWas::DidntThrowException:
+ elementName = "failure";
+ break;
+
+ // We should never see these here:
+ case ResultWas::Info:
+ case ResultWas::Warning:
+ case ResultWas::Ok:
+ case ResultWas::Unknown:
+ case ResultWas::FailureBit:
+ case ResultWas::Exception:
+ elementName = "internalError";
+ break;
+ }
+
+ XmlWriter::ScopedElement e = xml.scopedElement( elementName );
+
+ xml.writeAttribute( "message", result.getExpression() );
+ xml.writeAttribute( "type", result.getTestMacroName() );
+
+ ReusableStringStream rss;
+ if (stats.totals.assertions.total() > 0) {
+ rss << "FAILED" << ":\n";
+ if (result.hasExpression()) {
+ rss << " ";
+ rss << result.getExpressionInMacro();
+ rss << '\n';
+ }
+ if (result.hasExpandedExpression()) {
+ rss << "with expansion:\n";
+ rss << Column(result.getExpandedExpression()).indent(2) << '\n';
+ }
+ } else {
+ rss << '\n';
+ }
+
+ if( !result.getMessage().empty() )
+ rss << result.getMessage() << '\n';
+ for( auto const& msg : stats.infoMessages )
+ if( msg.type == ResultWas::Info )
+ rss << msg.message << '\n';
+
+ rss << "at " << result.getSourceInfo();
+ xml.writeText( rss.str(), XmlFormatting::Newline );
+ }
+ }
+
+ CATCH_REGISTER_REPORTER( "junit", JunitReporter )
+
+} // end namespace Catch
+// end catch_reporter_junit.cpp
+// start catch_reporter_listening.cpp
+
+#include <cassert>
+
+namespace Catch {
+
+ ListeningReporter::ListeningReporter() {
+ // We will assume that listeners will always want all assertions
+ m_preferences.shouldReportAllAssertions = true;
+ }
+
+ void ListeningReporter::addListener( IStreamingReporterPtr&& listener ) {
+ m_listeners.push_back( std::move( listener ) );
+ }
+
+ void ListeningReporter::addReporter(IStreamingReporterPtr&& reporter) {
+ assert(!m_reporter && "Listening reporter can wrap only 1 real reporter");
+ m_reporter = std::move( reporter );
+ m_preferences.shouldRedirectStdOut = m_reporter->getPreferences().shouldRedirectStdOut;
+ }
+
+ ReporterPreferences ListeningReporter::getPreferences() const {
+ return m_preferences;
+ }
+
+ std::set<Verbosity> ListeningReporter::getSupportedVerbosities() {
+ return std::set<Verbosity>{ };
+ }
+
+ void ListeningReporter::noMatchingTestCases( std::string const& spec ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->noMatchingTestCases( spec );
+ }
+ m_reporter->noMatchingTestCases( spec );
+ }
+
+ void ListeningReporter::reportInvalidArguments(std::string const&arg){
+ for ( auto const& listener : m_listeners ) {
+ listener->reportInvalidArguments( arg );
+ }
+ m_reporter->reportInvalidArguments( arg );
+ }
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void ListeningReporter::benchmarkPreparing( std::string const& name ) {
+ for (auto const& listener : m_listeners) {
+ listener->benchmarkPreparing(name);
+ }
+ m_reporter->benchmarkPreparing(name);
+ }
+ void ListeningReporter::benchmarkStarting( BenchmarkInfo const& benchmarkInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->benchmarkStarting( benchmarkInfo );
+ }
+ m_reporter->benchmarkStarting( benchmarkInfo );
+ }
+ void ListeningReporter::benchmarkEnded( BenchmarkStats<> const& benchmarkStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->benchmarkEnded( benchmarkStats );
+ }
+ m_reporter->benchmarkEnded( benchmarkStats );
+ }
+
+ void ListeningReporter::benchmarkFailed( std::string const& error ) {
+ for (auto const& listener : m_listeners) {
+ listener->benchmarkFailed(error);
+ }
+ m_reporter->benchmarkFailed(error);
+ }
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void ListeningReporter::testRunStarting( TestRunInfo const& testRunInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testRunStarting( testRunInfo );
+ }
+ m_reporter->testRunStarting( testRunInfo );
+ }
+
+ void ListeningReporter::testGroupStarting( GroupInfo const& groupInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testGroupStarting( groupInfo );
+ }
+ m_reporter->testGroupStarting( groupInfo );
+ }
+
+ void ListeningReporter::testCaseStarting( TestCaseInfo const& testInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testCaseStarting( testInfo );
+ }
+ m_reporter->testCaseStarting( testInfo );
+ }
+
+ void ListeningReporter::sectionStarting( SectionInfo const& sectionInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->sectionStarting( sectionInfo );
+ }
+ m_reporter->sectionStarting( sectionInfo );
+ }
+
+ void ListeningReporter::assertionStarting( AssertionInfo const& assertionInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->assertionStarting( assertionInfo );
+ }
+ m_reporter->assertionStarting( assertionInfo );
+ }
+
+ // The return value indicates if the messages buffer should be cleared:
+ bool ListeningReporter::assertionEnded( AssertionStats const& assertionStats ) {
+ for( auto const& listener : m_listeners ) {
+ static_cast<void>( listener->assertionEnded( assertionStats ) );
+ }
+ return m_reporter->assertionEnded( assertionStats );
+ }
+
+ void ListeningReporter::sectionEnded( SectionStats const& sectionStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->sectionEnded( sectionStats );
+ }
+ m_reporter->sectionEnded( sectionStats );
+ }
+
+ void ListeningReporter::testCaseEnded( TestCaseStats const& testCaseStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testCaseEnded( testCaseStats );
+ }
+ m_reporter->testCaseEnded( testCaseStats );
+ }
+
+ void ListeningReporter::testGroupEnded( TestGroupStats const& testGroupStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testGroupEnded( testGroupStats );
+ }
+ m_reporter->testGroupEnded( testGroupStats );
+ }
+
+ void ListeningReporter::testRunEnded( TestRunStats const& testRunStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testRunEnded( testRunStats );
+ }
+ m_reporter->testRunEnded( testRunStats );
+ }
+
+ void ListeningReporter::skipTest( TestCaseInfo const& testInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->skipTest( testInfo );
+ }
+ m_reporter->skipTest( testInfo );
+ }
+
+ bool ListeningReporter::isMulti() const {
+ return true;
+ }
+
+} // end namespace Catch
+// end catch_reporter_listening.cpp
+// start catch_reporter_xml.cpp
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4061) // Not all labels are EXPLICITLY handled in switch
+ // Note that 4062 (not all labels are handled
+ // and default is missing) is enabled
+#endif
+
+namespace Catch {
+ XmlReporter::XmlReporter( ReporterConfig const& _config )
+ : StreamingReporterBase( _config ),
+ m_xml(_config.stream())
+ {
+ m_reporterPrefs.shouldRedirectStdOut = true;
+ m_reporterPrefs.shouldReportAllAssertions = true;
+ }
+
+ XmlReporter::~XmlReporter() = default;
+
+ std::string XmlReporter::getDescription() {
+ return "Reports test results as an XML document";
+ }
+
+ std::string XmlReporter::getStylesheetRef() const {
+ return std::string();
+ }
+
+ void XmlReporter::writeSourceInfo( SourceLineInfo const& sourceInfo ) {
+ m_xml
+ .writeAttribute( "filename", sourceInfo.file )
+ .writeAttribute( "line", sourceInfo.line );
+ }
+
+ void XmlReporter::noMatchingTestCases( std::string const& s ) {
+ StreamingReporterBase::noMatchingTestCases( s );
+ }
+
+ void XmlReporter::testRunStarting( TestRunInfo const& testInfo ) {
+ StreamingReporterBase::testRunStarting( testInfo );
+ std::string stylesheetRef = getStylesheetRef();
+ if( !stylesheetRef.empty() )
+ m_xml.writeStylesheetRef( stylesheetRef );
+ m_xml.startElement( "Catch" );
+ if( !m_config->name().empty() )
+ m_xml.writeAttribute( "name", m_config->name() );
+ if (m_config->testSpec().hasFilters())
+ m_xml.writeAttribute( "filters", serializeFilters( m_config->getTestsOrTags() ) );
+ if( m_config->rngSeed() != 0 )
+ m_xml.scopedElement( "Randomness" )
+ .writeAttribute( "seed", m_config->rngSeed() );
+ }
+
+ void XmlReporter::testGroupStarting( GroupInfo const& groupInfo ) {
+ StreamingReporterBase::testGroupStarting( groupInfo );
+ m_xml.startElement( "Group" )
+ .writeAttribute( "name", groupInfo.name );
+ }
+
+ void XmlReporter::testCaseStarting( TestCaseInfo const& testInfo ) {
+ StreamingReporterBase::testCaseStarting(testInfo);
+ m_xml.startElement( "TestCase" )
+ .writeAttribute( "name", trim( testInfo.name ) )
+ .writeAttribute( "description", testInfo.description )
+ .writeAttribute( "tags", testInfo.tagsAsString() );
+
+ writeSourceInfo( testInfo.lineInfo );
+
+ if ( m_config->showDurations() == ShowDurations::Always )
+ m_testCaseTimer.start();
+ m_xml.ensureTagClosed();
+ }
+
+ void XmlReporter::sectionStarting( SectionInfo const& sectionInfo ) {
+ StreamingReporterBase::sectionStarting( sectionInfo );
+ if( m_sectionDepth++ > 0 ) {
+ m_xml.startElement( "Section" )
+ .writeAttribute( "name", trim( sectionInfo.name ) );
+ writeSourceInfo( sectionInfo.lineInfo );
+ m_xml.ensureTagClosed();
+ }
+ }
+
+ void XmlReporter::assertionStarting( AssertionInfo const& ) { }
+
+ bool XmlReporter::assertionEnded( AssertionStats const& assertionStats ) {
+
+ AssertionResult const& result = assertionStats.assertionResult;
+
+ bool includeResults = m_config->includeSuccessfulResults() || !result.isOk();
+
+ if( includeResults || result.getResultType() == ResultWas::Warning ) {
+ // Print any info messages in <Info> tags.
+ for( auto const& msg : assertionStats.infoMessages ) {
+ if( msg.type == ResultWas::Info && includeResults ) {
+ m_xml.scopedElement( "Info" )
+ .writeText( msg.message );
+ } else if ( msg.type == ResultWas::Warning ) {
+ m_xml.scopedElement( "Warning" )
+ .writeText( msg.message );
+ }
+ }
+ }
+
+ // Drop out if result was successful but we're not printing them.
+ if( !includeResults && result.getResultType() != ResultWas::Warning )
+ return true;
+
+ // Print the expression if there is one.
+ if( result.hasExpression() ) {
+ m_xml.startElement( "Expression" )
+ .writeAttribute( "success", result.succeeded() )
+ .writeAttribute( "type", result.getTestMacroName() );
+
+ writeSourceInfo( result.getSourceInfo() );
+
+ m_xml.scopedElement( "Original" )
+ .writeText( result.getExpression() );
+ m_xml.scopedElement( "Expanded" )
+ .writeText( result.getExpandedExpression() );
+ }
+
+ // And... Print a result applicable to each result type.
+ switch( result.getResultType() ) {
+ case ResultWas::ThrewException:
+ m_xml.startElement( "Exception" );
+ writeSourceInfo( result.getSourceInfo() );
+ m_xml.writeText( result.getMessage() );
+ m_xml.endElement();
+ break;
+ case ResultWas::FatalErrorCondition:
+ m_xml.startElement( "FatalErrorCondition" );
+ writeSourceInfo( result.getSourceInfo() );
+ m_xml.writeText( result.getMessage() );
+ m_xml.endElement();
+ break;
+ case ResultWas::Info:
+ m_xml.scopedElement( "Info" )
+ .writeText( result.getMessage() );
+ break;
+ case ResultWas::Warning:
+ // Warning will already have been written
+ break;
+ case ResultWas::ExplicitFailure:
+ m_xml.startElement( "Failure" );
+ writeSourceInfo( result.getSourceInfo() );
+ m_xml.writeText( result.getMessage() );
+ m_xml.endElement();
+ break;
+ default:
+ break;
+ }
+
+ if( result.hasExpression() )
+ m_xml.endElement();
+
+ return true;
+ }
+
+ void XmlReporter::sectionEnded( SectionStats const& sectionStats ) {
+ StreamingReporterBase::sectionEnded( sectionStats );
+ if( --m_sectionDepth > 0 ) {
+ XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResults" );
+ e.writeAttribute( "successes", sectionStats.assertions.passed );
+ e.writeAttribute( "failures", sectionStats.assertions.failed );
+ e.writeAttribute( "expectedFailures", sectionStats.assertions.failedButOk );
+
+ if ( m_config->showDurations() == ShowDurations::Always )
+ e.writeAttribute( "durationInSeconds", sectionStats.durationInSeconds );
+
+ m_xml.endElement();
+ }
+ }
+
+ void XmlReporter::testCaseEnded( TestCaseStats const& testCaseStats ) {
+ StreamingReporterBase::testCaseEnded( testCaseStats );
+ XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResult" );
+ e.writeAttribute( "success", testCaseStats.totals.assertions.allOk() );
+
+ if ( m_config->showDurations() == ShowDurations::Always )
+ e.writeAttribute( "durationInSeconds", m_testCaseTimer.getElapsedSeconds() );
+
+ if( !testCaseStats.stdOut.empty() )
+ m_xml.scopedElement( "StdOut" ).writeText( trim( testCaseStats.stdOut ), XmlFormatting::Newline );
+ if( !testCaseStats.stdErr.empty() )
+ m_xml.scopedElement( "StdErr" ).writeText( trim( testCaseStats.stdErr ), XmlFormatting::Newline );
+
+ m_xml.endElement();
+ }
+
+ void XmlReporter::testGroupEnded( TestGroupStats const& testGroupStats ) {
+ StreamingReporterBase::testGroupEnded( testGroupStats );
+ // TODO: Check testGroupStats.aborting and act accordingly.
+ m_xml.scopedElement( "OverallResults" )
+ .writeAttribute( "successes", testGroupStats.totals.assertions.passed )
+ .writeAttribute( "failures", testGroupStats.totals.assertions.failed )
+ .writeAttribute( "expectedFailures", testGroupStats.totals.assertions.failedButOk );
+ m_xml.scopedElement( "OverallResultsCases")
+ .writeAttribute( "successes", testGroupStats.totals.testCases.passed )
+ .writeAttribute( "failures", testGroupStats.totals.testCases.failed )
+ .writeAttribute( "expectedFailures", testGroupStats.totals.testCases.failedButOk );
+ m_xml.endElement();
+ }
+
+ void XmlReporter::testRunEnded( TestRunStats const& testRunStats ) {
+ StreamingReporterBase::testRunEnded( testRunStats );
+ m_xml.scopedElement( "OverallResults" )
+ .writeAttribute( "successes", testRunStats.totals.assertions.passed )
+ .writeAttribute( "failures", testRunStats.totals.assertions.failed )
+ .writeAttribute( "expectedFailures", testRunStats.totals.assertions.failedButOk );
+ m_xml.scopedElement( "OverallResultsCases")
+ .writeAttribute( "successes", testRunStats.totals.testCases.passed )
+ .writeAttribute( "failures", testRunStats.totals.testCases.failed )
+ .writeAttribute( "expectedFailures", testRunStats.totals.testCases.failedButOk );
+ m_xml.endElement();
+ }
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void XmlReporter::benchmarkPreparing(std::string const& name) {
+ m_xml.startElement("BenchmarkResults")
+ .writeAttribute("name", name);
+ }
+
+ void XmlReporter::benchmarkStarting(BenchmarkInfo const &info) {
+ m_xml.writeAttribute("samples", info.samples)
+ .writeAttribute("resamples", info.resamples)
+ .writeAttribute("iterations", info.iterations)
+ .writeAttribute("clockResolution", info.clockResolution)
+ .writeAttribute("estimatedDuration", info.estimatedDuration)
+ .writeComment("All values in nano seconds");
+ }
+
+ void XmlReporter::benchmarkEnded(BenchmarkStats<> const& benchmarkStats) {
+ m_xml.startElement("mean")
+ .writeAttribute("value", benchmarkStats.mean.point.count())
+ .writeAttribute("lowerBound", benchmarkStats.mean.lower_bound.count())
+ .writeAttribute("upperBound", benchmarkStats.mean.upper_bound.count())
+ .writeAttribute("ci", benchmarkStats.mean.confidence_interval);
+ m_xml.endElement();
+ m_xml.startElement("standardDeviation")
+ .writeAttribute("value", benchmarkStats.standardDeviation.point.count())
+ .writeAttribute("lowerBound", benchmarkStats.standardDeviation.lower_bound.count())
+ .writeAttribute("upperBound", benchmarkStats.standardDeviation.upper_bound.count())
+ .writeAttribute("ci", benchmarkStats.standardDeviation.confidence_interval);
+ m_xml.endElement();
+ m_xml.startElement("outliers")
+ .writeAttribute("variance", benchmarkStats.outlierVariance)
+ .writeAttribute("lowMild", benchmarkStats.outliers.low_mild)
+ .writeAttribute("lowSevere", benchmarkStats.outliers.low_severe)
+ .writeAttribute("highMild", benchmarkStats.outliers.high_mild)
+ .writeAttribute("highSevere", benchmarkStats.outliers.high_severe);
+ m_xml.endElement();
+ m_xml.endElement();
+ }
+
+ void XmlReporter::benchmarkFailed(std::string const &error) {
+ m_xml.scopedElement("failed").
+ writeAttribute("message", error);
+ m_xml.endElement();
+ }
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ CATCH_REGISTER_REPORTER( "xml", XmlReporter )
+
+} // end namespace Catch
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+// end catch_reporter_xml.cpp
+
+namespace Catch {
+ LeakDetector leakDetector;
+}
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// end catch_impl.hpp
+#endif
+
+#ifdef CATCH_CONFIG_MAIN
+// start catch_default_main.hpp
+
+#ifndef __OBJC__
+
+#if defined(CATCH_CONFIG_WCHAR) && defined(CATCH_PLATFORM_WINDOWS) && defined(_UNICODE) && !defined(DO_NOT_USE_WMAIN)
+// Standard C/C++ Win32 Unicode wmain entry point
+extern "C" int wmain (int argc, wchar_t * argv[], wchar_t * []) {
+#else
+// Standard C/C++ main entry point
+int main (int argc, char * argv[]) {
+#endif
+
+ return Catch::Session().run( argc, argv );
+}
+
+#else // __OBJC__
+
+// Objective-C entry point
+int main (int argc, char * const argv[]) {
+#if !CATCH_ARC_ENABLED
+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+#endif
+
+ Catch::registerTestMethods();
+ int result = Catch::Session().run( argc, (char**)argv );
+
+#if !CATCH_ARC_ENABLED
+ [pool drain];
+#endif
+
+ return result;
+}
+
+#endif // __OBJC__
+
+// end catch_default_main.hpp
+#endif
+
+#if !defined(CATCH_CONFIG_IMPL_ONLY)
+
+#ifdef CLARA_CONFIG_MAIN_NOT_DEFINED
+# undef CLARA_CONFIG_MAIN
+#endif
+
+#if !defined(CATCH_CONFIG_DISABLE)
+//////
+// If this config identifier is defined then all CATCH macros are prefixed with CATCH_
+#ifdef CATCH_CONFIG_PREFIX_ALL
+
+#define CATCH_REQUIRE( ... ) INTERNAL_CATCH_TEST( "CATCH_REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define CATCH_REQUIRE_FALSE( ... ) INTERNAL_CATCH_TEST( "CATCH_REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
+
+#define CATCH_REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "CATCH_REQUIRE_THROWS", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr )
+#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CATCH_REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr )
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CATCH_REQUIRE_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::Normal, matcher, expr )
+#endif// CATCH_CONFIG_DISABLE_MATCHERS
+#define CATCH_REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+
+#define CATCH_CHECK( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_CHECK_FALSE( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK_FALSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
+#define CATCH_CHECKED_IF( ... ) INTERNAL_CATCH_IF( "CATCH_CHECKED_IF", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_CHECKED_ELSE( ... ) INTERNAL_CATCH_ELSE( "CATCH_CHECKED_ELSE", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_CHECK_NOFAIL( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK_NOFAIL", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ )
+
+#define CATCH_CHECK_THROWS( ... ) INTERNAL_CATCH_THROWS( "CATCH_CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr )
+#define CATCH_CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CATCH_CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CATCH_CHECK_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define CATCH_CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CATCH_CHECK_THAT", matcher, Catch::ResultDisposition::ContinueOnFailure, arg )
+
+#define CATCH_REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CATCH_REQUIRE_THAT", matcher, Catch::ResultDisposition::Normal, arg )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+#define CATCH_INFO( msg ) INTERNAL_CATCH_INFO( "CATCH_INFO", msg )
+#define CATCH_UNSCOPED_INFO( msg ) INTERNAL_CATCH_UNSCOPED_INFO( "CATCH_UNSCOPED_INFO", msg )
+#define CATCH_WARN( msg ) INTERNAL_CATCH_MSG( "CATCH_WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg )
+#define CATCH_CAPTURE( ... ) INTERNAL_CATCH_CAPTURE( INTERNAL_CATCH_UNIQUE_NAME(capturer), "CATCH_CAPTURE",__VA_ARGS__ )
+
+#define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ )
+#define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
+#define CATCH_REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ )
+#define CATCH_SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
+#define CATCH_DYNAMIC_SECTION( ... ) INTERNAL_CATCH_DYNAMIC_SECTION( __VA_ARGS__ )
+#define CATCH_FAIL( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define CATCH_FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( "CATCH_SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+
+#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ )
+#else
+#define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) )
+#endif
+
+#if !defined(CATCH_CONFIG_RUNTIME_STATIC_REQUIRE)
+#define CATCH_STATIC_REQUIRE( ... ) static_assert( __VA_ARGS__ , #__VA_ARGS__ ); CATCH_SUCCEED( #__VA_ARGS__ )
+#define CATCH_STATIC_REQUIRE_FALSE( ... ) static_assert( !(__VA_ARGS__), "!(" #__VA_ARGS__ ")" ); CATCH_SUCCEED( #__VA_ARGS__ )
+#else
+#define CATCH_STATIC_REQUIRE( ... ) CATCH_REQUIRE( __VA_ARGS__ )
+#define CATCH_STATIC_REQUIRE_FALSE( ... ) CATCH_REQUIRE_FALSE( __VA_ARGS__ )
+#endif
+
+// "BDD-style" convenience wrappers
+#define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ )
+#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ )
+#define CATCH_GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Given: " << desc )
+#define CATCH_AND_GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( "And given: " << desc )
+#define CATCH_WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " When: " << desc )
+#define CATCH_AND_WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And when: " << desc )
+#define CATCH_THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Then: " << desc )
+#define CATCH_AND_THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And: " << desc )
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+#define CATCH_BENCHMARK(...) \
+ INTERNAL_CATCH_BENCHMARK(INTERNAL_CATCH_UNIQUE_NAME(C_A_T_C_H_B_E_N_C_H_), INTERNAL_CATCH_GET_1_ARG(__VA_ARGS__,,), INTERNAL_CATCH_GET_2_ARG(__VA_ARGS__,,))
+#define CATCH_BENCHMARK_ADVANCED(name) \
+ INTERNAL_CATCH_BENCHMARK_ADVANCED(INTERNAL_CATCH_UNIQUE_NAME(C_A_T_C_H_B_E_N_C_H_), name)
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required
+#else
+
+#define REQUIRE( ... ) INTERNAL_CATCH_TEST( "REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define REQUIRE_FALSE( ... ) INTERNAL_CATCH_TEST( "REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
+
+#define REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "REQUIRE_THROWS", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr )
+#define REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr )
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "REQUIRE_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::Normal, matcher, expr )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+
+#define CHECK( ... ) INTERNAL_CATCH_TEST( "CHECK", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CHECK_FALSE( ... ) INTERNAL_CATCH_TEST( "CHECK_FALSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
+#define CHECKED_IF( ... ) INTERNAL_CATCH_IF( "CHECKED_IF", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CHECKED_ELSE( ... ) INTERNAL_CATCH_ELSE( "CHECKED_ELSE", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CHECK_NOFAIL( ... ) INTERNAL_CATCH_TEST( "CHECK_NOFAIL", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ )
+
+#define CHECK_THROWS( ... ) INTERNAL_CATCH_THROWS( "CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr )
+#define CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CHECK_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CHECK_THAT", matcher, Catch::ResultDisposition::ContinueOnFailure, arg )
+
+#define REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "REQUIRE_THAT", matcher, Catch::ResultDisposition::Normal, arg )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+#define INFO( msg ) INTERNAL_CATCH_INFO( "INFO", msg )
+#define UNSCOPED_INFO( msg ) INTERNAL_CATCH_UNSCOPED_INFO( "UNSCOPED_INFO", msg )
+#define WARN( msg ) INTERNAL_CATCH_MSG( "WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg )
+#define CAPTURE( ... ) INTERNAL_CATCH_CAPTURE( INTERNAL_CATCH_UNIQUE_NAME(capturer), "CAPTURE",__VA_ARGS__ )
+
+#define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ )
+#define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
+#define REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ )
+#define SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
+#define DYNAMIC_SECTION( ... ) INTERNAL_CATCH_DYNAMIC_SECTION( __VA_ARGS__ )
+#define FAIL( ... ) INTERNAL_CATCH_MSG( "FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define SUCCEED( ... ) INTERNAL_CATCH_MSG( "SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ )
+#define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ )
+#define TEMPLATE_LIST_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE(__VA_ARGS__)
+#define TEMPLATE_LIST_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#else
+#define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ ) )
+#define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ ) )
+#define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) )
+#define TEMPLATE_LIST_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE( __VA_ARGS__ ) )
+#define TEMPLATE_LIST_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#endif
+
+#if !defined(CATCH_CONFIG_RUNTIME_STATIC_REQUIRE)
+#define STATIC_REQUIRE( ... ) static_assert( __VA_ARGS__, #__VA_ARGS__ ); SUCCEED( #__VA_ARGS__ )
+#define STATIC_REQUIRE_FALSE( ... ) static_assert( !(__VA_ARGS__), "!(" #__VA_ARGS__ ")" ); SUCCEED( "!(" #__VA_ARGS__ ")" )
+#else
+#define STATIC_REQUIRE( ... ) REQUIRE( __VA_ARGS__ )
+#define STATIC_REQUIRE_FALSE( ... ) REQUIRE_FALSE( __VA_ARGS__ )
+#endif
+
+#endif
+
+#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature )
+
+// "BDD-style" convenience wrappers
+#define SCENARIO( ... ) TEST_CASE( "Scenario: " __VA_ARGS__ )
+#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ )
+
+#define GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Given: " << desc )
+#define AND_GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( "And given: " << desc )
+#define WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " When: " << desc )
+#define AND_WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And when: " << desc )
+#define THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Then: " << desc )
+#define AND_THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And: " << desc )
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+#define BENCHMARK(...) \
+ INTERNAL_CATCH_BENCHMARK(INTERNAL_CATCH_UNIQUE_NAME(C_A_T_C_H_B_E_N_C_H_), INTERNAL_CATCH_GET_1_ARG(__VA_ARGS__,,), INTERNAL_CATCH_GET_2_ARG(__VA_ARGS__,,))
+#define BENCHMARK_ADVANCED(name) \
+ INTERNAL_CATCH_BENCHMARK_ADVANCED(INTERNAL_CATCH_UNIQUE_NAME(C_A_T_C_H_B_E_N_C_H_), name)
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+using Catch::Detail::Approx;
+
+#else // CATCH_CONFIG_DISABLE
+
+//////
+// If this config identifier is defined then all CATCH macros are prefixed with CATCH_
+#ifdef CATCH_CONFIG_PREFIX_ALL
+
+#define CATCH_REQUIRE( ... ) (void)(0)
+#define CATCH_REQUIRE_FALSE( ... ) (void)(0)
+
+#define CATCH_REQUIRE_THROWS( ... ) (void)(0)
+#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) (void)(0)
+#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) (void)(0)
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
+#endif// CATCH_CONFIG_DISABLE_MATCHERS
+#define CATCH_REQUIRE_NOTHROW( ... ) (void)(0)
+
+#define CATCH_CHECK( ... ) (void)(0)
+#define CATCH_CHECK_FALSE( ... ) (void)(0)
+#define CATCH_CHECKED_IF( ... ) if (__VA_ARGS__)
+#define CATCH_CHECKED_ELSE( ... ) if (!(__VA_ARGS__))
+#define CATCH_CHECK_NOFAIL( ... ) (void)(0)
+
+#define CATCH_CHECK_THROWS( ... ) (void)(0)
+#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) (void)(0)
+#define CATCH_CHECK_THROWS_WITH( expr, matcher ) (void)(0)
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define CATCH_CHECK_NOTHROW( ... ) (void)(0)
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_CHECK_THAT( arg, matcher ) (void)(0)
+
+#define CATCH_REQUIRE_THAT( arg, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+#define CATCH_INFO( msg ) (void)(0)
+#define CATCH_UNSCOPED_INFO( msg ) (void)(0)
+#define CATCH_WARN( msg ) (void)(0)
+#define CATCH_CAPTURE( msg ) (void)(0)
+
+#define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ))
+#define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ))
+#define CATCH_METHOD_AS_TEST_CASE( method, ... )
+#define CATCH_REGISTER_TEST_CASE( Function, ... ) (void)(0)
+#define CATCH_SECTION( ... )
+#define CATCH_DYNAMIC_SECTION( ... )
+#define CATCH_FAIL( ... ) (void)(0)
+#define CATCH_FAIL_CHECK( ... ) (void)(0)
+#define CATCH_SUCCEED( ... ) (void)(0)
+
+#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ))
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__)
+#define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__)
+#define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__)
+#define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#else
+#define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__) )
+#define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__) )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#endif
+
+// "BDD-style" convenience wrappers
+#define CATCH_SCENARIO( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ))
+#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ), className )
+#define CATCH_GIVEN( desc )
+#define CATCH_AND_GIVEN( desc )
+#define CATCH_WHEN( desc )
+#define CATCH_AND_WHEN( desc )
+#define CATCH_THEN( desc )
+#define CATCH_AND_THEN( desc )
+
+#define CATCH_STATIC_REQUIRE( ... ) (void)(0)
+#define CATCH_STATIC_REQUIRE_FALSE( ... ) (void)(0)
+
+// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required
+#else
+
+#define REQUIRE( ... ) (void)(0)
+#define REQUIRE_FALSE( ... ) (void)(0)
+
+#define REQUIRE_THROWS( ... ) (void)(0)
+#define REQUIRE_THROWS_AS( expr, exceptionType ) (void)(0)
+#define REQUIRE_THROWS_WITH( expr, matcher ) (void)(0)
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define REQUIRE_NOTHROW( ... ) (void)(0)
+
+#define CHECK( ... ) (void)(0)
+#define CHECK_FALSE( ... ) (void)(0)
+#define CHECKED_IF( ... ) if (__VA_ARGS__)
+#define CHECKED_ELSE( ... ) if (!(__VA_ARGS__))
+#define CHECK_NOFAIL( ... ) (void)(0)
+
+#define CHECK_THROWS( ... ) (void)(0)
+#define CHECK_THROWS_AS( expr, exceptionType ) (void)(0)
+#define CHECK_THROWS_WITH( expr, matcher ) (void)(0)
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define CHECK_NOTHROW( ... ) (void)(0)
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CHECK_THAT( arg, matcher ) (void)(0)
+
+#define REQUIRE_THAT( arg, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+#define INFO( msg ) (void)(0)
+#define UNSCOPED_INFO( msg ) (void)(0)
+#define WARN( msg ) (void)(0)
+#define CAPTURE( ... ) (void)(0)
+
+#define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ))
+#define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ))
+#define METHOD_AS_TEST_CASE( method, ... )
+#define REGISTER_TEST_CASE( Function, ... ) (void)(0)
+#define SECTION( ... )
+#define DYNAMIC_SECTION( ... )
+#define FAIL( ... ) (void)(0)
+#define FAIL_CHECK( ... ) (void)(0)
+#define SUCCEED( ... ) (void)(0)
+#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ))
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__)
+#define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__)
+#define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__)
+#define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE( ... ) TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#else
+#define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__) )
+#define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__) )
+#define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__ ) )
+#define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE( ... ) TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#endif
+
+#define STATIC_REQUIRE( ... ) (void)(0)
+#define STATIC_REQUIRE_FALSE( ... ) (void)(0)
+
+#endif
+
+#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature )
+
+// "BDD-style" convenience wrappers
+#define SCENARIO( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ) )
+#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ), className )
+
+#define GIVEN( desc )
+#define AND_GIVEN( desc )
+#define WHEN( desc )
+#define AND_WHEN( desc )
+#define THEN( desc )
+#define AND_THEN( desc )
+
+using Catch::Detail::Approx;
+
+#endif
+
+#endif // ! CATCH_CONFIG_IMPL_ONLY
+
+// start catch_reenable_warnings.h
+
+
+#ifdef __clang__
+# ifdef __ICC // icpc defines the __clang__ macro
+# pragma warning(pop)
+# else
+# pragma clang diagnostic pop
+# endif
+#elif defined __GNUC__
+# pragma GCC diagnostic pop
+#endif
+
+// end catch_reenable_warnings.h
+// end catch.hpp
+#endif // TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED
+
diff --git a/lib/lua/CMakeLists.txt b/lib/lua/CMakeLists.txt
index 5d0dc0f70..2de4840cb 100644
--- a/lib/lua/CMakeLists.txt
+++ b/lib/lua/CMakeLists.txt
@@ -1,12 +1,10 @@
-project(lua C)
+project(lua CXX)
set(LUA_VERSION_MAJOR 5)
set(LUA_VERSION_MINOR 1)
set(LUA_VERSION_PATCH 4)
set(LUA_VERSION "${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}.${LUA_VERSION_PATCH}")
-set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
-
set(COMMON_CFLAGS)
set(COMMON_LDFLAGS)
set(LIBS)
@@ -50,19 +48,12 @@ if(LUA_ANSI)
set(COMMON_CFLAGS "${COMMON_CFLAGS} -DLUA_ANSI")
endif(LUA_ANSI)
-# COMMON_CFLAGS has no effect without this line
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_CFLAGS}")
-
-
-# Standard flags to use for each build type.
-if(CMAKE_COMPILER_IS_GNUCC)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe -Wall -Wextra -Wshadow -W -pedantic -std=gnu99")
- set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2")
- set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g")
- set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_PROFILE} -O1 -g")
- set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_WITHDEBINFO} -O2 -g")
-endif(CMAKE_COMPILER_IS_GNUCC)
-
+# Standard flags to use
+if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|(Apple)?Clang")
+ set(COMMON_CFLAGS "${COMMON_CFLAGS} -pipe -Wall -Wextra -Wshadow -W -pedantic")
+endif()
-add_subdirectory(src build)
+# COMMON_CFLAGS has no effect without this line
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_CFLAGS}")
+add_subdirectory(src)
diff --git a/lib/lua/src/CMakeLists.txt b/lib/lua/src/CMakeLists.txt
index 8f6cc1213..2ca4f4168 100644
--- a/lib/lua/src/CMakeLists.txt
+++ b/lib/lua/src/CMakeLists.txt
@@ -31,24 +31,14 @@ set(LUA_CORE_SRC
lvm.c
lzio.c
)
-set(LUA_LIB_HEADERS
- lua.h
- lualib.h
- lauxlib.h
- luaconf.h
-)
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_BINARY_DIR})
-# Lua library.
+# Lua library
add_library(lua STATIC ${LUA_CORE_SRC})
target_link_libraries(lua ${LIBS})
-set(LUA_STATIC_LIB lua)
-set(LUA_LIBS lua)
-
-set_target_properties(${LUA_LIBS} PROPERTIES
+set_target_properties(lua PROPERTIES
VERSION ${LUA_VERSION}
CLEAN_DIRECT_OUTPUT 1
)
+# Compile code as C++
+set_source_files_properties(${LUA_CORE_SRC} PROPERTIES LANGUAGE CXX)
diff --git a/lib/lua/src/lgc.c b/lib/lua/src/lgc.c
index e909c79a9..9141a1c60 100644
--- a/lib/lua/src/lgc.c
+++ b/lib/lua/src/lgc.c
@@ -164,8 +164,13 @@ static int traversetable (global_State *g, Table *h) {
markobject(g, h->metatable);
mode = gfasttm(g, h->metatable, TM_MODE);
if (mode && ttisstring(mode)) { /* is there a weak mode? */
- weakkey = (strchr(svalue(mode), 'k') != NULL);
- weakvalue = (strchr(svalue(mode), 'v') != NULL);
+ // Android's 'FORTIFY libc' calls __builtin_object_size on the argument of strchr.
+ // This produces an incorrect size for the expression `svalue(mode)`, causing
+ // an assertion. By placing it in a temporary, __builtin_object_size returns
+ // -1 (for unknown size) which functions correctly.
+ const char *tmp = svalue(mode);
+ weakkey = (strchr(tmp, 'k') != NULL);
+ weakvalue = (strchr(tmp, 'v') != NULL);
if (weakkey || weakvalue) { /* is really weak? */
h->marked &= ~(KEYWEAK | VALUEWEAK); /* clear bits */
h->marked |= cast_byte((weakkey << KEYWEAKBIT) |
diff --git a/lib/lua/src/luaconf.h b/lib/lua/src/luaconf.h
index e2cb26163..1521f0cbc 100644
--- a/lib/lua/src/luaconf.h
+++ b/lib/lua/src/luaconf.h
@@ -143,6 +143,14 @@
#define LUA_INTEGER ptrdiff_t
+/* MINETEST-SPECIFIC CHANGE: make sure API functions conform to the C ABI. */
+#if defined(__cplusplus)
+#define LUAI_API_EXTERN extern "C"
+#else
+#define LUAI_API_EXTERN extern
+#endif
+
+
/*
@@ LUA_API is a mark for all core API functions.
@@ LUALIB_API is a mark for all standard library functions.
@@ -154,14 +162,14 @@
#if defined(LUA_BUILD_AS_DLL)
#if defined(LUA_CORE) || defined(LUA_LIB)
-#define LUA_API __declspec(dllexport)
+#define LUA_API LUAI_API_EXTERN __declspec(dllexport)
#else
-#define LUA_API __declspec(dllimport)
+#define LUA_API LUAI_API_EXTERN __declspec(dllimport)
#endif
#else
-#define LUA_API extern
+#define LUA_API LUAI_API_EXTERN
#endif
diff --git a/minetest.conf.example b/minetest.conf.example
index 7f4b5d946..2f153413a 100644
--- a/minetest.conf.example
+++ b/minetest.conf.example
@@ -16,30 +16,13 @@
# Controls
#
+## General
+
# If enabled, you can place blocks at the position (feet + eye level) where you stand.
# This is helpful when working with nodeboxes in small areas.
# type: bool
# enable_build_where_you_stand = false
-# Player is able to fly without being affected by gravity.
-# This requires the "fly" privilege on the server.
-# type: bool
-# free_move = false
-
-# If enabled, makes move directions relative to the player's pitch when flying or swimming.
-# type: bool
-# pitch_move = false
-
-# Fast movement (via the "Aux1" key).
-# This requires the "fast" privilege on the server.
-# type: bool
-# fast_move = false
-
-# If enabled together with fly mode, player is able to fly through solid nodes.
-# This requires the "noclip" privilege on the server.
-# type: bool
-# noclip = false
-
# Smooths camera when looking around. Also called look or mouse smoothing.
# Useful for recording videos.
# type: bool
@@ -53,14 +36,6 @@
# type: float min: 0 max: 0.99
# cinematic_camera_smoothing = 0.7
-# Invert vertical mouse movement.
-# type: bool
-# invert_mouse = false
-
-# Mouse sensitivity multiplier.
-# type: float
-# mouse_sensitivity = 0.2
-
# If enabled, "Aux1" key instead of "Sneak" key is used for climbing down and
# descending.
# type: bool
@@ -77,7 +52,7 @@
# The time in seconds it takes between repeated node placements when holding
# the place button.
-# type: float min: 0.001
+# type: float min: 0.25 max: 2
# repeat_place_time = 0.25
# Automatically jump up single-node obstacles.
@@ -89,14 +64,17 @@
# type: bool
# safe_dig_and_place = false
-# Enable random user input (only used for testing).
-# type: bool
-# random_input = false
+## Keyboard and Mouse
-# Continuous forward movement, toggled by autoforward key.
-# Press the autoforward key again or the backwards movement to disable.
+# Invert vertical mouse movement.
# type: bool
-# continuous_forward = false
+# invert_mouse = false
+
+# Mouse sensitivity multiplier.
+# type: float min: 0.001 max: 10
+# mouse_sensitivity = 0.2
+
+## Touchscreen
# The length in pixels it takes for touch screen interaction to start.
# type: int min: 0 max: 100
@@ -112,431 +90,217 @@
# type: bool
# virtual_joystick_triggers_aux1 = false
-# Enable joysticks
-# type: bool
-# enable_joysticks = false
-
-# The identifier of the joystick to use
-# type: int
-# joystick_id = 0
-
-# The type of joystick
-# type: enum values: auto, generic, xbox, dragonrise_gamecube
-# joystick_type = auto
-
-# The time in seconds it takes between repeated events
-# when holding down a joystick button combination.
-# type: float min: 0.001
-# repeat_joystick_button_time = 0.17
-
-# The dead zone of the joystick
-# type: int
-# joystick_deadzone = 2048
-
-# The sensitivity of the joystick axes for moving the
-# in-game view frustum around.
-# type: float
-# joystick_frustum_sensitivity = 170
-
-# Key for moving the player forward.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_forward = KEY_KEY_W
-
-# Key for moving the player backward.
-# Will also disable autoforward, when active.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_backward = KEY_KEY_S
-
-# Key for moving the player left.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_left = KEY_KEY_A
-
-# Key for moving the player right.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_right = KEY_KEY_D
-
-# Key for jumping.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_jump = KEY_SPACE
-
-# Key for sneaking.
-# Also used for climbing down and descending in water if aux1_descends is disabled.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_sneak = KEY_LSHIFT
-
-# Key for digging.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_dig = KEY_LBUTTON
-
-# Key for placing.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_place = KEY_RBUTTON
-
-# Key for opening the inventory.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_inventory = KEY_KEY_I
-
-# Key for moving fast in fast mode.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_aux1 = KEY_KEY_E
-
-# Key for opening the chat window.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_chat = KEY_KEY_T
-
-# Key for opening the chat window to type commands.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_cmd = /
-
-# Key for opening the chat window to type local commands.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_cmd_local = .
-
-# Key for toggling unlimited view range.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_rangeselect = KEY_KEY_R
-
-# Key for toggling flying.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_freemove = KEY_KEY_K
-
-# Key for toggling pitch move mode.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_pitchmove = KEY_KEY_P
-
-# Key for toggling fast mode.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_fastmove = KEY_KEY_J
-
-# Key for toggling noclip mode.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_noclip = KEY_KEY_H
-
-# Key for selecting the next item in the hotbar.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_hotbar_next = KEY_KEY_N
-
-# Key for selecting the previous item in the hotbar.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_hotbar_previous = KEY_KEY_B
-
-# Key for muting the game.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_mute = KEY_KEY_M
-
-# Key for increasing the volume.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_increase_volume =
-
-# Key for decreasing the volume.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_decrease_volume =
-
-# Key for toggling autoforward.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_autoforward =
-
-# Key for toggling cinematic mode.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_cinematic =
-
-# Key for toggling display of minimap.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_minimap = KEY_KEY_V
-
-# Key for taking screenshots.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_screenshot = KEY_F12
-
-# Key for dropping the currently selected item.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_drop = KEY_KEY_Q
-
-# Key to use view zoom when possible.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_zoom = KEY_KEY_Z
-
-# Key for selecting the first hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot1 = KEY_KEY_1
+#
+# Graphics and Audio
+#
-# Key for selecting the second hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot2 = KEY_KEY_2
+## Graphics
-# Key for selecting the third hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot3 = KEY_KEY_3
+### Screen
-# Key for selecting the fourth hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot4 = KEY_KEY_4
-
-# Key for selecting the fifth hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot5 = KEY_KEY_5
-
-# Key for selecting the sixth hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot6 = KEY_KEY_6
+# Width component of the initial window size. Ignored in fullscreen mode.
+# type: int min: 1 max: 65535
+# screen_w = 1024
-# Key for selecting the seventh hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot7 = KEY_KEY_7
+# Height component of the initial window size. Ignored in fullscreen mode.
+# type: int min: 1 max: 65535
+# screen_h = 600
-# Key for selecting the eighth hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot8 = KEY_KEY_8
+# Save window size automatically when modified.
+# type: bool
+# autosave_screensize = true
-# Key for selecting the ninth hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot9 = KEY_KEY_9
+# Fullscreen mode.
+# type: bool
+# fullscreen = false
-# Key for selecting the tenth hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot10 = KEY_KEY_0
+# Open the pause menu when the window's focus is lost. Does not pause if a formspec is
+# open.
+# type: bool
+# pause_on_lost_focus = false
-# Key for selecting the 11th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot11 =
+### FPS
-# Key for selecting the 12th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot12 =
+# If FPS would go higher than this, limit it by sleeping
+# to not waste CPU power for no benefit.
+# type: int min: 1 max: 4294967295
+# fps_max = 60
-# Key for selecting the 13th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot13 =
+# Vertical screen synchronization.
+# type: bool
+# vsync = false
-# Key for selecting the 14th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot14 =
+# Maximum FPS when the window is not focused, or when the game is paused.
+# type: int min: 1 max: 4294967295
+# fps_max_unfocused = 20
-# Key for selecting the 15th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot15 =
+# View distance in nodes.
+# type: int min: 20 max: 4000
+# viewing_range = 190
-# Key for selecting the 16th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot16 =
+# Undersampling is similar to using a lower screen resolution, but it applies
+# to the game world only, keeping the GUI intact.
+# It should give a significant performance boost at the cost of less detailed image.
+# Higher values result in a less detailed image.
+# type: int min: 1 max: 8
+# undersampling = 1
-# Key for selecting the 17th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot17 =
+### Graphics Effects
-# Key for selecting the 18th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot18 =
+# Makes all liquids opaque
+# type: bool
+# opaque_water = false
-# Key for selecting the 19th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot19 =
+# Leaves style:
+# - Fancy: all faces visible
+# - Simple: only outer faces, if defined special_tiles are used
+# - Opaque: disable transparency
+# type: enum values: fancy, simple, opaque
+# leaves_style = fancy
-# Key for selecting the 20th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot20 =
+# Connects glass if supported by node.
+# type: bool
+# connected_glass = false
-# Key for selecting the 21st hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot21 =
+# Enable smooth lighting with simple ambient occlusion.
+# Disable for speed or for different looks.
+# type: bool
+# smooth_lighting = true
-# Key for selecting the 22nd hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot22 =
+# 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
-# Key for selecting the 23rd hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot23 =
+# Adds particles when digging a node.
+# type: bool
+# enable_particles = true
-# Key for selecting the 24th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot24 =
+### 3d
-# Key for selecting the 25th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot25 =
+# 3D support.
+# Currently supported:
+# - none: no 3d output.
+# - anaglyph: cyan/magenta color 3d.
+# - interlaced: odd/even line based polarisation screen support.
+# - topbottom: split screen top/bottom.
+# - sidebyside: split screen side by side.
+# - crossview: Cross-eyed 3d
+# - pageflip: quadbuffer based 3d.
+# Note that the interlaced mode requires shaders to be enabled.
+# type: enum values: none, anaglyph, interlaced, topbottom, sidebyside, crossview, pageflip
+# 3d_mode = none
-# Key for selecting the 26th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot26 =
+# Strength of 3D mode parallax.
+# type: float min: -0.087 max: 0.087
+# 3d_paralax_strength = 0.025
-# Key for selecting the 27th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot27 =
+### Bobbing
-# Key for selecting the 28th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot28 =
+# Arm inertia, gives a more realistic movement of
+# the arm when the camera moves.
+# type: bool
+# arm_inertia = true
-# Key for selecting the 29th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot29 =
+# Enable view bobbing and amount of view bobbing.
+# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.
+# type: float min: 0 max: 7.9
+# view_bobbing_amount = 1.0
-# Key for selecting the 30th hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot30 =
+# Multiplier for fall bobbing.
+# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.
+# type: float min: 0 max: 100
+# fall_bobbing_amount = 0.03
-# Key for selecting the 31st hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot31 =
+### Camera
-# Key for selecting the 32nd hotbar slot.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_slot32 =
+# Camera 'near clipping plane' distance in nodes, between 0 and 0.25
+# Only works on GLES platforms. Most users will not need to change this.
+# Increasing can reduce artifacting on weaker GPUs.
+# 0.1 = Default, 0.25 = Good value for weaker tablets.
+# type: float min: 0 max: 0.25
+# near_plane = 0.1
-# Key for toggling the display of the HUD.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_toggle_hud = KEY_F1
+# Field of view in degrees.
+# type: int min: 45 max: 160
+# fov = 72
-# Key for toggling the display of chat.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_toggle_chat = KEY_F2
+# Alters the light curve by applying 'gamma correction' to it.
+# Higher values make middle and lower light levels brighter.
+# Value '1.0' leaves the light curve unaltered.
+# This only has significant effect on daylight and artificial
+# light, it has very little effect on natural night light.
+# type: float min: 0.33 max: 3
+# display_gamma = 1.0
-# Key for toggling the display of the large chat console.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_console = KEY_F10
+# The strength (darkness) of node ambient-occlusion shading.
+# Lower is darker, Higher is lighter. The valid range of values for this
+# setting is 0.25 to 4.0 inclusive. If the value is out of range it will be
+# set to the nearest valid value.
+# type: float min: 0.25 max: 4
+# ambient_occlusion_gamma = 2.2
-# Key for toggling the display of fog.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_toggle_force_fog_off = KEY_F3
+### Screenshots
-# Key for toggling the camera update. Only used for development
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_toggle_update_camera =
+# Path to save screenshots at. Can be an absolute or relative path.
+# The folder will be created if it doesn't already exist.
+# type: path
+# screenshot_path = screenshots
-# Key for toggling the display of debug info.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_toggle_debug = KEY_F5
+# Format of screenshots.
+# type: enum values: png, jpg
+# screenshot_format = png
-# Key for toggling the display of the profiler. Used for development.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_toggle_profiler = KEY_F6
+# Screenshot quality. Only used for JPEG format.
+# 1 means worst quality; 100 means best quality.
+# Use 0 for default quality.
+# type: int min: 0 max: 100
+# screenshot_quality = 0
-# Key for switching between first- and third-person camera.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_camera_mode = KEY_KEY_C
+### Node and Entity Highlighting
-# Key for increasing the viewing range.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_increase_viewing_range_min = +
+# Method used to highlight selected object.
+# type: enum values: box, halo, none
+# node_highlighting = box
-# Key for decreasing the viewing range.
-# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-# type: key
-# keymap_decrease_viewing_range_min = -
+# Show entity selection boxes
+# A restart is required after changing this.
+# type: bool
+# show_entity_selectionbox = false
-#
-# Graphics
-#
+# Selection box border color (R,G,B).
+# type: string
+# selectionbox_color = (0,0,0)
-## In-Game
+# Width of the selection box lines around nodes.
+# type: int min: 1 max: 5
+# selectionbox_width = 2
-### Basic
+# Crosshair color (R,G,B).
+# Also controls the object crosshair color
+# type: string
+# crosshair_color = (255,255,255)
-# Whether name tag backgrounds should be shown by default.
-# Mods may still set a background.
-# type: bool
-# show_nametag_backgrounds = true
+# Crosshair alpha (opaqueness, between 0 and 255).
+# This also applies to the object crosshair.
+# type: int min: 0 max: 255
+# crosshair_alpha = 255
-# Enable vertex buffer objects.
-# This should greatly improve graphics performance.
-# type: bool
-# enable_vbo = true
+### Fog
# Whether to fog out the end of the visible area.
# type: bool
# enable_fog = true
-# Leaves style:
-# - Fancy: all faces visible
-# - Simple: only outer faces, if defined special_tiles are used
-# - Opaque: disable transparency
-# type: enum values: fancy, simple, opaque
-# leaves_style = fancy
-
-# Connects glass if supported by node.
+# Make fog and sky colors depend on daytime (dawn/sunset) and view direction.
# type: bool
-# connected_glass = false
+# directional_colored_fog = true
-# Enable smooth lighting with simple ambient occlusion.
-# Disable for speed or for different looks.
-# type: bool
-# smooth_lighting = true
+# Fraction of the visible distance at which fog starts to be rendered
+# type: float min: 0 max: 0.99
+# fog_start = 0.4
-# 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
# Clouds are a client side effect.
# type: bool
@@ -546,15 +310,7 @@
# type: bool
# enable_3d_clouds = true
-# Method used to highlight selected object.
-# type: enum values: box, halo, none
-# node_highlighting = box
-
-# Adds particles when digging a node.
-# type: bool
-# enable_particles = true
-
-### Filtering
+### Filtering and Antialiasing
# Use mipmapping to scale textures. May slightly increase performance,
# especially when using a high resolution texture pack.
@@ -589,7 +345,7 @@
# bilinear/trilinear/anisotropic filtering is enabled.
# This is also used as the base node texture size for world-aligned
# texture autoscaling.
-# type: int
+# type: int min: 1 max: 32768
# texture_min_size = 64
# Use multi-sample antialiasing (MSAA) to smooth out block edges.
@@ -602,14 +358,7 @@
# type: enum values: 0, 1, 2, 4, 8, 16
# fsaa = 0
-# Undersampling is similar to using a lower screen resolution, but it applies
-# to the game world only, keeping the GUI intact.
-# It should give a significant performance boost at the cost of less detailed image.
-# Higher values result in a less detailed image.
-# type: int min: 1 max: 8
-# undersampling = 1
-
-### Shaders
+## Shaders
# Shaders allow advanced visual effects and may increase performance on some video
# cards.
@@ -617,11 +366,7 @@
# type: bool
# enable_shaders = true
-# Path to shader directory. If no path is defined, default location will be used.
-# type: path
-# shader_path =
-
-#### Tone Mapping
+### Tone Mapping
# Enables Hable's 'Uncharted 2' filmic tone mapping.
# Simulates the tone curve of photographic film and how this approximates the
@@ -630,7 +375,17 @@
# type: bool
# tone_mapping = false
-#### Waving Nodes
+### Waving Nodes
+
+# Set to true to enable waving leaves.
+# Requires shaders to be enabled.
+# type: bool
+# enable_waving_leaves = false
+
+# Set to true to enable waving plants.
+# Requires shaders to be enabled.
+# type: bool
+# enable_waving_plants = false
# Set to true to enable waving liquids (like water).
# Requires shaders to be enabled.
@@ -656,162 +411,104 @@
# type: float
# water_wave_speed = 5.0
-# Set to true to enable waving leaves.
-# Requires shaders to be enabled.
-# type: bool
-# enable_waving_leaves = false
+### Dynamic shadows
-# Set to true to enable waving plants.
+# Set to true to enable Shadow Mapping.
# Requires shaders to be enabled.
# type: bool
-# enable_waving_plants = false
+# enable_dynamic_shadows = false
-### Advanced
+# Set the shadow strength gamma.
+# Adjusts the intensity of in-game dynamic shadows.
+# Lower value means lighter shadows, higher value means darker shadows.
+# type: float min: 0.1 max: 10
+# shadow_strength_gamma = 1.0
-# Arm inertia, gives a more realistic movement of
-# the arm when the camera moves.
-# type: bool
-# arm_inertia = true
+# Maximum distance to render shadows.
+# type: float min: 10 max: 1000
+# shadow_map_max_distance = 120.0
-# If FPS would go higher than this, limit it by sleeping
-# to not waste CPU power for no benefit.
-# type: int min: 1
-# fps_max = 60
-
-# Maximum FPS when the window is not focused, or when the game is paused.
-# type: int min: 1
-# fps_max_unfocused = 20
+# Texture size to render the shadow map on.
+# This must be a power of two.
+# Bigger numbers create better shadows but it is also more expensive.
+# type: int min: 128 max: 8192
+# shadow_map_texture_size = 1024
-# Open the pause menu when the window's focus is lost. Does not pause if a formspec is
-# open.
+# Sets shadow texture quality to 32 bits.
+# On false, 16 bits texture will be used.
+# This can cause much more artifacts in the shadow.
# type: bool
-# pause_on_lost_focus = false
-
-# View distance in nodes.
-# type: int min: 20 max: 4000
-# viewing_range = 190
-
-# Camera 'near clipping plane' distance in nodes, between 0 and 0.25
-# Only works on GLES platforms. Most users will not need to change this.
-# Increasing can reduce artifacting on weaker GPUs.
-# 0.1 = Default, 0.25 = Good value for weaker tablets.
-# type: float min: 0 max: 0.25
-# near_plane = 0.1
-
-# Width component of the initial window size. Ignored in fullscreen mode.
-# type: int min: 1
-# screen_w = 1024
+# shadow_map_texture_32bit = true
-# Height component of the initial window size. Ignored in fullscreen mode.
-# type: int min: 1
-# screen_h = 600
-
-# Save window size automatically when modified.
+# Enable Poisson disk filtering.
+# On true uses Poisson disk to make "soft shadows". Otherwise uses PCF filtering.
# type: bool
-# autosave_screensize = true
+# shadow_poisson_filter = true
-# Fullscreen mode.
-# type: bool
-# fullscreen = false
+# Define shadow filtering quality.
+# This simulates the soft shadows effect by applying a PCF or Poisson disk
+# but also uses more resources.
+# type: enum values: 0, 1, 2
+# shadow_filters = 1
-# Vertical screen synchronization.
+# Enable colored shadows.
+# On true translucent nodes cast colored shadows. This is expensive.
# type: bool
-# vsync = false
+# shadow_map_color = false
-# Field of view in degrees.
-# type: int min: 45 max: 160
-# fov = 72
+# Spread a complete update of shadow map over given amount of frames.
+# Higher values might make shadows laggy, lower values
+# will consume more resources.
+# Minimum value: 1; maximum value: 16
+# type: int min: 1 max: 16
+# shadow_update_frames = 8
-# Alters the light curve by applying 'gamma correction' to it.
-# Higher values make middle and lower light levels brighter.
-# Value '1.0' leaves the light curve unaltered.
-# This only has significant effect on daylight and artificial
-# light, it has very little effect on natural night light.
-# type: float min: 0.33 max: 3
-# display_gamma = 1.0
+# Set the soft shadow radius size.
+# Lower values mean sharper shadows, bigger values mean softer shadows.
+# Minimum value: 1.0; maximum value: 15.0
+# type: float min: 1 max: 15
+# shadow_soft_radius = 5.0
-# Gradient of light curve at minimum light level.
-# Controls the contrast of the lowest light levels.
-# type: float min: 0 max: 3
-# lighting_alpha = 0.0
+# Set the tilt of Sun/Moon orbit in degrees.
+# Value of 0 means no tilt / vertical orbit.
+# Minimum value: 0.0; maximum value: 60.0
+# type: float min: 0 max: 60
+# shadow_sky_body_orbit_tilt = 0.0
-# Gradient of light curve at maximum light level.
-# Controls the contrast of the highest light levels.
-# type: float min: 0 max: 3
-# lighting_beta = 1.5
+## Audio
-# Strength of light curve boost.
-# The 3 'boost' parameters define a range of the light
-# curve that is boosted in brightness.
-# type: float min: 0 max: 0.4
-# lighting_boost = 0.2
-
-# Center of light curve boost range.
-# Where 0.0 is minimum light level, 1.0 is maximum light level.
+# Volume of all sounds.
+# Requires the sound system to be enabled.
# type: float min: 0 max: 1
-# lighting_boost_center = 0.5
+# sound_volume = 0.7
-# Spread of light curve boost range.
-# Controls the width of the range to be boosted.
-# Standard deviation of the light curve boost Gaussian.
-# type: float min: 0 max: 0.4
-# lighting_boost_spread = 0.2
+# Whether to mute sounds. You can unmute sounds at any time, unless the
+# sound system is disabled (enable_sound=false).
+# In-game, you can toggle the mute state with the mute key or by using the
+# pause menu.
+# type: bool
+# mute_sound = false
-# Path to texture directory. All textures are first searched from here.
-# type: path
-# texture_path =
+## User Interfaces
-# The rendering back-end.
+# Set the language. Leave empty to use the system language.
# 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: opengl, ogles1, ogles2
-# video_driver = opengl
-
-# Radius of cloud area stated in number of 64 node cloud squares.
-# Values larger than 26 will start to produce sharp cutoffs at cloud area corners.
-# type: int
-# cloud_radius = 12
-
-# Enable view bobbing and amount of view bobbing.
-# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.
-# type: float
-# view_bobbing_amount = 1.0
-
-# Multiplier for fall bobbing.
-# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.
-# type: float
-# fall_bobbing_amount = 0.03
-
-# 3D support.
-# Currently supported:
-# - none: no 3d output.
-# - anaglyph: cyan/magenta color 3d.
-# - interlaced: odd/even line based polarisation screen support.
-# - topbottom: split screen top/bottom.
-# - sidebyside: split screen side by side.
-# - crossview: Cross-eyed 3d
-# - pageflip: quadbuffer based 3d.
-# Note that the interlaced mode requires shaders to be enabled.
-# type: enum values: none, anaglyph, interlaced, topbottom, sidebyside, crossview, pageflip
-# 3d_mode = none
+# 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 =
-# Strength of 3D mode parallax.
-# type: float
-# 3d_paralax_strength = 0.025
+### GUIs
-# In-game chat console height, between 0.1 (10%) and 1.0 (100%).
-# type: float min: 0.1 max: 1
-# console_height = 0.6
-
-# In-game chat console background color (R,G,B).
-# type: string
-# console_color = (0,0,0)
+# Scale GUI by a user specified value.
+# Use a nearest-neighbor-anti-alias filter to scale the GUI.
+# This will smooth over some of the rough edges, and blend
+# pixels when scaling down, at the cost of blurring some
+# edge pixels when images are scaled by non-integer sizes.
+# type: float min: 0.5 max: 20
+# gui_scaling = 1.0
-# In-game chat console background alpha (opaqueness, between 0 and 255).
-# type: int min: 0 max: 255
-# console_alpha = 200
+# Enables animation of inventory items.
+# type: bool
+# inventory_items_animations = false
# Formspec full-screen background opacity (between 0 and 255).
# type: int min: 0 max: 255
@@ -821,138 +518,6 @@
# type: string
# formspec_fullscreen_bg_color = (0,0,0)
-# Formspec default background opacity (between 0 and 255).
-# type: int min: 0 max: 255
-# formspec_default_bg_opacity = 140
-
-# Formspec default background color (R,G,B).
-# type: string
-# formspec_default_bg_color = (0,0,0)
-
-# Selection box border color (R,G,B).
-# type: string
-# selectionbox_color = (0,0,0)
-
-# Width of the selection box lines around nodes.
-# type: int min: 1 max: 5
-# selectionbox_width = 2
-
-# Crosshair color (R,G,B).
-# Also controls the object crosshair color
-# type: string
-# crosshair_color = (255,255,255)
-
-# Crosshair alpha (opaqueness, between 0 and 255).
-# This also applies to the object crosshair.
-# type: int min: 0 max: 255
-# crosshair_alpha = 255
-
-# Maximum number of recent chat messages to show
-# type: int min: 2 max: 20
-# recent_chat_messages = 6
-
-# Whether node texture animations should be desynchronized per mapblock.
-# type: bool
-# desynchronize_mapblock_texture_animation = true
-
-# Maximum proportion of current window to be used for hotbar.
-# Useful if there's something to be displayed right or left of hotbar.
-# type: float
-# hud_hotbar_max_width = 1.0
-
-# Modifies the size of the HUD elements.
-# type: float
-# hud_scaling = 1.0
-
-# Enables caching of facedir rotated meshes.
-# type: bool
-# enable_mesh_cache = false
-
-# Delay between mesh updates on the client in ms. Increasing this will slow
-# down the rate of mesh updates, thus reducing jitter on slower clients.
-# type: int min: 0 max: 50
-# mesh_generation_interval = 0
-
-# Size of the MapBlock cache of the mesh generator. Increasing this will
-# increase the cache hit %, reducing the data being copied from the main
-# thread, thus reducing jitter.
-# type: int min: 0 max: 1000
-# meshgen_block_cache_size = 20
-
-# Enables minimap.
-# type: bool
-# enable_minimap = true
-
-# Shape of the minimap. Enabled = round, disabled = square.
-# type: bool
-# minimap_shape_round = true
-
-# True = 256
-# False = 128
-# Usable to make minimap smoother on slower machines.
-# type: bool
-# minimap_double_scan_height = true
-
-# Make fog and sky colors depend on daytime (dawn/sunset) and view direction.
-# type: bool
-# directional_colored_fog = true
-
-# The strength (darkness) of node ambient-occlusion shading.
-# Lower is darker, Higher is lighter. The valid range of values for this
-# setting is 0.25 to 4.0 inclusive. If the value is out of range it will be
-# set to the nearest valid value.
-# type: float min: 0.25 max: 4
-# ambient_occlusion_gamma = 2.2
-
-# Enables animation of inventory items.
-# type: bool
-# inventory_items_animations = false
-
-# Fraction of the visible distance at which fog starts to be rendered
-# type: float min: 0 max: 0.99
-# fog_start = 0.4
-
-# Makes all liquids opaque
-# type: bool
-# opaque_water = false
-
-# Textures on a node may be aligned either to the node or to the world.
-# The former mode suits better things like machines, furniture, etc., while
-# the latter makes stairs and microblocks fit surroundings better.
-# However, as this possibility is new, thus may not be used by older servers,
-# this option allows enforcing it for certain node types. Note though that
-# that is considered EXPERIMENTAL and may not work properly.
-# type: enum values: disable, enable, force_solid, force_nodebox
-# world_aligned_mode = enable
-
-# World-aligned textures may be scaled to span several nodes. However,
-# the server may not send the scale you want, especially if you use
-# a specially-designed texture pack; with this option, the client tries
-# to determine the scale automatically basing on the texture size.
-# See also texture_min_size.
-# Warning: This option is EXPERIMENTAL!
-# type: enum values: disable, enable, force
-# autoscale_mode = disable
-
-# Show entity selection boxes
-# A restart is required after changing this.
-# type: bool
-# show_entity_selectionbox = false
-
-## Menus
-
-# Use a cloud animation for the main menu background.
-# type: bool
-# menu_clouds = true
-
-# Scale GUI by a user specified value.
-# Use a nearest-neighbor-anti-alias filter to scale the GUI.
-# This will smooth over some of the rough edges, and blend
-# pixels when scaling down, at the cost of blurring some
-# edge pixels when images are scaled by non-integer sizes.
-# type: float min: 0.001
-# gui_scaling = 1.0
-
# When gui_scaling_filter is true, all GUI images need to be
# filtered in software, but some images are generated directly
# to hardware (e.g. render-to-texture for nodes in inventory).
@@ -967,224 +532,112 @@
# gui_scaling_filter_txr2img = true
# Delay showing tooltips, stated in milliseconds.
-# type: int
+# type: int min: 0 max: 1.844674407371e+19
# tooltip_show_delay = 400
# Append item name to tooltip.
# type: bool
# tooltip_append_itemname = false
+# Use a cloud animation for the main menu background.
# type: bool
-# font_bold = false
-
-# type: bool
-# font_italic = false
-
-# Shadow offset (in pixels) of the default font. If 0, then shadow will not be drawn.
-# type: int
-# font_shadow = 1
-
-# Opaqueness (alpha) of the shadow behind the default font, between 0 and 255.
-# type: int min: 0 max: 255
-# font_shadow_alpha = 127
-
-# Font size of the default font where 1 unit = 1 pixel at 96 DPI
-# type: int min: 1
-# font_size = 16
-
-# 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
+# menu_clouds = true
-# 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
+### HUD
-# type: filepath
-# font_path_bold = fonts/Arimo-Bold.ttf
+# Modifies the size of the HUD elements.
+# type: float min: 0.5 max: 20
+# hud_scaling = 1.0
-# type: filepath
-# font_path_italic = fonts/Arimo-Italic.ttf
+# Whether name tag backgrounds should be shown by default.
+# Mods may still set a background.
+# type: bool
+# show_nametag_backgrounds = true
-# type: filepath
-# font_path_bold_italic = fonts/Arimo-BoldItalic.ttf
+### Chat
-# Font size of the monospace font where 1 unit = 1 pixel at 96 DPI
-# type: int min: 1
-# mono_font_size = 16
+# Maximum number of recent chat messages to show
+# type: int min: 2 max: 20
+# recent_chat_messages = 6
-# 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_divisible_by = 1
+# In-game chat console height, between 0.1 (10%) and 1.0 (100%).
+# type: float min: 0.1 max: 1
+# console_height = 0.6
-# 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
+# In-game chat console background color (R,G,B).
+# type: string
+# console_color = (0,0,0)
-# type: filepath
-# mono_font_path_bold = fonts/Cousine-Bold.ttf
+# In-game chat console background alpha (opaqueness, between 0 and 255).
+# type: int min: 0 max: 255
+# console_alpha = 200
-# type: filepath
-# mono_font_path_italic = fonts/Cousine-Italic.ttf
+# Maximum proportion of current window to be used for hotbar.
+# Useful if there's something to be displayed right or left of hotbar.
+# type: float min: 0.001 max: 1
+# hud_hotbar_max_width = 1.0
-# type: filepath
-# mono_font_path_bold_italic = fonts/Cousine-BoldItalic.ttf
+# Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console output.
+# type: bool
+# clickable_chat_weblinks = true
-# 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
+# Optional override for chat weblink color.
+# type: string
+# chat_weblink_color =
# Font size of the recent chat text and chat prompt in point (pt).
# Value 0 will use the default font size.
-# type: int
+# type: int min: 0 max: 72
# chat_font_size = 0
-# Path to save screenshots at. Can be an absolute or relative path.
-# The folder will be created if it doesn't already exist.
-# type: path
-# screenshot_path = screenshots
-
-# Format of screenshots.
-# type: enum values: png, jpg
-# screenshot_format = png
+### Content Repository
-# Screenshot quality. Only used for JPEG format.
-# 1 means worst quality; 100 means best quality.
-# Use 0 for default quality.
-# type: int min: 0 max: 100
-# screenshot_quality = 0
+# The URL for the content repository
+# type: string
+# contentdb_url = https://content.minetest.net
-## Advanced
+# Comma-separated list of flags to hide in the content repository.
+# "nonfree" can be used to hide packages which do not qualify as 'free software',
+# as defined by the Free Software Foundation.
+# You can also specify content ratings.
+# These flags are independent from Minetest versions,
+# so see a full list at https://content.minetest.net/help/content_flags/
+# type: string
+# contentdb_flag_blacklist = nonfree, desktop_default
-# Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens.
+# Maximum number of concurrent downloads. Downloads exceeding this limit will be queued.
+# This should be lower than curl_parallel_limit.
# 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
-# enable_console = false
-
-#
-# Sound
-#
-
-# Enables the sound system.
-# If disabled, this completely disables all sounds everywhere and the in-game
-# sound controls will be non-functional.
-# Changing this setting requires a restart.
-# type: bool
-# enable_sound = true
-
-# Volume of all sounds.
-# Requires the sound system to be enabled.
-# type: float min: 0 max: 1
-# sound_volume = 0.7
-
-# Whether to mute sounds. You can unmute sounds at any time, unless the
-# sound system is disabled (enable_sound=false).
-# In-game, you can toggle the mute state with the mute key or by using the
-# pause menu.
-# type: bool
-# mute_sound = false
+# contentdb_max_concurrent_downloads = 3
#
-# Client
+# Client and Server
#
-# 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.
-# Leave this blank to start a local server.
-# Note that the address field in the main menu overrides this setting.
-# type: string
-# address =
-
-# Port to connect to (UDP).
-# Note that the port field in the main menu overrides this setting.
-# type: int min: 1 max: 65535
-# remote_port = 30000
-
-# Prometheus listener address.
-# If Minetest is compiled with ENABLE_PROMETHEUS option enabled,
-# enable metrics listener for Prometheus on that address.
-# Metrics can be fetched on http://127.0.0.1:30000/metrics
-# type: string
-# prometheus_listener_address = 127.0.0.1:30000
+## Client
# Save the map received by the client on disk.
# type: bool
# enable_local_map_saving = false
-# Enable usage of remote media server (if provided by server).
-# Remote servers offer a significantly faster way to download media (e.g. textures)
-# when connecting to the server.
-# type: bool
-# enable_remote_media_server = true
-
-# Enable Lua modding support on client.
-# This support is experimental and API can change.
-# type: bool
-# enable_client_modding = false
-
# URL to the server list displayed in the Multiplayer Tab.
# type: string
# serverlist_url = servers.minetest.net
-# File in client/serverlist/ that contains your favorite servers displayed in the
-# Multiplayer Tab.
-# type: string
-# serverlist_file = favoriteservers.json
-
-# Maximum size of the out chat queue.
-# 0 to disable queueing and -1 to make the queue size unlimited.
-# type: int
-# max_out_chat_queue_size = 20
-
-# Enable register confirmation when connecting to server.
-# If disabled, new account will be registered automatically.
+# If enabled, account registration is separate from login in the UI.
+# If disabled, new accounts will be registered automatically when logging in.
# type: bool
-# enable_register_confirmation = true
+# enable_split_login_register = true
-## Advanced
+## Server
-# Timeout for client to remove unused map data from memory.
-# type: int
-# client_unload_unused_data_timeout = 600
-
-# Maximum number of mapblocks for client to be kept in memory.
-# Set to -1 for unlimited amount.
-# type: int
-# client_mapblock_limit = 7500
-
-# Whether to show the client debug info (has the same effect as hitting F5).
-# type: bool
-# show_debug = false
+# Name of the player.
+# When running a server, clients connecting with this name are admins.
+# When starting from the main menu, this is overridden.
+# type: string
+# name =
-#
-# Server / Singleplayer
-#
+### Serverlist and MOTD
# Name of the server, to be displayed when players join and in the serverlist.
# type: string
@@ -1210,16 +663,23 @@
# type: string
# serverlist_url = servers.minetest.net
-# Remove color codes from incoming chat messages
-# Use this to stop players from being able to use color in their messages
-# type: bool
-# strip_color_codes = false
+# Message of the day displayed to players connecting.
+# type: string
+# motd =
-## Network
+# Maximum number of players that can be connected simultaneously.
+# type: int min: 0 max: 65535
+# max_users = 15
+
+# If this is set, players will always (re)spawn at the given position.
+# type: string
+# static_spawnpoint =
+
+### Networking
# Network port to listen (UDP).
# This value will be overridden when starting from the main menu.
-# type: int
+# type: int min: 1 max: 65535
# port = 30000
# The network interface that the server listens on.
@@ -1245,79 +705,16 @@
# type: bool
# ipv6_server = false
-### Advanced
-
-# Maximum number of blocks that are simultaneously sent per client.
-# The maximum total count is calculated dynamically:
-# max_total = ceil((#clients + max_users) * per_client / 4)
-# type: int
-# max_simultaneous_block_sends_per_client = 40
-
-# To reduce lag, block transfers are slowed down when a player is building something.
-# This determines how long they are slowed down after placing or removing a node.
-# type: float
-# full_block_send_enable_min_time_from_building = 2.0
-
-# Maximum number of packets sent per send step, if you have a slow connection
-# try reducing it, but don't reduce it to a number below double of targeted
-# client number.
-# type: int
-# max_packets_per_iteration = 1024
-
-# Compression level to use when sending mapblocks to the client.
-# -1 - use default compression level
-# 0 - least compression, fastest
-# 9 - best compression, slowest
-# type: int min: -1 max: 9
-# map_compression_level_net = -1
-
-## Game
-
-# Default game when creating a new world.
-# This will be overridden when creating a world from the main menu.
-# type: string
-# default_game = minetest
-
-# Message of the day displayed to players connecting.
-# type: string
-# motd =
-
-# Maximum number of players that can be connected simultaneously.
-# type: int
-# max_users = 15
-
-# World directory (everything in the world is stored here).
-# Not needed if starting from the main menu.
-# type: path
-# map-dir =
-
-# Time in seconds for item entity (dropped items) to live.
-# Setting it to -1 disables the feature.
-# type: int
-# item_entity_ttl = 900
-
-# Specifies the default stack size of nodes, items and tools.
-# Note that mods or games may explicitly set a stack for certain (or all) items.
-# type: int
-# default_stack_max = 99
-
-# Enable players getting damage and dying.
-# type: bool
-# enable_damage = false
-
-# Enable creative mode for all players
-# type: bool
-# creative_mode = false
-
-# A chosen map seed for a new map, leave empty for random.
-# Will be overridden when creating a new world in the main menu.
-# type: string
-# fixed_map_seed =
+## Server Security
# New users need to input this password.
# type: string
# default_password =
+# If enabled, players cannot join without a password or change theirs to an empty password.
+# type: bool
+# disallow_empty_password = false
+
# The privileges that new users automatically get.
# See /privs in game for a full list on your server and mod configuration.
# type: string
@@ -1327,31 +724,6 @@
# type: string
# basic_privs = interact, shout
-# Whether players are shown to clients without any range limit.
-# Deprecated, use the setting player_transfer_distance instead.
-# type: bool
-# unlimited_player_transfer_distance = true
-
-# Defines the maximal player transfer distance in blocks (0 = unlimited).
-# type: int
-# player_transfer_distance = 0
-
-# Whether to allow players to damage and kill each other.
-# type: bool
-# enable_pvp = true
-
-# Enable mod channels support.
-# type: bool
-# enable_mod_channels = false
-
-# If this is set, players will always (re)spawn at the given position.
-# type: string
-# static_spawnpoint =
-
-# If enabled, new players cannot join with an empty password.
-# type: bool
-# disallow_empty_password = false
-
# If enabled, disable cheat prevention in multiplayer.
# type: bool
# disable_anticheat = false
@@ -1361,393 +733,131 @@
# type: bool
# enable_rollback_recording = false
-# Format of player chat messages. The following strings are valid placeholders:
-# @name, @message, @timestamp (optional)
-# type: string
-# chat_message_format = <@name> @message
+### Client-side Modding
-# 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
+# Restricts the access of certain client-side functions on servers.
+# Combine the byteflags below to restrict client-side features, or set to 0
+# for no restrictions:
+# LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)
+# CHAT_MESSAGES: 2 (disable send_chat_message call client-side)
+# READ_ITEMDEFS: 4 (disable get_item_def call client-side)
+# READ_NODEDEFS: 8 (disable get_node_def call client-side)
+# LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to
+# csm_restriction_noderange)
+# READ_PLAYERINFO: 32 (disable get_player_names call client-side)
+# type: int min: 0 max: 63
+# csm_restriction_flags = 62
-# A message to be displayed to all clients when the server shuts down.
-# type: string
-# kick_msg_shutdown = Server shutting down.
+# If the CSM restriction for node range is enabled, get_node calls are limited
+# to this distance from the player to the node.
+# type: int min: 0 max: 4294967295
+# csm_restriction_noderange = 0
-# A message to be displayed to all clients when the server crashes.
-# type: string
-# kick_msg_crash = This server has experienced an internal error. You will now be disconnected.
+### Chat
-# Whether to ask clients to reconnect after a (Lua) crash.
-# Set this to true if your server is set up to restart automatically.
+# Remove color codes from incoming chat messages
+# Use this to stop players from being able to use color in their messages
# type: bool
-# ask_reconnect_on_crash = false
-
-# From how far clients know about objects, stated in mapblocks (16 nodes).
-#
-# Setting this larger than active_block_range will also cause the server
-# to maintain active objects up to this distance in the direction the
-# player is looking. (This can avoid mobs suddenly disappearing from view)
-# type: int
-# active_object_send_range_blocks = 8
+# strip_color_codes = false
-# The radius of the volume of blocks around every player that is subject to the
-# active block stuff, stated in mapblocks (16 nodes).
-# In active blocks objects are loaded and ABMs run.
-# This is also the minimum range in which active objects (mobs) are maintained.
-# This should be configured together with active_object_send_range_blocks.
-# type: int
-# active_block_range = 4
+# Set the maximum length of a chat message (in characters) sent by clients.
+# type: int min: 10 max: 65535
+# chat_message_max_size = 500
-# From how far blocks are sent to clients, stated in mapblocks (16 nodes).
-# type: int
-# max_block_send_distance = 12
+# Amount of messages a player may send per 10 seconds.
+# type: float min: 1
+# chat_message_limit_per_10sec = 10.0
-# Maximum number of forceloaded mapblocks.
-# type: int
-# max_forceloaded_blocks = 16
+# Kick players who sent more than X messages per 10 seconds.
+# type: int min: 1 max: 65535
+# chat_message_limit_trigger_kick = 50
-# Interval of sending time of day to clients.
-# type: int
-# time_send_interval = 5
+## Server Gameplay
# Controls length of day/night cycle.
# Examples:
# 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged.
-# type: int
+# type: int min: 0
# time_speed = 72
# Time of day when a new world is started, in millihours (0-23999).
# type: int min: 0 max: 23999
# world_start_time = 6125
-# Interval of saving important changes in the world, stated in seconds.
-# type: float
-# server_map_save_interval = 5.3
-
-# Set the maximum character length of a chat message sent by clients.
-# type: int
-# chat_message_max_size = 500
-
-# Amount of messages a player may send per 10 seconds.
-# type: float
-# chat_message_limit_per_10sec = 10.0
+# Time in seconds for item entity (dropped items) to live.
+# Setting it to -1 disables the feature.
+# type: int min: -1
+# item_entity_ttl = 900
-# Kick players who sent more than X messages per 10 seconds.
-# type: int
-# chat_message_limit_trigger_kick = 50
+# Specifies the default stack size of nodes, items and tools.
+# Note that mods or games may explicitly set a stack for certain (or all) items.
+# type: int min: 1 max: 65535
+# default_stack_max = 99
### Physics
# Horizontal and vertical acceleration on ground or when climbing,
# in nodes per second per second.
-# type: float
-# movement_acceleration_default = 3
+# type: float min: 0
+# movement_acceleration_default = 3.0
# Horizontal acceleration in air when jumping or falling,
# in nodes per second per second.
-# type: float
-# movement_acceleration_air = 2
+# type: float min: 0
+# movement_acceleration_air = 2.0
# Horizontal and vertical acceleration in fast mode,
# in nodes per second per second.
-# type: float
-# movement_acceleration_fast = 10
+# type: float min: 0
+# movement_acceleration_fast = 10.0
# Walking and flying speed, in nodes per second.
-# type: float
-# movement_speed_walk = 4
+# type: float min: 0
+# movement_speed_walk = 4.0
# Sneaking speed, in nodes per second.
-# type: float
+# type: float min: 0
# movement_speed_crouch = 1.35
# Walking, flying and climbing speed in fast mode, in nodes per second.
-# type: float
-# movement_speed_fast = 20
+# type: float min: 0
+# movement_speed_fast = 20.0
# Vertical climbing speed, in nodes per second.
-# type: float
-# movement_speed_climb = 3
+# type: float min: 0
+# movement_speed_climb = 3.0
# Initial vertical speed when jumping, in nodes per second.
-# type: float
+# type: float min: 0
# movement_speed_jump = 6.5
+# How much you are slowed down when moving inside a liquid.
# Decrease this to increase liquid resistance to movement.
-# type: float
-# movement_liquid_fluidity = 1
+# type: float min: 0.001
+# movement_liquid_fluidity = 1.0
# Maximum liquid resistance. Controls deceleration when entering liquid at
# high speed.
# type: float
# movement_liquid_fluidity_smooth = 0.5
-# Controls sinking speed in liquid.
+# Controls sinking speed in liquid when idling. Negative values will cause
+# you to rise instead.
# type: float
-# movement_liquid_sink = 10
+# movement_liquid_sink = 10.0
# Acceleration of gravity, in nodes per second per second.
# type: float
# movement_gravity = 9.81
-### Advanced
-
-# Handling for deprecated Lua API calls:
-# - none: Do not log deprecated calls
-# - log: mimic and log backtrace of deprecated call (default).
-# - error: abort on usage of deprecated call (suggested for mod developers).
-# type: enum values: none, log, error
-# 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
-# memory consumption (4096=100MB, as a rule of thumb).
-# type: int
-# max_clearobjects_extra_loaded_blocks = 4096
-
-# How much the server will wait before unloading unused mapblocks.
-# Higher value is smoother, but will use more RAM.
-# type: int
-# server_unload_unused_data_timeout = 29
-
-# Maximum number of statically stored objects in a block.
-# type: int
-# max_objects_per_block = 64
-
-# See https://www.sqlite.org/pragma.html#pragma_synchronous
-# type: enum values: 0, 1, 2
-# sqlite_synchronous = 2
-
-# Compression level to use when saving mapblocks to disk.
-# -1 - use default compression level
-# 0 - least compression, fastest
-# 9 - best compression, slowest
-# type: int min: -1 max: 9
-# map_compression_level_disk = -1
-
-# Length of a server tick and the interval at which objects are generally updated over
-# network.
-# type: float
-# dedicated_server_step = 0.09
-
-# Length of time between active block management cycles
-# type: float
-# active_block_mgmt_interval = 2.0
-
-# Length of time between Active Block Modifier (ABM) execution cycles
-# type: float
-# abm_interval = 1.0
-
-# The time budget allowed for ABMs to execute on each step
-# (as a fraction of the ABM Interval)
-# type: float min: 0.1 max: 0.9
-# abm_time_budget = 0.2
-
-# Length of time between NodeTimer execution cycles
-# type: float
-# nodetimer_interval = 0.2
-
-# If enabled, invalid world data won't cause the server to shut down.
-# Only enable this if you know what you are doing.
-# type: bool
-# ignore_world_load_errors = false
-
-# Max liquids processed per step.
-# type: int
-# liquid_loop_max = 100000
-
-# The time (in seconds) that the liquids queue may grow beyond processing
-# capacity until an attempt is made to decrease its size by dumping old queue
-# items. A value of 0 disables the functionality.
-# type: int
-# liquid_queue_purge_time = 0
-
-# Liquid update interval in seconds.
-# type: float
-# liquid_update = 1.0
-
-# At this distance the server will aggressively optimize which blocks are sent to
-# clients.
-# Small values potentially improve performance a lot, at the expense of visible
-# rendering glitches (some blocks will not be rendered under water and in caves,
-# as well as sometimes on land).
-# Setting this to a value greater than max_block_send_distance disables this
-# optimization.
-# Stated in mapblocks (16 nodes).
-# type: int min: 2
-# block_send_optimize_distance = 4
-
-# If enabled the server will perform map block occlusion culling based on
-# on the eye position of the player. This can reduce the number of blocks
-# sent to the client 50-80%. The client will not longer receive most invisible
-# so that the utility of noclip mode is reduced.
-# type: bool
-# server_side_occlusion_culling = true
-
-# Restricts the access of certain client-side functions on servers.
-# Combine the byteflags below to restrict client-side features, or set to 0
-# for no restrictions:
-# LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)
-# CHAT_MESSAGES: 2 (disable send_chat_message call client-side)
-# READ_ITEMDEFS: 4 (disable get_item_def call client-side)
-# READ_NODEDEFS: 8 (disable get_node_def call client-side)
-# LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to
-# csm_restriction_noderange)
-# READ_PLAYERINFO: 32 (disable get_player_names call client-side)
-# type: int
-# csm_restriction_flags = 62
-
-# If the CSM restriction for node range is enabled, get_node calls are limited
-# to this distance from the player to the node.
-# type: int
-# csm_restriction_noderange = 0
-
-## Security
-
-# Prevent mods from doing insecure things like running shell commands.
-# type: bool
-# secure.enable_security = true
-
-# Comma-separated list of trusted mods that are allowed to access insecure
-# functions even when mod security is on (via request_insecure_environment()).
-# type: string
-# secure.trusted_mods =
-
-# Comma-separated list of mods that are allowed to access HTTP APIs, which
-# allow them to upload and download data to/from the internet.
-# type: string
-# secure.http_mods =
-
-## Advanced
-
-### Profiling
-
-# Load the game profiler to collect game profiling data.
-# Provides a /profiler command to access the compiled profile.
-# Useful for mod developers and server operators.
-# type: bool
-# profiler.load = false
-
-# The default format in which profiles are being saved,
-# when calling `/profiler save [format]` without format.
-# type: enum values: txt, csv, lua, json, json_pretty
-# profiler.default_report_format = txt
-
-# The file path relative to your worldpath in which profiles will be saved to.
-# type: string
-# profiler.report_path = ""
-
-#### Instrumentation
-
-# Instrument the methods of entities on registration.
-# type: bool
-# instrument.entity = true
-
-# Instrument the action function of Active Block Modifiers on registration.
-# type: bool
-# instrument.abm = true
-
-# Instrument the action function of Loading Block Modifiers on registration.
-# type: bool
-# instrument.lbm = true
-
-# Instrument chat commands on registration.
-# type: bool
-# instrument.chatcommand = true
-
-# Instrument global callback functions on registration.
-# (anything you pass to a minetest.register_*() function)
-# type: bool
-# instrument.global_callback = true
-
-##### Advanced
-
-# Instrument builtin.
-# This is usually only needed by core/builtin contributors
-# type: bool
-# instrument.builtin = false
-
-# Have the profiler instrument itself:
-# * Instrument an empty function.
-# This estimates the overhead, that instrumentation is adding (+1 function call).
-# * Instrument the sampler being used to update the statistics.
-# type: bool
-# instrument.profiler = false
-
#
-# Client and Server
+# Mapgen
#
-# Name of the player.
-# When running a server, clients connecting with this name are admins.
-# When starting from the main menu, this is overridden.
-# type: string
-# name =
-
-# Set the language. Leave empty to use the system language.
-# A restart is required after changing this.
-# type: enum values: , be, 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:
-# - <nothing> (no logging)
-# - none (messages with no level)
-# - error
-# - warning
-# - action
-# - info
-# - verbose
-# type: enum values: , none, error, warning, action, info, verbose
-# debug_log_level = action
-
-# If the file size of debug.txt exceeds the number of megabytes specified in
-# this setting when it is opened, the file is moved to debug.txt.1,
-# deleting an older debug.txt.1 if it exists.
-# debug.txt is only moved if this setting is positive.
-# type: int
-# debug_log_size_max = 50
-
-# Minimal level of logging to be written to chat.
-# type: enum values: , none, error, warning, action, info, verbose
-# chat_log_level = error
-
-# Enable IPv6 support (for both client and server).
-# Required for IPv6 connections to work at all.
-# type: bool
-# enable_ipv6 = true
-
-## Advanced
-
-# Maximum time an interactive request (e.g. server list fetch) may take, stated in milliseconds.
-# type: int
-# curl_timeout = 20000
-
-# Limits number of parallel HTTP requests. Affects:
-# - Media fetch if server uses remote_media setting.
-# - Serverlist download and server announcement.
-# - Downloads performed by main menu (e.g. mod manager).
-# Only has an effect if compiled with cURL.
-# type: int
-# curl_parallel_limit = 8
-
-# Maximum time a file download (e.g. a mod download) may take, stated in milliseconds.
-# type: int
-# curl_file_download_timeout = 300000
-
-# Replaces the default main menu with a custom one.
+# A chosen map seed for a new map, leave empty for random.
+# Will be overridden when creating a new world in the main menu.
# type: string
-# main_menu_script =
-
-# Print the engine's profiling data in regular intervals (in seconds).
-# 0 = disable. Useful for developers.
-# type: int
-# profiler_print_interval = 0
-
-#
-# Mapgen
-#
+# fixed_map_seed =
# Name of map generator to be used when creating a new world.
# Creating a world in the main menu will override this.
@@ -1757,11 +867,11 @@
# mg_name = v7
# Water surface level of the world.
-# type: int
+# type: int min: -31000 max: 31000
# water_level = 1
# From how far blocks are generated for clients, stated in mapblocks (16 nodes).
-# type: int
+# type: int min: 1 max: 32767
# max_block_generate_distance = 10
# Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).
@@ -1776,7 +886,7 @@
# type: flags possible values: caves, dungeons, light, decorations, biomes, ores, nocaves, nodungeons, nolight, nodecorations, nobiomes, noores
# mg_flags = caves,dungeons,light,decorations,biomes,ores
-## Biome API temperature and humidity noise parameters
+## Biome API noise parameters
# Temperature variation for biomes.
# type: noise_params_2d
@@ -1843,7 +953,7 @@
# mgv5_cave_width = 0.09
# Y of upper limit of large caves.
-# type: int
+# type: int min: -31000 max: 31000
# mgv5_large_cave_depth = -256
# Minimum limit of random number of small caves per mapchunk.
@@ -1867,11 +977,11 @@
# mgv5_large_cave_flooded = 0.5
# Y-level of cavern upper limit.
-# type: int
+# type: int min: -31000 max: 31000
# mgv5_cavern_limit = -256
# Y-distance over which caverns expand to full size.
-# type: int
+# type: int min: 0 max: 32767
# mgv5_cavern_taper = 256
# Defines full size of caverns, smaller values create larger caverns.
@@ -1879,11 +989,11 @@
# mgv5_cavern_threshold = 0.7
# Lower Y limit of dungeons.
-# type: int
+# type: int min: -31000 max: 31000
# mgv5_dungeon_ymin = -31000
# Upper Y limit of dungeons.
-# type: int
+# type: int min: -31000 max: 31000
# mgv5_dungeon_ymax = 31000
### Noises
@@ -1938,7 +1048,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Second of two 3D noises that together define tunnels.
@@ -1951,7 +1061,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise defining giant caverns.
@@ -1964,7 +1074,7 @@
# octaves = 5,
# persistence = 0.63,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise defining terrain.
@@ -1990,7 +1100,7 @@
# octaves = 2,
# persistence = 0.8,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
## Mapgen V6
@@ -2012,11 +1122,11 @@
# mgv6_freq_beach = 0.15
# Lower Y limit of dungeons.
-# type: int
+# type: int min: -31000 max: 31000
# mgv6_dungeon_ymin = -31000
# Upper Y limit of dungeons.
-# type: int
+# type: int min: -31000 max: 31000
# mgv6_dungeon_ymax = 31000
### Noises
@@ -2174,22 +1284,22 @@
# mgv7_spflags = mountains,ridges,nofloatlands,caverns
# Y of mountain density gradient zero level. Used to shift mountains vertically.
-# type: int
+# type: int min: -31000 max: 31000
# mgv7_mount_zero_level = 0
# Lower Y limit of floatlands.
-# type: int
+# type: int min: -31000 max: 31000
# mgv7_floatland_ymin = 1024
# Upper Y limit of floatlands.
-# type: int
+# type: int min: -31000 max: 31000
# mgv7_floatland_ymax = 4096
# Y-distance over which floatlands taper from full density to nothing.
# Tapering starts at this distance from the Y limit.
# For a solid floatland layer, this controls the height of hills/mountains.
# Must be less than or equal to half the distance between the Y limits.
-# type: int
+# type: int min: 0 max: 32767
# mgv7_floatland_taper = 256
# Exponent of the floatland tapering. Alters the tapering behaviour.
@@ -2219,7 +1329,7 @@
# required value depending on 'mgv7_np_floatland'), to avoid
# server-intensive extreme water flow and to avoid vast flooding of the
# world surface below.
-# type: int
+# type: int min: -31000 max: 31000
# mgv7_floatland_ywater = -31000
# Controls width of tunnels, a smaller value creates wider tunnels.
@@ -2229,7 +1339,7 @@
# mgv7_cave_width = 0.09
# Y of upper limit of large caves.
-# type: int
+# type: int min: -31000 max: 31000
# mgv7_large_cave_depth = -33
# Minimum limit of random number of small caves per mapchunk.
@@ -2253,11 +1363,11 @@
# mgv7_large_cave_flooded = 0.5
# Y-level of cavern upper limit.
-# type: int
+# type: int min: -31000 max: 31000
# mgv7_cavern_limit = -256
# Y-distance over which caverns expand to full size.
-# type: int
+# type: int min: 0 max: 32767
# mgv7_cavern_taper = 256
# Defines full size of caverns, smaller values create larger caverns.
@@ -2265,11 +1375,11 @@
# mgv7_cavern_threshold = 0.7
# Lower Y limit of dungeons.
-# type: int
+# type: int min: -31000 max: 31000
# mgv7_dungeon_ymin = -31000
# Upper Y limit of dungeons.
-# type: int
+# type: int min: -31000 max: 31000
# mgv7_dungeon_ymax = 31000
### Noises
@@ -2377,7 +1487,7 @@
# octaves = 5,
# persistence = 0.63,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise defining structure of river canyon walls.
@@ -2390,7 +1500,7 @@
# octaves = 4,
# persistence = 0.75,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise defining structure of floatlands.
@@ -2406,7 +1516,7 @@
# octaves = 4,
# persistence = 0.75,
# lacunarity = 1.618,
-# flags =
+# flags =
# }
# 3D noise defining giant caverns.
@@ -2419,7 +1529,7 @@
# octaves = 5,
# persistence = 0.63,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# First of two 3D noises that together define tunnels.
@@ -2432,7 +1542,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Second of two 3D noises that together define tunnels.
@@ -2445,7 +1555,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise that determines number of dungeons per mapchunk.
@@ -2458,7 +1568,7 @@
# octaves = 2,
# persistence = 0.8,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
## Mapgen Carpathian
@@ -2490,7 +1600,7 @@
# mgcarpathian_cave_width = 0.09
# Y of upper limit of large caves.
-# type: int
+# type: int min: -31000 max: 31000
# mgcarpathian_large_cave_depth = -33
# Minimum limit of random number of small caves per mapchunk.
@@ -2514,11 +1624,11 @@
# mgcarpathian_large_cave_flooded = 0.5
# Y-level of cavern upper limit.
-# type: int
+# type: int min: -31000 max: 31000
# mgcarpathian_cavern_limit = -256
# Y-distance over which caverns expand to full size.
-# type: int
+# type: int min: 0 max: 32767
# mgcarpathian_cavern_taper = 256
# Defines full size of caverns, smaller values create larger caverns.
@@ -2526,11 +1636,11 @@
# mgcarpathian_cavern_threshold = 0.7
# Lower Y limit of dungeons.
-# type: int
+# type: int min: -31000 max: 31000
# mgcarpathian_dungeon_ymin = -31000
# Upper Y limit of dungeons.
-# type: int
+# type: int min: -31000 max: 31000
# mgcarpathian_dungeon_ymax = 31000
### Noises
@@ -2701,7 +1811,7 @@
# octaves = 5,
# persistence = 0.55,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# First of two 3D noises that together define tunnels.
@@ -2714,7 +1824,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Second of two 3D noises that together define tunnels.
@@ -2727,7 +1837,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise defining giant caverns.
@@ -2740,7 +1850,7 @@
# octaves = 5,
# persistence = 0.63,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise that determines number of dungeons per mapchunk.
@@ -2753,7 +1863,7 @@
# octaves = 2,
# persistence = 0.8,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
## Mapgen Flat
@@ -2764,11 +1874,11 @@
# mgflat_spflags = nolakes,nohills,nocaverns
# Y of flat ground.
-# type: int
+# type: int min: -31000 max: 31000
# mgflat_ground_level = 8
# Y of upper limit of large caves.
-# type: int
+# type: int min: -31000 max: 31000
# mgflat_large_cave_depth = -33
# Minimum limit of random number of small caves per mapchunk.
@@ -2818,11 +1928,11 @@
# mgflat_hill_steepness = 64.0
# Y-level of cavern upper limit.
-# type: int
+# type: int min: -31000 max: 31000
# mgflat_cavern_limit = -256
# Y-distance over which caverns expand to full size.
-# type: int
+# type: int min: 0 max: 32767
# mgflat_cavern_taper = 256
# Defines full size of caverns, smaller values create larger caverns.
@@ -2830,11 +1940,11 @@
# mgflat_cavern_threshold = 0.7
# Lower Y limit of dungeons.
-# type: int
+# type: int min: -31000 max: 31000
# mgflat_dungeon_ymin = -31000
# Upper Y limit of dungeons.
-# type: int
+# type: int min: -31000 max: 31000
# mgflat_dungeon_ymax = 31000
### Noises
@@ -2875,7 +1985,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Second of two 3D noises that together define tunnels.
@@ -2888,7 +1998,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise defining giant caverns.
@@ -2901,7 +2011,7 @@
# octaves = 5,
# persistence = 0.63,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise that determines number of dungeons per mapchunk.
@@ -2914,7 +2024,7 @@
# octaves = 2,
# persistence = 0.8,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
## Mapgen Fractal
@@ -2932,7 +2042,7 @@
# mgfractal_cave_width = 0.09
# Y of upper limit of large caves.
-# type: int
+# type: int min: -31000 max: 31000
# mgfractal_large_cave_depth = -33
# Minimum limit of random number of small caves per mapchunk.
@@ -2956,11 +2066,11 @@
# mgfractal_large_cave_flooded = 0.5
# Lower Y limit of dungeons.
-# type: int
+# type: int min: -31000 max: 31000
# mgfractal_dungeon_ymin = -31000
# Upper Y limit of dungeons.
-# type: int
+# type: int min: -31000 max: 31000
# mgfractal_dungeon_ymax = 31000
# Selects one of 18 fractal types.
@@ -2989,7 +2099,7 @@
# Increasing this increases the amount of fine detail, but also
# increases processing load.
# At iterations = 20 this mapgen has a similar load to mapgen V7.
-# type: int
+# type: int min: 1 max: 65535
# mgfractal_iterations = 11
# (X,Y,Z) scale of fractal in nodes.
@@ -3088,7 +2198,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Second of two 3D noises that together define tunnels.
@@ -3101,7 +2211,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise that determines number of dungeons per mapchunk.
@@ -3114,7 +2224,7 @@
# octaves = 2,
# persistence = 0.8,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
## Mapgen Valleys
@@ -3131,11 +2241,11 @@
# The vertical distance over which heat drops by 20 if 'altitude_chill' is
# enabled. Also the vertical distance over which humidity drops by 10 if
# 'altitude_dry' is enabled.
-# type: int
+# type: int min: 0 max: 65535
# mgvalleys_altitude_chill = 90
# Depth below which you'll find large caves.
-# type: int
+# type: int min: -31000 max: 31000
# mgvalleys_large_cave_depth = -33
# Minimum limit of random number of small caves per mapchunk.
@@ -3159,11 +2269,11 @@
# mgvalleys_large_cave_flooded = 0.5
# Depth below which you'll find giant caverns.
-# type: int
+# type: int min: -31000 max: 31000
# mgvalleys_cavern_limit = -256
# Y-distance over which caverns expand to full size.
-# type: int
+# type: int min: 0 max: 32767
# mgvalleys_cavern_taper = 192
# Defines full size of caverns, smaller values create larger caverns.
@@ -3171,11 +2281,11 @@
# mgvalleys_cavern_threshold = 0.6
# How deep to make rivers.
-# type: int
+# type: int min: 0 max: 65535
# mgvalleys_river_depth = 4
# How wide to make rivers.
-# type: int
+# type: int min: 0 max: 65535
# mgvalleys_river_size = 5
# Controls width of tunnels, a smaller value creates wider tunnels.
@@ -3185,11 +2295,11 @@
# mgvalleys_cave_width = 0.09
# Lower Y limit of dungeons.
-# type: int
+# type: int min: -31000 max: 31000
# mgvalleys_dungeon_ymin = -31000
# Upper Y limit of dungeons.
-# type: int
+# type: int min: -31000 max: 31000
# mgvalleys_dungeon_ymax = 63
### Noises
@@ -3204,7 +2314,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Second of two 3D noises that together define tunnels.
@@ -3217,7 +2327,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# The depth of dirt or other biome filler node.
@@ -3243,7 +2353,7 @@
# octaves = 6,
# persistence = 0.63,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Defines large-scale river channel structure.
@@ -3295,7 +2405,7 @@
# octaves = 6,
# persistence = 0.8,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Amplifies the valleys.
@@ -3334,18 +2444,512 @@
# octaves = 2,
# persistence = 0.8,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
+#
+# Advanced
+#
+
+## Developer Options
+
+# Enable Lua modding support on client.
+# This support is experimental and API can change.
+# type: bool
+# enable_client_modding = false
+
+# Replaces the default main menu with a custom one.
+# type: string
+# main_menu_script =
+
+### Mod Security
+
+# Prevent mods from doing insecure things like running shell commands.
+# type: bool
+# secure.enable_security = true
+
+# Comma-separated list of trusted mods that are allowed to access insecure
+# functions even when mod security is on (via request_insecure_environment()).
+# type: string
+# secure.trusted_mods =
+
+# Comma-separated list of mods that are allowed to access HTTP APIs, which
+# allow them to upload and download data to/from the internet.
+# type: string
+# secure.http_mods =
+
+### Debugging
+
+# Level of logging to be written to debug.txt:
+# - <nothing> (no logging)
+# - none (messages with no level)
+# - error
+# - warning
+# - action
+# - info
+# - verbose
+# - trace
+# type: enum values: , none, error, warning, action, info, verbose, trace
+# debug_log_level = action
+
+# If the file size of debug.txt exceeds the number of megabytes specified in
+# this setting when it is opened, the file is moved to debug.txt.1,
+# deleting an older debug.txt.1 if it exists.
+# debug.txt is only moved if this setting is positive.
+# type: int min: 1
+# debug_log_size_max = 50
+
+# Minimal level of logging to be written to chat.
+# type: enum values: , none, error, warning, action, info, verbose, trace
+# chat_log_level = error
+
+# Handling for deprecated Lua API calls:
+# - none: Do not log deprecated calls
+# - log: mimic and log backtrace of deprecated call (default).
+# - error: abort on usage of deprecated call (suggested for mod developers).
+# type: enum values: none, log, error
+# deprecated_lua_api_handling = log
+
+# Enable random user input (only used for testing).
+# type: bool
+# random_input = false
+
+# Enable mod channels support.
+# type: bool
+# enable_mod_channels = false
+
+### Mod Profiler
+
+# Load the game profiler to collect game profiling data.
+# Provides a /profiler command to access the compiled profile.
+# Useful for mod developers and server operators.
+# type: bool
+# profiler.load = false
+
+# The default format in which profiles are being saved,
+# when calling `/profiler save [format]` without format.
+# type: enum values: txt, csv, lua, json, json_pretty
+# profiler.default_report_format = txt
+
+# The file path relative to your worldpath in which profiles will be saved to.
+# type: string
+# profiler.report_path = ""
+
+# Instrument the methods of entities on registration.
+# type: bool
+# instrument.entity = true
+
+# Instrument the action function of Active Block Modifiers on registration.
+# type: bool
+# instrument.abm = true
+
+# Instrument the action function of Loading Block Modifiers on registration.
+# type: bool
+# instrument.lbm = true
+
+# Instrument chat commands on registration.
+# type: bool
+# instrument.chatcommand = true
+
+# Instrument global callback functions on registration.
+# (anything you pass to a minetest.register_*() function)
+# type: bool
+# instrument.global_callback = true
+
+# Instrument builtin.
+# This is usually only needed by core/builtin contributors
+# type: bool
+# instrument.builtin = false
+
+# Have the profiler instrument itself:
+# * Instrument an empty function.
+# This estimates the overhead, that instrumentation is adding (+1 function call).
+# * Instrument the sampler being used to update the statistics.
+# type: bool
+# instrument.profiler = false
+
+### Engine profiler
+
+# Print the engine's profiling data in regular intervals (in seconds).
+# 0 = disable. Useful for developers.
+# type: int min: 0
+# profiler_print_interval = 0
+
## Advanced
+# Enable IPv6 support (for both client and server).
+# Required for IPv6 connections to work at all.
+# type: bool
+# enable_ipv6 = true
+
+# If enabled, invalid world data won't cause the server to shut down.
+# Only enable this if you know what you are doing.
+# type: bool
+# ignore_world_load_errors = false
+
+### Graphics
+
+# Path to shader directory. If no path is defined, default location will be used.
+# type: path
+# shader_path =
+
+# 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: opengl, ogles1, ogles2
+# video_driver = opengl
+
+# Distance in nodes at which transparency depth sorting is enabled
+# Use this to limit the performance impact of transparency depth sorting
+# type: int min: 0 max: 128
+# transparency_sorting_distance = 16
+
+# Enable vertex buffer objects.
+# This should greatly improve graphics performance.
+# type: bool
+# enable_vbo = true
+
+# Radius of cloud area stated in number of 64 node cloud squares.
+# Values larger than 26 will start to produce sharp cutoffs at cloud area corners.
+# type: int min: 1 max: 62
+# cloud_radius = 12
+
+# Whether node texture animations should be desynchronized per mapblock.
+# type: bool
+# desynchronize_mapblock_texture_animation = true
+
+# Enables caching of facedir rotated meshes.
+# type: bool
+# enable_mesh_cache = false
+
+# Delay between mesh updates on the client in ms. Increasing this will slow
+# down the rate of mesh updates, thus reducing jitter on slower clients.
+# type: int min: 0 max: 50
+# mesh_generation_interval = 0
+
+# Size of the MapBlock cache of the mesh generator. Increasing this will
+# increase the cache hit %, reducing the data being copied from the main
+# thread, thus reducing jitter.
+# type: int min: 0 max: 1000
+# meshgen_block_cache_size = 20
+
+# True = 256
+# False = 128
+# Usable to make minimap smoother on slower machines.
+# type: bool
+# minimap_double_scan_height = true
+
+# Textures on a node may be aligned either to the node or to the world.
+# The former mode suits better things like machines, furniture, etc., while
+# the latter makes stairs and microblocks fit surroundings better.
+# However, as this possibility is new, thus may not be used by older servers,
+# this option allows enforcing it for certain node types. Note though that
+# that is considered EXPERIMENTAL and may not work properly.
+# type: enum values: disable, enable, force_solid, force_nodebox
+# world_aligned_mode = enable
+
+# World-aligned textures may be scaled to span several nodes. However,
+# the server may not send the scale you want, especially if you use
+# a specially-designed texture pack; with this option, the client tries
+# to determine the scale automatically basing on the texture size.
+# See also texture_min_size.
+# Warning: This option is EXPERIMENTAL!
+# type: enum values: disable, enable, force
+# autoscale_mode = disable
+
+### Font
+
+# type: bool
+# font_bold = false
+
+# type: bool
+# font_italic = false
+
+# Shadow offset (in pixels) of the default font. If 0, then shadow will not be drawn.
+# type: int min: 0 max: 65535
+# font_shadow = 1
+
+# Opaqueness (alpha) of the shadow behind the default font, between 0 and 255.
+# type: int min: 0 max: 255
+# font_shadow_alpha = 127
+
+# Font size of the default font where 1 unit = 1 pixel at 96 DPI
+# type: int min: 5 max: 72
+# font_size = 16
+
+# 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
+
+# type: filepath
+# font_path_bold = fonts/Arimo-Bold.ttf
+
+# type: filepath
+# font_path_italic = fonts/Arimo-Italic.ttf
+
+# type: filepath
+# 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: 5 max: 72
+# mono_font_size = 16
+
+# 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_divisible_by = 1
+
+# 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
+
+# type: filepath
+# mono_font_path_bold = fonts/Cousine-Bold.ttf
+
+# type: filepath
+# mono_font_path_italic = fonts/Cousine-Italic.ttf
+
+# type: filepath
+# mono_font_path_bold_italic = fonts/Cousine-BoldItalic.ttf
+
+# 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
+
+### Lighting
+
+# Gradient of light curve at minimum light level.
+# Controls the contrast of the lowest light levels.
+# type: float min: 0 max: 3
+# lighting_alpha = 0.0
+
+# Gradient of light curve at maximum light level.
+# Controls the contrast of the highest light levels.
+# type: float min: 0 max: 3
+# lighting_beta = 1.5
+
+# Strength of light curve boost.
+# The 3 'boost' parameters define a range of the light
+# curve that is boosted in brightness.
+# type: float min: 0 max: 0.4
+# lighting_boost = 0.2
+
+# Center of light curve boost range.
+# Where 0.0 is minimum light level, 1.0 is maximum light level.
+# type: float min: 0 max: 1
+# lighting_boost_center = 0.5
+
+# Spread of light curve boost range.
+# Controls the width of the range to be boosted.
+# Standard deviation of the light curve boost Gaussian.
+# type: float min: 0 max: 0.4
+# lighting_boost_spread = 0.2
+
+### Networking
+
+# Prometheus listener address.
+# If Minetest is compiled with ENABLE_PROMETHEUS option enabled,
+# enable metrics listener for Prometheus on that address.
+# Metrics can be fetched on http://127.0.0.1:30000/metrics
+# type: string
+# prometheus_listener_address = 127.0.0.1:30000
+
+# Maximum size of the out chat queue.
+# 0 to disable queueing and -1 to make the queue size unlimited.
+# type: int min: -1 max: 32767
+# max_out_chat_queue_size = 20
+
+# Timeout for client to remove unused map data from memory, in seconds.
+# type: float min: 0
+# client_unload_unused_data_timeout = 600.0
+
+# Maximum number of mapblocks for client to be kept in memory.
+# Set to -1 for unlimited amount.
+# type: int min: -1 max: 2147483647
+# client_mapblock_limit = 7500
+
+# Whether to show the client debug info (has the same effect as hitting F5).
+# type: bool
+# show_debug = false
+
+# Maximum number of blocks that are simultaneously sent per client.
+# The maximum total count is calculated dynamically:
+# max_total = ceil((#clients + max_users) * per_client / 4)
+# type: int min: 1 max: 4294967295
+# max_simultaneous_block_sends_per_client = 40
+
+# To reduce lag, block transfers are slowed down when a player is building something.
+# This determines how long they are slowed down after placing or removing a node.
+# type: float min: 0
+# full_block_send_enable_min_time_from_building = 2.0
+
+# Maximum number of packets sent per send step, if you have a slow connection
+# try reducing it, but don't reduce it to a number below double of targeted
+# client number.
+# type: int min: 1 max: 65535
+# max_packets_per_iteration = 1024
+
+# Compression level to use when sending mapblocks to the client.
+# -1 - use default compression level
+# 0 - least compression, fastest
+# 9 - best compression, slowest
+# type: int min: -1 max: 9
+# map_compression_level_net = -1
+
+### Server
+
+# Format of player chat messages. The following strings are valid placeholders:
+# @name, @message, @timestamp (optional)
+# 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 min: 0
+# 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.
+
+# A message to be displayed to all clients when the server crashes.
+# type: string
+# kick_msg_crash = This server has experienced an internal error. You will now be disconnected.
+
+# Whether to ask clients to reconnect after a (Lua) crash.
+# Set this to true if your server is set up to restart automatically.
+# type: bool
+# ask_reconnect_on_crash = false
+
+### Server/Env Performance
+
+# Length of a server tick and the interval at which objects are generally updated over
+# network, stated in seconds.
+# type: float min: 0
+# dedicated_server_step = 0.09
+
+# Whether players are shown to clients without any range limit.
+# Deprecated, use the setting player_transfer_distance instead.
+# type: bool
+# unlimited_player_transfer_distance = true
+
+# Defines the maximal player transfer distance in blocks (0 = unlimited).
+# type: int min: 0 max: 65535
+# player_transfer_distance = 0
+
+# From how far clients know about objects, stated in mapblocks (16 nodes).
+#
+# Setting this larger than active_block_range will also cause the server
+# to maintain active objects up to this distance in the direction the
+# player is looking. (This can avoid mobs suddenly disappearing from view)
+# type: int min: 1 max: 65535
+# active_object_send_range_blocks = 8
+
+# The radius of the volume of blocks around every player that is subject to the
+# active block stuff, stated in mapblocks (16 nodes).
+# In active blocks objects are loaded and ABMs run.
+# This is also the minimum range in which active objects (mobs) are maintained.
+# This should be configured together with active_object_send_range_blocks.
+# type: int min: 1 max: 65535
+# active_block_range = 4
+
+# From how far blocks are sent to clients, stated in mapblocks (16 nodes).
+# type: int min: 1 max: 65535
+# max_block_send_distance = 12
+
+# Maximum number of forceloaded mapblocks.
+# type: int min: 0
+# max_forceloaded_blocks = 16
+
+# Interval of sending time of day to clients, stated in seconds.
+# type: float min: 0.001
+# time_send_interval = 5.0
+
+# Interval of saving important changes in the world, stated in seconds.
+# type: float min: 0.001
+# server_map_save_interval = 5.3
+
+# How long the server will wait before unloading unused mapblocks, stated in seconds.
+# Higher value is smoother, but will use more RAM.
+# type: int min: 0 max: 4294967295
+# server_unload_unused_data_timeout = 29
+
+# Maximum number of statically stored objects in a block.
+# type: int min: 1 max: 65535
+# max_objects_per_block = 256
+
+# Length of time between active block management cycles, stated in seconds.
+# type: float min: 0
+# active_block_mgmt_interval = 2.0
+
+# Length of time between Active Block Modifier (ABM) execution cycles, stated in seconds.
+# type: float min: 0
+# abm_interval = 1.0
+
+# The time budget allowed for ABMs to execute on each step
+# (as a fraction of the ABM Interval)
+# type: float min: 0.1 max: 0.9
+# abm_time_budget = 0.2
+
+# Length of time between NodeTimer execution cycles, stated in seconds.
+# type: float min: 0
+# nodetimer_interval = 0.2
+
+# Max liquids processed per step.
+# type: int min: 1 max: 4294967295
+# liquid_loop_max = 100000
+
+# The time (in seconds) that the liquids queue may grow beyond processing
+# capacity until an attempt is made to decrease its size by dumping old queue
+# items. A value of 0 disables the functionality.
+# type: int min: 0 max: 65535
+# liquid_queue_purge_time = 0
+
+# Liquid update interval in seconds.
+# type: float min: 0.001
+# liquid_update = 1.0
+
+# At this distance the server will aggressively optimize which blocks are sent to
+# clients.
+# Small values potentially improve performance a lot, at the expense of visible
+# rendering glitches (some blocks will not be rendered under water and in caves,
+# as well as sometimes on land).
+# Setting this to a value greater than max_block_send_distance disables this
+# optimization.
+# Stated in mapblocks (16 nodes).
+# type: int min: 2 max: 32767
+# block_send_optimize_distance = 4
+
+# If enabled the server will perform map block occlusion culling based on
+# on the eye position of the player. This can reduce the number of blocks
+# sent to the client 50-80%. The client will not longer receive most invisible
+# so that the utility of noclip mode is reduced.
+# type: bool
+# server_side_occlusion_culling = true
+
+### Mapgen
+
# Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).
# WARNING!: There is no benefit, and there are several dangers, in
# increasing this value above 5.
# Reducing this value increases cave and dungeon density.
# Altering this value is for special usage, leaving it unchanged is
# recommended.
-# type: int
+# type: int min: 1 max: 10
# chunksize = 5
# Dump the mapgen debug information.
@@ -3376,28 +2980,545 @@
# speed, but this may harm game performance by interfering with other
# processes, especially in singleplayer and/or when running Lua code in
# 'on_generated'. For many users the optimum setting may be '1'.
-# type: int
+# type: int min: 0 max: 32767
# num_emerge_threads = 1
-#
-# Online Content Repository
-#
+### cURL
-# The URL for the content repository
+# Maximum time an interactive request (e.g. server list fetch) may take, stated in milliseconds.
+# type: int min: 100 max: 2147483647
+# curl_timeout = 20000
+
+# Limits number of parallel HTTP requests. Affects:
+# - Media fetch if server uses remote_media setting.
+# - Serverlist download and server announcement.
+# - Downloads performed by main menu (e.g. mod manager).
+# Only has an effect if compiled with cURL.
+# type: int min: 1 max: 2147483647
+# curl_parallel_limit = 8
+
+# Maximum time a file download (e.g. a mod download) may take, stated in milliseconds.
+# type: int min: 100 max: 2147483647
+# curl_file_download_timeout = 300000
+
+### Misc
+
+# Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens.
+# type: int min: 1
+# screen_dpi = 72
+
+# Adjust the detected display density, used for scaling UI elements.
+# type: float min: 0.5 max: 5
+# 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
+# enable_console = false
+
+# Number of extra blocks that can be loaded by /clearobjects at once.
+# This is a trade-off between SQLite transaction overhead and
+# memory consumption (4096=100MB, as a rule of thumb).
+# type: int min: 0 max: 4294967295
+# max_clearobjects_extra_loaded_blocks = 4096
+
+# World directory (everything in the world is stored here).
+# Not needed if starting from the main menu.
+# type: path
+# map-dir =
+
+# See https://www.sqlite.org/pragma.html#pragma_synchronous
+# type: enum values: 0, 1, 2
+# sqlite_synchronous = 2
+
+# Compression level to use when saving mapblocks to disk.
+# -1 - use default compression level
+# 0 - least compression, fastest
+# 9 - best compression, slowest
+# type: int min: -1 max: 9
+# map_compression_level_disk = -1
+
+# Enable usage of remote media server (if provided by server).
+# Remote servers offer a significantly faster way to download media (e.g. textures)
+# when connecting to the server.
+# type: bool
+# enable_remote_media_server = true
+
+# File in client/serverlist/ that contains your favorite servers displayed in the
+# Multiplayer Tab.
# type: string
-# contentdb_url = https://content.minetest.net
+# serverlist_file = favoriteservers.json
-# Comma-separated list of flags to hide in the content repository.
-# "nonfree" can be used to hide packages which do not qualify as 'free software',
-# as defined by the Free Software Foundation.
-# You can also specify content ratings.
-# These flags are independent from Minetest versions,
-# so see a full list at https://content.minetest.net/help/content_flags/
+## Gamepads
+
+# Enable joysticks. Requires a restart to take effect
+# type: bool
+# enable_joysticks = false
+
+# The identifier of the joystick to use
+# type: int min: 0 max: 255
+# joystick_id = 0
+
+# The type of joystick
+# type: enum values: auto, generic, xbox, dragonrise_gamecube
+# joystick_type = auto
+
+# The time in seconds it takes between repeated events
+# when holding down a joystick button combination.
+# type: float min: 0.001
+# repeat_joystick_button_time = 0.17
+
+# The dead zone of the joystick
+# type: int min: 0 max: 65535
+# joystick_deadzone = 2048
+
+# The sensitivity of the joystick axes for moving the
+# in-game view frustum around.
+# type: float min: 0.001
+# joystick_frustum_sensitivity = 170.0
+
+## Temporary Settings
+
+# Path to texture directory. All textures are first searched from here.
+# type: path
+# texture_path =
+
+# Enables minimap.
+# type: bool
+# enable_minimap = true
+
+# Shape of the minimap. Enabled = round, disabled = square.
+# type: bool
+# minimap_shape_round = true
+
+# Address to connect to.
+# Leave this blank to start a local server.
+# Note that the address field in the main menu overrides this setting.
# type: string
-# contentdb_flag_blacklist = nonfree, desktop_default
+# address =
-# Maximum number of concurrent downloads. Downloads exceeding this limit will be queued.
-# This should be lower than curl_parallel_limit.
-# type: int
-# contentdb_max_concurrent_downloads = 3
+# Port to connect to (UDP).
+# Note that the port field in the main menu overrides this setting.
+# type: int min: 1 max: 65535
+# remote_port = 30000
+
+# Default game when creating a new world.
+# This will be overridden when creating a world from the main menu.
+# type: string
+# default_game = minetest
+
+# Enable players getting damage and dying.
+# type: bool
+# enable_damage = false
+
+# Enable creative mode for all players
+# type: bool
+# creative_mode = false
+
+# Whether to allow players to damage and kill each other.
+# type: bool
+# enable_pvp = true
+
+# Player is able to fly without being affected by gravity.
+# This requires the "fly" privilege on the server.
+# type: bool
+# free_move = false
+
+# If enabled, makes move directions relative to the player's pitch when flying or swimming.
+# type: bool
+# pitch_move = false
+
+# Fast movement (via the "Aux1" key).
+# This requires the "fast" privilege on the server.
+# type: bool
+# fast_move = false
+
+# If enabled together with fly mode, player is able to fly through solid nodes.
+# This requires the "noclip" privilege on the server.
+# type: bool
+# noclip = false
+
+# Continuous forward movement, toggled by autoforward key.
+# Press the autoforward key again or the backwards movement to disable.
+# type: bool
+# continuous_forward = false
+
+# Formspec default background opacity (between 0 and 255).
+# type: int min: 0 max: 255
+# formspec_default_bg_opacity = 140
+
+# Formspec default background color (R,G,B).
+# type: string
+# formspec_default_bg_color = (0,0,0)
+
+# Whether to show technical names.
+# Affects mods and texture packs in the Content and Select Mods menus, as well as
+# setting names in All Settings.
+# Controlled by the checkbox in the "All settings" menu.
+# type: bool
+# show_technical_names = false
+
+# Enables the sound system.
+# If disabled, this completely disables all sounds everywhere and the in-game
+# sound controls will be non-functional.
+# Changing this setting requires a restart.
+# type: bool
+# enable_sound = true
+
+# Key for moving the player forward.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_forward = KEY_KEY_W
+
+# Key for moving the player backward.
+# Will also disable autoforward, when active.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_backward = KEY_KEY_S
+
+# Key for moving the player left.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_left = KEY_KEY_A
+
+# Key for moving the player right.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_right = KEY_KEY_D
+
+# Key for jumping.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_jump = KEY_SPACE
+
+# Key for sneaking.
+# Also used for climbing down and descending in water if aux1_descends is disabled.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_sneak = KEY_LSHIFT
+
+# Key for digging.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_dig = KEY_LBUTTON
+
+# Key for placing.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_place = KEY_RBUTTON
+
+# Key for opening the inventory.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_inventory = KEY_KEY_I
+
+# Key for moving fast in fast mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_aux1 = KEY_KEY_E
+
+# Key for opening the chat window.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_chat = KEY_KEY_T
+
+# Key for opening the chat window to type commands.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_cmd = /
+
+# Key for opening the chat window to type local commands.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_cmd_local = .
+
+# Key for toggling unlimited view range.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_rangeselect = KEY_KEY_R
+
+# Key for toggling flying.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_freemove = KEY_KEY_K
+
+# Key for toggling pitch move mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_pitchmove = KEY_KEY_P
+
+# Key for toggling fast mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_fastmove = KEY_KEY_J
+
+# Key for toggling noclip mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_noclip = KEY_KEY_H
+
+# Key for selecting the next item in the hotbar.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_hotbar_next = KEY_KEY_N
+
+# Key for selecting the previous item in the hotbar.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_hotbar_previous = KEY_KEY_B
+
+# Key for muting the game.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_mute = KEY_KEY_M
+
+# Key for increasing the volume.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_increase_volume =
+
+# Key for decreasing the volume.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_decrease_volume =
+
+# Key for toggling autoforward.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_autoforward =
+
+# Key for toggling cinematic mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_cinematic =
+
+# Key for toggling display of minimap.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_minimap = KEY_KEY_V
+
+# Key for taking screenshots.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_screenshot = KEY_F12
+
+# Key for dropping the currently selected item.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_drop = KEY_KEY_Q
+
+# Key to use view zoom when possible.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_zoom = KEY_KEY_Z
+
+# Key for selecting the first hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot1 = KEY_KEY_1
+
+# Key for selecting the second hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot2 = KEY_KEY_2
+
+# Key for selecting the third hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot3 = KEY_KEY_3
+
+# Key for selecting the fourth hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot4 = KEY_KEY_4
+
+# Key for selecting the fifth hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot5 = KEY_KEY_5
+
+# Key for selecting the sixth hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot6 = KEY_KEY_6
+
+# Key for selecting the seventh hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot7 = KEY_KEY_7
+
+# Key for selecting the eighth hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot8 = KEY_KEY_8
+
+# Key for selecting the ninth hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot9 = KEY_KEY_9
+
+# Key for selecting the tenth hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot10 = KEY_KEY_0
+
+# Key for selecting the 11th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot11 =
+
+# Key for selecting the 12th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot12 =
+
+# Key for selecting the 13th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot13 =
+
+# Key for selecting the 14th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot14 =
+
+# Key for selecting the 15th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot15 =
+
+# Key for selecting the 16th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot16 =
+
+# Key for selecting the 17th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot17 =
+
+# Key for selecting the 18th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot18 =
+
+# Key for selecting the 19th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot19 =
+
+# Key for selecting the 20th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot20 =
+
+# Key for selecting the 21st hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot21 =
+
+# Key for selecting the 22nd hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot22 =
+
+# Key for selecting the 23rd hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot23 =
+
+# Key for selecting the 24th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot24 =
+
+# Key for selecting the 25th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot25 =
+
+# Key for selecting the 26th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot26 =
+
+# Key for selecting the 27th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot27 =
+
+# Key for selecting the 28th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot28 =
+
+# Key for selecting the 29th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot29 =
+
+# Key for selecting the 30th hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot30 =
+
+# Key for selecting the 31st hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot31 =
+
+# Key for selecting the 32nd hotbar slot.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_slot32 =
+
+# Key for toggling the display of the HUD.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_toggle_hud = KEY_F1
+
+# Key for toggling the display of chat.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_toggle_chat = KEY_F2
+
+# Key for toggling the display of the large chat console.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_console = KEY_F10
+
+# Key for toggling the display of fog.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_toggle_force_fog_off = KEY_F3
+
+# Key for toggling the camera update. Only used for development
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_toggle_update_camera =
+
+# Key for toggling the display of debug info.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_toggle_debug = KEY_F5
+
+# Key for toggling the display of the profiler. Used for development.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_toggle_profiler = KEY_F6
+
+# Key for switching between first- and third-person camera.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_camera_mode = KEY_KEY_C
+
+# Key for increasing the viewing range.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_increase_viewing_range_min = +
+
+# Key for decreasing the viewing range.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_decrease_viewing_range_min = -
diff --git a/misc/irrlichtmt_tag.txt b/misc/irrlichtmt_tag.txt
new file mode 100644
index 000000000..2684ddfde
--- /dev/null
+++ b/misc/irrlichtmt_tag.txt
@@ -0,0 +1 @@
+1.9.0mt7
diff --git a/misc/net.minetest.minetest.appdata.xml b/misc/net.minetest.minetest.appdata.xml
index f9bc91dc9..339f3d006 100644
--- a/misc/net.minetest.minetest.appdata.xml
+++ b/misc/net.minetest.minetest.appdata.xml
@@ -11,26 +11,44 @@
</content_rating>
<name>Minetest</name>
<summary>Multiplayer infinite-world block sandbox game</summary>
+ <summary xml:lang="de">Mehrspieler-Sandkastenspiel mit unendlichen Blockwelten</summary>
<description>
<p>
Minetest is an infinite-world block sandbox game and game engine.
+ </p><p xml:lang="de">
+ Minetest ist ein Sandkastenspiel und eine Spielengine mit unendlichen Welten.
</p><p>
Players can create and destroy various types of blocks in a
three-dimensional open world. This allows forming structures in
every possible creation, on multiplayer servers or in singleplayer.
+ </p><p xml:lang="de">
+ Spieler können in einer offenen 3D-Welt viele verschiedene Arten von
+ Blöcken platzieren und abbauen. Dies erlaubt das Bauen von vielfältigen
+ Strukturen im Einzelspieler oder auf Mehrspielerservern.
</p><p>
Minetest is designed to be simple, stable, and portable.
It is lightweight enough to run on fairly old hardware.
+ </p><p xml:lang="de">
+ Minetest wurde entworfen, um einfach, stabil und portabel zu sein.
+ Es ist leichtgewichtig genug, um auf relativ alter Hardware zu laufen.
</p><p>
Minetest has many features, including:
+ </p><p xml:lang="de">
+ Minetest besitzt viele Features, unter anderem:
</p>
<ul>
<li>Ability to walk around, dig, and build in a near-infinite voxel world</li>
+ <li xml:lang="de">Die Möglichkeit, in einer nahezu unendlichen Voxel-Welt herumzulaufen, zu graben und zu bauen</li>
<li>Crafting of items from raw materials</li>
+ <li xml:lang="de">Fertigen von Items aus Rohmaterialien</li>
<li>Fast and able to run on old and slow hardware</li>
+ <li xml:lang="de">Gute Performance selbst auf älterer und langsamer Hardware</li>
<li>A simple modding API that supports many additions and modifications to the game</li>
+ <li xml:lang="de">Eine einfache Modding-API, die viele Ergänzungen und Änderungen am Spiel unterstützt</li>
<li>Multiplayer support via servers hosted by users</li>
+ <li xml:lang="de">Mehrspieler auf selber gehosteten Servern</li>
<li>Beautiful lightning-fast map generator</li>
+ <li xml:lang="de">Wunderschöner, blitzschneller Kartengenerator</li>
</ul>
</description>
<screenshots>
@@ -50,18 +68,20 @@
<keyword>mining</keyword>
<keyword>multiplayer</keyword>
</keywords>
- <url type="homepage">http://minetest.net</url>
- <url type="bugtracker">http://www.minetest.net/development/#reporting-issues</url>
- <url type="translate">http://dev.minetest.net/Translation</url>
- <url type="donation">http://www.minetest.net/development/#donate</url>
- <url type="faq">http://wiki.minetest.net/FAQ</url>
- <url type="help">http://wiki.minetest.net</url>
+ <url type="homepage">https://www.minetest.net</url>
+ <url type="bugtracker">https://www.minetest.net/development/#reporting-issues</url>
+ <url type="translate">https://dev.minetest.net/Translation</url>
+ <url type="donation">https://www.minetest.net/development/#donate</url>
+ <url type="faq">https://wiki.minetest.net/FAQ</url>
+ <url type="help">https://wiki.minetest.net</url>
+ <url type="vcs-browser">https://github.com/minetest/minetest</url>
+ <url type="contribute">https://www.minetest.net/get-involved/</url>
<provides>
<binary>minetest</binary>
</provides>
<translation type="gettext">minetest</translation>
<update_contact>sfan5@live.de</update_contact>
<releases>
- <release date="2022-05-15" version="5.5.1"/>
+ <release date="2022-08-04" version="5.6.0"/>
</releases>
</component>
diff --git a/mods/mods_here.txt b/mods/mods_here.txt
index e105fbd1a..e14b7539e 100644
--- a/mods/mods_here.txt
+++ b/mods/mods_here.txt
@@ -1,4 +1,10 @@
+You can use the content tab in the main menu
+
+ OR
+
You can install Minetest mods by copying (and extracting) them into this folder.
To enable them, go to the configure world window in the main menu or write
+
load_mod_<modname> = true
-in world.mt in the world directory.
+
+in world.mt in the world directory.
diff --git a/po/ar/minetest.po b/po/ar/minetest.po
index fc4891024..55ba0af16 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: 2022-01-25 23:19+0100\n"
-"PO-Revision-Date: 2021-12-05 13:51+0000\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-03-18 02:57+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,7 @@ 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.10-dev\n"
+"X-Generator: Weblate 4.12-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -119,6 +119,31 @@ msgid "The server has requested a reconnect:"
msgstr "يطلب الخادم إعادة الإتصال:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "اختر التعديلات"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "لا تتطابق نسخ Ø§Ù„Ù…ÙŠÙØ§Ù‚. "
@@ -131,6 +156,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "الخادم يدعم نسخ Ø§Ù„Ù…ÙŠÙØ§Ù‚ ما بين $1 Ùˆ $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "نحن ندعم نسخة Ø§Ù„Ù…ÙŠÙØ§Ù‚ $1Ùقط."
@@ -138,14 +167,21 @@ msgstr "نحن ندعم نسخة Ø§Ù„Ù…ÙŠÙØ§Ù‚ $1Ùقط."
msgid "We support protocol versions between version $1 and $2."
msgstr "نحن ندعم نسخ Ø§Ù„Ù…ÙŠÙØ§Ù‚ ما بين $1 Ùˆ $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "ألغÙ"
@@ -284,7 +320,6 @@ msgid "Failed to download $1"
msgstr "ÙØ´Ù„ تحميل $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "الألعاب"
@@ -301,12 +336,10 @@ msgid "Install missing dependencies"
msgstr "ثبت الإعتماديات المÙقودة"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install: Unsupported file type or broken archive"
-msgstr "يثبت: نوع المل٠\"$1\" غير مدعوم أو هو أرشي٠تالÙ"
+msgstr "التثبيت: نوع المل٠غير مدعوم أو هو أرشي٠تالÙ"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "التعديلات"
@@ -399,12 +432,9 @@ msgid "Decorations"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "نزّÙÙ„ لعبة,مثل لعبة Minetest, من minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "نزÙّل لعبة من minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "تحذير: إختبار التطور موجه للمطورين."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -422,10 +452,6 @@ msgstr "أرض عائمة ÙÙŠ السماء"
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 "ولد تضاريس غير كسورية: محيطات وباطن الأرض"
@@ -443,6 +469,15 @@ msgid "Increases humidity around rivers"
msgstr "Ø²ÙØ¯ الرطوبة قرب الأنهار"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "ثبت $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "بحيرات"
@@ -542,10 +577,6 @@ 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 "إسم العالم"
@@ -575,6 +606,38 @@ msgstr "مدير الحزم: المسار \"$1\" غير صالح"
msgid "Delete World \"$1\"?"
msgstr "حذ٠العالم \"$1\"؟"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "أكد كلمة المرور"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "الاسم"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "كلمة المرور"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "كلمتا المرور غير متطابقتين!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "سجل وادخل"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "أقبل"
@@ -606,6 +669,16 @@ msgstr "< عد Ù„ØµÙØ­Ø© الإعدادات"
msgid "Browse"
msgstr "استعرض"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "المحتوى"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "المحتوى"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "عطÙّل"
@@ -663,7 +736,7 @@ msgstr "إختر الدليل"
msgid "Select file"
msgstr "إختر ملÙ"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "إعرض الأسماء التقنية"
@@ -811,6 +884,10 @@ msgstr "المساهمون السابقون"
msgid "Previous Core Developers"
msgstr "المطورون الرئيسيون السابقون"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "ØªØµÙØ­ المحتوى عبر الانترنت"
@@ -880,10 +957,6 @@ msgstr "استض٠خدوم"
msgid "Install games from ContentDB"
msgstr "ثبت العابا من ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "الاسم"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "جديد"
@@ -892,10 +965,6 @@ msgstr "جديد"
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 "إلعب"
@@ -929,10 +998,6 @@ msgid "Clear"
msgstr "امسح"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "اتصل"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "النمط الإبداعي"
@@ -942,10 +1007,6 @@ msgid "Damage / PvP"
msgstr "الضرر / قتال اللاعبين"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Ø­Ø°Ù Ø§Ù„Ù…ÙØ¶Ù„Ø©"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Ø§Ù„Ù…ÙØ¶Ù„Ø©"
@@ -958,6 +1019,10 @@ msgid "Join Game"
msgstr "انضم للعبة"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
@@ -970,10 +1035,19 @@ msgid "Refresh"
msgstr "Ø­Ø¯Ù‘ÙØ«"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Ø­Ø°Ù Ø§Ù„Ù…ÙØ¶Ù„Ø©"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "وص٠الخادم"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1018,7 +1092,8 @@ msgid "Dynamic shadows"
msgstr "ظلال ديناميكية"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "ظلال ديناميكية: "
#: builtin/mainmenu/tab_settings.lua
@@ -1114,7 +1189,8 @@ msgid "Tone Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "حساسية اللمس: (بكسل)"
#: builtin/mainmenu/tab_settings.lua
@@ -1122,7 +1198,8 @@ msgid "Trilinear Filter"
msgstr "مرشح خطي ثلاثي"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+#, fuzzy
+msgid "Very High"
msgstr "عالية جدا"
#: builtin/mainmenu/tab_settings.lua
@@ -1141,6 +1218,11 @@ msgstr "سوائل متموجة"
msgid "Waving Plants"
msgstr "نباتات متموجة"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "خطأ ÙÙŠ الاتصال (انتهاء المهلة؟)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "انتهت مهلة الاتصال."
@@ -1277,7 +1359,8 @@ msgid "Camera update enabled"
msgstr "تحديث الكاميرا Ù…ÙØ¹Ù„"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr "تعذر إظهار حدود الكتل ( تحتاج امتياز 'basic_debug')"
#: src/client/game.cpp
@@ -1407,6 +1490,11 @@ msgid "Enabled unlimited viewing range"
msgstr "مدى الرؤية غير المحدود Ù…ÙØ¹Ù„"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "ينشىء عميلا…"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "اخرج للقائمة"
@@ -1958,27 +2046,6 @@ msgstr "ÙØ´Ù„ ÙØªØ­ ØµÙØ­Ø© الويب"
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 ""
-"أنت على وشك دخول هذا الخادوم للمرة الأولى باسم \"%s\".\n"
-"اذا رغبت بالاستمرار سيتم إنشاء حساب جديد باستخدام بياناتك الاعتمادية.\n"
-"لتأكيد التسجيل ادخل كلمة مرورك وانقر 'سجل وادخل'، أو 'ألغ' للإلغاء."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "تابع"
@@ -2011,7 +2078,7 @@ msgstr "حدود الكتلة"
msgid "Change camera"
msgstr "غير الكاميرا"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "دردشة"
@@ -2064,7 +2131,7 @@ msgid "Key already in use"
msgstr "Ø§Ù„Ù…ÙØªØ§Ø­ مستخدم مسبقا"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -2136,10 +2203,6 @@ msgid "Change"
msgstr "ØºÙŠÙ‘ÙØ±"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "أكد كلمة المرور"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "كلمة مرور جديدة"
@@ -2147,6 +2210,10 @@ msgstr "كلمة مرور جديدة"
msgid "Old Password"
msgstr "كلمة المرور القديمة"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "كلمتا المرور غير متطابقتين!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "أخرج"
@@ -2160,12 +2227,6 @@ msgstr "مكتوم"
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 "أدخل "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2173,6 +2234,16 @@ msgstr "أدخل "
msgid "LANG_CODE"
msgstr "ar"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "يرجى اختيار اسم!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2300,6 +2371,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2385,6 +2460,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "ضمّن اسم العنصر"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "متقدم"
@@ -2404,7 +2484,7 @@ msgstr ""
"على ضوء الليل الطبيعي."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2473,6 +2553,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "زر المشي التلقائي"
@@ -2513,10 +2597,6 @@ msgid "Base terrain height."
msgstr "Ø¥Ø±ØªÙØ§Ø¹ التضاريس الأساسي."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "أساسي"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "الإمتيازات الأساسية"
@@ -2537,7 +2617,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2549,6 +2629,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "مسار الخطين العريض والمائل"
@@ -2573,6 +2657,11 @@ msgid "Builtin"
msgstr "مدمج"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+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"
@@ -2732,6 +2821,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "سرعة التسلق"
@@ -2835,6 +2928,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2871,7 +2968,9 @@ msgstr ""
"72 = 20 دقيقة ، 360 = 4 دقائق ، 1 = 24 ساعة ، 0 = نهار / ليل أبدي."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2938,12 +3037,12 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Ù…ÙØªØ§Ø­ تقليل الحجم"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "قلل منه لزيادة مقاومة الحركة ÙÙŠ السوائل."
+msgid "Dec. volume key"
+msgstr "Ù…ÙØªØ§Ø­ تقليل الحجم"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3088,6 +3187,11 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "المطورون الرئيسيون"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -3108,6 +3212,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3177,6 +3287,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3193,19 +3307,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3279,6 +3387,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3297,6 +3409,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3374,8 +3490,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "الترشيح"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "التنعييم:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3442,6 +3559,11 @@ msgid "Fog toggle key"
msgstr "Ù…ÙØªØ§Ø­ تبديل ظهور الضباب"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "حجم الخط"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "الخط عريض Ø§ÙØªØ±Ø§Ø¶ÙŠÙ‹Ø§"
@@ -3590,6 +3712,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "الألعاب"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3617,6 +3752,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3633,10 +3776,15 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "الواجهة ظاهرة"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr ""
@@ -3882,11 +4030,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "قلل منه لزيادة مقاومة الحركة ÙÙŠ السوائل."
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3955,6 +4111,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3976,7 +4138,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4016,10 +4180,6 @@ 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 ""
@@ -4070,15 +4230,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4699,6 +4855,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr "اطرد اللاعبين الذين أرسلوا أكثر من X رسالة ÙÙŠ 10 ثوانÙ."
@@ -4758,7 +4918,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4768,15 +4928,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4788,7 +4951,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4816,6 +4980,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+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"
@@ -5200,10 +5369,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5252,6 +5417,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5338,16 +5515,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5360,6 +5537,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "إبراز العقد"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5397,10 +5579,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5494,10 +5672,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5544,10 +5718,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5716,6 +5886,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "الشاشة:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5743,6 +5918,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "صوّر الشاشة"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5755,10 +5935,6 @@ 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 ""
@@ -5798,8 +5974,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr ""
+#, fuzzy
+msgid "Server"
+msgstr "استض٠خدوم"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "- اسم الخادم: "
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "وص٠الخادم"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5826,10 +6013,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Ù…Ù†ÙØ° الخدوم"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5840,12 +6036,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5853,7 +6051,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5929,7 +6127,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6130,6 +6328,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "إعدادات"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6332,7 +6535,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6356,10 +6559,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6450,6 +6661,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6683,6 +6898,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6772,6 +6996,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6798,6 +7026,9 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "Ø¹ÙØ¯"
+#~ msgid "Basic"
+#~ msgstr "أساسي"
+
#~ msgid "Bump Mapping"
#~ msgstr "خريطة النتوءات"
@@ -6807,15 +7038,33 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "اضبط"
+#~ msgid "Connect"
+#~ msgstr "اتصل"
+
#~ msgid "Credits"
#~ msgstr "إشادات"
#~ msgid "Damage enabled"
#~ msgstr "الضرر ممكن"
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "نزّÙÙ„ لعبة,مثل لعبة Minetest, من minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "نزÙّل لعبة من minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "تنزيل وتثبيت $1, يرجى الإنتظار..."
+#~ msgid "Enter "
+#~ msgstr "أدخل "
+
+#~ msgid "Filtering"
+#~ msgstr "الترشيح"
+
+#~ msgid "Game"
+#~ msgstr "اللعبة"
+
#~ msgid "Generate Normal Maps"
#~ msgstr "ÙˆÙ„ÙØ¯ خرائط عادية"
@@ -6870,6 +7119,19 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "نعم"
+#, 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 ""
+#~ "أنت على وشك دخول هذا الخادوم للمرة الأولى باسم \"%s\".\n"
+#~ "اذا رغبت بالاستمرار سيتم إنشاء حساب جديد باستخدام بياناتك الاعتمادية.\n"
+#~ "لتأكيد التسجيل ادخل كلمة مرورك وانقر 'سجل وادخل'، أو 'ألغ' للإلغاء."
+
#~ msgid "You died."
#~ msgstr "Ù…ÙØª"
diff --git a/po/be/minetest.po b/po/be/minetest.po
index d625a7c75..8fa81a04d 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: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -11,8 +11,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"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 3.10-dev\n"
#: builtin/client/chatcommands.lua
@@ -121,6 +121,31 @@ msgid "The server has requested a reconnect:"
msgstr "Сервер патрабуе перазлучыцца:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Ðбраць Ñвет:"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "ВерÑÑ–Ñ– пратакола адрозніваюцца. "
@@ -133,6 +158,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Сервер падтрымлівае верÑÑ–Ñ– пратакола паміж $1 Ñ– $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Мы падтрымліваем толькі $1 верÑÑ–ÑŽ пратакола."
@@ -140,14 +169,21 @@ msgstr "Мы падтрымліваем толькі $1 верÑÑ–ÑŽ пратаÐ
msgid "We support protocol versions between version $1 and $2."
msgstr "Мы падтрымліваем верÑÑ–Ñ– пратакола паміж $1 Ñ– $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "СкаÑаваць"
@@ -288,7 +324,6 @@ msgid "Failed to download $1"
msgstr "Ðе атрымалаÑÑ Ñпампаваць $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Гульні"
@@ -312,7 +347,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr "УÑталёўка: непадтрымліваемы файл тыпу \"$1\" або ÑапÑаваны архіў"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Мадыфікацыі"
@@ -413,12 +447,10 @@ msgid "Decorations"
msgstr "ІтÑрацыі"
#: builtin/mainmenu/dlg_create_world.lua
-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"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr ""
+"Увага: \"The minimal development test\" прызначаны толькі раÑпрацоўшчыкам."
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
@@ -439,10 +471,6 @@ msgstr "ШчыльнаÑць гор лÑтучых аÑтравоў"
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 ""
@@ -461,6 +489,15 @@ msgid "Increases humidity around rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "УÑталÑваць"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr ""
@@ -565,12 +602,6 @@ 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 ""
-"Увага: \"The minimal development test\" прызначаны толькі раÑпрацоўшчыкам."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Ðазва Ñвету"
@@ -600,6 +631,40 @@ msgstr "pkgmgr: хібны шлÑÑ… да \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Выдаліць Ñвет \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Пацвердзіць пароль"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Ðазва генератара мапы"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Password"
+msgstr "Ðовы пароль"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Паролі не Ñупадаюць!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "ЗарÑгіÑтравацца Ñ– далучыцца"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Ухваліць"
@@ -632,6 +697,16 @@ msgstr "< Ðазад на Ñтаронку налад"
msgid "Browse"
msgstr "ПраглÑдзець"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "ЗмеÑціва"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "ЗмеÑціва"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Ðдключаны"
@@ -689,7 +764,7 @@ msgstr "Ðбраць каталог"
msgid "Select file"
msgstr "Ðбраць файл"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Паказваць Ñ‚ÑÑ…Ð½Ñ–Ñ‡Ð½Ñ‹Ñ Ð½Ð°Ð·Ð²Ñ‹"
@@ -842,6 +917,11 @@ msgstr "Ð‘Ñ‹Ð»Ñ‹Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÑ–"
msgid "Previous Core Developers"
msgstr "Ð‘Ñ‹Ð»Ñ‹Ñ Ð°ÑÐ½Ð¾ÑžÐ½Ñ‹Ñ Ñ€Ð°Ñпрацоўшчыкі"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Паказваць адладачную інфармацыю"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Пошук у Ñеціве"
@@ -910,10 +990,6 @@ msgstr "Сервер"
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 "Ðовы"
@@ -922,11 +998,6 @@ msgstr "Ðовы"
msgid "No world created or selected!"
msgstr "ÐÑма Ñтворанага альбо абранага Ñвету!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "Ðовы пароль"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "ГулÑць"
@@ -962,10 +1033,6 @@ msgid "Clear"
msgstr "ÐчыÑціць"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Злучыцца"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Творчы Ñ€Ñжым"
@@ -976,10 +1043,6 @@ msgid "Damage / PvP"
msgstr "Пашкоджанні"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Прыбраць з упадабанага"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "Упадабанае"
@@ -993,6 +1056,10 @@ msgid "Join Game"
msgstr "Далучыцца да гульні"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Пінг"
@@ -1007,10 +1074,19 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "Ðдлеглы порт"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "ÐпіÑанне Ñервера"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1056,8 +1132,9 @@ msgid "Dynamic shadows"
msgstr "Цень шрыфту"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr ""
+#, fuzzy
+msgid "Dynamic shadows:"
+msgstr "Цень шрыфту"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1153,7 +1230,8 @@ msgid "Tone Mapping"
msgstr "Танальнае адлюÑтраванне"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "СÑнÑарны парог: (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1161,7 +1239,7 @@ msgid "Trilinear Filter"
msgstr "Трылінейны фільтр"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1180,6 +1258,11 @@ msgstr "Калыханне вадкаÑцÑÑž"
msgid "Waving Plants"
msgstr "Ð”Ñ€Ñ‹Ð³Ð¾Ñ‚ÐºÑ–Ñ Ñ€Ð°Ñліны"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Памылка злучÑÐ½Ð½Ñ (таймаут?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Таймаут злучÑннÑ."
@@ -1317,7 +1400,7 @@ msgid "Camera update enabled"
msgstr "Ðбнаўленне камеры ўключана"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1448,6 +1531,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Ðбмежаванне бачнаÑці ўключана"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "СтварÑнне кліента…"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Выхад у меню"
@@ -1955,29 +2043,6 @@ msgstr "Ðе атрымалаÑÑ Ñпампаваць $1"
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 ""
-"Ð’Ñ‹ хочаце першы раз увайÑці на Ñервер з назвай «%s».\n"
-"Калі вы працÑгнеце, то на Ñерверы будзе Ñтвораны новы конт з вашамі данымі.\n"
-"Калі лаÑка, ўвÑдзіце пароль ÑÑˆÑ‡Ñ Ñ€Ð°Ð· Ñ– націÑніце «ЗарÑгіÑтравацца Ñ– "
-"далучыцца», каб пацвердзіць ÑтварÑнне конта альбо \"СкаÑаваць\", каб "
-"адмовіцца."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "ПрацÑгнуць"
@@ -2011,7 +2076,7 @@ msgstr ""
msgid "Change camera"
msgstr "ЗмÑніць камеру"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Размова"
@@ -2064,9 +2129,8 @@ msgid "Key already in use"
msgstr "Клавіша ўжо выкарыÑтоўваецца"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"ПрывÑзкі клавіш. (Калі меню ÑапÑавана, выдаліце налады з minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2137,10 +2201,6 @@ msgid "Change"
msgstr "ЗмÑніць"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Пацвердзіць пароль"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Ðовы пароль"
@@ -2148,6 +2208,10 @@ msgstr "Ðовы пароль"
msgid "Old Password"
msgstr "Стары пароль"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Паролі не Ñупадаюць!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Выхад"
@@ -2161,12 +2225,6 @@ msgstr "Сцішаны"
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).
@@ -2174,6 +2232,16 @@ msgstr "Увод "
msgid "LANG_CODE"
msgstr "be"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Калі лаÑка, абÑрыце імÑ!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2334,6 +2402,10 @@ msgstr ""
"- pageflip: Ñ‡Ð°Ñ‚Ñ‹Ñ€Ð¾Ñ…Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ Ð±ÑƒÑ„ÐµÑ€Ñ‹Ð·Ð°Ñ†Ñ‹Ñ (квадра-буфер)."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2424,6 +2496,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Дадаваць назвы прадметаў"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "ПашыраныÑ"
@@ -2437,7 +2514,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "ЗаўÑёды Ñž палёце Ñ– шпарка"
#: src/settings_translation_file.cpp
@@ -2518,6 +2596,10 @@ msgstr ""
"Прызначаецца ў блоках мапы (16 вузлоў)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Клавіша аўта-ўперад"
@@ -2560,10 +2642,6 @@ msgid "Base terrain height."
msgstr "Ð’Ñ‹ÑˆÑ‹Ð½Ñ Ð°Ñноўнай мÑÑцоваÑці."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "БазавыÑ"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Ð‘Ð°Ð·Ð°Ð²Ñ‹Ñ Ð¿Ñ€Ñ‹Ð²Ñ–Ð»ÐµÑ–"
@@ -2584,7 +2662,8 @@ msgid "Bind address"
msgstr "ÐÐ´Ñ€Ð°Ñ Ð¿Ñ€Ñ‹Ð²Ñзкі"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Параметры шуму Ñ‚Ñмпературы Ñ– вільготнаÑці Ð´Ð»Ñ API-біёму"
#: src/settings_translation_file.cpp
@@ -2596,6 +2675,10 @@ msgid "Block send optimize distance"
msgstr "ÐÐ¿Ñ‚Ñ‹Ð¼Ñ–Ð·Ð°Ð²Ð°Ð½Ð°Ñ Ð°Ð´Ð»ÐµÐ³Ð»Ð°Ñць Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½Ð½Ñ Ð±Ð»Ð¾ÐºÐ°Ñž"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Bold and italic font path"
msgstr "ШлÑÑ… да монашырыннага шрыфту"
@@ -2625,6 +2708,11 @@ msgstr "Убудаваны"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Camera"
+msgstr "ЗмÑніць камеру"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
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"
@@ -2791,6 +2879,11 @@ msgid "Client side node lookup range restriction"
msgstr "Ðбмежаванне дыÑпазону пошуку ад кліента"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Модынг кліента"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "ХуткаÑць караÑканнÑ"
@@ -2899,6 +2992,11 @@ msgid "Console height"
msgstr "Ð’Ñ‹ÑˆÑ‹Ð½Ñ ÐºÐ°Ð½Ñолі"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "Сеціўны Ñ€Ñпазіторый"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "Чорны ÑÐ¿Ñ–Ñ ÑцÑжкоў ContentDB"
@@ -2936,8 +3034,10 @@ msgstr ""
"Прыклады: 72 = 20 мін, 360 = 4 мін, 1 = 24 г, 0 — дзень Ñ– ноч не змÑнÑюцца."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Кантралюе хуткаÑць ÑцÑÐºÐ°Ð½Ð½Ñ Ð²Ð°Ð´ÐºÐ°Ñці."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -3004,13 +3104,12 @@ msgid "Debug log level"
msgstr "Узровень журнала адладкі"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Кнопка памÑншÑÐ½Ð½Ñ Ð³ÑƒÑ‡Ð½Ð°Ñці"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Паменшыце гÑта, каб павÑлічыць інерцыю вадкаÑці."
+msgid "Dec. volume key"
+msgstr "Кнопка памÑншÑÐ½Ð½Ñ Ð³ÑƒÑ‡Ð½Ð°Ñці"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3166,6 +3265,11 @@ msgstr "ДÑÑінхранізаваць анімацыю блока"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Developer Options"
+msgstr "ІтÑрацыі"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Dig key"
msgstr "Клавіша ўправа"
@@ -3186,6 +3290,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Ð”Ð°Ð¼ÐµÐ½Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð° Ñервера, што будзе паказвацца Ñž ÑпіÑе Ñервераў."
@@ -3258,6 +3368,10 @@ msgid "Enable joysticks"
msgstr "Уключыць джойÑцікі"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Уключыць абарону мадыфікацый."
@@ -3274,18 +3388,6 @@ 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 ""
-"Уключае пацвÑрджÑнне Ñ€ÑгіÑтрацыі пры злучÑнні з Ñерверам.\n"
-"Калі выключана, новы акаўнт будзе Ñ€ÑгіÑтравацца аўтаматычна."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3294,6 +3396,10 @@ msgstr ""
"Ðдключыць Ð´Ð»Ñ Ñ…ÑƒÑ‚ÐºÐ°Ñці ці другога выглÑду."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3377,6 +3483,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "Профіль даліны"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "ІнтÑрвал Ð´Ñ€ÑƒÐºÐ°Ð²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ñ‹Ñ… прафілÑÐ²Ð°Ð½Ð½Ñ Ñ€ÑƒÑ…Ð°Ð²Ñ–ÐºÐ°"
@@ -3395,6 +3506,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "FPS when unfocused or paused"
msgstr "МакÑімальны FPS, калі Ð³ÑƒÐ»ÑŒÐ½Ñ Ð¿Ñ€Ñ‹Ð¿Ñ‹Ð½ÐµÐ½Ð°Ñ."
@@ -3485,8 +3600,9 @@ msgstr ""
"ВыкарыÑтайце гÑты фільтр, каб выправіць Ñ‚ÑкÑтуры Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÑ–."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "ФільтрацыÑ"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Згладжванне:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3561,6 +3677,11 @@ msgid "Fog toggle key"
msgstr "Клавіша пераключÑÐ½Ð½Ñ Ñ‚ÑƒÐ¼Ð°Ð½Ñƒ"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Памер шрыфту"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3722,6 +3843,19 @@ msgid "GUI scaling filter txr2img"
msgstr "txr2img-фільтр Ð¼Ð°ÑˆÑ‚Ð°Ð±Ð°Ð²Ð°Ð½Ð½Ñ Ð³Ñ€Ð°Ñ„Ñ–Ñ‡Ð½Ð°Ð³Ð° інтÑрфейÑу"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Гульні"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Ð“Ð»Ð°Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð·Ð²Ð°Ñ€Ð¾Ñ‚Ð½Ñ‹Ñ Ð²Ñ‹ÐºÐ»Ñ–ÐºÑ–"
@@ -3756,6 +3890,16 @@ msgid "Graphics"
msgstr "Графіка"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Графіка"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Графіка"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "ГравітацыÑ"
@@ -3772,8 +3916,13 @@ msgid "HTTP mods"
msgstr "HTTP-мадыфікацыі"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "КаÑфіцыент Ð¼Ð°ÑˆÑ‚Ð°Ð±Ð°Ð²Ð°Ð½Ð½Ñ HUD"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "Маштабаванне графічнага інтÑрфейÑу"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -4030,8 +4179,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"Як доўга Ñервер будзе чакаць перад выгрузкай блокаў мапы,\n"
@@ -4039,6 +4190,13 @@ msgstr ""
"Ðа больш выÑокіх значÑннÑÑ… адбываецца плаўней, але патрабуецца больш памÑці."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "Паменшыце гÑта, каб павÑлічыць інерцыю вадкаÑці."
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "Ðаколькі шырокімі рабіць Ñ€Ñкі."
@@ -4113,6 +4271,15 @@ msgstr ""
"\"special\" замеÑÑ‚ \"sneak\"."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Уключае пацвÑрджÑнне Ñ€ÑгіÑтрацыі пры злучÑнні з Ñерверам.\n"
+"Калі выключана, новы акаўнт будзе Ñ€ÑгіÑтравацца аўтаматычна."
+
+#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
@@ -4142,7 +4309,10 @@ msgstr ""
"або плаваннÑ."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr "Калі ўключана, то гульцы не змогуць далучыцца з пуÑтым паролем."
#: src/settings_translation_file.cpp
@@ -4191,10 +4361,6 @@ 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 "ПразрыÑтаÑць фону гульнÑвой канÑолі (непразрыÑтаÑць, паміж 0 Ñ– 255)."
@@ -4252,15 +4418,12 @@ 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."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "ІнтÑрвал Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½Ð½Ñ ÐºÐ»Ñ–ÐµÐ½Ñ‚Ð°Ð¼ чаÑу."
#: src/settings_translation_file.cpp
@@ -5123,6 +5286,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
"Ðдлучаць гульцоў, што ўвÑлі гÑтую колькаÑць паведамленнÑÑž цÑгам 10 Ñекунд."
@@ -5181,10 +5348,11 @@ msgid "Left key"
msgstr "Клавіша ўлева"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"ПрацÑглаÑць цыкла Ñервера Ñ– інтÑрвал, па Ñкім аб'екты, Ñк правіла, "
"абнаўлÑюцца па Ñетцы."
@@ -5199,18 +5367,25 @@ msgstr ""
"Патрабуюцца ÑžÐºÐ»ÑŽÑ‡Ð°Ð½Ñ‹Ñ ÑˆÑйдÑры."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+#, fuzzy
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr "ІнтÑрвал чаÑу паміж цыкламі Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½Ð½Ñ Ð¼Ð°Ð´Ñ‹Ñ„Ñ–ÐºÐ°Ñ‚Ð°Ñ€Ð°Ñž актыўных блокаў"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "ІнтÑрвал чаÑу паміж цыкламі Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½Ð½Ñ Ñ‚Ð°Ð¹Ð¼ÐµÑ€Ð°Ñž блокаў"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "ІнтÑрвал чаÑу паміж цыкламі ÐºÑ–Ñ€Ð°Ð²Ð°Ð½Ð½Ñ Ð°ÐºÑ‚Ñ‹ÑžÐ½Ñ‹Ð¼Ñ– блокамі (ABM)"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5219,7 +5394,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Узровень дÑталізацыі журнала debug.txt:\n"
"- <nothing> (не вÑдзецца)\n"
@@ -5261,6 +5437,11 @@ msgid "Light curve low gradient"
msgstr "ЦÑнтр ÑÑÑ€ÑднÑга ўздыму крывой ÑвÑтла"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+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"
@@ -5708,10 +5889,6 @@ msgid "Maximum users"
msgstr "МакÑÑ–Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð»ÑŒÐºÐ°Ñць карыÑтальнікаў"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Меню"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "КÑш Ñетак"
@@ -5761,6 +5938,20 @@ msgid "Mipmapping"
msgstr "MIP-Ñ‚ÑкÑтураванне"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "Прафіліроўшчык"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "БÑÑпека"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "Каналы мадыфікацый"
@@ -5861,10 +6052,6 @@ 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."
@@ -5873,6 +6060,11 @@ msgstr ""
"ГÑтае значÑнне можна перавызначыць у галоўным меню Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "Сетка"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "ÐÐ¾Ð²Ñ‹Ñ ÐºÐ°Ñ€Ñ‹Ñтальнікі муÑÑц ўвеÑці гÑты пароль."
@@ -5885,6 +6077,11 @@ msgid "Noclip key"
msgstr "Клавіша руху Ñкрозь Ñцены"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "ПадÑвÑтленне вузла"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "ПадÑвÑтленне блокаў"
@@ -5944,10 +6141,6 @@ msgstr ""
"Ñ– Ñпажываннем памÑці (4096 = 100 МБ, Ñк правіла)."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Сеціўны Ñ€Ñпазіторый"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "ÐепразрыÑÑ‚Ñ‹Ñ Ð²Ð°Ð´ÐºÐ°Ñці"
@@ -6050,10 +6243,6 @@ msgstr ""
"Ðеабходны прывілей «noclip» на Ñерверы."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Ð†Ð¼Ñ Ð³ÑƒÐ»ÑŒÑ†Ð°"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "ДыÑÑ‚Ð°Ð½Ñ†Ñ‹Ñ Ð¿ÐµÑ€Ð°Ð´Ð°Ñ‡Ñ‹ даных гульца"
@@ -6111,10 +6300,6 @@ msgid "Profiler toggle key"
msgstr "Клавіша пераключÑÐ½Ð½Ñ Ð¿Ñ€Ð°Ñ„Ñ–Ð»Ñ–Ñ€Ð¾ÑžÑˆÑ‡Ñ‹ÐºÐ°"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "ПрафілÑванне"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -6303,6 +6488,11 @@ msgstr ""
"калі выÑва маштабуецца не да цÑлых памераў."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Экран:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Ð’Ñ‹ÑˆÑ‹Ð½Ñ Ñкрана"
@@ -6332,6 +6522,11 @@ msgstr ""
"1 азначае найгоршую ÑкаÑць, а 100 — найлепшую. 0 - Ð¿Ñ€Ð°Ð´Ð²Ñ‹Ð·Ð½Ð°Ñ‡Ð°Ð½Ð°Ñ ÑкаÑць."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Здымак Ñкрана"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Шум марÑкога дна"
@@ -6345,10 +6540,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Другі з двух 3D-шумоў, што разам вызначаюць тунÑлі."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "БÑÑпека"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "ГлÑдзіце https://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6408,8 +6599,19 @@ msgstr ""
"18 = 4D-мноÑтва Ð–ÑƒÐ»Ñ–Ñ Â«ÐœÐ°Ð½Ð´Ñльбульб»."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Сервер / ÐÐ´Ð·Ñ–Ð½Ð¾Ñ‡Ð½Ð°Ñ Ð³ÑƒÐ»ÑŒÐ½Ñ"
+#, fuzzy
+msgid "Server"
+msgstr "URL Ñервера"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Ðазва Ñервера"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "ÐпіÑанне Ñервера"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6436,10 +6638,20 @@ msgid "Server side occlusion culling"
msgstr "ÐдÑÑчÑнне аклюзіі на баку Ñервера"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Порт Ñервера"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "URL ÑпіÑа Ñервераў"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "URL ÑпіÑа Ñервераў"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Файл ÑпіÑа Ñервераў"
@@ -6452,14 +6664,17 @@ msgstr ""
"ПаÑÐ»Ñ Ð·Ð¼ÐµÐ½Ñ‹ мовы патрÑбна перазапуÑціць гульню."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
"Вызначае макÑімальную колькаÑць Ñімвалаў у паведамленнÑÑ…, што адпраўлÑюцца "
"кліентамі ў размову."
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -6467,7 +6682,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6562,7 +6777,7 @@ msgid ""
msgstr "Зрух цені шрыфту. Калі 0, то цень не будзе паказвацца."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6791,6 +7006,11 @@ msgid "Temperature variation for biomes."
msgstr "ВарыÑÑ†Ñ‹Ñ Ñ‚Ñмпературы Ñž біёмах."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Ðалады"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "ÐльтÑрнатыўны шум Ñ€Ñльефу"
@@ -7047,7 +7267,8 @@ msgid "Time speed"
msgstr "ХуткаÑць чаÑу"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr "Таймаут Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ²Ñ‹ÐºÐ°Ñ€Ñ‹Ñтоўваемых даных з памÑці кліента."
#: src/settings_translation_file.cpp
@@ -7075,10 +7296,19 @@ msgid "Touch screen threshold"
msgstr "Парог ÑÑнÑарнага Ñкрана"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Парог ÑÑнÑарнага Ñкрана"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Шум дрÑÑž"
@@ -7186,6 +7416,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "ВыкарыÑтоўваць трылінейную фільтрацыю пры маштабаванні Ñ‚ÑкÑтур."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7461,6 +7695,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr "Паказваць адладачную інфармацыю (тое ж, што і F5)."
@@ -7565,6 +7808,10 @@ msgid "Y-level of seabed."
msgstr "Y-узровень марÑкога дна."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Таймаўт ÑÐ¿Ð°Ð¼Ð¿Ð¾ÑžÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° па cURL"
@@ -7611,6 +7858,9 @@ msgstr "Ліміт адначаÑовых злучÑннÑÑž cURL"
#~ msgid "Back"
#~ msgstr "Ðазад"
+#~ msgid "Basic"
+#~ msgstr "БазавыÑ"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Біты на пікÑель (Ð³Ð»Ñ‹Ð±Ñ–Ð½Ñ ÐºÐ¾Ð»ÐµÑ€Ñƒ) у поўнаÑкранным Ñ€Ñжыме."
@@ -7644,9 +7894,15 @@ msgstr "Ліміт адначаÑовых злучÑннÑÑž cURL"
#~ msgid "Configure"
#~ msgstr "Ðаладзіць"
+#~ msgid "Connect"
+#~ msgstr "Злучыцца"
+
#~ msgid "Content Store"
#~ msgstr "Крама дадаткаў"
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Кантралюе хуткаÑць ÑцÑÐºÐ°Ð½Ð½Ñ Ð²Ð°Ð´ÐºÐ°Ñці."
+
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value."
@@ -7691,6 +7947,9 @@ msgstr "Ліміт адначаÑовых злучÑннÑÑž cURL"
#~ "Вызначае крок дыÑкрÑтызацыі Ñ‚ÑкÑтуры.\n"
#~ "Больш выÑокае значÑнне прыводзіць да больш гладкіх мапаў нармалÑÑž."
+#~ msgid "Del. Favorite"
+#~ msgstr "Прыбраць з упадабанага"
+
#~ msgid ""
#~ "Deprecated, define and locate cave liquids using biome definitions "
#~ "instead.\n"
@@ -7700,12 +7959,21 @@ msgstr "Ліміт адначаÑовых злучÑннÑÑž cURL"
#~ "азначÑннÑÑž біёму.\n"
#~ "Y верхнÑй мÑжы лавы Ñž вÑлікіх пÑчорах."
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Спампоўвайце гульні кшталту «Minetest Game», з minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Спампаваць з minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Спампоўванне Ñ– ÑžÑталёўка $1. Калі лаÑка, пачакайце…"
#~ msgid "Enable VBO"
#~ msgstr "Уключыць VBO"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Уключыць пацвÑрджÑнне Ñ€ÑгіÑтрацыі"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7733,6 +8001,9 @@ msgstr "Ліміт адначаÑовых злучÑннÑÑž cURL"
#~ "Уключае паралакÑнае аклюзіўнае Ñ‚ÑкÑтураванне.\n"
#~ "Патрабуюцца ÑžÐºÐ»ÑŽÑ‡Ð°Ð½Ñ‹Ñ ÑˆÑйдÑры."
+#~ msgid "Enter "
+#~ msgstr "Увод "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7752,6 +8023,9 @@ msgstr "Ліміт адначаÑовых злучÑннÑÑž cURL"
#~ msgid "Fallback font size"
#~ msgstr "Памер Ñ€Ñзервовага шрыфту"
+#~ msgid "Filtering"
+#~ msgstr "ФільтрацыÑ"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Шум базавай вышыні лÑтучых аÑтравоў"
@@ -7767,6 +8041,9 @@ msgstr "Ліміт адначаÑовых злучÑннÑÑž cURL"
#~ msgid "Full screen BPP"
#~ msgstr "Ð“Ð»Ñ‹Ð±Ñ–Ð½Ñ ÐºÐ¾Ð»ÐµÑ€Ñƒ Ñž поўнаÑкранным Ñ€Ñжыме (бітаў на пікÑель)"
+#~ msgid "Game"
+#~ msgstr "ГульнÑ"
+
#~ msgid "Gamma"
#~ msgstr "Гама"
@@ -7776,6 +8053,9 @@ msgstr "Ліміт адначаÑовых злучÑннÑÑž cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ñ‹Ñ Ð¼Ð°Ð¿Ñ‹ нармалÑÑž"
+#~ msgid "HUD scale factor"
+#~ msgstr "КаÑфіцыент Ð¼Ð°ÑˆÑ‚Ð°Ð±Ð°Ð²Ð°Ð½Ð½Ñ HUD"
+
#~ msgid "High-precision FPU"
#~ msgstr "Ð’Ñ‹Ñокадакладны FPU"
@@ -7789,9 +8069,20 @@ msgstr "Ліміт адначаÑовых злучÑннÑÑž cURL"
#~ "Калі ўключана адначаÑова з Ñ€Ñжымам палёту, то вызначае напрамак руху "
#~ "адноÑна кроку гульца."
+#~ msgid "In-Game"
+#~ msgstr "У гульні"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "УÑталёўка: файл: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "ІнÑтрументы"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "ПрывÑзкі клавіш. (Калі меню ÑапÑавана, выдаліце налады з minetest.conf)"
+
#~ msgid "Lava depth"
#~ msgstr "Ð“Ð»Ñ‹Ð±Ñ–Ð½Ñ Ð»Ð°Ð²Ñ‹"
@@ -7841,6 +8132,9 @@ msgstr "Ліміт адначаÑовых злучÑннÑÑž cURL"
#~ "ÐÑÐ²Ñ‹Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹ прадвызначана не змÑнÑюцца.\n"
#~ "Параметры, што пачынаюцца з \"no\", выкарыÑтоўваюцца Ð´Ð»Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÑннÑ."
+#~ msgid "Menus"
+#~ msgstr "Меню"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Мінімапа Ñž Ñ€Ñжыме радару, павелічÑнне Ñ…2"
@@ -7907,6 +8201,12 @@ msgstr "Ліміт адначаÑовых злучÑннÑÑž cURL"
#~ msgid "Path to save screenshots at."
#~ msgstr "Каталог Ð´Ð»Ñ Ð·Ð°Ñ…Ð¾ÑžÐ²Ð°Ð½Ð½Ñ Ð·Ð´Ñ‹Ð¼ÐºÐ°Ñž Ñкрана."
+#~ msgid "Player name"
+#~ msgstr "Ð†Ð¼Ñ Ð³ÑƒÐ»ÑŒÑ†Ð°"
+
+#~ msgid "Profiling"
+#~ msgstr "ПрафілÑванне"
+
#~ msgid "Projecting dungeons"
#~ msgstr "Праектаванне падзÑмеллÑÑž"
@@ -7919,6 +8219,9 @@ msgstr "Ліміт адначаÑовых злучÑннÑÑž cURL"
#~ msgid "Select Package File:"
#~ msgstr "Ðбраць файл пакунка:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Сервер / ÐÐ´Ð·Ñ–Ð½Ð¾Ñ‡Ð½Ð°Ñ Ð³ÑƒÐ»ÑŒÐ½Ñ"
+
#~ msgid "Shadow limit"
#~ msgstr "Ліміт ценÑÑž"
@@ -7993,6 +8296,22 @@ msgstr "Ліміт адначаÑовых злучÑннÑÑž cURL"
#~ msgid "Yes"
#~ msgstr "Так"
+#, 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 ""
+#~ "Ð’Ñ‹ хочаце першы раз увайÑці на Ñервер з назвай «%s».\n"
+#~ "Калі вы працÑгнеце, то на Ñерверы будзе Ñтвораны новы конт з вашамі "
+#~ "данымі.\n"
+#~ "Калі лаÑка, ўвÑдзіце пароль ÑÑˆÑ‡Ñ Ñ€Ð°Ð· Ñ– націÑніце «ЗарÑгіÑтравацца Ñ– "
+#~ "далучыцца», каб пацвердзіць ÑтварÑнне конта альбо \"СкаÑаваць\", каб "
+#~ "адмовіцца."
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "Вы загінулі"
diff --git a/po/bg/minetest.po b/po/bg/minetest.po
index fb3a096dc..ce95a8879 100644
--- a/po/bg/minetest.po
+++ b/po/bg/minetest.po
@@ -7,8 +7,8 @@ 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-10 23:53+0000\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-04-11 15:08+0000\n"
"Last-Translator: 109247019824 <stoyan@gmx.com>\n"
"Language-Team: Bulgarian <https://hosted.weblate.org/projects/minetest/"
"minetest/bg/>\n"
@@ -17,7 +17,7 @@ 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.10.1\n"
+"X-Generator: Weblate 4.12-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -119,6 +119,31 @@ msgid "The server has requested a reconnect:"
msgstr "Сървърът поиÑка повторно Ñвързване:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Модификации"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Изданието на протокола не Ñъвпада. "
@@ -131,6 +156,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Сървърът поддържа изданиÑта на протокола между $1 и $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Поддържаме Ñамо издание $1 на протокола."
@@ -138,14 +167,21 @@ msgstr "Поддържаме Ñамо издание $1 на протокола.
msgid "We support protocol versions between version $1 and $2."
msgstr "Поддържаме Ñамо изданиÑта на протокола между $1 и $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Отказ"
@@ -160,7 +196,7 @@ msgstr "Изключване вÑички"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "Изключване на пакет Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸"
+msgstr "Изкл. на пакета"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
@@ -168,7 +204,7 @@ msgstr "Включване вÑички"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "Включване на пакет Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸"
+msgstr "Вкл. на пакета"
#: builtin/mainmenu/dlg_config_world.lua
msgid ""
@@ -285,7 +321,6 @@ msgid "Failed to download $1"
msgstr "Грешка при изтеглÑнето на $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Игри"
@@ -306,7 +341,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr "ИнÑталиране: Ðеподдържан вид на файл или повреден архив"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Модификации"
@@ -399,12 +433,9 @@ msgid "Decorations"
msgstr "Декорации"
#: builtin/mainmenu/dlg_create_world.lua
-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"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Внимание: ТеÑтът за разработка е предназначен за разработчици."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -422,10 +453,6 @@ msgstr "Плаващи земни маÑи в небето"
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 "Създаване на нефрактален терен: Морета и подземен ÑвÑÑ‚"
@@ -443,6 +470,15 @@ msgid "Increases humidity around rivers"
msgstr "Увеличава влажноÑтта около реките"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "ИнÑталиране $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Езера"
@@ -544,10 +580,6 @@ 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 "Име на Ñвета"
@@ -577,6 +609,38 @@ msgstr "pkgmgr: недейÑтвителен път „$1“"
msgid "Delete World \"$1\"?"
msgstr "Премахване на Ñвета „$1“?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Потвърж. на парола"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Име"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Парола"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Паролите не Ñъвпадат!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "РегиÑтриране и вход"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Приемане"
@@ -609,6 +673,16 @@ msgstr "Главно меню"
msgid "Browse"
msgstr "Разглеждане"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Съдържание"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Съдържание"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Изключено"
@@ -666,7 +740,7 @@ msgstr "Избор на папка"
msgid "Select file"
msgstr "Избор на файл"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "ТехничеÑки наименованиÑ"
@@ -708,7 +782,7 @@ msgstr "Разпределение по Z"
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
-msgstr ""
+msgstr "абÑолютна ÑтойноÑÑ‚"
#. ~ "defaults" is a noise parameter flag.
#. It describes the default processing options
@@ -814,6 +888,10 @@ msgstr "Предишни Ñътрудници"
msgid "Previous Core Developers"
msgstr "Предишни оÑновни разработчици"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Преглед на Ñъдържание онлайн"
@@ -840,7 +918,7 @@ msgstr "ÐÑма завиÑимоÑти."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr "Пакетът нÑма опиÑание"
+msgstr "Пакетът е без опиÑание"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
@@ -882,10 +960,6 @@ msgstr "Създаване на Ñървър"
msgid "Install games from ContentDB"
msgstr "ИнÑталиране на игри от ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Име"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Създаване"
@@ -894,10 +968,6 @@ msgstr "Създаване"
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 "Започване на игра"
@@ -931,10 +1001,6 @@ msgid "Clear"
msgstr "ИзчиÑтване"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Свързване"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "ТворчеÑки режим"
@@ -944,10 +1010,6 @@ msgid "Damage / PvP"
msgstr "Щети / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Премах. любим"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Любими"
@@ -960,8 +1022,12 @@ msgid "Join Game"
msgstr "Включване към игра"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
-msgstr "Ping"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
msgid "Public Servers"
@@ -972,12 +1038,21 @@ msgid "Refresh"
msgstr "Презареждане"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Отдалечен порт"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "ОпиÑание на Ñървър"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
-msgstr "2x"
+msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "3D Clouds"
@@ -985,11 +1060,11 @@ msgstr "Тримерни облаци"
#: builtin/mainmenu/tab_settings.lua
msgid "4x"
-msgstr "4x"
+msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "8x"
-msgstr "8x"
+msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "All Settings"
@@ -1020,7 +1095,8 @@ msgid "Dynamic shadows"
msgstr "Динамични Ñенки"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "Динамични Ñенки: "
#: builtin/mainmenu/tab_settings.lua
@@ -1080,7 +1156,7 @@ msgstr "Ðепрозрачна вода"
#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
-msgstr "ЧаÑтици"
+msgstr "Отломки"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
@@ -1120,7 +1196,8 @@ msgid "Tone Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "Праг на докоÑване: (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1128,7 +1205,8 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+#, fuzzy
+msgid "Very High"
msgstr "Много Ñилни"
#: builtin/mainmenu/tab_settings.lua
@@ -1147,6 +1225,11 @@ msgstr "Поклащащи Ñе течноÑти"
msgid "Waving Plants"
msgstr "Поклащащи Ñе раÑтениÑ"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Грешка при Ñвързване (изтекло време?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Времето за Ñвързване изтече."
@@ -1177,7 +1260,7 @@ msgstr "Грешка при Ñвързване (изтекло време?)"
#: src/client/clientlauncher.cpp
msgid "Could not find or load game: "
-msgstr "Ðе може да бъде намерена или заредена игра: "
+msgstr "Играта не може да бъде намерена или заредена: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1233,9 +1316,8 @@ msgstr "- ОбщеÑтвен: "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
-#, fuzzy
msgid "- PvP: "
-msgstr "- PvP: "
+msgstr ""
#: src/client/game.cpp
msgid "- Server Name: "
@@ -1260,21 +1342,20 @@ msgid "Automatic forward enabled"
msgstr "Ðвтоматичното движение напред е включено"
#: src/client/game.cpp
-#, fuzzy
msgid "Block bounds hidden"
-msgstr "Граници на блокове"
+msgstr "Контурите на блоковете Ñа Ñкрити"
#: src/client/game.cpp
msgid "Block bounds shown for all blocks"
-msgstr ""
+msgstr "Контурите на вÑички блокове Ñа видими"
#: src/client/game.cpp
msgid "Block bounds shown for current block"
-msgstr ""
+msgstr "Контурите на Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ð±Ð»Ð¾Ðº Ñа видими"
#: src/client/game.cpp
msgid "Block bounds shown for nearby blocks"
-msgstr ""
+msgstr "Контурите на близките блокове Ñа видими"
#: src/client/game.cpp
msgid "Camera update disabled"
@@ -1285,8 +1366,11 @@ msgid "Camera update enabled"
msgstr "ОпреÑнÑването на екрана при движение е включено"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
+"Контурите на блоковете не могат да бъдат показани (заб.: липÑва правото "
+"„basic_debug“)"
#: src/client/game.cpp
msgid "Change Password"
@@ -1403,6 +1487,11 @@ msgid "Enabled unlimited viewing range"
msgstr "ÐеограничениÑÑ‚ обхват на видимоÑÑ‚ е включен"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Създаване на клиент…"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Изход към менюто"
@@ -1907,28 +1996,6 @@ msgstr "Грешка при отварÑне на Ñтраница"
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 ""
-"Ðа път Ñте да влезете в Ñървъра Ñ Ð¸Ð¼Ðµ „%s“ за първи път.\n"
-"Ðко продължите нова Ñметка Ñ Ñ‚ÐµÐ·Ð¸ данни ще бъде Ñъздадена на Ñървъра.\n"
-"Въведете паролата отново и натиÑнете „РегиÑтриране и вход“, за да потвърдите "
-"или „Отказ“ за връщане обратно."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Ðапред"
@@ -1947,7 +2014,7 @@ msgstr "Ðвтоматично Ñкачане"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Aux1"
-msgstr "Aux1"
+msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
@@ -1961,7 +2028,7 @@ msgstr "Граници на блокове"
msgid "Change camera"
msgstr "ПромÑна на камера"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Разговори"
@@ -2014,10 +2081,8 @@ msgid "Key already in use"
msgstr "Клавишът вече Ñе ползва"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Клавишни комбинации (Ðко екранът изглежда Ñчупен махнете нещата от minetest."
-"conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2088,10 +2153,6 @@ msgid "Change"
msgstr "ПроменÑне"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Потвърж. на парола"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Ðова парола"
@@ -2099,6 +2160,10 @@ msgstr "Ðова парола"
msgid "Old Password"
msgstr "Стара парола"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Паролите не Ñъвпадат!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Изход"
@@ -2112,12 +2177,6 @@ msgstr "Без звук"
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 "Въведете "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2125,6 +2184,16 @@ msgstr "Въведете "
msgid "LANG_CODE"
msgstr "bg"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Изберете име!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2250,6 +2319,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2308,7 +2381,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Adds particles when digging a node."
-msgstr ""
+msgstr "ДобавÑÑ‚ Ñе отломки при копане на възел."
#: src/settings_translation_file.cpp
msgid ""
@@ -2331,6 +2404,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Име на Ñвета"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2344,7 +2422,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2413,6 +2491,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2453,12 +2535,8 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
-msgstr ""
+msgstr "ОÑновни права"
#: src/settings_translation_file.cpp
msgid "Beach noise"
@@ -2477,7 +2555,7 @@ msgid "Bind address"
msgstr "ÐÐ´Ñ€ÐµÑ Ð·Ð° Ñвързване"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2489,6 +2567,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2513,6 +2595,11 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+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"
@@ -2671,6 +2758,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2766,6 +2857,10 @@ msgid "Console height"
msgstr "ВиÑочина на конзолата"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2803,8 +2898,10 @@ msgstr ""
"промÑна."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "УправлÑва ÑкороÑтта на потъване в течноÑти."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2827,7 +2924,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Creative"
-msgstr ""
+msgstr "ТворчеÑки"
#: src/settings_translation_file.cpp
msgid "Crosshair alpha"
@@ -2870,11 +2967,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2901,7 +2998,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Default privileges"
-msgstr ""
+msgstr "Подразбирани права"
#: src/settings_translation_file.cpp
msgid "Default report format"
@@ -3017,12 +3114,17 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Декорации"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Digging particles"
-msgstr ""
+msgstr "Отломки при копане"
#: src/settings_translation_file.cpp
msgid "Disable anticheat"
@@ -3037,6 +3139,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3099,13 +3207,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Enable creative mode for all players"
-msgstr ""
+msgstr "Задаване на творчеÑки режим на вÑички играчи"
#: src/settings_translation_file.cpp
msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3122,19 +3234,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3208,6 +3314,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3226,6 +3336,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3266,6 +3380,8 @@ msgid ""
"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
+"Бърздо движение чрез клавиш „Aux1“.\n"
+"ИзиÑква правото „fast“ от Ñървъра."
#: src/settings_translation_file.cpp
msgid "Field of view"
@@ -3303,8 +3419,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr ""
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "СглаÑÑне:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3371,6 +3488,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3519,6 +3640,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Игри"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3546,6 +3680,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3562,10 +3704,15 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "HUD видим"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr ""
@@ -3802,11 +3949,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3857,6 +4011,9 @@ msgid ""
"nodes.\n"
"This requires the \"noclip\" privilege on the server."
msgstr ""
+"Ðко е включено заедно Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° на летене, играчът може да лети през плътни "
+"възли.\n"
+"ИзиÑква правото „noclip“ от Ñървъра."
#: src/settings_translation_file.cpp
msgid ""
@@ -3867,6 +4024,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3888,7 +4051,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3928,10 +4093,6 @@ 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 ""
@@ -3982,15 +4143,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4611,6 +4768,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4666,7 +4827,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4676,15 +4837,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4696,7 +4860,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4724,6 +4889,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+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"
@@ -5108,10 +5278,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5160,6 +5326,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5246,16 +5424,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5268,6 +5446,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "ОÑветÑване на възел"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5305,10 +5488,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5400,10 +5579,8 @@ 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 "Име на играча"
+"Играчът може да лети без да Ñе влиÑе от гравитациÑта.\n"
+"ИзиÑква правото „fly“ от Ñървъра."
#: src/settings_translation_file.cpp
msgid "Player transfer distance"
@@ -5441,7 +5618,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Privileges that players with basic_privs can grant"
-msgstr ""
+msgstr "Правата, които играчите Ñ â€žbasic_privs“ могат да получат"
#: src/settings_translation_file.cpp
msgid "Profiler"
@@ -5452,10 +5629,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5469,7 +5642,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
-msgstr "ЧаÑтта от големи пещери, които Ñъдържат течноÑÑ‚."
+msgstr "Съотношението на големи пещери, Ñъдържащи течноÑти."
#: src/settings_translation_file.cpp
msgid ""
@@ -5624,6 +5797,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Екран:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5651,6 +5829,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Снимка на екрана"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5663,10 +5846,6 @@ 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 ""
@@ -5706,8 +5885,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr ""
+#, fuzzy
+msgid "Server"
+msgstr "Създаване на Ñървър"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "- Име на Ñървър: "
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "ОпиÑание на Ñървър"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5734,10 +5924,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Порт на Ñървъра"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5748,12 +5947,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5761,7 +5962,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5837,7 +6038,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6037,6 +6238,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "ÐаÑтройки"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6144,6 +6350,8 @@ msgid ""
"The privileges that new users automatically get.\n"
"See /privs in game for a full list on your server and mod configuration."
msgstr ""
+"Правата, които получават новите играчи.\n"
+"Ð’ играта вижте „/privs“ за пълен ÑпиÑък от права за Ñървъра и модификациите."
#: src/settings_translation_file.cpp
msgid ""
@@ -6239,7 +6447,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6263,10 +6471,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6357,6 +6573,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6590,6 +6810,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6679,6 +6908,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6696,12 +6929,56 @@ msgstr ""
#~ msgid "- Damage: "
#~ msgstr "- Щети: "
+#~ msgid "Connect"
+#~ msgstr "Свързване"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "УправлÑва ÑкороÑтта на потъване в течноÑти."
+
+#~ msgid "Del. Favorite"
+#~ msgstr "Премах. любим"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "ИзтеглÑне на игра, например Minetest Game, от minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Изтеглете от minetest.net"
+
+#~ msgid "Enter "
+#~ msgstr "Въведете "
+
+#~ msgid "Game"
+#~ msgstr "Игра"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "ИнÑталиране: файл: „$1“"
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Клавишни комбинации (Ðко екранът изглежда Ñчупен махнете нещата от "
+#~ "minetest.conf)"
+
+#~ msgid "Player name"
+#~ msgstr "Име на играча"
+
#~ msgid "View"
#~ msgstr "Гледане"
+#, 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 ""
+#~ "Ðа път Ñте да влезете в Ñървъра Ñ Ð¸Ð¼Ðµ „%s“ за първи път.\n"
+#~ "Ðко продължите нова Ñметка Ñ Ñ‚ÐµÐ·Ð¸ данни ще бъде Ñъздадена на Ñървъра.\n"
+#~ "Въведете паролата отново и натиÑнете „РегиÑтриране и вход“, за да "
+#~ "потвърдите или „Отказ“ за връщане обратно."
+
#~ msgid "You died."
#~ msgstr "УмрÑхте."
diff --git a/po/ca/minetest.po b/po/ca/minetest.po
index b23999744..e58bc7fce 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: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -122,6 +122,31 @@ msgid "The server has requested a reconnect:"
msgstr "El servidor ha sol·licitat una reconnexió:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Seleccionar un món:"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Desajust de la versió del protocol. "
@@ -135,6 +160,10 @@ msgstr ""
"El servidor es compatible amb les versions de protocol entre $ 1 i $ 2 . "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Nosaltres sols suportem la versió $1 del protocol."
@@ -142,14 +171,21 @@ msgstr "Nosaltres sols suportem la versió $1 del protocol."
msgid "We support protocol versions between version $1 and $2."
msgstr "Nosaltres suportem versions del protocol entre la versió $1 i la $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Cancel·lar"
@@ -300,7 +336,6 @@ msgid "Failed to download $1"
msgstr "Error al instal·lar $1 en $2"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Jocs"
@@ -326,7 +361,6 @@ msgstr ""
"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"
@@ -427,13 +461,10 @@ msgstr "Informació del mod:"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
-msgid "Download a game, such as Minetest Game, from minetest.net"
+msgid "Development Test is meant for developers."
msgstr ""
-"Descarrega un subjoc, com per exemple minetest_game, des de minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Descarrega'n alguns des de minetest.net"
+"Advertència: El joc \"Minimal development test\" esta dissenyat per a "
+"desenvolupadors."
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
@@ -452,10 +483,6 @@ msgstr ""
msgid "Floatlands (experimental)"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Joc"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr ""
@@ -473,6 +500,15 @@ msgid "Increases humidity around rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Instal·lar"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr ""
@@ -575,13 +611,6 @@ 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 ""
-"Advertència: El joc \"Minimal development test\" esta dissenyat per a "
-"desenvolupadors."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Nom del món"
@@ -614,6 +643,38 @@ msgstr "Modmgr: Ruta del mod \"$1\" invàlida"
msgid "Delete World \"$1\"?"
msgstr "Eliminar el món \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Confirma contrasenya"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Password"
+msgstr "Nova contrasenya"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Les contrasenyes no coincideixen!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Acceptar"
@@ -645,6 +706,16 @@ msgstr "< Torna a la pàgina de configuració"
msgid "Browse"
msgstr "Navegar"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Continuar"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Continuar"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Desactivat"
@@ -703,7 +774,7 @@ msgstr "Selecciona el fitxer del mod:"
msgid "Select file"
msgstr "Selecciona el fitxer del mod:"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Mostrar els noms tècnics"
@@ -866,6 +937,10 @@ msgstr "Antics Col·laboradors"
msgid "Previous Core Developers"
msgstr "Antics Desenvolupadors del nucli"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -943,10 +1018,6 @@ msgstr "Servidor"
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 "Nou"
@@ -955,11 +1026,6 @@ 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_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "Nova contrasenya"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Jugar Joc"
@@ -996,10 +1062,6 @@ msgid "Clear"
msgstr "Netejar"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Connectar"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Mode creatiu"
@@ -1010,10 +1072,6 @@ msgid "Damage / PvP"
msgstr "Dany"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Esborra preferit"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "Preferit"
@@ -1028,6 +1086,10 @@ msgid "Join Game"
msgstr "Ocultar Joc"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -1042,10 +1104,19 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "Esborra preferit"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "Port del Servidor"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1092,7 +1163,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1189,7 +1260,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr "Llindar tàctil (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1197,7 +1268,7 @@ msgid "Trilinear Filter"
msgstr "Filtratge Trilineal"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1217,6 +1288,11 @@ msgstr "Moviment de les Fulles"
msgid "Waving Plants"
msgstr "Moviment de Plantes"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Error de connexió (¿temps esgotat?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Temps d'espera de la connexió esgotat."
@@ -1361,7 +1437,7 @@ 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)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1492,6 +1568,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Creant client ..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Eixir al menú"
@@ -2017,24 +2098,6 @@ msgstr "Error al instal·lar $1 en $2"
msgid "Opening webpage"
msgstr ""
-#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
-msgid "Passwords do not match!"
-msgstr "Les contrasenyes no coincideixen!"
-
-#: 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 "Continuar"
@@ -2070,7 +2133,7 @@ msgstr ""
msgid "Change camera"
msgstr "Configurar controls"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Xat"
@@ -2124,10 +2187,8 @@ msgid "Key already in use"
msgstr "La tecla s'està utilitzant"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Combinacions de tecles. (Si aquest menú espatlla, esborrar coses de minetest."
-"conf)"
#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
@@ -2205,10 +2266,6 @@ msgid "Change"
msgstr "Canviar"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Confirma contrasenya"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nova contrasenya"
@@ -2216,6 +2273,10 @@ msgstr "Nova contrasenya"
msgid "Old Password"
msgstr "Contrasenya vella"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Les contrasenyes no coincideixen!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Tancar"
@@ -2230,12 +2291,6 @@ msgstr "Utilitza la tecla"
msgid "Sound Volume: %d%%"
msgstr "Volum de so: "
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Introdueix "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2243,6 +2298,15 @@ msgstr "Introdueix "
msgid "LANG_CODE"
msgstr "ca"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr ""
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2384,6 +2448,10 @@ msgstr ""
"- pageflip: quadbuffer based 3d."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2478,6 +2546,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Nom del món"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avançat"
@@ -2491,7 +2564,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Sempre volar y ràpid"
#: src/settings_translation_file.cpp
@@ -2562,6 +2636,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Automatic forward key"
msgstr "Tecla Avançar"
@@ -2607,10 +2685,6 @@ msgid "Base terrain height."
msgstr "Alçada del terreny base"
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Bàsic"
-
-#: src/settings_translation_file.cpp
#, fuzzy
msgid "Basic privileges"
msgstr "Privilegis per defecte"
@@ -2632,7 +2706,7 @@ msgid "Bind address"
msgstr "Adreça BIND"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2644,6 +2718,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2668,6 +2746,11 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Configurar controls"
+
+#: 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"
@@ -2836,6 +2919,11 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Client"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Velocitat d'escalada"
@@ -2941,6 +3029,10 @@ msgid "Console height"
msgstr "Tecla de la consola"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2979,7 +3071,9 @@ msgstr ""
"queda inalterat."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3048,11 +3142,11 @@ msgid "Debug log level"
msgstr "Nivell de registre de depuració"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3200,6 +3294,11 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Developer Options"
+msgstr "Informació del mod:"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Dig key"
msgstr "Tecla dreta"
@@ -3221,6 +3320,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3291,6 +3396,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3307,19 +3416,13 @@ msgid "Enable random user input (only used for testing)."
msgstr "Habilitar l'entrada aleatòria d'usuari (només utilitzat per testing)."
#: 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3393,6 +3496,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3411,6 +3518,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3491,8 +3602,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr ""
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Suavitzat (Antialiasing):"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3560,6 +3672,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3708,6 +3824,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Jocs"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3735,6 +3864,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3753,7 +3890,11 @@ msgid "HTTP mods"
msgstr "Mods HTTP"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3999,11 +4140,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -4064,6 +4212,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -4085,7 +4239,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4125,10 +4281,6 @@ 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 ""
@@ -4180,15 +4332,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5028,6 +5176,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -5084,7 +5236,7 @@ msgstr "Tecla esquerra"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5094,15 +5246,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5114,7 +5269,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5142,6 +5298,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Il·luminació suau"
+
+#: 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"
@@ -5537,10 +5698,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5589,6 +5746,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5676,16 +5845,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5698,6 +5867,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Node ressaltat"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5735,10 +5909,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5835,10 +6005,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5886,10 +6052,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -6061,6 +6223,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Pantalla:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -6089,6 +6256,11 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Screenshots"
+msgstr "Pantalla:"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Seabed noise"
msgstr "Soroll de cova #1"
@@ -6101,10 +6273,6 @@ 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 ""
@@ -6164,10 +6332,20 @@ msgstr ""
"18 = 4D \"Mandelbulb\" julia set."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
+#, fuzzy
+msgid "Server"
+msgstr "Servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Port del Servidor"
+
+#: src/settings_translation_file.cpp
msgid "Server URL"
msgstr ""
@@ -6192,10 +6370,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Port del Servidor"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -6206,12 +6393,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -6219,7 +6408,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6296,7 +6485,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6501,6 +6690,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Configuració"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6710,7 +6904,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6735,10 +6929,19 @@ msgid "Touch screen threshold"
msgstr "Llindar tàctil (px)"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Llindar tàctil (px)"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6830,6 +7033,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -7068,6 +7275,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -7161,6 +7377,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -7206,6 +7426,9 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "Enrere"
+#~ msgid "Basic"
+#~ msgstr "Bàsic"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr ""
#~ "Bits per píxel (profunditat de color) en el mode de pantalla completa."
@@ -7222,6 +7445,9 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Configurar"
+#~ msgid "Connect"
+#~ msgstr "Connectar"
+
#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels."
#~ msgstr ""
#~ "Controla l'amplada dels túnels, un valor més petit crea túnels més amples."
@@ -7243,12 +7469,26 @@ msgstr ""
#~ "Només té un efecte si és compilat amb cURL."
#, fuzzy
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr ""
+#~ "Descarrega un subjoc, com per exemple minetest_game, des de minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Descarrega'n alguns des de minetest.net"
+
+#, fuzzy
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Descarregant $1, si us plau esperi ..."
#~ msgid "Enable VBO"
#~ msgstr "Activar VBO"
+#~ msgid "Enter "
+#~ msgstr "Introdueix "
+
+#~ msgid "Game"
+#~ msgstr "Joc"
+
#, fuzzy
#~ msgid "Generate Normal Maps"
#~ msgstr "Generar Mapes Normals"
@@ -7257,6 +7497,12 @@ msgstr ""
#~ msgid "Install: file: \"$1\""
#~ msgstr "Instal·lar mod: Arxiu: \"$1\""
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Combinacions de tecles. (Si aquest menú espatlla, esborrar coses de "
+#~ "minetest.conf)"
+
#~ msgid "Main"
#~ msgstr "Principal"
diff --git a/po/cs/minetest.po b/po/cs/minetest.po
index 811c39f06..714fe7527 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: 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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-31 17:28+0000\n"
+"Last-Translator: Fjuro <fjuro@seznam.cz>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/minetest/minetest/"
"cs/>\n"
"Language: cs\n"
@@ -12,7 +12,7 @@ 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.10-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -115,6 +115,31 @@ msgid "The server has requested a reconnect:"
msgstr "Server vyžaduje opětovné připojení:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Vybrat mody"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Neshoda verze protokolu. "
@@ -127,6 +152,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Server podporuje verze protokolů mezi $1 a $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Podporujeme pouze protokol verze $1."
@@ -134,14 +163,21 @@ msgstr "Podporujeme pouze protokol verze $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Podporujeme verze protokolů mezi $1 a $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Zrušit"
@@ -281,7 +317,6 @@ msgid "Failed to download $1"
msgstr "Selhalo stažení $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Hry"
@@ -304,7 +339,6 @@ msgstr ""
"Instalace rozšíření: poškozený archiv nebo nepodporovaný typ souboru \"$1\""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mody"
@@ -397,12 +431,9 @@ msgid "Decorations"
msgstr "Dekorace"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Stáhněte si z minetest.net hru, například Minetest Game"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Stáhněte si jednu z minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Varování: Development Test je urÄen pro vývojáře."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -420,10 +451,6 @@ msgstr "Krajina vznášející se na nebi"
msgid "Floatlands (experimental)"
msgstr "Létající ostrovy (experimentální)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Hra"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Generovat terén bez použití fraktálů: Oceány a podzemí"
@@ -441,6 +468,15 @@ msgid "Increases humidity around rivers"
msgstr "Zvyšuje vlhkost v okolí řek"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Instalovat $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Jezera"
@@ -542,10 +578,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Veliké jeskyně hluboko pod zemí"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Varování: Development Test je urÄen pro vývojáře."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Název světa"
@@ -575,6 +607,39 @@ msgstr "pkgmgr: neplatná cesta \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Doopravdy chcete smazat svět \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Potvrdit heslo"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Jméno Generátoru mapy"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Jméno"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Heslo"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Hesla se neshodují!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Registrovat a Připojit se"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Přijmout"
@@ -607,6 +672,16 @@ msgstr "< Zpět do Nastavení"
msgid "Browse"
msgstr "Procházet"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Obsah"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Obsah"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Vypnuto"
@@ -664,7 +739,7 @@ msgstr "Vyberte adresář"
msgid "Select file"
msgstr "Vybrat soubor"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Zobrazit technické názvy"
@@ -815,6 +890,11 @@ msgstr "Bývalí přispěvatelé"
msgid "Previous Core Developers"
msgstr "Bývalí klíÄoví vývojáři"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Zobrazit ladící informace"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Procházet online obsah"
@@ -883,10 +963,6 @@ msgstr "Založit server"
msgid "Install games from ContentDB"
msgstr "Instalovat hry z ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Jméno"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Nový"
@@ -895,10 +971,6 @@ msgstr "Nový"
msgid "No world created or selected!"
msgstr "Žádný svět nebyl vytvořen ani vybrán!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Heslo"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Spustit hru"
@@ -932,10 +1004,6 @@ msgid "Clear"
msgstr "VyÄistit"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Připojit"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Kreativní mód"
@@ -945,10 +1013,6 @@ 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 "Favorites"
msgstr "Oblíbené"
@@ -961,6 +1025,10 @@ msgid "Join Game"
msgstr "Připojit se ke hře"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -973,10 +1041,19 @@ msgid "Refresh"
msgstr "Obnovit"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Vzdálený port"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Popis serveru"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1021,7 +1098,8 @@ msgid "Dynamic shadows"
msgstr "Dynamické stíny"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "Dynamické stíny: "
#: builtin/mainmenu/tab_settings.lua
@@ -1117,7 +1195,8 @@ msgid "Tone Mapping"
msgstr "Tone mapping"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "Dosah dotyku: (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1125,7 +1204,8 @@ msgid "Trilinear Filter"
msgstr "Trilineární filtr"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+#, fuzzy
+msgid "Very High"
msgstr "Velmi vysoké"
#: builtin/mainmenu/tab_settings.lua
@@ -1144,6 +1224,11 @@ msgstr "Vlnění Kapalin"
msgid "Waving Plants"
msgstr "Vlnění rostlin"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Chyba spojení (vyprÅ¡el Äas?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "VyprÅ¡el Äasový limit pÅ™ipojení."
@@ -1283,7 +1368,7 @@ msgid "Camera update enabled"
msgstr "Aktualizace kamery (pohledu) povolena"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1414,6 +1499,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Neomezený pohled povolen"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Vytvářím klienta..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Odejít do nabídky"
@@ -1919,29 +2009,6 @@ msgstr "Selhalo stažení $1"
msgid "Opening webpage"
msgstr ""
-#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
-msgid "Passwords do not match!"
-msgstr "Hesla se neshodují!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Registrovat a Připojit se"
-
-#: 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 ""
-"Budete poprvé připojeni k serveru \"%s\".\n"
-"Pokud budete pokraÄovat, nový uživatelský úÄet s vaÅ¡imi údaji bude vytvoÅ™en "
-"na tomto serveru.\n"
-"Prosím znovu napište svoje aktuální heslo a klikněte na 'Registrovat a "
-"Připojit se' pro potvrzení souhlasu, nebo vyberte 'Zrušit' pro návrat."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "PokraÄovat"
@@ -1974,7 +2041,7 @@ msgstr "OhraniÄení bloku"
msgid "Change camera"
msgstr "Změnit nastavení kamery"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Chat"
@@ -2027,10 +2094,8 @@ msgid "Key already in use"
msgstr "Klávesa je již používána"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Nastavení kláves (pokud toto menu je špatně naformátované, upravte nastavení "
-"v minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2101,10 +2166,6 @@ msgid "Change"
msgstr "Změnit"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Potvrdit heslo"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nové heslo"
@@ -2112,6 +2173,10 @@ msgstr "Nové heslo"
msgid "Old Password"
msgstr "Staré heslo"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Hesla se neshodují!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Odejít"
@@ -2125,12 +2190,6 @@ msgstr "Ztlumeno"
msgid "Sound Volume: %d%%"
msgstr "Hlasitost: "
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Zadejte "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2138,6 +2197,16 @@ msgstr "Zadejte "
msgid "LANG_CODE"
msgstr "cs"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Zvolte prosím název!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2300,6 +2369,10 @@ msgstr ""
"Pozn.: Režim 'interlaced' vyžaduje podporu 'shaderů'."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2394,6 +2467,11 @@ msgstr ""
"nutno vždy otestovat) vytvoří souvislou vrstvu létajících ostrovů."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Dodatkový název položky"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "PokroÄilé"
@@ -2412,7 +2490,8 @@ msgstr ""
"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"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Vždy mít zapnuté létání a turbo"
#: src/settings_translation_file.cpp
@@ -2491,6 +2570,10 @@ msgstr ""
"Jednotkou je mapblok (16 bloků)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Automaticky vpřed klávesa"
@@ -2531,10 +2614,6 @@ msgid "Base terrain height."
msgstr "Základní výška terénu."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Základní"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Základní práva"
@@ -2555,7 +2634,8 @@ msgid "Bind address"
msgstr "Svázat adresu"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Parametry tepelného a vlhkostního šumu pro Biome API"
#: src/settings_translation_file.cpp
@@ -2567,6 +2647,10 @@ msgid "Block send optimize distance"
msgstr "Optimalizace vzdálenosti vysílání bloku"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Cesta k tuÄnému písmu s kurzívou"
@@ -2591,6 +2675,11 @@ msgid "Builtin"
msgstr "Zabudované"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Změnit nastavení kamery"
+
+#: 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"
@@ -2751,6 +2840,11 @@ msgid "Client side node lookup range restriction"
msgstr "Omezení vyhledávání bloků z klientské aplikace"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Lokální mody"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Rychlost šplhání"
@@ -2858,6 +2952,10 @@ msgid "Console height"
msgstr "Šírka konzole"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "ContentDB: Černá listina"
@@ -2896,8 +2994,10 @@ msgstr ""
"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 "Stanovuje rychlost potápění v kapalinách."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2971,12 +3071,12 @@ msgid "Debug log level"
msgstr "Úroveň minimální důležitosti ladících informací"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Klávesa snížení hlasitosti"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Snižte toto pro zvýšení odporu kapalin vůÄi pohybu."
+msgid "Dec. volume key"
+msgstr "Klávesa snížení hlasitosti"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3133,6 +3233,11 @@ msgid "Desynchronize block animation"
msgstr "Nesynchronizovat animace bloků"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Dekorace"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Klávesa těžení"
@@ -3153,6 +3258,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+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ů."
@@ -3234,6 +3345,10 @@ msgid "Enable joysticks"
msgstr "Zapnout joysticky"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3250,18 +3365,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Povolit náhodný uživatelský vstup (pouze pro testování)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-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 ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3270,6 +3373,10 @@ msgstr ""
"VypnÄ›te pro zrychlení Äi jiný vzhled."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3362,6 +3469,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Interval vypisování profilovacích dat enginu"
@@ -3386,6 +3497,10 @@ msgstr ""
"s rovinatějšími nížinami, vhodné pro souvislou vrstvu létajících ostrovů."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "Snímky za sekundu (FPS) pÅ™i pauze Äi hÅ™e běžící na pozadí"
@@ -3471,8 +3586,9 @@ msgstr ""
"Toto nastavení je automaticky zapnuto, pokud je povoleno Mip-Mapování."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtrování"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Antialiasing:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3539,6 +3655,11 @@ msgid "Fog toggle key"
msgstr "Klávesa pro přepnutí mlhy"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Velikost písma"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "TuÄné písmo jako výchozí"
@@ -3704,6 +3825,19 @@ msgid "GUI scaling filter txr2img"
msgstr "Filtrovat při škálování GUI (txr2img)"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Hry"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Globální callback funkce"
@@ -3740,6 +3874,16 @@ msgid "Graphics"
msgstr "Grafika"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Grafika"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Grafika"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Gravitace"
@@ -3756,8 +3900,13 @@ msgid "HTTP mods"
msgstr "HTTP režimy"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "SouÄinitel Å¡kálování HUD"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "Měřítko GUI"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -4015,14 +4164,23 @@ msgstr ""
"Vyžaduje zapnuté vlnění kapalin."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"Jak dlouho bude server Äekat pÅ™ed uvolnÄ›ním nepotÅ™ebných mapbloků.\n"
"Vyšší hodnota zlepší rychlost programu, ale také způsobí větší spotřebu RAM."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "Snižte toto pro zvýšení odporu kapalin vůÄi pohybu."
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "Jak široké dělat řeky."
@@ -4095,6 +4253,15 @@ msgstr ""
"namísto klávesy \"Plížení\"."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+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 ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
@@ -4123,7 +4290,10 @@ msgstr ""
"hráÄova pohledu."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr "Když zapnuto, noví hráÄi se nemohou pÅ™ipojit s prázdným heslem."
#: src/settings_translation_file.cpp
@@ -4175,10 +4345,6 @@ msgid "Ignore world errors"
msgstr "Ignorovat chyby světa"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-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, 0 až 255)."
@@ -4236,15 +4402,12 @@ msgid "Instrument the methods of entities on registration."
msgstr "Instrumentovat metody entit při registraci."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Instrumentace"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr "Časový interval ukládání důležitých změn ve světě, udaný v sekundách."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "ÄŒasový interval, ve kterém se klientům posílá herní Äas."
#: src/settings_translation_file.cpp
@@ -5078,6 +5241,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr "Vyhodit hráÄe, který poslal více jak X zpráv bÄ›hem 10 sekund."
@@ -5135,10 +5302,11 @@ msgid "Left key"
msgstr "Doleva"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"Frekvence aktualizece objektů na serveru.\n"
"UrÄeno v délce jedné periody."
@@ -5152,18 +5320,25 @@ msgstr ""
"Vyžaduje zapnuté vlnění kapalin."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+#, fuzzy
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr "Frekvence vykonání cyklů Active Block Modifieru (ABM)"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "Frekvence vykonání cyklů ÄŒasovaÄeBloku"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "Frekvence vykonání cyklů aktivní správy bloků"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5172,7 +5347,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Úroveň ladících informací zapsaných do debug.txt:\n"
"- <nothing> (žádné ladící informace)\n"
@@ -5208,6 +5384,11 @@ msgid "Light curve low gradient"
msgstr "Křivka světla Nízký gradient"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Plynulé osvětlení"
+
+#: 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"
@@ -5625,10 +5806,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Nabídky"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5678,6 +5855,19 @@ msgid "Mipmapping"
msgstr "Mip-mapování"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "ZabezpeÄení"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5766,16 +5956,17 @@ msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Síť"
-
-#: 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
+#, fuzzy
+msgid "Networking"
+msgstr "Síť"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5788,6 +5979,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Osvícení bloku"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Dekorace oznaÄených bloků"
@@ -5825,10 +6021,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5924,10 +6116,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Jméno hráÄe"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5976,10 +6164,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -6155,6 +6339,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Obrazovka:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Výška obrazovky"
@@ -6185,6 +6374,10 @@ msgstr ""
"Použijte 0 pro výchozí kvalitu."
#: src/settings_translation_file.cpp
+msgid "Screenshots"
+msgstr "Obrázky"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -6199,10 +6392,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "První ze dvou 3D šumů, které dohromady definují tunely."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "ZabezpeÄení"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr ""
@@ -6262,8 +6451,19 @@ msgstr ""
"18 = 4D \"Mandelbulb\" – Juliova množina."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Server / Místní hra"
+#, fuzzy
+msgid "Server"
+msgstr "URL serveru"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Jméno serveru"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Popis serveru"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6290,10 +6490,20 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Port serveru"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "Adresa seznamu veřejných serverů"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "Adresa seznamu veřejných serverů"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Soubor se seznamem veřejných serverů"
@@ -6304,12 +6514,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -6317,7 +6529,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6408,7 +6620,7 @@ msgid ""
msgstr "Odsazení stínu písma, pokud je nastaveno na 0, stín nebude vykreslen."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6618,6 +6830,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Nastavení"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6822,7 +7039,7 @@ msgid "Time speed"
msgstr "Rychlost Äasu"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6847,10 +7064,19 @@ msgid "Touch screen threshold"
msgstr "Práh šumu pláže"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Práh šumu pláže"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6942,6 +7168,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -7185,6 +7415,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -7277,6 +7516,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -7320,6 +7563,9 @@ msgstr "cURL limit paralelních stahování"
#~ msgid "Back"
#~ msgstr "Zpět"
+#~ msgid "Basic"
+#~ msgstr "Základní"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Bitová hloubka (bity na pixel) v celoobrazovkovém režimu."
@@ -7335,6 +7581,12 @@ msgstr "cURL limit paralelních stahování"
#~ msgid "Configure"
#~ msgstr "Nastavit"
+#~ msgid "Connect"
+#~ msgstr "Připojit"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Stanovuje rychlost potápění v kapalinách."
+
#, fuzzy
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
@@ -7376,12 +7628,24 @@ msgstr "cURL limit paralelních stahování"
#~ "UrÄuje vyhlazovací krok textur.\n"
#~ "Vyšší hodnota znamená vyhlazenější normálové mapy."
+#~ msgid "Del. Favorite"
+#~ msgstr "Smazat oblíbené"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Stáhněte si z minetest.net hru, například Minetest Game"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Stáhněte si jednu z minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Stahuji a instaluji $1, prosím Äekejte..."
#~ msgid "Enable VBO"
#~ msgstr "Zapnout VBO"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Zapnout potvrzení registrace"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7409,6 +7673,9 @@ msgstr "cURL limit paralelních stahování"
#~ "Zapne parallax occlusion mapping.\n"
#~ "Nastavení vyžaduje zapnuté shadery."
+#~ msgid "Enter "
+#~ msgstr "Zadejte "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7428,6 +7695,9 @@ msgstr "cURL limit paralelních stahování"
#~ msgid "Fallback font size"
#~ msgstr "Velikost záložního písma"
+#~ msgid "Filtering"
+#~ msgstr "Filtrování"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Šum základní výšky létajících ostrovů"
@@ -7440,6 +7710,9 @@ msgstr "cURL limit paralelních stahování"
#~ msgid "Full screen BPP"
#~ msgstr "Bitová hloubka v celoobrazovkovém režimu"
+#~ msgid "Game"
+#~ msgstr "Hra"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7449,6 +7722,9 @@ msgstr "cURL limit paralelních stahování"
#~ msgid "Generate normalmaps"
#~ msgstr "Generovat normálové mapy"
+#~ msgid "HUD scale factor"
+#~ msgstr "SouÄinitel Å¡kálování HUD"
+
#~ msgid "High-precision FPU"
#~ msgstr "VýpoÄty ve FPU s vysokou pÅ™esností"
@@ -7458,9 +7734,21 @@ msgstr "cURL limit paralelních stahování"
#~ "NapÅ™.: 72 = 20 minut, 360 = 4 minuty, 1 = 24 hodin, 0 = Äas zůstává stále "
#~ "stejný."
+#~ msgid "In-Game"
+#~ msgstr "Ve hře"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Instalace: soubor: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Instrumentace"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Nastavení kláves (pokud toto menu je špatně naformátované, upravte "
+#~ "nastavení v minetest.conf)"
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "Hloubka velké jeskyně"
@@ -7472,6 +7760,9 @@ msgstr "cURL limit paralelních stahování"
#~ msgid "Main menu style"
#~ msgstr "Skript hlavní nabídky"
+#~ msgid "Menus"
+#~ msgstr "Nabídky"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Minimapa v režimu radar, Přiblížení x2"
@@ -7515,6 +7806,9 @@ msgstr "cURL limit paralelních stahování"
#~ msgid "Parallax occlusion scale"
#~ msgstr "Škála parallax occlusion"
+#~ msgid "Player name"
+#~ msgstr "Jméno hráÄe"
+
#~ msgid "PvP enabled"
#~ msgstr "PvP (hrÃ¡Ä proti hráÄi) povoleno"
@@ -7525,6 +7819,9 @@ msgstr "cURL limit paralelních stahování"
#~ msgid "Select Package File:"
#~ msgstr "Vybrat soubor s modem:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Server / Místní hra"
+
#, fuzzy
#~ msgid ""
#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
@@ -7560,6 +7857,21 @@ msgstr "cURL limit paralelních stahování"
#~ msgid "Yes"
#~ msgstr "Ano"
+#, 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 ""
+#~ "Budete poprvé připojeni k serveru \"%s\".\n"
+#~ "Pokud budete pokraÄovat, nový uživatelský úÄet s vaÅ¡imi údaji bude "
+#~ "vytvořen na tomto serveru.\n"
+#~ "Prosím znovu napište svoje aktuální heslo a klikněte na 'Registrovat a "
+#~ "Připojit se' pro potvrzení souhlasu, nebo vyberte 'Zrušit' pro návrat."
+
#~ msgid "You died."
#~ msgstr "Zemřel jsi."
diff --git a/po/da/minetest.po b/po/da/minetest.po
index 732d9f304..645c052c2 100644
--- a/po/da/minetest.po
+++ b/po/da/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Danish (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -116,6 +116,31 @@ msgid "The server has requested a reconnect:"
msgstr "Serveren har anmodet om at forbinde igen:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Vælg verden:"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Protokol versionerne matchede ikke. "
@@ -128,6 +153,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Serveren understøtter protokol versioner mellem $1 og $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Vi understøtter kun protokol version $1."
@@ -135,14 +164,21 @@ msgstr "Vi understøtter kun protokol version $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Vi understøtter protokol versioner mellem $1 og $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Anuller"
@@ -286,7 +322,6 @@ msgid "Failed to download $1"
msgstr "Kunne ikke hente $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Spil"
@@ -312,7 +347,6 @@ msgstr ""
"korrupt"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mods"
@@ -413,12 +447,9 @@ msgid "Decorations"
msgstr "Gentagelser"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Hent et spil, såsom Minetest Game fra minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Hent en fra minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Advarsel: Den minimale udvikings test er kun lavet for udviklerne."
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
@@ -438,10 +469,6 @@ msgstr ""
msgid "Floatlands (experimental)"
msgstr "Svævelandsniveau"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Spil"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr ""
@@ -460,6 +487,15 @@ msgid "Increases humidity around rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Installer"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr ""
@@ -563,11 +599,6 @@ 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 "Advarsel: Den minimale udvikings test er kun lavet for udviklerne."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Verdens navn"
@@ -599,6 +630,39 @@ msgstr "Modmgr: ugyldig mod-sti \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Slet verden \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Bekræft kodeord"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Mapgen-navn"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Password"
+msgstr "Nyt kodeord"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Kodeordene er ikke ens!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Accepter"
@@ -631,6 +695,16 @@ msgstr "< Tilbage til siden Indstillinger"
msgid "Browse"
msgstr "Gennemse"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Indhold"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Indhold"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Deaktiveret"
@@ -689,7 +763,7 @@ msgstr "Vælg mappe"
msgid "Select file"
msgstr "Vælg fil"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Vis tekniske navne"
@@ -839,6 +913,10 @@ msgstr "Tidligere bidragere"
msgid "Previous Core Developers"
msgstr "Tidligere primære udviklere"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Gennemse online indhold"
@@ -907,10 +985,6 @@ msgstr "Host Server"
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 "Ny"
@@ -919,11 +993,6 @@ msgstr "Ny"
msgid "No world created or selected!"
msgstr "Ingen verden oprettet eller valgt!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "Nyt kodeord"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Start spil"
@@ -960,10 +1029,6 @@ msgid "Clear"
msgstr "Ryd"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Forbind"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Kreativ tilstand"
@@ -974,10 +1039,6 @@ msgid "Damage / PvP"
msgstr "Skade"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Slet favorit"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "Favorit"
@@ -992,6 +1053,10 @@ msgid "Join Game"
msgstr "Vær vært for spil"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -1006,10 +1071,19 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "Fjernport"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "Serverbeskrivelse"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1057,8 +1131,9 @@ msgid "Dynamic shadows"
msgstr "Fontskygge"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr ""
+#, fuzzy
+msgid "Dynamic shadows:"
+msgstr "Fontskygge"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1156,7 +1231,7 @@ msgstr "Toneoversættelse"
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr "Føletærskel (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1164,7 +1239,7 @@ msgid "Trilinear Filter"
msgstr "Tri-lineær filtréring"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1184,6 +1259,11 @@ msgstr "Bølgende blade"
msgid "Waving Plants"
msgstr "Bølgende planter"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Forbindelses fejl (udløbelse af tidsfrist?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Forbindelses fejl (tidsfristen udløb)."
@@ -1325,7 +1405,7 @@ msgid "Camera update enabled"
msgstr "Tast til ændring af kameraopdatering"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1459,6 +1539,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Opretter klient ..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Afslut til menu"
@@ -1978,24 +2063,6 @@ msgstr "Kunne ikke hente $1"
msgid "Opening webpage"
msgstr ""
-#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
-msgid "Passwords do not match!"
-msgstr "Kodeordene er ikke ens!"
-
-#: 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 "Fortsæt"
@@ -2031,7 +2098,7 @@ msgstr ""
msgid "Change camera"
msgstr "Skift bindinger"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Snak"
@@ -2086,10 +2153,8 @@ msgid "Key already in use"
msgstr "Tast allerede i brug"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Tastebindinger. (Hvis denne menu fucker op, fjern elementer fra minetest."
-"conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2165,10 +2230,6 @@ msgid "Change"
msgstr "Skift"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Bekræft kodeord"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nyt kodeord"
@@ -2176,6 +2237,10 @@ msgstr "Nyt kodeord"
msgid "Old Password"
msgstr "Gammelt kodeord"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Kodeordene er ikke ens!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Afslut"
@@ -2190,12 +2255,6 @@ msgstr "Lydløs"
msgid "Sound Volume: %d%%"
msgstr "Lydstyrke: %d%%"
-#. ~ 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).
@@ -2203,6 +2262,16 @@ msgstr " "
msgid "LANG_CODE"
msgstr "da"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Vælg venligst et navn!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2346,6 +2415,10 @@ msgstr ""
"- pageflip: quadbuffer baseret 3d."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2437,6 +2510,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Verdens navn"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avanceret"
@@ -2450,7 +2528,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Flyv altid og hurtigt"
#: src/settings_translation_file.cpp
@@ -2521,6 +2600,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Automatic forward key"
msgstr "Fremadtast"
@@ -2567,10 +2650,6 @@ msgid "Base terrain height."
msgstr "Baseterrænhøjde"
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Grundlæggende"
-
-#: src/settings_translation_file.cpp
#, fuzzy
msgid "Basic privileges"
msgstr "Grundlæggende privilegier"
@@ -2593,7 +2672,7 @@ msgstr "Bind adresse"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr "Biom API temperatur og luftfugtighed støj parametre"
#: src/settings_translation_file.cpp
@@ -2606,6 +2685,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2631,6 +2714,11 @@ msgid "Builtin"
msgstr "Indbygget"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Skift bindinger"
+
+#: 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"
@@ -2802,6 +2890,11 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Klient modding"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Klatringshastighed"
@@ -2905,6 +2998,10 @@ msgid "Console height"
msgstr "Konsolhøjde"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2943,7 +3040,9 @@ msgstr ""
"helst forbliver uændret."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3012,15 +3111,15 @@ msgid "Debug log level"
msgstr "Logniveau for fejlsøgning"
#: src/settings_translation_file.cpp
+msgid "Debugging"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Dec. volume key"
msgstr "Dec. lydstyrketasten"
#: 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 "Dedikeret server-trin"
@@ -3171,6 +3270,11 @@ msgstr "Afsynkroniser blokanimation"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Developer Options"
+msgstr "Gentagelser"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Dig key"
msgstr "Højretast"
@@ -3191,6 +3295,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+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."
@@ -3265,6 +3375,10 @@ msgid "Enable joysticks"
msgstr "Aktivér joysticks"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Enable mod channels support."
msgstr "Aktiver mod-sikkerhed"
@@ -3282,16 +3396,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Aktiver vilkårlig brugerinddata (kun til test)."
#: 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."
@@ -3300,6 +3404,10 @@ msgstr ""
"Deaktiver for hastighed eller for anderledes udseender."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3383,6 +3491,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Udskrivningsinterval for motorprofileringsdata"
@@ -3401,6 +3513,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3495,8 +3611,9 @@ msgstr ""
"op i dette på indlæsningstidspunktet for tekstur."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtrering"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Udjævning:"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3571,6 +3688,11 @@ msgid "Fog toggle key"
msgstr "Tast for tåge"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Skriftstørrelse"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3732,6 +3854,19 @@ msgid "GUI scaling filter txr2img"
msgstr "GUI-skaleringsfilter txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Spil"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Globale tilbagekald"
@@ -3767,6 +3902,16 @@ msgid "Graphics"
msgstr "Grafik"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Grafik"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Grafik"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Tyngdekraft"
@@ -3786,8 +3931,13 @@ msgid "HTTP mods"
msgstr "HTTP-Mod'er"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "HUD-skaleringsfaktor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "Skalering af grafisk brugerflade"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -4044,14 +4194,22 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"Hvor lang tid serveren vil vente før ubrugt kortblokke fjernes.\n"
"Højere værdier er længere tid, men vil bruge mere RAM."
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "How wide to make rivers."
msgstr "Hvor brede floder skal være"
@@ -4124,6 +4282,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -4150,7 +4314,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
"Hvis aktiveret kan nye spillere ikke slutte sig til uden en tom adgangskode."
@@ -4195,10 +4362,6 @@ msgid "Ignore world errors"
msgstr "Ignorer verdensfejl"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "I-spil"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
"Baggrundsalfa for snakkekonsollen i spillet (uigennemsigtighed, mellem 0 og "
@@ -4259,16 +4422,13 @@ msgid "Instrument the methods of entities on registration."
msgstr "Udstyr metoderne for enheder ved registrering."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Instrumentering"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""
"Interval for lagring af vigtige ændringer i verden, angivet i sekunder."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "Interval for afsendelse af tidspunkt på dagen til klienter."
#: src/settings_translation_file.cpp
@@ -5171,6 +5331,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -5232,7 +5396,7 @@ msgstr "Venstretast"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"Længde på serveraktivering og intervallet som objekter opdateres efter over "
"netværket."
@@ -5248,19 +5412,24 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr "Tidslængde mellem ABM-kørselscyklusser"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "Tidslængde mellem NodeTimer-kørselscyklusser"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "Tidslængde mellem ABM-kørselscyklusser"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5269,7 +5438,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Niveau for logning der skrives til debug.txt:\n"
"- <nothing> (ingen logning)\n"
@@ -5305,6 +5475,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Glat belysning"
+
+#: 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"
@@ -5739,10 +5914,6 @@ msgid "Maximum users"
msgstr "Maksimum antal brugere"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menuer"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5793,6 +5964,19 @@ msgid "Mipmapping"
msgstr "Mipmapping"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Sikkerhed"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5881,16 +6065,17 @@ msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Netværk"
-
-#: 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
+#, fuzzy
+msgid "Networking"
+msgstr "Netværk"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5903,6 +6088,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Knudepunktsfremhævelse"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5940,10 +6130,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -6041,10 +6227,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Spillerens navn"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -6092,10 +6274,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -6273,6 +6451,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Skærm:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Skærmhøjde"
@@ -6301,6 +6484,11 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Screenshots"
+msgstr "Skærmbillede"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Seabed noise"
msgstr "Havbunden støj"
@@ -6315,10 +6503,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Første af 2 3D-støj, der sammen definerer tunneler."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Sikkerhed"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr ""
@@ -6378,8 +6562,19 @@ msgstr ""
"18 = 4D »Mandelbulb« julia-sæt."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Server/alene"
+#, fuzzy
+msgid "Server"
+msgstr "Server-URL"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Servernavn"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Serverbeskrivelse"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6406,10 +6601,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Server port"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -6420,12 +6624,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -6433,7 +6639,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6529,7 +6735,7 @@ msgstr ""
"Forskydning for skrifttypeskygge, hvis 0 så vil skygge ikke blive tegnet."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6733,6 +6939,11 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Temporary Settings"
+msgstr "Indstillinger"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Terrain alternative noise"
msgstr "Terræn base støj"
@@ -6940,7 +7151,7 @@ msgid "Time speed"
msgstr "Tidshastighed"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6965,10 +7176,19 @@ msgid "Touch screen threshold"
msgstr "Strandstøjtærskel"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Strandstøjtærskel"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -7060,6 +7280,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7303,6 +7527,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -7395,6 +7628,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -7437,6 +7674,9 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "Tilbage"
+#~ msgid "Basic"
+#~ msgstr "Grundlæggende"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Bit per billedpunkt (a.k.a. farvedybde) i fuldskærmtilstand."
@@ -7454,6 +7694,9 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Konfigurér"
+#~ msgid "Connect"
+#~ msgstr "Forbind"
+
#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels."
#~ msgstr ""
#~ "Styrer bredden af tunneller. En lavere værdi giver bredere tunneller."
@@ -7485,6 +7728,15 @@ msgstr ""
#~ "Definerer sampling-trin for tekstur.\n"
#~ "En højere værdi resulterer i en mere rullende normale kort."
+#~ msgid "Del. Favorite"
+#~ msgstr "Slet favorit"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Hent et spil, såsom Minetest Game fra minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Hent en fra minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Henter og installerer $1, vent venligst..."
@@ -7519,6 +7771,9 @@ msgstr ""
#~ "Aktiverer parallax-okklusionoversættelse.\n"
#~ "Kræver at dybdeskabere er aktiveret."
+#~ msgid "Enter "
+#~ msgstr " "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7538,6 +7793,9 @@ msgstr ""
#~ msgid "Fallback font size"
#~ msgstr "Størrelse for reserveskrifttypen"
+#~ msgid "Filtering"
+#~ msgstr "Filtrering"
+
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Alfa for skrifttypeskygge (uigennemsigtighed, mellem 0 og 255)."
@@ -7548,6 +7806,9 @@ msgstr ""
#~ msgid "Full screen BPP"
#~ msgstr "Fuldskærm BPP"
+#~ msgid "Game"
+#~ msgstr "Spil"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7558,15 +7819,30 @@ msgstr ""
#~ msgid "Generate normalmaps"
#~ msgstr "Opret normalkort"
+#~ msgid "HUD scale factor"
+#~ msgstr "HUD-skaleringsfaktor"
+
#~ msgid "High-precision FPU"
#~ msgstr "Højpræcisions FPU"
#~ msgid "IPv6 support."
#~ msgstr "Understøttelse af IPv6."
+#~ msgid "In-Game"
+#~ msgstr "I-spil"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Installer mod: Fil: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Instrumentering"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Tastebindinger. (Hvis denne menu fucker op, fjern elementer fra minetest."
+#~ "conf)"
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "Dybde for stor hule"
@@ -7585,6 +7861,9 @@ msgstr ""
#~ msgstr ""
#~ "FÃ¥r DirectX til at fungere med LuaJIT. Deaktiver hvis det giver problemer."
+#~ msgid "Menus"
+#~ msgstr "Menuer"
+
#~ msgid "Name / Password"
#~ msgstr "Navn/adgangskode"
@@ -7604,6 +7883,9 @@ msgstr ""
#~ msgid "Parallax occlusion scale"
#~ msgstr "Parallax-okklusion"
+#~ msgid "Player name"
+#~ msgstr "Spillerens navn"
+
#~ msgid "PvP enabled"
#~ msgstr "Spiller mod spiller aktiveret"
@@ -7613,6 +7895,9 @@ msgstr ""
#~ msgid "Select Package File:"
#~ msgstr "Vælg pakke fil:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Server/alene"
+
#, fuzzy
#~ msgid "Shadow limit"
#~ msgstr "Skygge grænse"
diff --git a/po/de/minetest.po b/po/de/minetest.po
index 972359a32..36d47a74a 100644
--- a/po/de/minetest.po
+++ b/po/de/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: German (Minetest)\n"
"Report-Msgid-Bugs-To: \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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-24 09:24+0000\n"
+"Last-Translator: Wuzzy <Wuzzy@disroot.org>\n"
"Language-Team: German <https://hosted.weblate.org/projects/minetest/minetest/"
"de/>\n"
"Language: de\n"
@@ -12,7 +12,7 @@ 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.11-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -114,6 +114,34 @@ msgid "The server has requested a reconnect:"
msgstr "Der Server hat um eine Wiederverbindung gebeten:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr "Eine neue $1-Version ist verfügbar"
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr "Client-Mods"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+"Installierte Version: $1\n"
+"Neue Version: $2\n"
+"Besuchen Sie $3, um herauszufinden, wie man die neueste Version erhält und auf "
+"dem neuesten Stand mit Features und Fehlerbehebungen bleibt."
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr "Später"
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr "Niemals"
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Protokollversion stimmt nicht überein. "
@@ -126,6 +154,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Der Server unterstützt die Protokollversionen von $1 bis $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr "Webseite besuchen"
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Wir unterstützen nur Protokollversion $1."
@@ -133,14 +165,21 @@ msgstr "Wir unterstützen nur Protokollversion $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Wir unterstützen Protokollversionen zwischen $1 und $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr "(Aktiviert, hat Fehler)"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+msgstr "(Nicht erfüllt)"
+
#: 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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Abbrechen"
@@ -280,7 +319,6 @@ msgid "Failed to download $1"
msgstr "Fehler beim Download von $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Spiele"
@@ -301,7 +339,6 @@ 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"
@@ -394,12 +431,8 @@ msgid "Decorations"
msgstr "Dekorationen"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Laden Sie sich ein Spiel (wie Minetest Game) von minetest.net herunter"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Spiele können von minetest.net heruntergeladen werden"
+msgid "Development Test is meant for developers."
+msgstr "Development Test ist für Entwickler gedacht."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -417,10 +450,6 @@ msgstr "Schwebende Landmassen im Himmel"
msgid "Floatlands (experimental)"
msgstr "Schwebeländer (experimentell)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Spiel"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Nicht-fraktales Gelände erzeugen: Ozeane und Untergrund"
@@ -438,6 +467,14 @@ msgid "Increases humidity around rivers"
msgstr "Erhöht die Luftfeuchte um Flüsse"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr "Ein Spiel installieren"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr "Ein anderes Spiel installieren"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Seen"
@@ -542,10 +579,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Sehr große Hohlräume tief im Untergrund"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Achtung: Der Development Test ist für Entwickler gedacht."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Weltname"
@@ -575,6 +608,36 @@ msgstr "pkgmgr: Ungültiger Pfad „$1“"
msgid "Delete World \"$1\"?"
msgstr "Die Welt „$1“ löschen?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Passw. bestätigen"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr "$1 beitreten"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr "Fehlender Name"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Name"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Passwort"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr "Passwörter stimmen nicht überein"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr "Registrieren"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Annehmen"
@@ -607,6 +670,14 @@ msgstr "< Einstellungsseite"
msgid "Browse"
msgstr "Durchsuchen"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr "Inhalt: Spiele"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr "Inhalt: Mods"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Deaktiviert"
@@ -663,7 +734,7 @@ msgstr "Verzeichnis auswählen"
msgid "Select file"
msgstr "Datei auswählen"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Techn. Bezeichnung zeigen"
@@ -814,13 +885,17 @@ msgstr "Frühere Mitwirkende"
msgid "Previous Core Developers"
msgstr "Ehemalige Hauptentwickler"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr "Debug-Log teilen"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Onlineinhalte durchsuchen"
#: builtin/mainmenu/tab_content.lua
msgid "Content"
-msgstr "Inhalte"
+msgstr "Inhalt"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
@@ -882,10 +957,6 @@ msgstr "Server hosten"
msgid "Install games from ContentDB"
msgstr "Spiele aus ContentDB installieren"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Name"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Neu"
@@ -894,10 +965,6 @@ msgstr "Neu"
msgid "No world created or selected!"
msgstr "Keine Welt angegeben oder ausgewählt!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Passwort"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Spiel starten"
@@ -931,10 +998,6 @@ msgid "Clear"
msgstr "Clear"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Verbinden"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Kreativmodus"
@@ -944,10 +1007,6 @@ msgid "Damage / PvP"
msgstr "Schaden / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Favorit löschen"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Favoriten"
@@ -960,6 +1019,10 @@ msgid "Join Game"
msgstr "Spiel beitreten"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr "Login"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Latenz"
@@ -972,10 +1035,18 @@ msgid "Refresh"
msgstr "Neu laden"
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr "Favorit entfernen"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Serverbeschreibung"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr "(Spielunterstützung benötigt)"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1020,8 +1091,8 @@ msgid "Dynamic shadows"
msgstr "Dynamische Schatten"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr "Dynamische Schatten: "
+msgid "Dynamic shadows:"
+msgstr "Dynamische Schatten:"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1116,15 +1187,15 @@ msgid "Tone Mapping"
msgstr "Dynamikkompression"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr "Berührungsempfindlichkeit: (px)"
+msgid "Touch threshold (px):"
+msgstr "Berührungsempfindlichkeit (px):"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
msgstr "Trilinearer Filter"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr "Sehr hoch"
#: builtin/mainmenu/tab_settings.lua
@@ -1143,9 +1214,13 @@ msgstr "Flüssigkeitswellen"
msgid "Waving Plants"
msgstr "Wehende Pflanzen"
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr "Verbindung abgebrochen (Protokollfehler?)."
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
-msgstr "Verbindungsfehler, Zeitüberschreitung."
+msgstr "Zeitüberschreitung."
#: src/client/client.cpp
msgid "Done!"
@@ -1165,7 +1240,7 @@ msgstr "Lade Texturen …"
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-msgstr "Shader erneuern…"
+msgstr "Shader erneuern …"
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
@@ -1278,9 +1353,9 @@ msgid "Camera update enabled"
msgstr "Kameraaktualisierung aktiviert"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
-"Blockgrenzen können nicht gezeigt werden („basic_debug“-Privileg benötigt)"
+"Blockgrenzen können nicht gezeigt werden (von Mod oder Spiel deaktiviert)"
#: src/client/game.cpp
msgid "Change Password"
@@ -1409,6 +1484,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Unbegrenzte Sichtweite aktiviert"
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr "Fehler bei Erstellung des Clients: %s"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Hauptmenü"
@@ -1912,32 +1992,7 @@ 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!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Registrieren und beitreten"
-
-#: 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 ""
-"Sie sind im Begriff, dem Server mit dem Namen „%s“ für das erste Mal "
-"beizutreten.\n"
-"Falls Sie fortfahren, wird ein neues Benutzerkonto mit Ihren Anmeldedaten "
-"auf diesem Server erstellt.\n"
-"Bitte geben Sie Ihr Passwort erneut ein und klicken Sie auf „Registrieren "
-"und beitreten“, um die Erstellung des Benutzerkontos zu bestätigen oder "
-"klicken Sie auf „Abbrechen“ zum Abbrechen."
+msgstr "Öffne Webseite"
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
@@ -1971,7 +2026,7 @@ msgstr "Blockgrenzen"
msgid "Change camera"
msgstr "Kamerawechsel"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Chat"
@@ -2024,10 +2079,8 @@ msgid "Key already in use"
msgstr "Taste bereits in Benutzung"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"Steuerung (Falls dieses Menü defekt ist, entfernen Sie Zeugs aus minetest."
-"conf)"
+msgid "Keybindings."
+msgstr "Tastenbelegung."
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2098,10 +2151,6 @@ msgid "Change"
msgstr "Ändern"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Passw. bestätigen"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Neues Passwort"
@@ -2109,6 +2158,10 @@ msgstr "Neues Passwort"
msgid "Old Password"
msgstr "Altes Passwort"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Passwörter stimmen nicht überein!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Zurück"
@@ -2122,12 +2175,6 @@ msgstr "Stumm"
msgid "Sound Volume: %d%%"
msgstr "Tonlautstärke: %d%%"
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Eingabe "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2135,6 +2182,17 @@ msgstr "Eingabe "
msgid "LANG_CODE"
msgstr "de"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+"Name ist nicht registriert. Um ein Konto auf diesem Server zu erstellen, "
+"klicken Sie auf „Registrieren“"
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr "Name ist belegt. Bitte einen anderen Namen wählen"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2311,6 +2369,10 @@ msgstr ""
"sind."
#: src/settings_translation_file.cpp
+msgid "3d"
+msgstr "3-D"
+
+#: 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."
@@ -2411,6 +2473,10 @@ msgstr ""
"Schwebelandebene."
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr "Admin-Name"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Erweitert"
@@ -2431,7 +2497,7 @@ msgstr ""
"auf natürliches Licht bei Nacht."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr "Immer schnell fliegen"
#: src/settings_translation_file.cpp
@@ -2513,6 +2579,10 @@ msgstr ""
"In Kartenblöcken (16 Blöcke) angegeben."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr "Ton"
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Vorwärtsautomatiktaste"
@@ -2553,10 +2623,6 @@ msgid "Base terrain height."
msgstr "Basisgeländehöhe."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Grundlegend"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Grundprivilegien"
@@ -2577,8 +2643,8 @@ msgid "Bind address"
msgstr "Bind-Adresse"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
-msgstr "Biom-API-Temperatur- und Luftfeuchtigkeits-Rauschparameter"
+msgid "Biome API noise parameters"
+msgstr "Biom-API-Rauschparameter"
#: src/settings_translation_file.cpp
msgid "Biome noise"
@@ -2589,6 +2655,10 @@ msgid "Block send optimize distance"
msgstr "Distanz für Sendeoptimierungen von Kartenblöcken"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr "Wackeln"
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Pfad der Fett- und Kursivschrift"
@@ -2613,6 +2683,10 @@ msgid "Builtin"
msgstr "Builtin"
#: src/settings_translation_file.cpp
+msgid "Camera"
+msgstr "Kamera"
+
+#: 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"
@@ -2779,6 +2853,10 @@ msgid "Client side node lookup range restriction"
msgstr "Distanzlimit für clientseitige Block-Definitionsabfrage"
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr "Clientseitiges Modding"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Klettergeschwindigkeit"
@@ -2899,6 +2977,10 @@ msgid "Console height"
msgstr "Konsolenhöhe"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr "Inhaltespeicher"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "ContentDB: Schwarze Liste"
@@ -2939,8 +3021,13 @@ msgstr ""
"unverändert."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Regelt die Sinkgeschwindigkeit in Flüssigkeiten."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
+"Beeinflusst die Sinkgeschwindigkeit in der Flüssigkeit, wenn man sich nicht "
+"bewegt.\n"
+"Negative Werte werden Sie stattdessen aufsteigen lassen."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -3013,13 +3100,12 @@ msgid "Debug log level"
msgstr "Debugausgabelevel"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Leiser-Taste"
+msgid "Debugging"
+msgstr "Debugging"
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
-"Dies verringern, um den Bewegungswiderstand in Flüssigkeiten zu erhöhen."
+msgid "Dec. volume key"
+msgstr "Leiser-Taste"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3181,6 +3267,10 @@ msgid "Desynchronize block animation"
msgstr "Blockanimationen desynchronisieren"
#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr "Entwickleroptionen"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Grabetaste"
@@ -3201,6 +3291,16 @@ msgid "Display Density Scaling Factor"
msgstr "Anzeigendichtenskalierungsfaktor"
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+"Entfernung in Nodes, bei welcher die Transparenztiefensortierung aktiviert "
+"ist.\n"
+"Dies benutzen, um die Performanzeinbußen der Transparenztiefensortierung zu "
+"begrenzen"
+
+#: 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."
@@ -3280,6 +3380,10 @@ msgid "Enable joysticks"
msgstr "Joysticks aktivieren"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr "Aktiviert Joysticks. Benötigt einen Neustart, um wirksam zu werden"
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Modkanäle-Unterstützung aktivieren."
@@ -3296,19 +3400,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Schaltet zufällige Steuerung ein (nur zum Testen verwendet)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-msgstr "Registrierungsbestätigung aktivieren"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
-msgstr ""
-"Registrierungsbestätigung aktivieren, wenn zu einem\n"
-"Server verbunden wird. Falls deaktiviert, wird ein neues\n"
-"Benutzerkonto automatisch registriert."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3317,6 +3408,10 @@ msgstr ""
"Für bessere Performanz oder anderes Aussehen deaktivieren."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+msgstr "Login und Registrierung trennen"
+
+#: 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 "
@@ -3358,8 +3453,7 @@ msgid ""
"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
msgstr ""
"Hiermit aktiviert man die Auf- und Abbewegung\n"
-"der Ansicht und legt außerdem die Stärke des\n"
-"Effekts fest.\n"
+"der Ansicht und legt außerdem die Stärke des Effekts fest.\n"
"Zum Beispiel: 0 für keine Auf- und Abbewegung,\n"
"1.0 für den Standardwert, 2.0 für doppelte Geschwindigkeit."
@@ -3422,6 +3516,10 @@ msgstr ""
"beeinträchtigen."
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr "Engine-Profiler"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Engine-Profiling-Datenausgabeintervall"
@@ -3447,6 +3545,10 @@ msgstr ""
"geeignet."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr "Bildwiederholrate"
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
"Maximale Bildwiederholrate, während das Spiel pausiert oder nicht fokussiert "
@@ -3462,7 +3564,7 @@ msgstr "Faktorrauschen"
#: src/settings_translation_file.cpp
msgid "Fall bobbing factor"
-msgstr "Kameraschütteln beim Sturz"
+msgstr "Kamerawackeln beim Sturz"
#: src/settings_translation_file.cpp
msgid "Fallback font path"
@@ -3536,8 +3638,8 @@ msgstr ""
"aktiviert ist."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filter"
+msgid "Filtering and Antialiasing"
+msgstr "Filter und Antialiasing"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3606,6 +3708,10 @@ msgid "Fog toggle key"
msgstr "Taste für Nebel umschalten"
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr "Schrift"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Schrift standardmäßig fett"
@@ -3791,6 +3897,18 @@ msgid "GUI scaling filter txr2img"
msgstr "GUI-Skalierungsfilter txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr "GUIs"
+
+#: src/settings_translation_file.cpp
+msgid "Gamepads"
+msgstr "Gamepads"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "Allgemein"
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Globale Rückruffunktionen"
@@ -3826,6 +3944,14 @@ msgid "Graphics"
msgstr "Grafik"
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr "Grafikeffekte"
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr "Grafik und Ton"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Gravitation"
@@ -3842,8 +3968,12 @@ msgid "HTTP mods"
msgstr "HTTP-Mods"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "HUD-Skalierungsfaktor"
+msgid "HUD"
+msgstr "HUD"
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
+msgstr "HUD-Skalierung"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -4105,12 +4235,22 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
-"Wie lange der Server warten wird, bevor nicht mehr verwendete Kartenblöcke\n"
-"entladen werden. Ein höher Wert führt zu besserer Performanz, aber auch\n"
-"zur Benutzung von mehr Arbeitsspeicher."
+"Wie lange der Server warten wird, bevor nicht mehr verwendete Kartenblöcke "
+"entladen werden, in Sekunden.\n"
+"Ein höher Wert wird das Programm flüssiger laufen lassen, aber auch mehr "
+"Arbeitsspeicher benutzen."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+"Wie stark man bei der Bewegung in einer Flüssigkeit verlangsamt wird.\n"
+"Dies verringern, um den Bewegungswiderstand in Flüssigkeiten zu erhöhen."
#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
@@ -4189,6 +4329,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Falls aktiviert, wird die Kontoregistrierung vom Einloggen in der "
+"Benutzeroberfläche getrennt behandelt.\n"
+"Falls deaktiviert, werden neue Konten beim Einloggen automatisch registriert."
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -4219,10 +4368,12 @@ msgstr ""
"beim Fliegen oder Schwimmen sein."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
-"Falls aktiviert, können neue Spieler nicht mit einem leeren Passwort "
-"beitreten."
+"Falls aktiviert, können neue Spieler nicht ohne ein Passwort beitreten oder "
+"ihr Passwort zu ein leeres Passwort ändern."
#: src/settings_translation_file.cpp
msgid ""
@@ -4277,10 +4428,6 @@ msgid "Ignore world errors"
msgstr "Weltfehler ignorieren"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "Spiel"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
"Undurchsichtigkeit des Hintergrundes der Chat-Konsole im Spiel (Wert "
@@ -4344,17 +4491,15 @@ msgid "Instrument the methods of entities on registration."
msgstr "Die Methoden von Entitys bei ihrer Registrierung instrumentieren."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Instrumentierung"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""
"Zeitintervall des Abspeicherns wichtiger Änderungen in der Welt, in Sekunden."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
-msgstr "Zeitintervall, in dem die Tageszeit an Clients gesendet wird."
+msgid "Interval of sending time of day to clients, stated in seconds."
+msgstr ""
+"Zeitintervall, in dem die Tageszeit an Clients gesendet wird, in Sekunden "
+"angegeben."
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
@@ -5213,6 +5358,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr "Tastatur und Maus"
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
"Spieler, die mehr als X Nachrichten innerhalb von 10 Sekunden sendeten, "
@@ -5275,11 +5424,11 @@ msgstr "Linkstaste"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"Länge eines Servertakts und dem Zeitintervall, in dem Objekte über das "
"Netzwerk\n"
-"üblicherweise aktualisiert werden."
+"üblicherweise aktualisiert werden; in Sekunden angegeben."
#: src/settings_translation_file.cpp
msgid ""
@@ -5290,16 +5439,20 @@ msgstr ""
"Dafür müssen Flüssigkeitswellen aktiviert sein."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
-msgstr "Dauer zwischen Active-Block-Modifier-(ABM)-Ausführungszyklen"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
+msgstr ""
+"Dauer zwischen Active-Block-Modifier-(ABM)-Ausführungszyklen, in Sekunden."
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
-msgstr "Dauer der Zeit zwischen NodeTimer-Ausführungszyklen"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
+msgstr "Dauer der Zeit zwischen NodeTimer-Ausführungszyklen, in Sekunden."
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
-msgstr "Zeit zwischen Active-Block-Management-Zyklen"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
+msgstr "Zeit zwischen Active-Block-Management-Zyklen, in Sekunden."
#: src/settings_translation_file.cpp
msgid ""
@@ -5310,17 +5463,19 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Bis zu welcher Stufe Protokollmeldungen in debug.txt geschrieben werden "
"sollen:\n"
"- <nichts> (keine Protokollierung)\n"
"- none (Meldungen ohne Einstufung)\n"
-"- error (Fehler)\n"
-"- warning (Warnungen)\n"
-"- action (Aktionen)\n"
-"- info (Informationen)\n"
-"- verbose (Ausführlich)"
+"- error\n"
+"- warning\n"
+"- action\n"
+"- info\n"
+"- verbose\n"
+"- trace"
#: src/settings_translation_file.cpp
msgid "Light curve boost"
@@ -5347,6 +5502,10 @@ msgid "Light curve low gradient"
msgstr "Lichtkurve: Niedriger Gradient"
#: src/settings_translation_file.cpp
+msgid "Lighting"
+msgstr "Licht"
+
+#: 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"
@@ -5803,10 +5962,6 @@ msgid "Maximum users"
msgstr "Maximale Benutzerzahl"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menüs"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "3-D-Modell-Zwischenspeicher"
@@ -5858,6 +6013,18 @@ msgid "Mipmapping"
msgstr "Mip-Mapping"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr "Sonstiges"
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr "Mod-Profiler"
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr "Mod-Sicherheit"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "Mod-Kanäle"
@@ -5910,9 +6077,9 @@ msgid ""
"Multiplier for fall bobbing.\n"
"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
msgstr ""
-"Faktor für Kameraschütteln beim Sturz.\n"
-"Zum Beispiel: 0 für kein Schütteln, 1.0 für den Standardwert, 2.0 für "
-"doppelte Geschwindigkeit."
+"Faktor für Kamerawackeln beim Sturz.\n"
+"Zum Beispiel: 0 für kein Wackeln, 1.0 für den Standardwert, 2.0 für doppelte "
+"Geschwindigkeit."
#: src/settings_translation_file.cpp
msgid "Mute key"
@@ -5957,10 +6124,6 @@ msgid "Near plane"
msgstr "Vordere Ebene"
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Netzwerk"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
@@ -5969,6 +6132,10 @@ msgstr ""
"Dieser Wert wird überschrieben, wenn vom Hauptmenü aus gestartet wird."
#: src/settings_translation_file.cpp
+msgid "Networking"
+msgstr "Netzwerk"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Neue Benutzer müssen dieses Passwort eingeben."
@@ -5981,6 +6148,10 @@ msgid "Noclip key"
msgstr "Geistmodustaste"
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr "Block- und Entityhervorhebung"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Blockhervorhebung"
@@ -6033,10 +6204,6 @@ msgstr ""
"Transaktions-Overhead und Speicherverbrauch (Faustregel: 4096=100MB)."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Online-Inhaltespeicher"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "Undurchsichtige Flüssigkeiten"
@@ -6150,10 +6317,6 @@ msgstr ""
"Dafür wird das „fly“-Privileg auf dem Server benötigt."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Spielername"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "Spieler-Übertragungsdistanz"
@@ -6210,10 +6373,6 @@ msgid "Profiler toggle key"
msgstr "Profiler-Umschalten-Taste"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Profiling"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr "Prometheus-Lauschadresse"
@@ -6408,6 +6567,10 @@ msgstr ""
"ganzzahligen Größen skaliert werden."
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr "Monitor"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Bildschirmhöhe"
@@ -6438,6 +6601,10 @@ msgstr ""
"Benutzen Sie 0 für die Standardqualität."
#: src/settings_translation_file.cpp
+msgid "Screenshots"
+msgstr "Bildschirmfotos"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Meeresgrundrauschen"
@@ -6452,10 +6619,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Das zweite von zwei 3-D-Rauschen, welche gemeinsam Tunnel definieren."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Sicherheit"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Siehe https://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6514,8 +6677,16 @@ msgstr ""
"18 = 4-D-Juliamenge, Typ „Mandelbulb“."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Server / Einzelspieler"
+msgid "Server"
+msgstr "Server"
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr "Server-Gameplay"
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
+msgstr "Serversicherheit"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6542,10 +6713,18 @@ msgid "Server side occlusion culling"
msgstr "Serverseitiges Occlusion Culling"
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr "Server-/Umgebungsperformanz"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "Serverlisten-URL"
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr "Serverliste und MOTD"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Serverlistendatei"
@@ -6558,17 +6737,20 @@ msgstr ""
"Nach Änderung ist ein Neustart erforderlich."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
-"Setzt die maximale Zeichenlänge einer Chatnachricht, die von einem Client "
-"gesendet wurde."
+"Setzt die maximale Zeichenlänge einer Chatnachricht (in Zeichen), die von "
+"Clients gesendet wird."
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
-"Setzt die Schattenstärke.\n"
+"Setzt den Schattenstärkegammawert.\n"
+"Passt die Intensität der dynamischen Schatten im Spiel an.\n"
"Ein niedrigerer Wert führt zu schwächeren Schatten, ein höherer Wert führt "
"zu dunkleren Schatten."
@@ -6576,12 +6758,12 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.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"
+"Minimalwert: 1.0; Maximalwert: 15.0"
#: src/settings_translation_file.cpp
msgid ""
@@ -6676,8 +6858,8 @@ msgstr ""
"der Schatten nicht gezeichnet."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
-msgstr "Schattenstärke"
+msgid "Shadow strength gamma"
+msgstr "Schattenstärkengammawert"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6927,6 +7109,10 @@ msgid "Temperature variation for biomes."
msgstr "Temperaturvariierung für Biome."
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr "Temporäre Einstellungen"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "Geländealternativrauschen"
@@ -7204,9 +7390,10 @@ msgid "Time speed"
msgstr "Zeitgeschwindigkeit"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
-"Zeit, nach der der Client nicht benutzte Kartendaten aus dem Speicher löscht."
+"Zeit, nach dem Clients nicht benutzte Kartendaten aus dem Speicher löschen, "
+"in Sekunden."
#: src/settings_translation_file.cpp
msgid ""
@@ -7233,10 +7420,18 @@ msgid "Touch screen threshold"
msgstr "Touchscreenschwellwert"
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr "Touchscreen"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr "Kompromisse für Performanz"
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr "Transparenzsortierungsdistanz"
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Bäumerauschen"
@@ -7353,6 +7548,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "Trilineare Filterung bei der Skalierung von Texturen benutzen."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr "Benutzeroberflächen"
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7636,6 +7835,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+"Ob technische Namen angezeigt werden sollen.\n"
+"Betrifft Mods und Texturenpakete in den Inhalte- und Modauswahlmenüs,\n"
+"als auch die Einstellungsnamen in Alle Einstellungen.\n"
+"Wird vom Kontrollkästchen im „Alle Einstellungen“-Menü beeinflusst."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
"Ob der Client Debug-Informationen zeigen soll (hat die selbe Wirkung wie das "
@@ -7749,6 +7961,10 @@ msgid "Y-level of seabed."
msgstr "Y-Höhe vom Meeresgrund."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr "cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL-Dateidownload-Zeitüberschreitung"
@@ -7795,6 +8011,9 @@ msgstr "cURL-Parallel-Begrenzung"
#~ msgid "Back"
#~ msgstr "Rücktaste"
+#~ msgid "Basic"
+#~ msgstr "Grundlegend"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Bits pro Pixel (Farbtiefe) im Vollbildmodus."
@@ -7828,6 +8047,12 @@ msgstr "cURL-Parallel-Begrenzung"
#~ msgid "Configure"
#~ msgstr "Konfigurieren"
+#~ msgid "Connect"
+#~ msgstr "Verbinden"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Regelt die Sinkgeschwindigkeit in Flüssigkeiten."
+
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value."
@@ -7875,6 +8100,9 @@ msgstr "cURL-Parallel-Begrenzung"
#~ "Definiert die Sampling-Schrittgröße der Textur.\n"
#~ "Ein höherer Wert resultiert in weichere Normal-Maps."
+#~ msgid "Del. Favorite"
+#~ msgstr "Favorit löschen"
+
#~ msgid ""
#~ "Deprecated, define and locate cave liquids using biome definitions "
#~ "instead.\n"
@@ -7884,12 +8112,22 @@ msgstr "cURL-Parallel-Begrenzung"
#~ "Höhlenflüssigkeiten in Biomdefinitionen.\n"
#~ "Y der Obergrenze von Lava in großen Höhlen."
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr ""
+#~ "Laden Sie sich ein Spiel (wie Minetest Game) von minetest.net herunter"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Spiele können von minetest.net heruntergeladen werden"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "$1 wird heruntergeladen und installiert, bitte warten …"
#~ msgid "Enable VBO"
#~ msgstr "VBO aktivieren"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Registrierungsbestätigung aktivieren"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7919,6 +8157,9 @@ msgstr "cURL-Parallel-Begrenzung"
#~ "Aktiviert Parralax-Occlusion-Mapping.\n"
#~ "Hierfür müssen Shader aktiviert sein."
+#~ msgid "Enter "
+#~ msgstr "Eingabe "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7938,6 +8179,9 @@ msgstr "cURL-Parallel-Begrenzung"
#~ msgid "Fallback font size"
#~ msgstr "Ersatzschriftgröße"
+#~ msgid "Filtering"
+#~ msgstr "Filter"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Schwebeland-Basishöhenrauschen"
@@ -7957,6 +8201,9 @@ msgstr "cURL-Parallel-Begrenzung"
#~ msgid "Full screen BPP"
#~ msgstr "Vollbildfarbtiefe"
+#~ msgid "Game"
+#~ msgstr "Spiel"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7966,15 +8213,30 @@ msgstr "cURL-Parallel-Begrenzung"
#~ msgid "Generate normalmaps"
#~ msgstr "Normalmaps generieren"
+#~ msgid "HUD scale factor"
+#~ msgstr "HUD-Skalierungsfaktor"
+
#~ msgid "High-precision FPU"
#~ msgstr "Hochpräzisions-FPU"
#~ msgid "IPv6 support."
#~ msgstr "IPv6-Unterstützung."
+#~ msgid "In-Game"
+#~ msgstr "Spiel"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Installation: Datei: „$1“"
+#~ msgid "Instrumentation"
+#~ msgstr "Instrumentierung"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Steuerung (Falls dieses Menü defekt ist, entfernen Sie Zeugs aus minetest."
+#~ "conf)"
+
#~ msgid "Lava depth"
#~ msgstr "Lavatiefe"
@@ -7995,6 +8257,9 @@ msgstr "cURL-Parallel-Begrenzung"
#~ "DirectX mit LuaJIT zusammenarbeiten lassen. Deaktivieren Sie dies, falls "
#~ "es Probleme verursacht."
+#~ msgid "Menus"
+#~ msgstr "Menüs"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Übersichtskarte im Radarmodus, Zoom ×2"
@@ -8070,6 +8335,12 @@ msgstr "cURL-Parallel-Begrenzung"
#~ msgid "Path to save screenshots at."
#~ msgstr "Pfad, in dem Bildschirmfotos abgespeichert werden."
+#~ msgid "Player name"
+#~ msgstr "Spielername"
+
+#~ msgid "Profiling"
+#~ msgstr "Profiling"
+
#~ msgid "Projecting dungeons"
#~ msgstr "Herausragende Verliese"
@@ -8082,6 +8353,9 @@ msgstr "cURL-Parallel-Begrenzung"
#~ msgid "Select Package File:"
#~ msgstr "Paket-Datei auswählen:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Server / Einzelspieler"
+
#~ msgid ""
#~ "Set the shadow update time.\n"
#~ "Lower value means shadows and map updates faster, but it consume more "
@@ -8175,6 +8449,23 @@ msgstr "cURL-Parallel-Begrenzung"
#~ msgid "Yes"
#~ msgstr "Ja"
+#, 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 ""
+#~ "Sie sind im Begriff, dem Server mit dem Namen „%s“ für das erste Mal "
+#~ "beizutreten.\n"
+#~ "Falls Sie fortfahren, wird ein neues Benutzerkonto mit Ihren Anmeldedaten "
+#~ "auf diesem Server erstellt.\n"
+#~ "Bitte geben Sie Ihr Passwort erneut ein und klicken Sie auf „Registrieren "
+#~ "und beitreten“, um die Erstellung des Benutzerkontos zu bestätigen oder "
+#~ "klicken Sie auf „Abbrechen“ zum Abbrechen."
+
#~ msgid "You died."
#~ msgstr "Sie sind gestorben."
diff --git a/po/dv/minetest.po b/po/dv/minetest.po
index 2ae55d9e9..6626fd9f2 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: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -115,6 +115,31 @@ msgid "The server has requested a reconnect:"
msgstr "ÞÞ¦Þ§ÞˆÞ¦Þƒ Þ‡Þ¨Þ‚Þ° ÞƒÞ¨Þ†Þ¦Þ‚Þ¬Þ†Þ°Þ“Þ¦Þ†Þ¦ÞÞ° Þ‡Þ¬Þ‹Þ¬ÞŠÞ¨:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "ދުނިޔެ އިހްތިޔާރު ކުރޭ:"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Þ•Þ°ÞƒÞ®Þ“Þ®Þ†Þ¯ÞÞ° ÞˆÞ§ÞÞ¦Þ‚Þ° ÞŠÞªÞÞªÞ‡Þ¬ÞƒÞªÞ‰Þ¬Þ‡Þ°. "
@@ -127,6 +152,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "$1 Þ‡Þ§Þ‡Þ¨ 2$ Þ‹Þ¬Þ‰Þ¬Þ‹ÞªÞŽÞ¬ Þ•Þ°ÞƒÞ®Þ“Þ®Þ†Þ¯ÞÞ° ÞˆÞ§Þަންތައް ÞÞ§ÞˆÞ¦Þƒ ÞÞ¦Þ¨Þ•Þ¯Þ“Þ° Þ†ÞªÞƒÞ­. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Þ‡Þ¦Þ…ÞªÞŽÞ¦Þ‚Þ‘ÞªÞ‰Þ¬Þ‚Þ° Þ€Þ¦Þ‰Þ¦Þ‡Þ¬Þ†Þ¦Þ‚Þ¨ ÞÞ¦Þ•Þ¯Þ“Þ°Þ†ÞªÞƒÞ¦Þ‚Þ© Þ•Þ°ÞƒÞ®Þ“Þ®Þ†Þ¯ÞÞ° ÞˆÞ§ÞÞ¦Þ‚Þ° 1$."
@@ -134,14 +163,21 @@ msgstr "Þ‡Þ¦Þ…ÞªÞŽÞ¦Þ‚Þ‘ÞªÞ‰Þ¬Þ‚Þ° Þ€Þ¦Þ‰Þ¦Þ‡Þ¬Þ†Þ¦Þ‚Þ¨ ÞÞ¦Þ•Þ¯Þ“Þ°Þ†ÞªÞƒÞ¦Þ‚Þ©
msgid "We support protocol versions between version $1 and $2."
msgstr "Þ‡Þ¦Þ…ÞªÞŽÞ¦Þ‚Þ‘ÞªÞ‰Þ¬Þ‚Þ° 1$ Þ‡Þ§Þ‡Þ¨ 2$ Þ‡Þ§Þ‡Þ¨ Þ‹Þ¬Þ‰Þ¬Þ‹ÞªÞŽÞ¬ Þ•Þ®ÞƒÞ®Þ“Þ®Þ†Þ¯ÞÞ° ÞˆÞ§Þަންތައް ÞÞ¦Þ•Þ¯Þ“Þ° Þ†ÞªÞƒÞ¦Þ‚Þ°."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Þ†Þ¬Þ‚Þ°ÞÞ¦ÞÞ°"
@@ -283,7 +319,6 @@ msgid "Failed to download $1"
msgstr "$1 Þ‚Þ­Þ…ÞªÞ‚Þª"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "ގޭމްތައް"
@@ -306,7 +341,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "މޮޑްތައް"
@@ -401,12 +435,8 @@ msgstr "Þ‰Þ®Þ‘Þ°ÞŽÞ¬ Þ‰Þ¦Þ‡ÞªÞÞ«Þާތު:"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
-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 "Þ‰Þ¦Þ‡Þ¨Þ‚Þ°Þ“Þ¬ÞÞ°Þ“Þ°.Þ‚Þ¬Þ“Þ° Þ‡Þ¨Þ‚Þ° އެކަތި Þ‘Þ¦Þ‡ÞªÞ‚Þ°ÞÞ¯Þ‘Þ°Þ†ÞªÞƒÞ¦Þ‡Þ°ÞˆÞ§"
+msgid "Development Test is meant for developers."
+msgstr "Þ‡Þ¨Þ‚Þ°Þ’Þ§ÞƒÞª: Þ‰Þ¨Þ‚Þ¨Þ‰Þ¦ÞÞ° Þ‘Þ¨ÞˆÞ¬ÞÞ®Þ•Þ°Þ‰Þ¦Þ‚Þ°Þ“Þ° Þ€Þ§Þ‡Þ°ÞÞ¦Þ†ÞªÞƒÞ¬ÞˆÞ¨ÞŠÞ¦Þ‡Þ¨ÞˆÞ¦Þ‚Þ© Þ‘Þ¨ÞˆÞ¬ÞÞ®Þ•Þ¦ÞƒÞªÞ‚Þ°Þ‚Þ¦ÞÞ°."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -424,10 +454,6 @@ msgstr ""
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 ""
@@ -445,6 +471,15 @@ msgid "Increases humidity around rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Þ‡Þ¦Þ…Þ§"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr ""
@@ -545,11 +580,6 @@ 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 "Þ‡Þ¨Þ‚Þ°Þ’Þ§ÞƒÞª: Þ‰Þ¨Þ‚Þ¨Þ‰Þ¦ÞÞ° Þ‘Þ¨ÞˆÞ¬ÞÞ®Þ•Þ°Þ‰Þ¦Þ‚Þ°Þ“Þ° Þ€Þ§Þ‡Þ°ÞÞ¦Þ†ÞªÞƒÞ¬ÞˆÞ¨ÞŠÞ¦Þ‡Þ¨ÞˆÞ¦Þ‚Þ© Þ‘Þ¨ÞˆÞ¬ÞÞ®Þ•Þ¦ÞƒÞªÞ‚Þ°Þ‚Þ¦ÞÞ°."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Þ‹ÞªÞ‚Þ¨Þ”Þ­ÞŽÞ¬ Þ‚Þ¦Þ‚Þ°"
@@ -579,6 +609,37 @@ msgstr "Þ‰Þ®Þ‘Þ°Þ‡Þ¬Þ‰Þ°.Þ–Þ©.Þ‡Þ§ÞƒÞ°: ޕާތު \"1$\" ބާތިÞÞ°"
msgid "Delete World \"$1\"?"
msgstr "Þ‹ÞªÞ‚Þ¨Þ”Þ¬ \"1$\" Þ‘Þ¨Þީޓްކުރަންވީތޯ؟"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Password"
+msgstr "Þ•Þ§ÞÞ°ÞˆÞ¯Þ‘Þ° / Þ‚Þ¦Þ‚Þ°"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "ÞŽÞ¦Þ„Þ«ÞÞªÞ†ÞªÞƒÞ­"
@@ -609,6 +670,16 @@ msgstr "Þ‡Þ¦Þ‚Þ„ÞªÞƒÞ§ ÞÞ¬Þ“Þ¨Þ‚Þ°ÞŽÞ°ÞÞ° ÞÞ¦ÞŠÞªÞ€Þ§Þ‡Þ¦ÞÞ°>"
msgid "Browse"
msgstr "ÞŠÞªÞ‚Þ°Þ†Þ®ÞÞ° Þ€Þ¯Þ‹Þ§"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "ÞŽÞ­Þ‰Þ° Þ€Þ®ÞÞ°Þ“Þ°Þ†ÞªÞƒÞ­"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "ÞÞ®Þ“Þ¯Þƒ Þ†ÞªÞÞ¯Þ’Þ°Þ†Þ®ÞÞ°ÞÞ§"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Þ‡Þ®ÞŠÞ°Þ†Þ®ÞÞ°ÞŠÞ¦"
@@ -667,7 +738,7 @@ msgstr "Þ‰Þ®Þ‘Þ°ÞŽÞ¬ ÞŠÞ¦Þ‡Þ¨ÞÞ° އިހްތިޔާރުކުރޭ:"
msgid "Select file"
msgstr "Þ‰Þ®Þ‘Þ°ÞŽÞ¬ ÞŠÞ¦Þ‡Þ¨ÞÞ° އިހްތިޔާރުކުރޭ:"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Þ“Þ¬Þ†Þ°Þ‚Þ¨Þ†Þ¦ÞÞ° ނަންތައް Þ‹Þ¦Þ‡Þ°Þ†Þ§"
@@ -818,6 +889,10 @@ msgstr ""
msgid "Previous Core Developers"
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -890,10 +965,6 @@ msgstr "ÞÞ§ÞˆÞ¦ÞƒÞ‡Þ¬Þ‡Þ° Þ€Þ®ÞÞ°Þ“Þ°Þ†ÞªÞƒÞ­"
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 "Þ‡Þ¦Þ‡Þª"
@@ -902,11 +973,6 @@ msgstr "Þ‡Þ¦Þ‡Þª"
msgid "No world created or selected!"
msgstr "Þ‡Þ¬Þ‡Þ°ÞˆÞ¬ÞÞ° Þ‹ÞªÞ‚Þ¨Þ”Þ¬Þ‡Þ¬Þ‡Þ° Þ‡ÞªÞŠÞ¬Þ‹Þ¨ÞŠÞ¦Þ‡Þ¬Þ‡Þ° ނުވަތަ އިހްތިޔާރުވެފައެއް Þ‚Þ¬Þ Þ°!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "Þ•Þ§ÞÞ°ÞˆÞ¯Þ‘Þ° / Þ‚Þ¦Þ‚Þ°"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "ÞŽÞ­Þ‰Þ° Þ†ÞªÞ…Þ­"
@@ -943,10 +1009,6 @@ msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Þ†Þ¦Þ‚Þ¬Þ†Þ°Þ“Þ°Þ†ÞªÞƒÞ­"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Þ†Þ°ÞƒÞ¨Þ‡Þ­Þ“Þ¨ÞˆÞ° Þ‰Þ¯Þ‘Þ°"
@@ -956,10 +1018,6 @@ msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Þ‡Þ¬Þ‚Þ°Þ‰Þ¬ ÞŽÞ¦Þ”Þ§Þ‚ÞªÞˆÞ­"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "Þ‡Þ¬Þ‚Þ°Þ‰Þ¬ ÞŽÞ¦Þ”Þ§ÞˆÞ­"
@@ -974,6 +1032,10 @@ msgid "Join Game"
msgstr "ÞŽÞ­Þ‰Þ° Þ€Þ®ÞÞ°Þ“Þ°Þ†ÞªÞƒÞ­"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
@@ -988,10 +1050,19 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "Þ‡Þ¬Þ‚Þ°Þ‰Þ¬ ÞŽÞ¦Þ”Þ§Þ‚ÞªÞˆÞ­"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "ÞÞ§ÞˆÞ¦Þƒ Þ•Þ¯Þ“Þ°"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr ""
@@ -1036,7 +1107,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1132,7 +1203,7 @@ msgid "Tone Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1140,7 +1211,7 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1159,6 +1230,10 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr ""
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1295,7 +1370,7 @@ msgid "Camera update enabled"
msgstr "Þ‡Þ¦Þ‚Þ¨Þ”Þ§ÞˆÞªÞ‚Þ° Þ–Þ¦Þ‡Þ°ÞÞ§ÞŠÞ¦Þ‡Þ¨"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1412,6 +1487,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Þ‰Þ¬Þ‡Þ¨Þ‚Þ° Þ‰Þ¬Þ‚Þ«"
@@ -1922,24 +2002,6 @@ msgstr "$1 Þ‚Þ­Þ…ÞªÞ‚Þª"
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 ""
@@ -1973,7 +2035,7 @@ msgstr ""
msgid "Change camera"
msgstr "ފިތްތައް Þ„Þ¦Þ‹Þ¦ÞÞªÞ†ÞªÞƒÞ­"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr ""
@@ -2026,8 +2088,8 @@ msgid "Key already in use"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "ފިތްތައް. (Þ‰Þ¨ Þ‰Þ¬Þ‚Þ« Þ‰Þ¦Þ‡Þ°ÞÞ¦ÞÞ¦ Þ–Þ¬Þ€Þ¨Þ‡Þ°Þ–Þ¬Þ‚Þ¦Þ‰Þ¦ minetest.confÞ‡Þ¨Þ‚Þ° ތަކެތި ÞŠÞªÞ€Þ¬ÞÞ¦Þ‡Þ°ÞˆÞ§)"
+msgid "Keybindings."
+msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2098,15 +2160,15 @@ msgid "Change"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
+msgid "New Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "New Password"
+msgid "Old Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Old Password"
+msgid "Passwords do not match!"
msgstr ""
#: src/gui/guiVolumeChange.cpp
@@ -2122,12 +2184,6 @@ msgstr ""
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).
@@ -2135,6 +2191,15 @@ msgstr ""
msgid "LANG_CODE"
msgstr "dv"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr ""
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2260,6 +2325,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2344,6 +2413,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Þ‹ÞªÞ‚Þ¨Þ”Þ­ÞŽÞ¬ Þ‚Þ¦Þ‚Þ°"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2357,7 +2431,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2427,6 +2501,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2467,10 +2545,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2491,7 +2565,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2503,6 +2577,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2527,6 +2605,11 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+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"
@@ -2683,6 +2766,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2778,6 +2865,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2812,7 +2903,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2879,11 +2972,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3028,6 +3121,11 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Þ‰Þ®Þ‘Þ°ÞŽÞ¬ Þ‰Þ¦Þ‡ÞªÞÞ«Þާތު:"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -3048,6 +3146,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3117,6 +3221,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3133,19 +3241,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3219,6 +3321,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3237,6 +3343,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3314,7 +3424,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
+msgid "Filtering and Antialiasing"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3382,6 +3492,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3530,6 +3644,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "ގޭމްތައް"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3557,6 +3684,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3573,7 +3708,11 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3813,11 +3952,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3878,6 +4024,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3899,7 +4051,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3939,10 +4093,6 @@ 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 ""
@@ -3993,15 +4143,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4622,6 +4768,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4677,7 +4827,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4687,15 +4837,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4707,7 +4860,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4735,6 +4889,10 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lighting"
+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"
@@ -5125,10 +5283,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5177,6 +5331,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5266,16 +5432,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5288,6 +5454,10 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5325,10 +5495,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5422,10 +5588,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5472,10 +5634,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5644,6 +5802,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "ÞÞ°Þ†Þ°ÞƒÞ©Þ‚Þ°:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5671,6 +5834,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "ÞÞ°Þ†Þ°ÞƒÞ©Þ‚Þ°:"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5683,10 +5851,6 @@ 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 ""
@@ -5726,10 +5890,20 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
+#, fuzzy
+msgid "Server"
+msgstr "ÞÞ§ÞˆÞ¦ÞƒÞ‡Þ¬Þ‡Þ° Þ€Þ®ÞÞ°Þ“Þ°Þ†ÞªÞƒÞ­"
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "ÞÞ§ÞˆÞ¦Þƒ Þ•Þ¯Þ“Þ°"
+
+#: src/settings_translation_file.cpp
msgid "Server URL"
msgstr ""
@@ -5754,10 +5928,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "ÞÞ§ÞˆÞ¦Þƒ Þ•Þ¯Þ“Þ°"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5768,12 +5951,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5781,7 +5966,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5857,7 +6042,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6057,6 +6242,10 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6259,7 +6448,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6283,10 +6472,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6377,6 +6574,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6610,6 +6811,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6700,6 +6910,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6714,19 +6928,36 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Þ„Þ¦Þ‹Þ¦ÞÞªÞŽÞ¬Þ‚Þ­"
+#~ msgid "Connect"
+#~ msgstr "Þ†Þ¦Þ‚Þ¬Þ†Þ°Þ“Þ°Þ†ÞªÞƒÞ­"
+
#~ msgid "Damage enabled"
#~ msgstr "Þ‡Þ¦Þ‚Þ¨Þ”Þ§ÞˆÞªÞ‚Þ° Þ–Þ¦Þ‡Þ°ÞÞ§ÞŠÞ¦Þ‡Þ¨"
+#, fuzzy
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Þ‰Þ¦Þ‡Þ¨Þ‚Þ°Þ“Þ¬ÞÞ°Þ“Þ°_ÞŽÞ­Þ‰Þ° ÞŠÞ¦Þ‹Þ¦ ÞÞ¦Þ„Þ°ÞŽÞ­Þ‰Þ¬Þ‡Þ° Þ‰Þ¦Þ‡Þ¨Þ‚Þ°Þ“Þ¬ÞÞ°Þ“Þ°.Þ‚Þ¬Þ“Þ° Þ‡Þ¨Þ‚Þ° Þ‘Þ¦Þ‡ÞªÞ‚Þ°ÞÞ¯Þ‘Þ°Þ†ÞªÞƒÞ¦Þ‡Þ°ÞˆÞ§"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Þ‰Þ¦Þ‡Þ¨Þ‚Þ°Þ“Þ¬ÞÞ°Þ“Þ°.Þ‚Þ¬Þ“Þ° Þ‡Þ¨Þ‚Þ° އެކަތި Þ‘Þ¦Þ‡ÞªÞ‚Þ°ÞÞ¯Þ‘Þ°Þ†ÞªÞƒÞ¦Þ‡Þ°ÞˆÞ§"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "$1 Þ‘Þ¦Þ‡ÞªÞ‚Þ°ÞÞ¯Þ‘Þ®Þ†Þ®ÞÞ° Þ‡Þ¨Þ‚Þ°ÞÞ°Þ“Þ¯ÞÞ°Þ†ÞªÞƒÞ¦Þ‚Þ©ØŒ Þ‰Þ¦Þ‘ÞªÞ†ÞªÞƒÞ¦Þ‡Þ°ÞˆÞ§..."
#~ msgid "FPS in pause menu"
#~ msgstr "Þ•Þ¯ÞÞ° Þ‰Þ¬Þ‚Þ«ÞŽÞ¦Þ‡Þ¨ Þ‡Þ¬ÞŠÞ°.Þ•Þ©.Þ‡Þ¬ÞÞ°"
+#~ msgid "Game"
+#~ msgstr "ÞŽÞ­Þ‰Þ°"
+
#, fuzzy
#~ msgid "Install: file: \"$1\""
#~ msgstr "Þ‰Þ®Þ‘Þ° Þ‡Þ¦ÞšÞ§: ÞŠÞ¦Þ‡Þ¨ÞÞ°:\"1$\""
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr "ފިތްތައް. (Þ‰Þ¨ Þ‰Þ¬Þ‚Þ« Þ‰Þ¦Þ‡Þ°ÞÞ¦ÞÞ¦ Þ–Þ¬Þ€Þ¨Þ‡Þ°Þ–Þ¬Þ‚Þ¦Þ‰Þ¦ minetest.confÞ‡Þ¨Þ‚Þ° ތަކެތި ÞŠÞªÞ€Þ¬ÞÞ¦Þ‡Þ°ÞˆÞ§)"
+
#, fuzzy
#~ msgid "Main menu style"
#~ msgstr "Þ‰Þ¬Þ‡Þ¨Þ‚Þ° Þ‰Þ¬Þ‚Þ« ÞÞ°Þ†Þ°ÞƒÞ¨Þ•Þ°Þ“Þ°"
diff --git a/po/el/minetest.po b/po/el/minetest.po
index 2bf5854e6..154b81e2a 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: 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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-03-24 18:55+0000\n"
+"Last-Translator: Elnaz javadi <elnazjavadii1369@gmail.com>\n"
"Language-Team: Greek <https://hosted.weblate.org/projects/minetest/minetest/"
"el/>\n"
"Language: el\n"
@@ -12,24 +12,23 @@ 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.7-dev\n"
+"X-Generator: Weblate 4.12-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
-msgstr ""
+msgstr "ΔιαγÏαφή της ουÏάς συνομιλίας"
#: builtin/client/chatcommands.lua
msgid "Empty command."
-msgstr ""
+msgstr "Κενή εντολή."
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Exit to main menu"
-msgstr "Έξοδος στο ΜενοÏ"
+msgstr "Έξοδος στο κεντÏικό μενοÏ"
#: builtin/client/chatcommands.lua
msgid "Invalid command: "
-msgstr ""
+msgstr "ΆκυÏη εντολή: "
#: builtin/client/chatcommands.lua
msgid "Issued command: "
@@ -37,23 +36,24 @@ msgstr ""
#: builtin/client/chatcommands.lua
msgid "List online players"
-msgstr ""
+msgstr "Λίστα συνδεδεμένων παικτών"
#: builtin/client/chatcommands.lua
msgid "Online players: "
-msgstr ""
+msgstr "Συνδεδεμένοι παίκτες: "
#: builtin/client/chatcommands.lua
msgid "The out chat queue is now empty."
-msgstr ""
+msgstr "Η ουÏά συνομιλίας είναι τώÏα κενή."
#: builtin/client/chatcommands.lua
msgid "This command is disabled by server."
-msgstr ""
+msgstr "Αυτή η εντολή είναι απενεÏγοποιημένη από τον διακομιστή."
#: builtin/client/death_formspec.lua src/client/game.cpp
+#, fuzzy
msgid "Respawn"
-msgstr ""
+msgstr "Επανεμφάνηση"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
@@ -61,28 +61,30 @@ msgstr "Πέθανες"
#: builtin/common/chatcommands.lua
msgid "Available commands:"
-msgstr ""
+msgstr "Διαθέσιμες εντολές:"
#: builtin/common/chatcommands.lua
msgid "Available commands: "
-msgstr ""
+msgstr "Διαθέσιμες εντολές: "
#: builtin/common/chatcommands.lua
msgid "Command not available: "
-msgstr ""
+msgstr "Η εντολή δεν είναι διαθέσιμη: "
#: builtin/common/chatcommands.lua
msgid "Get help for commands"
-msgstr ""
+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 ""
+msgstr "[all | <εντολή>]"
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
@@ -90,7 +92,7 @@ msgstr "Εντάξει"
#: builtin/fstk/ui.lua
msgid "<none available>"
-msgstr ""
+msgstr "<κανένα διαθέσιμο>"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
@@ -113,6 +115,31 @@ msgid "The server has requested a reconnect:"
msgstr "Ο διακομιστής ζήτησε επανασÏνδεση:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Επιλογή ΤÏοποποιήσεων"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Ασυμφωνία έκδοσης Ï€Ïωτοκόλλου. "
@@ -125,6 +152,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Ο διακομιστής υποστηÏίζει εκδόσεις Ï€Ïωτοκόλλων Î¼ÎµÏ„Î±Î¾Ï $1 και $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "ΥποστηÏίζουμε μόνο το Ï€Ïωτόκολλο έκδοσης $1."
@@ -132,14 +163,21 @@ msgstr "ΥποστηÏίζουμε μόνο το Ï€Ïωτόκολλο έκδοσ
msgid "We support protocol versions between version $1 and $2."
msgstr "ΥποστηÏίζουμε τις εκδόσεις Ï€Ïωτοκόλλων Î¼ÎµÏ„Î±Î¾Ï Ï„Î·Ï‚ έκδοσης $1 και $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "ΆκυÏο"
@@ -154,7 +192,7 @@ msgstr "ΑπενεÏγοποίηση όλων"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr ""
+msgstr "ΑπενεÏγοποίηση πακέτου Ï„Ïοποποιήσεων"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
@@ -162,21 +200,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 ""
+"Η ενεÏγοποίηση του mod \"$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"
@@ -188,19 +228,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
@@ -221,17 +261,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..."
@@ -239,11 +281,11 @@ msgstr "Λήψη ..."
#: 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"
@@ -259,11 +301,12 @@ 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"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Downloading..."
@@ -271,10 +314,9 @@ msgstr "Λήψη ..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr ""
+msgstr "Η λήψη του $1 απέτυχε"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Παιχνίδια"
@@ -288,20 +330,19 @@ msgstr "Εγκατάσταση $1"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install missing dependencies"
-msgstr ""
+msgstr "Εγκατάσταση των εξαÏτήσεων που λείπουν"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install: Unsupported file type or broken archive"
-msgstr ""
+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"
@@ -309,7 +350,7 @@ msgstr "ΧωÏίς αποτελέσματα"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No updates"
-msgstr ""
+msgstr "Δεν υπάÏχουν ενημεÏώσεις"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
@@ -317,19 +358,19 @@ 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"
@@ -337,7 +378,7 @@ msgstr "Απεγκατάσταση"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
-msgstr "ΕνημέÏωση"
+msgstr "Αναβάθμιση"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
@@ -345,23 +386,23 @@ 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 ""
+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
msgid "Biome blending"
@@ -373,11 +414,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"
@@ -385,39 +426,32 @@ 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"
-msgstr ""
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr ""
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "ΠÏοειδοποίηση: Τα Development Test Ï€ÏοοÏίζονται για Ï€ÏογÏαμματιστές."
#: builtin/mainmenu/dlg_create_world.lua
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 ""
-
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Παιχνίδι"
+msgstr "ΑιωÏοÏμενες μάζες γης (πειÏαματικό)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr ""
+msgstr "ΔημιουÏγία non-fractal εδάφους: ωκεανοί και υπόγεια"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
@@ -425,10 +459,19 @@ msgstr "Λόφοι"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Humid rivers"
-msgstr ""
+msgstr "ΥγÏά ποτάμια"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Increases humidity around rivers"
+msgstr "ΑÏξηση της υγÏασίας γÏÏω από τα ποτάμια"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Εγκατάσταση $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -437,19 +480,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"
@@ -457,11 +500,11 @@ 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
msgid "No game selected"
@@ -469,11 +512,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"
@@ -481,7 +524,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
@@ -497,42 +540,40 @@ 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 ""
-
-#: 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"
@@ -540,11 +581,11 @@ 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 ""
+msgstr "Είστε βέβαιοι ότι θέλετε να διαγÏάψετε το \\\"$1\\\";"
#: builtin/mainmenu/dlg_delete_content.lua
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
@@ -554,14 +595,44 @@ msgstr "ΔιαγÏαφή"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr ""
+msgstr "pkgmgr: απέτυχε η διαγÏαφή του \\\"$1\\\""
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
-msgstr ""
+msgstr "pkgmgr: μη έγκυÏη διαδÏομή \\\"$1\\\""
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
+msgstr "ΔιαγÏαφή Κόσμου \\\"$1\\\";"
+
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Επιβεβαίωση ΚωδικοÏ"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Όνομα"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Κωδικός"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
msgstr ""
#: builtin/mainmenu/dlg_rename_modpack.lua
@@ -570,30 +641,42 @@ msgstr "Αποδοχή"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr ""
+msgstr "Μετονομασία Modpack:"
#: 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 το οποίο θα "
+"παÏακάμψει οποιαδήποτε μετονομασία εδώ."
#: 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 "2D θόÏυβος"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
-msgstr ""
+msgstr "< ΕπιστÏοφή στη σελίδα Ρυθμίσεις"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
msgstr "ΠεÏιήγηση"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "ΠεÏιεχόμενο"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "ΠεÏιεχόμενο"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "ΑπενεÏγοποιημένο"
@@ -604,7 +687,7 @@ msgstr "ΕπεξεÏγασία"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
-msgstr ""
+msgstr "ΕνεÏγοποιημένο"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Lacunarity"
@@ -612,11 +695,11 @@ 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 "Persistence"
@@ -624,19 +707,19 @@ 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 ""
+msgstr "Κλίμακα"
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
@@ -650,17 +733,17 @@ msgstr "Επιλογή φακέλου"
msgid "Select file"
msgstr "Επιλογή αÏχείου"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
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"
@@ -668,7 +751,7 @@ msgstr "X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X spread"
-msgstr ""
+msgstr "Χ εξάπλωση"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y"
@@ -676,7 +759,7 @@ msgstr "Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y spread"
-msgstr ""
+msgstr "Υ εξάπλωση"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z"
@@ -684,7 +767,7 @@ msgstr "Z"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z spread"
-msgstr ""
+msgstr "Ζ εξάπλωση"
#. ~ "absvalue" is a noise parameter flag.
#. It is short for "absolute value".
@@ -692,14 +775,14 @@ msgstr ""
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
-msgstr ""
+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 ""
+msgstr "Ï€Ïοεπιλογή"
#. ~ "eased" is a noise parameter flag.
#. It is used to make the map smoother and
@@ -707,47 +790,51 @@ msgstr ""
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr ""
+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"
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 "Unable to find a valid mod or modpack"
-msgstr ""
+msgstr "Δεν είναι δυνατή η εÏÏεση έγκυÏης Ï„Ïοποποίησης ή πακέτου Ï„Ïοποποίησης"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
-msgstr ""
+msgstr "Δεν είναι δυνατή η εγκατάσταση $1 ως πακέτου υφής"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
-msgstr ""
+msgstr "Δεν είναι δυνατή η εγκατάσταση ενός Ï€Î±Î¹Ï‡Î½Î¹Î´Î¹Î¿Ï Ï‰Ï‚ $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a mod as a $1"
-msgstr ""
+msgstr "Δεν είναι δυνατή η εγκατάσταση Ï„Ïοποποίησης ως $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a modpack as a $1"
-msgstr ""
+msgstr "Δεν είναι δυνατή η εγκατάσταση πακέτου Ï„Ïοποποίησης ως $1"
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
msgid "Loading..."
@@ -755,7 +842,7 @@ 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."
@@ -765,11 +852,11 @@ msgstr ""
#: builtin/mainmenu/tab_about.lua
msgid "About"
-msgstr ""
+msgstr "Σχετικά"
#: builtin/mainmenu/tab_about.lua
msgid "Active Contributors"
-msgstr ""
+msgstr "ΕνεÏγοί Συντελεστές"
#: builtin/mainmenu/tab_about.lua
msgid "Active renderer:"
@@ -777,24 +864,31 @@ msgstr ""
#: builtin/mainmenu/tab_about.lua
msgid "Core Developers"
-msgstr ""
+msgstr "Βασικοί ΠÏογÏαμματιστές"
#: builtin/mainmenu/tab_about.lua
msgid "Open User Data Directory"
-msgstr ""
+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 ""
+msgstr "ΠÏοηγοÏμενοι Συντελεστές"
#: builtin/mainmenu/tab_about.lua
msgid "Previous Core Developers"
+msgstr "ΠÏοηγοÏμενοι Βασικοί ΠÏογÏαμματιστές"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
msgstr ""
#: builtin/mainmenu/tab_content.lua
@@ -807,7 +901,7 @@ msgstr "ΠεÏιεχόμενο"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
-msgstr ""
+msgstr "ΑπενεÏγοποίηση πακέτου υφής"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
@@ -819,11 +913,11 @@ 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"
@@ -835,55 +929,47 @@ msgstr "Απεγκατάσταση πακέτου"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
-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 "Εγκατάσταση παιχνιδιών από το ContentDB"
-#: 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 "Κωδικός"
+msgstr "Κανένας κόσμος δεν δημιουÏγήθηκε οÏτε επιλέχθηκε!"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
-msgstr ""
+msgstr "Εκκίνηση ΠαιχνιδιοÏ"
#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
@@ -891,7 +977,7 @@ msgstr "ΘήÏα"
#: builtin/mainmenu/tab_local.lua
msgid "Select Mods"
-msgstr ""
+msgstr "Επιλογή ΤÏοποποιήσεων"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -906,41 +992,36 @@ msgid "Start Game"
msgstr "Εκκίνηση ΠαιχνιδιοÏ"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Address"
-msgstr "- ΔιεÏθυνση: "
+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 ""
+msgstr "ΛειτουÏγία ΔημιουÏγίας"
#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
msgid "Damage / PvP"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr ""
+msgstr "Μάχες Î¼ÎµÏ„Î±Î¾Ï Ï€Î±Î¹Ï‡Ï„ÏŽÎ½"
#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
-msgstr ""
+msgstr "Αγαπημένα"
#: builtin/mainmenu/tab_online.lua
msgid "Incompatible Servers"
-msgstr ""
+msgstr "Μη συμβατοί διακομιστές"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
+msgstr "Συμμετοχή στο Παιχνίδι"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Login"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -949,16 +1030,23 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
msgid "Public Servers"
-msgstr ""
+msgstr "Δημόσιοι Διακομιστές"
#: builtin/mainmenu/tab_online.lua
msgid "Refresh"
+msgstr "Ανανέωση"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Server Description"
-msgstr "ΠεÏιγÏαφή διακομιστή"
+msgstr "ΠεÏιγÏαφή Διακομιστή"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -986,11 +1074,11 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
-msgstr ""
+msgstr "Αυτόματη αποθήκευση Μεγέθους Οθόνης"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
-msgstr ""
+msgstr "ΔιγÏαμμικό ΦίλτÏο"
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
msgid "Change Keys"
@@ -1002,27 +1090,28 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Dynamic shadows"
-msgstr ""
+msgstr "Δυναμικές σκιές"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr ""
+#, fuzzy
+msgid "Dynamic shadows:"
+msgstr "Δυναμικές σκιές: "
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
-msgstr ""
+msgstr "ΦανταχτεÏά ΦÏλλα"
#: builtin/mainmenu/tab_settings.lua
msgid "High"
-msgstr ""
+msgstr "Υψηλό"
#: builtin/mainmenu/tab_settings.lua
msgid "Low"
-msgstr ""
+msgstr "Χαμηλό"
#: builtin/mainmenu/tab_settings.lua
msgid "Medium"
-msgstr ""
+msgstr "Μεσαίο"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
@@ -1034,7 +1123,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr ""
+msgstr "ΧωÏίς ΦίλτÏο"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
@@ -1042,11 +1131,11 @@ 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"
@@ -1054,15 +1143,15 @@ 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:"
@@ -1086,51 +1175,58 @@ 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 ""
+msgstr "Υφή:"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
-msgstr ""
+msgstr "ΧαÏτογÏάφηση Τόνου"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr ""
+#, fuzzy
+msgid "Touch threshold (px):"
+msgstr "ÎŒÏιο αφής: (px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
-msgstr ""
+msgstr "ΤÏιγÏαμμικό ΦίλτÏο"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
-msgstr ""
+#, fuzzy
+msgid "Very High"
+msgstr "ΕξαιÏετικά Υψηλό"
#: builtin/mainmenu/tab_settings.lua
msgid "Very Low"
-msgstr ""
+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
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Σφάλμα σÏνδεσης (λήξη χÏόνου;)"
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
-msgstr ""
+msgstr "Λήξη χÏÎ¿Î½Î¹ÎºÎ¿Ï Î¿Ïίου σÏνδεσης."
#: src/client/client.cpp
msgid "Done!"
@@ -1138,31 +1234,31 @@ 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..."
-msgstr ""
+msgstr "Ανακατασκευή σκίαστÏων..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
-msgstr ""
+msgstr "Σφάλμα σÏνδεσης (λήξη χÏόνου;)"
#: src/client/clientlauncher.cpp
msgid "Could not find or load game: "
-msgstr ""
+msgstr "Δεν ήταν δυνατή η εÏÏεση ή η φόÏτωση του παιχνιδιοÏ: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
-msgstr ""
+msgstr "Μη έγκυÏη Ï€ÏοδιαγÏαφή παιχνιδιοÏ."
#: src/client/clientlauncher.cpp
msgid "Main Menu"
@@ -1170,11 +1266,11 @@ 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!"
@@ -1182,17 +1278,19 @@ 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 ""
+msgstr "Το αÏχείο του Κόσμου δεν υπάÏχει: "
#: src/client/game.cpp
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
+"\n"
+"Ελέγξτε το debug.txt για λεπτομέÏειες."
#: src/client/game.cpp
msgid "- Address: "
@@ -1200,7 +1298,7 @@ msgstr "- ΔιεÏθυνση: "
#: src/client/game.cpp
msgid "- Mode: "
-msgstr ""
+msgstr "- ΛειτουÏγία: "
#: src/client/game.cpp
msgid "- Port: "
@@ -1227,71 +1325,74 @@ msgstr "ΠαÏουσιάστηκε σφάλμα:"
#: src/client/game.cpp
#, c-format
msgid "Access denied. Reason: %s"
-msgstr ""
+msgstr "Δεν επιτÏέπεται η Ï€Ïόσβαση. Αιτία: %s"
#: src/client/game.cpp
msgid "Automatic forward disabled"
-msgstr ""
+msgstr "Η αυτόματη Ï€Ïοώθηση είναι απενεÏγοποιημένη"
#: src/client/game.cpp
msgid "Automatic forward enabled"
-msgstr ""
+msgstr "Η αυτόματη Ï€Ïοώθηση είναι ενεÏγοποιημένη"
#: src/client/game.cpp
msgid "Block bounds hidden"
-msgstr ""
+msgstr "Αποκλεισμός οÏίων κÏυφά"
#: src/client/game.cpp
msgid "Block bounds shown for all blocks"
-msgstr ""
+msgstr "Τα ÏŒÏια μπλοκ εμφανίζονται για όλα τα μπλοκ"
#: src/client/game.cpp
msgid "Block bounds shown for current block"
-msgstr ""
+msgstr "Εμφανίζονται ÏŒÏια Î±Ï€Î¿ÎºÎ»ÎµÎ¹ÏƒÎ¼Î¿Ï Î³Î¹Î± το Ï„Ïέχον μπλοκ"
#: src/client/game.cpp
msgid "Block bounds shown for nearby blocks"
-msgstr ""
+msgstr "Εμφανίζονται ÏŒÏια Î±Ï€Î¿ÎºÎ»ÎµÎ¹ÏƒÎ¼Î¿Ï Î³Î¹Î± κοντινά μπλοκ"
#: src/client/game.cpp
msgid "Camera update disabled"
-msgstr ""
+msgstr "Η ενημέÏωση κάμεÏας απενεÏγοποιήθηκε"
#: src/client/game.cpp
msgid "Camera update enabled"
-msgstr ""
+msgstr "Η ενημέÏωση κάμεÏας ενεÏγοποιήθηκε"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
+"Δεν είναι δυνατή η εμφάνιση οÏίων μπλοκ (χÏειάζεται το δικαίωμα "
+"\"basic_debug\")"
#: 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 ""
+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 ""
+msgstr "Η σÏνδεση απέτυχε για άγνωστο λόγο"
#: src/client/game.cpp
msgid "Continue"
@@ -1315,31 +1416,47 @@ 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
#, c-format
msgid "Couldn't resolve address: %s"
-msgstr ""
+msgstr "Δεν ήταν δυνατή η επίλυση της διεÏθυνσης: %s"
#: src/client/game.cpp
msgid "Creating client..."
-msgstr ""
+msgstr "ΔημιουÏγία πελάτη..."
#: src/client/game.cpp
msgid "Creating server..."
-msgstr ""
+msgstr "ΔημιουÏγία διακομιστή..."
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr ""
+msgstr "ΚÏυφές πληÏοφοÏίες ÎµÎ½Ï„Î¿Ï€Î¹ÏƒÎ¼Î¿Ï ÏƒÏ†Î±Î»Î¼Î¬Ï„Ï‰Î½ και γÏάφημα Ï€Ïοφίλ"
#: src/client/game.cpp
msgid "Debug info shown"
-msgstr ""
+msgstr "Εμφάνιση πληÏοφοÏιών ÎµÎ½Ï„Î¿Ï€Î¹ÏƒÎ¼Î¿Ï ÏƒÏ†Î±Î»Î¼Î¬Ï„Ï‰Î½"
#: src/client/game.cpp
+#, fuzzy
msgid "Debug info, profiler graph, and wireframe hidden"
msgstr ""
+"ΑπόκÏυψη πληÏοφοÏιών ÎµÎ½Ï„Î¿Ï€Î¹ÏƒÎ¼Î¿Ï ÏƒÏ†Î±Î»Î¼Î¬Ï„Ï‰Î½, γÏαφήματος Ï€Ïοφίλ και wireframe"
#: src/client/game.cpp
msgid ""
@@ -1356,14 +1473,31 @@ msgid ""
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
msgstr ""
+"ΠÏοεπιλεγμένα στοιχεία ελέγχου:\n"
+"Δεν εμφανίζεται μενοÏ:\n"
+"- ένα πάτημα: κουμπί ενεÏγοποίησης\n"
+"- διπλό πάτημα: θέση/χÏήση\n"
+"- σÏÏσιμο δαχτÏλου: παÏακολοÏθηση γÏÏω\n"
+"ΟÏατό μενοÏ/απόθεμα:\n"
+"- διπλό πάτημα (εξωτεÏικό):\n"
+" -->κλείσιμο\n"
+"- στοίβα αφής, υποδοχή αφής:\n"
+" --> μετακίνηση στοίβας\n"
+"- άγγιγμα & σÏÏσιμο, πάτημα του 2ου δαχτÏλου\n"
+" --> τοποθέτηση μεμονωμένου αντικειμένου στην υποδοχή\n"
#: 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
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "ΔημιουÏγία πελάτη..."
#: src/client/game.cpp
msgid "Exit to Menu"
@@ -1375,35 +1509,37 @@ 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\")"
#: 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\")"
#: 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:"
@@ -1411,15 +1547,15 @@ 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"
@@ -1439,7 +1575,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Multiplayer"
-msgstr ""
+msgstr "Πολλοί παίκτες"
#: src/client/game.cpp
msgid "Noclip mode disabled"
@@ -1479,15 +1615,15 @@ 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"
@@ -1503,11 +1639,11 @@ 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"
@@ -1516,37 +1652,39 @@ msgstr ""
#: src/client/game.cpp
#, c-format
msgid "The server is probably running a different version of %s."
-msgstr ""
+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 ""
+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"
@@ -1554,7 +1692,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr ""
+msgstr "Το ζουμ είναι απενεÏγοποιημένο από το παιχνίδι ή την Ï„Ïοποποίηση"
#: src/client/game.cpp
msgid "ok"
@@ -1562,11 +1700,11 @@ 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"
@@ -1623,7 +1761,7 @@ msgstr "Βοήθεια"
#: src/client/keycode.cpp
msgid "Home"
-msgstr ""
+msgstr "Σπίτι"
#: src/client/keycode.cpp
msgid "IME Accept"
@@ -1688,63 +1826,63 @@ msgstr ""
#: src/client/keycode.cpp
msgid "Numpad *"
-msgstr "Numpad *"
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο *"
#: src/client/keycode.cpp
msgid "Numpad +"
-msgstr "Numpad +"
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο +"
#: src/client/keycode.cpp
msgid "Numpad -"
-msgstr "Numpad -"
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο -"
#: src/client/keycode.cpp
msgid "Numpad ."
-msgstr "Numpad ."
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο ."
#: src/client/keycode.cpp
msgid "Numpad /"
-msgstr "Numpad /"
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο /"
#: src/client/keycode.cpp
msgid "Numpad 0"
-msgstr "Numpad 0"
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο 0"
#: src/client/keycode.cpp
msgid "Numpad 1"
-msgstr "Numpad 1"
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο 1"
#: src/client/keycode.cpp
msgid "Numpad 2"
-msgstr "Numpad 2"
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο 2"
#: src/client/keycode.cpp
msgid "Numpad 3"
-msgstr "Numpad 3"
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο 3"
#: src/client/keycode.cpp
msgid "Numpad 4"
-msgstr "Numpad 4"
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο 4"
#: src/client/keycode.cpp
msgid "Numpad 5"
-msgstr "Numpad 5"
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο 5"
#: src/client/keycode.cpp
msgid "Numpad 6"
-msgstr "Numpad 6"
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο 6"
#: src/client/keycode.cpp
msgid "Numpad 7"
-msgstr "Numpad 7"
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο 7"
#: src/client/keycode.cpp
msgid "Numpad 8"
-msgstr "Numpad 8"
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο 8"
#: src/client/keycode.cpp
msgid "Numpad 9"
-msgstr "Numpad 9"
+msgstr "ΑÏιθμητικό ΠληκτÏολόγιο 9"
#: src/client/keycode.cpp
msgid "OEM Clear"
@@ -1870,24 +2008,6 @@ msgstr ""
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 ""
@@ -1920,7 +2040,7 @@ msgstr ""
msgid "Change camera"
msgstr ""
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr ""
@@ -1973,7 +2093,7 @@ msgid "Key already in use"
msgstr "Το πλήκτÏο ήδη χÏησιμοποιείται"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -2045,10 +2165,6 @@ msgid "Change"
msgstr "Αλλαγή"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Επιβεβαίωση ΚωδικοÏ"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Îέος Κωδικός"
@@ -2056,6 +2172,10 @@ msgstr "Îέος Κωδικός"
msgid "Old Password"
msgstr "Παλιός Κωδικός"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr ""
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Έξοδος"
@@ -2065,15 +2185,9 @@ msgid "Muted"
msgstr "Σε σίγαση"
#: src/gui/guiVolumeChange.cpp
-#, fuzzy, c-format
+#, 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 ""
+msgstr "Sound Volume: %d%%"
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
@@ -2082,6 +2196,16 @@ msgstr ""
msgid "LANG_CODE"
msgstr "el"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "ΠαÏακαλώ επιλέξτε ένα όνομα!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2207,6 +2331,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2288,6 +2416,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Όνομα κόσμου"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Για Ï€ÏοχωÏημένους"
@@ -2301,7 +2434,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2370,6 +2503,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2410,10 +2547,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Βασικό"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2434,7 +2567,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2446,6 +2579,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2470,6 +2607,10 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Camera"
+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"
@@ -2544,9 +2685,8 @@ msgid "Chat command time message threshold"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat commands"
-msgstr "Εντολή"
+msgstr "Εντολές Συνομιλίας"
#: src/settings_translation_file.cpp
msgid "Chat font size"
@@ -2627,6 +2767,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2722,6 +2866,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2755,7 +2903,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2822,11 +2972,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2969,6 +3119,11 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Διακοσμήσεις"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -2989,6 +3144,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3058,6 +3219,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3074,19 +3239,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3160,6 +3319,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3178,6 +3341,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3255,7 +3422,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
+msgid "Filtering and Antialiasing"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3323,6 +3490,11 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Μέγεθος γÏαμματοσειÏάς"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3471,6 +3643,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Παιχνίδια"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3498,6 +3683,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "ΒαÏÏτητα"
@@ -3514,7 +3707,11 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3754,11 +3951,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3819,6 +4023,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3840,7 +4050,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3880,10 +4092,6 @@ 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 ""
@@ -3934,15 +4142,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4563,6 +4767,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4618,7 +4826,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4628,15 +4836,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4648,7 +4859,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4676,6 +4888,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+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"
@@ -5060,10 +5277,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5112,6 +5325,19 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Ασφάλεια"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5198,16 +5424,17 @@ 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
+#, fuzzy
+msgid "Networking"
+msgstr "Δίκτυο"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5220,6 +5447,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Επισήμανση Στοιχείων"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5257,10 +5489,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5354,10 +5582,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Όνομα παίκτη"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5404,10 +5628,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5576,6 +5796,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Οθόνη:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5603,6 +5828,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Στιγμιότυπο οθόνης"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5615,10 +5845,6 @@ 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 ""
@@ -5658,8 +5884,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr ""
+#, fuzzy
+msgid "Server"
+msgstr "URL διακομιστή"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Όνομα διακομιστή"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "ΠεÏιγÏαφή Διακομιστή"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5686,10 +5923,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "ΘήÏα Διακομιστή"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5700,12 +5946,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5713,7 +5961,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5789,7 +6037,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5989,6 +6237,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Ρυθμίσεις"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6191,7 +6444,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6215,10 +6468,19 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "ΠλήÏης οθόνη"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6309,6 +6571,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6542,6 +6808,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6631,6 +6906,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6640,14 +6919,29 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
-msgstr ""
+msgstr "ΠαÏάλληλο ÏŒÏιο cURL"
#~ msgid "Address / Port"
#~ msgstr "ΔιεÏθυνση / ΘήÏα"
+#~ msgid "Basic"
+#~ msgstr "Βασικό"
+
+#~ msgid "Connect"
+#~ msgstr "ΣÏνδεση"
+
#~ msgid "Credits"
#~ msgstr "Μνείες"
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Κατέβασε ένα παιχνίδι, όπως το Minetest Game, από το minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Κατέβασε ένα από το minetest.net"
+
+#~ msgid "Game"
+#~ msgstr "Παιχνίδι"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Εγκατάσταση: αÏχείο: \"$1\""
@@ -6657,6 +6951,9 @@ msgstr ""
#~ msgid "Ok"
#~ msgstr "Οκ"
+#~ msgid "Player name"
+#~ msgstr "Όνομα παίκτη"
+
#~ msgid "Special key"
#~ msgstr "Ειδικό πλήκτÏο"
diff --git a/po/eo/minetest.po b/po/eo/minetest.po
index cbb13b904..73de3a5f1 100644
--- a/po/eo/minetest.po
+++ b/po/eo/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Esperanto (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -114,6 +114,31 @@ msgid "The server has requested a reconnect:"
msgstr "La servilo petis rekonekton:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Elektu Modifaĵojn"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Protokola versia miskongruo. "
@@ -126,6 +151,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "La servilo subtenas protokolajn versiojn inter $1 kaj $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Ni nur subtenas protokolan version $1."
@@ -133,14 +162,21 @@ msgstr "Ni nur subtenas protokolan version $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Ni subtenas protokolajn versiojn inter versioj $1 kaj $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Nuligi"
@@ -279,7 +315,6 @@ msgid "Failed to download $1"
msgstr "Malsukcesis elÅuti $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Ludoj"
@@ -301,7 +336,6 @@ 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
msgid "Mods"
msgstr "Modifaĵoj"
@@ -394,12 +428,9 @@ msgid "Decorations"
msgstr "Ornamoj"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "ElÅuti ludon, ekzemple minetest_game, el minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "ElÅutu ludon el minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Averto: La programista testo estas intencita por programistoj."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -417,10 +448,6 @@ msgstr "Flugantaj teramasoj en la ĉielo"
msgid "Floatlands (experimental)"
msgstr "Fluginsuloj (eksperimentaj)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Ludo"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Estigi nefraktalan terenon: oceano kaj subtero"
@@ -438,6 +465,15 @@ msgid "Increases humidity around rivers"
msgstr "Plialtigas malsekecon ĉirkaŭ riveroj"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Instali $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Lagoj"
@@ -540,10 +576,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Tre grandaj kavernoj profunde subtere"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Averto: La programista testo estas intencita por programistoj."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Nomo de mondo"
@@ -573,6 +605,39 @@ msgstr "pkgmgr: malvalida dosiervojo «$1»"
msgid "Delete World \"$1\"?"
msgstr "Ĉu forigi mondon «$1»?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Konfirmi pasvorton"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Nomo de mondestigilo"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Nomo"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Pasvorto"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Pasvortoj ne kongruas!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "RegistriÄi kaj aliÄi"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Akcepti"
@@ -605,6 +670,16 @@ msgstr "< Reiri al agorda paÄo"
msgid "Browse"
msgstr "Foliumi"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Enhavo"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Enhavo"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "MalÅaltita"
@@ -662,7 +737,7 @@ msgstr "Elekti dosierujon"
msgid "Select file"
msgstr "Elekti dosieron"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Montri teĥnikajn nomojn"
@@ -811,6 +886,11 @@ msgstr "Eksaj kontribuistoj"
msgid "Previous Core Developers"
msgstr "Eksaj kernprogramistoj"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Montri erarserĉajn informojn"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Foliumi enretan enhavon"
@@ -879,10 +959,6 @@ msgstr "Gastigi servilon"
msgid "Install games from ContentDB"
msgstr "Instali ludojn de ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Nomo"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Nova"
@@ -891,10 +967,6 @@ msgstr "Nova"
msgid "No world created or selected!"
msgstr "Neniu mondo estas kreita aÅ­ elektita!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Pasvorto"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Ludi"
@@ -928,10 +1000,6 @@ msgid "Clear"
msgstr "Vakigo"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Konekti"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Krea reÄimo"
@@ -942,10 +1010,6 @@ msgid "Damage / PvP"
msgstr "Difekto"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Forigi Åataton"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "Åœati"
@@ -959,6 +1023,10 @@ msgid "Join Game"
msgstr "AliÄi al ludo"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Retprokrasto"
@@ -971,10 +1039,19 @@ msgid "Refresh"
msgstr "ReÅargi"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Fora pordo"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Priskribo pri servilo"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2×"
@@ -1019,7 +1096,8 @@ msgid "Dynamic shadows"
msgstr "Dinamikaj ombroj"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "Dinamikaj ombroj: "
#: builtin/mainmenu/tab_settings.lua
@@ -1115,7 +1193,8 @@ msgid "Tone Mapping"
msgstr "Nuanca mapado"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "TuÅa sojlo: (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1123,7 +1202,8 @@ msgid "Trilinear Filter"
msgstr "Trilineara filtrilo"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+#, fuzzy
+msgid "Very High"
msgstr "Altega"
#: builtin/mainmenu/tab_settings.lua
@@ -1142,6 +1222,11 @@ msgstr "Ondantaj fluaĵoj"
msgid "Waving Plants"
msgstr "Ondantaj plantoj"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Konekta eraro (ĉu eltempiÄo?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Konekto eltempiÄis."
@@ -1279,7 +1364,7 @@ msgid "Camera update enabled"
msgstr "Äœisdatigo de vidpunkto Åaltita"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1410,6 +1495,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Åœaltis senliman vidodistancon"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Kreante klienton…"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Eliri al menuo"
@@ -1915,28 +2005,6 @@ msgstr "Malsukcesis elÅuti $1"
msgid "Opening webpage"
msgstr ""
-#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
-msgid "Passwords do not match!"
-msgstr "Pasvortoj ne kongruas!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "RegistriÄi kaj aliÄi"
-
-#: 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 ""
-"Vi estas aliÄonta al ĉi tiu servilo kun la nomo «%s» unuafoje.\n"
-"Se vi pluigos, nova konto kun viaj salutiloj registriÄos ĉe la servilo.\n"
-"Bonvolu retajpi vian pasvorton kaj klaki al «RegistriÄi kaj aliÄi» por "
-"konfirmi kreon de konto, aŭ al «Nuligi» por ĉesigi."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "DaÅ­rigi"
@@ -1970,7 +2038,7 @@ msgstr ""
msgid "Change camera"
msgstr "ÅœanÄi vidpunkton"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Babilo"
@@ -2023,9 +2091,8 @@ msgid "Key already in use"
msgstr "Klavo jam estas uzata"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Klavagordoj. (Se tiu menuo misfunkcias, forigu agordojn el minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2096,10 +2163,6 @@ msgid "Change"
msgstr "ÅœanÄi"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Konfirmi pasvorton"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nova pasvorto"
@@ -2107,6 +2170,10 @@ msgstr "Nova pasvorto"
msgid "Old Password"
msgstr "Malnova pasvorto"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Pasvortoj ne kongruas!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Foriri"
@@ -2120,12 +2187,6 @@ msgstr "Silentigita"
msgid "Sound Volume: %d%%"
msgstr "LaÅ­teco: "
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Enigi "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2133,6 +2194,16 @@ msgstr "Enigi "
msgid "LANG_CODE"
msgstr "eo"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Bonvolu elekti nomon!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2298,6 +2369,10 @@ msgstr ""
"Rimarku, ke la reÄimo «interlaced» postulas Åaltitajn ombrigilojn."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2391,6 +2466,11 @@ msgstr ""
"kontrolu certige) kreas solidan tavolon de fluginsulaĵo."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Almeti nomon de portaĵo"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Specialaj"
@@ -2409,7 +2489,8 @@ msgstr ""
"tre malmulte efikas sur natura noktlumo."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Ĉiam en fluga kaj rapida reÄimoj"
#: src/settings_translation_file.cpp
@@ -2488,6 +2569,10 @@ msgstr ""
"Donita en mondopecoj (16 monderoj)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Memage antaÅ­en"
@@ -2530,10 +2615,6 @@ msgid "Base terrain height."
msgstr "Baza alteco de tereno."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Baza"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Bazaj rajtoj"
@@ -2554,7 +2635,8 @@ msgid "Bind address"
msgstr "Bindi adreson"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Parametroj de varmeco kaj sekeco por Klimata API"
#: src/settings_translation_file.cpp
@@ -2566,6 +2648,10 @@ msgid "Block send optimize distance"
msgstr "Optimuma distanco de monder-sendado"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Dosierindiko al egrasa kaj kursiva tiparo"
@@ -2590,6 +2676,11 @@ msgid "Builtin"
msgstr "Primitivaĵo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "ÅœanÄi vidpunkton"
+
+#: 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"
@@ -2756,6 +2847,11 @@ msgid "Client side node lookup range restriction"
msgstr "Limigoj de amplekso por klientflanka serĉado de monderoj"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Klienta modifado"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Suprenira rapido"
@@ -2881,6 +2977,11 @@ msgid "Console height"
msgstr "Alteco de konzolo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "Enreta deponejo de enhavo"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "Malpermesitaj flagoj de ContentDB"
@@ -2919,8 +3020,10 @@ msgstr ""
"72 = 20 minutoj, 360 = 4 minutoj, 1 = 24 horoj, 0 = restadas senÅanÄe."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Regas rapidon de profundiÄo en fluaĵoj."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2994,12 +3097,12 @@ msgid "Debug log level"
msgstr "Erarserĉa protokola nivelo"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "MallaÅ­tiga klavo"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Malpliigu ĉi tion por pliigi reziston de fluaĵoj al movo."
+msgid "Dec. volume key"
+msgstr "MallaÅ­tiga klavo"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3154,6 +3257,11 @@ msgid "Desynchronize block animation"
msgstr "Malsamtempigi bildmovon de monderoj"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Ornamoj"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Klavo por fosi"
@@ -3174,6 +3282,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+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."
@@ -3247,6 +3361,10 @@ msgid "Enable joysticks"
msgstr "Åœalti stirstangojn"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Ŝalti subtenon de modifaĵaj kanaloj."
@@ -3263,18 +3381,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Åœalti hazardan uzulan enigon (nur por testado)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-msgstr "Åœalti konfirmon de registriÄo"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
-msgstr ""
-"Åœalti konfirmon de registriÄo dum konekto al servilo.\n"
-"Se Äi estas malÅaltita, nova konto registriÄos memage."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3283,6 +3389,10 @@ msgstr ""
"MalÅaltu por rapido aÅ­ alia aspekto."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3375,6 +3485,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "Profilo de valoj"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Intervalo inter presoj de profilaj datenoj de la motoro"
@@ -3400,6 +3515,10 @@ msgstr ""
"pli plataj malaltejoj, taŭgaj por solida tavolo de fluginsulaĵo."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "Maksimuma nombro de kadroj en sekundo dum paÅ­zo aÅ­ sen fokuso"
@@ -3489,8 +3608,9 @@ msgstr ""
"tion dum legado de teksturoj."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtrado"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Glatigo:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3558,6 +3678,11 @@ msgid "Fog toggle key"
msgstr "Nebula baskula klavo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Tipara grandeco"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Implice grasa tiparo"
@@ -3721,6 +3846,19 @@ msgid "GUI scaling filter txr2img"
msgstr "Skala filtrilo de grafika interfaco txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Ludoj"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Mallokaj revokoj"
@@ -3757,6 +3895,16 @@ msgid "Graphics"
msgstr "Grafiko"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Grafiko"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Grafiko"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Pezforto"
@@ -3773,8 +3921,13 @@ msgid "HTTP mods"
msgstr "HTTP-modifaĵoj"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "Skala koeficiento por travida fasado"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "Skalo de grafika fasado"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -4030,14 +4183,23 @@ msgstr ""
"Bezonas Åaltitajn ondantajn fluaĵojn."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"Kioman tempon la servilo atendos antaÅ­ delasi neuzatajn mondopecojn.\n"
"Pli alta valoro estas pli glata, sed uzos pli da tujmemoro."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "Malpliigu ĉi tion por pliigi reziston de fluaĵoj al movo."
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "Kiel larÄajn fari riverojn."
@@ -4110,6 +4272,15 @@ msgstr ""
"Åœaltite, klavo «uzi» estas uzata anstataÅ­ klavo «kaÅiri» por malsupreniro."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Åœalti konfirmon de registriÄo dum konekto al servilo.\n"
+"Se Äi estas malÅaltita, nova konto registriÄos memage."
+
+#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
@@ -4138,7 +4309,10 @@ msgstr ""
"rigardo dum flugado aÅ­ naÄado."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr "Malebligas konekton kun malplena pasvorto."
#: src/settings_translation_file.cpp
@@ -4187,10 +4361,6 @@ msgid "Ignore world errors"
msgstr "Malatenti mondajn erarojn"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "Lude"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
"Travidebleco de enluda babila konzolo (maltravidebleco, inter 0 kaj 255)."
@@ -4249,15 +4419,12 @@ msgid "Instrument the methods of entities on registration."
msgstr "Ekzameni la metodojn de estoj je registriÄo."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Ekzamenado"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr "Periodo inter konservo de gravaj ÅanÄoj en la mondo, sekunde."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "Periodo inter sendoj de tagtempo al klientoj."
#: src/settings_translation_file.cpp
@@ -5117,6 +5284,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr "Forpeli ludantojn, kiuj sendis pli ol X mesaÄojn en 10 sekundoj."
@@ -5173,10 +5344,11 @@ msgid "Left key"
msgstr "Maldekstra klavo"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"Longeco de servila agociklo, kaj la intervalo dum kiu objektoj Äenerale "
"ÄisdatiÄas\n"
@@ -5191,18 +5363,25 @@ msgstr ""
"Bezonas ondantajn fluaĵojn."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+#, fuzzy
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr "TempodaÅ­ro inter rulaj cikloj de Aktiva Modifilo de Monderoj (AMM)"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "TempodaÅ­ro inter rulaj cikloj de NodeTimer"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "DaÅ­ro inter cikloj de aktiva administrado de monderoj"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5211,7 +5390,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Nivelo de protokolado skribota al debug.txt:\n"
"- <nenio> (nenio protokoliÄas)\n"
@@ -5247,6 +5427,11 @@ msgid "Light curve low gradient"
msgstr "Malalta transiro de luma kurbo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Glata lumado"
+
+#: 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"
@@ -5692,10 +5877,6 @@ msgid "Maximum users"
msgstr "Maksimuma nombro da uzantoj"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menuoj"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "MaÅa kaÅmemoro"
@@ -5744,6 +5925,20 @@ msgid "Mipmapping"
msgstr "Etmapigo"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "Profililo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Sekureco"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "Kanaloj por modifaĵoj"
@@ -5842,10 +6037,6 @@ msgid "Near plane"
msgstr "Proksima ebeno"
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Reto"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
@@ -5854,6 +6045,11 @@ msgstr ""
"Komencante de la ĉefmenuo, ĉi tio estos transpasita."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "Reto"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Novaj uzantoj devas enigi ĉi tiun pasvorton."
@@ -5866,6 +6062,11 @@ msgid "Noclip key"
msgstr "Trapasa klavo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Emfazado de monderoj"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Emfazado de monderoj"
@@ -5920,10 +6121,6 @@ msgstr ""
"kaj uzon de memoro (4096=100MB, proksimume)."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Enreta deponejo de enhavo"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "Netralumeblaj fluidoj"
@@ -6046,10 +6243,6 @@ msgstr ""
"Bezonas la rajton «flugi» je la servilo."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Nomo de ludanto"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "Distanco por transsendo de ludantoj"
@@ -6104,10 +6297,6 @@ msgid "Profiler toggle key"
msgstr "Profilila baskula klavo"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Profilado"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr "AÅ­skulta adreso de Prometheus"
@@ -6300,6 +6489,11 @@ msgstr ""
"per neentejraj kvantoj."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Ekrano:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Alteco de ekrano"
@@ -6330,6 +6524,11 @@ msgstr ""
"Uzu 0 por implicita kvalito."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Ekrankopio"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Bruo de marfundo"
@@ -6343,10 +6542,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Dua el la du 3d-aj bruoj, kiuj kune difinas tunelojn."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Sekureco"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Vidu https://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6405,8 +6600,19 @@ msgstr ""
"18 = 4D «Mandelbulb» aro de Julia."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Servilo / Ludo por unu"
+#, fuzzy
+msgid "Server"
+msgstr "URL de servilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Nomo de servilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Priskribo pri servilo"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6433,10 +6639,20 @@ msgid "Server side occlusion culling"
msgstr "Servilflanka elektado de postkaÅitoj"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Servila pordo"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "URL de listo de publikaj serviloj"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "URL de listo de publikaj serviloj"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Dosiero kun listo de serviloj"
@@ -6449,13 +6665,16 @@ msgstr ""
"Rerulo necesas post la ÅanÄo."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
"Agordi maksimuman longon de babilaj mesaÄoj (en signoj) sendotaj de klientoj."
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -6463,7 +6682,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6554,7 +6773,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 strength"
+#, fuzzy
+msgid "Shadow strength gamma"
msgstr "Forto de ombro"
#: src/settings_translation_file.cpp
@@ -6793,6 +7013,11 @@ msgid "Temperature variation for biomes."
msgstr "Varmeca diverseco por klimatoj."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Agordoj"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "Alternativa bruo de tereno"
@@ -7055,7 +7280,8 @@ msgid "Time speed"
msgstr "Rapido de tempo"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr "Tempolimo por forigi neuzatajn mapajn datenojn de klienta memoro."
#: src/settings_translation_file.cpp
@@ -7083,10 +7309,19 @@ msgid "Touch screen threshold"
msgstr "Sojlo de tuÅekrano"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Sojlo de tuÅekrano"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Bruo de arboj"
@@ -7195,6 +7430,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "Uzi trilinearan filtradon skalante teksturojn."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "Vertica bufrobjekto"
@@ -7471,6 +7710,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
"Ĉu montri erarserĉajn informojn de la kliento (efikas samkiel premo de F5)."
@@ -7578,6 +7826,10 @@ msgid "Y-level of seabed."
msgstr "Y-nivelo de marplanko."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Tempolimo de dosiere elÅuto de cURL"
@@ -7624,6 +7876,9 @@ msgstr "Samtempa limo de cURL"
#~ msgid "Back"
#~ msgstr "Reeniri"
+#~ msgid "Basic"
+#~ msgstr "Baza"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Bitoj bildere (aÅ­ kolornombro) en tutekrana reÄimo."
@@ -7654,6 +7909,12 @@ msgstr "Samtempa limo de cURL"
#~ msgid "Configure"
#~ msgstr "Agordi"
+#~ msgid "Connect"
+#~ msgstr "Konekti"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Regas rapidon de profundiÄo en fluaĵoj."
+
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value."
@@ -7699,6 +7960,9 @@ msgstr "Samtempa limo de cURL"
#~ "Difinas glatigan paÅon de teksturoj.\n"
#~ "Pli alta valoro signifas pli glatajn normalmapojn."
+#~ msgid "Del. Favorite"
+#~ msgstr "Forigi Åataton"
+
#~ msgid ""
#~ "Deprecated, define and locate cave liquids using biome definitions "
#~ "instead.\n"
@@ -7708,12 +7972,21 @@ msgstr "Samtempa limo de cURL"
#~ "difinoj\n"
#~ "Y de supra limo de lafo en grandaj kavernoj."
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "ElÅuti ludon, ekzemple minetest_game, el minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "ElÅutu ludon el minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "ElÅutante kaj instalante $1, bonvolu atendi…"
#~ msgid "Enable VBO"
#~ msgstr "Åœalti VBO(Vertex Buffer Object)"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Åœalti konfirmon de registriÄo"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7739,6 +8012,9 @@ msgstr "Samtempa limo de cURL"
#~ "Åœaltas mapadon de paralaksa ombrigo.\n"
#~ "Bezonas Åaltitajn ombrigilojn."
+#~ msgid "Enter "
+#~ msgstr "Enigi "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7758,6 +8034,9 @@ msgstr "Samtempa limo de cURL"
#~ msgid "Fallback font size"
#~ msgstr "Grando de reenpaÅa tiparo"
+#~ msgid "Filtering"
+#~ msgstr "Filtrado"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Bruo de baza alteco de fluginsuloj"
@@ -7776,6 +8055,9 @@ msgstr "Samtempa limo de cURL"
#~ msgid "Full screen BPP"
#~ msgstr "Kolornombro tutekrane"
+#~ msgid "Game"
+#~ msgstr "Ludo"
+
#~ msgid "Gamma"
#~ msgstr "HelÄustigo"
@@ -7785,15 +8067,29 @@ msgstr "Samtempa limo de cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Estigi normalmapojn"
+#~ msgid "HUD scale factor"
+#~ msgstr "Skala koeficiento por travida fasado"
+
#~ msgid "High-precision FPU"
#~ msgstr "Preciza glitkoma datentraktilo (FPU)"
#~ msgid "IPv6 support."
#~ msgstr "Subteno de IPv6."
+#~ msgid "In-Game"
+#~ msgstr "Lude"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Instali: dosiero: «$1»"
+#~ msgid "Instrumentation"
+#~ msgstr "Ekzamenado"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Klavagordoj. (Se tiu menuo misfunkcias, forigu agordojn el minetest.conf)"
+
#~ msgid "Lava depth"
#~ msgstr "Lafo-profundeco"
@@ -7814,6 +8110,9 @@ msgstr "Samtempa limo de cURL"
#~ "Funkciigas programaron «DirectX» kun «LuaJIT». MalÅaltu okaze de "
#~ "problemoj."
+#~ msgid "Menus"
+#~ msgstr "Menuoj"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Mapeto en radara reÄimo, zomo ×2"
@@ -7887,6 +8186,12 @@ msgstr "Samtempa limo de cURL"
#~ msgid "Path to save screenshots at."
#~ msgstr "Dosierindiko por konservi ekrankopiojn."
+#~ msgid "Player name"
+#~ msgstr "Nomo de ludanto"
+
+#~ msgid "Profiling"
+#~ msgstr "Profilado"
+
#~ msgid "Projecting dungeons"
#~ msgstr "Planante forgeskelojn"
@@ -7899,6 +8204,9 @@ msgstr "Samtempa limo de cURL"
#~ msgid "Select Package File:"
#~ msgstr "Elekti pakaĵan dosieron:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Servilo / Ludo por unu"
+
#~ msgid "Shadow limit"
#~ msgstr "Limo por ombroj"
@@ -7968,6 +8276,20 @@ msgstr "Samtempa limo de cURL"
#~ msgid "Yes"
#~ msgstr "Jes"
+#, 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 ""
+#~ "Vi estas aliÄonta al ĉi tiu servilo kun la nomo «%s» unuafoje.\n"
+#~ "Se vi pluigos, nova konto kun viaj salutiloj registriÄos ĉe la servilo.\n"
+#~ "Bonvolu retajpi vian pasvorton kaj klaki al «RegistriÄi kaj aliÄi» por "
+#~ "konfirmi kreon de konto, aŭ al «Nuligi» por ĉesigi."
+
#~ msgid "You died."
#~ msgstr "Vi mortis."
diff --git a/po/es/minetest.po b/po/es/minetest.po
index c0248b97a..812e5945b 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: 2022-01-25 23:19+0100\n"
-"PO-Revision-Date: 2022-01-23 18:54+0000\n"
-"Last-Translator: rubenwardy <rw@rubenwardy.com>\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-24 09:24+0000\n"
+"Last-Translator: Valentino <phamtomwhite@protonmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/minetest/"
"minetest/es/>\n"
"Language: es\n"
@@ -12,7 +12,7 @@ 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.11-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -115,6 +115,31 @@ msgid "The server has requested a reconnect:"
msgstr "El servidor ha solicitado una reconexión:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Selecciona Mods"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr "Más tarde"
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr "Nunca"
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "La versión del protocolo no coincide. "
@@ -127,6 +152,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "El servidor soporta versiones del protocolo entre $1 y $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr "Visitar el sitio web"
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Solo se soporta la versión de protocolo $1."
@@ -134,14 +163,22 @@ msgstr "Solo se soporta la versión de protocolo $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Nosotros soportamos versiones de protocolo entre la versión $1 y $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+#, fuzzy
+msgid "(Unsatisfied)"
+msgstr "(Insatisfecho)"
+
#: 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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Cancelar"
@@ -245,7 +282,7 @@ msgstr "$1 descargando..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr "$1 dependencias requeridas no se encuentran."
+msgstr "$1 dependencias requeridas no se encuentren."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
@@ -281,7 +318,6 @@ msgid "Failed to download $1"
msgstr "Fallo al descargar $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Juegos"
@@ -298,12 +334,10 @@ 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"
+msgstr "Instalar: Formato de archivo no soportado o archivo corrupto"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mods"
@@ -396,12 +430,10 @@ msgid "Decorations"
msgstr "Decoraciones"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Descarga un subjuego, como minetest_game, desde minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Descarga uno desde minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr ""
+"Advertencia: La prueba de desarrollo está destinada a los desarrolladores."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -419,10 +451,6 @@ msgstr "Tierras flotantes en el cielo"
msgid "Floatlands (experimental)"
msgstr "Tierras flotantes (experimental)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Juego"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Generar terreno no fractal: Oceanos y subterráneos"
@@ -440,6 +468,14 @@ msgid "Increases humidity around rivers"
msgstr "Incrementa humedad alrededor de los ríos"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr "Instalar un juego"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Lagos"
@@ -543,11 +579,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Cavernas muy grandes en lo profundo del subsuelo"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr ""
-"Advertencia: La prueba de desarrollo está destinada a los desarrolladores."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Nombre del mundo"
@@ -577,6 +608,38 @@ msgstr "pkgmgr: Ruta \"$1\" inválida"
msgid "Delete World \"$1\"?"
msgstr "¿Eliminar el mundo \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Confirmar contraseña"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Generador de mapas"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Nombre"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Contraseña"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr "Las contraseñas no coinciden"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Registrarse y unirse"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Aceptar"
@@ -609,6 +672,14 @@ msgstr "< Volver a la página de configuración"
msgid "Browse"
msgstr "Explorar"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr "Contenido: Juegos"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr "Contenido: Mods"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Desactivado"
@@ -640,7 +711,7 @@ msgstr "Persistencia"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
-msgstr "Por favor, introduzca un entero válido."
+msgstr "Por favor, introduce un entero válido."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid number."
@@ -666,7 +737,7 @@ msgstr "Seleccionar carpeta"
msgid "Select file"
msgstr "Seleccionar archivo"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Mostrar los nombres técnicos"
@@ -817,6 +888,11 @@ msgstr "Antiguos colaboradores"
msgid "Previous Core Developers"
msgstr "Antiguos desarrolladores principales"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Mostrar la informacion de la depuración"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Explorar contenido en línea"
@@ -885,10 +961,6 @@ msgstr "Hospedar servidor"
msgid "Install games from ContentDB"
msgstr "Instalar juegos desde ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Nombre"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Nuevo"
@@ -897,10 +969,6 @@ 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_online.lua
-msgid "Password"
-msgstr "Contraseña"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Jugar juego"
@@ -934,10 +1002,6 @@ msgid "Clear"
msgstr "Limpiar"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Conectar"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Modo creativo"
@@ -947,10 +1011,6 @@ msgid "Damage / PvP"
msgstr "Daño / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Borrar Fav."
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Favoritos"
@@ -963,6 +1023,10 @@ msgid "Join Game"
msgstr "Unirse al juego"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -975,8 +1039,17 @@ msgid "Refresh"
msgstr "Actualizar"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Puerto remoto"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
-msgstr "Descripción del Servidor"
+msgstr "Descripción del servidor"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -1023,8 +1096,8 @@ msgid "Dynamic shadows"
msgstr "Sombras dinámicas"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr "Sombras dinámicas: "
+msgid "Dynamic shadows:"
+msgstr "Sombras dinámicas:"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1068,7 +1141,7 @@ msgstr "Marcar nodos"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
-msgstr ""
+msgstr "Nada"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
@@ -1119,15 +1192,16 @@ msgid "Tone Mapping"
msgstr "Mapeado de tonos"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr "Umbral táctil: (px)"
+msgid "Touch threshold (px):"
+msgstr "Umbral táctil (px):"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
msgstr "Filtrado trilineal"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+#, fuzzy
+msgid "Very High"
msgstr "Ultra Alto"
#: builtin/mainmenu/tab_settings.lua
@@ -1146,6 +1220,11 @@ msgstr "Movimiento de líquidos"
msgid "Waving Plants"
msgstr "Movimiento de plantas"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Error de conexión (¿tiempo agotado?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Tiempo de espera de la conexión agotado."
@@ -1175,9 +1254,8 @@ msgid "Connection error (timed out?)"
msgstr "Error de conexión (¿tiempo agotado?)"
#: src/client/clientlauncher.cpp
-#, fuzzy
msgid "Could not find or load game: "
-msgstr "No se puede encontrar o cargar el juego \""
+msgstr "No se puede encontrar o cargar el juego: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1250,7 +1328,7 @@ msgstr "Ha ocurrido un error:"
#: src/client/game.cpp
#, c-format
msgid "Access denied. Reason: %s"
-msgstr ""
+msgstr "Acceso denegado. Razón: %s"
#: src/client/game.cpp
msgid "Automatic forward disabled"
@@ -1267,7 +1345,7 @@ msgstr "Límites de bloque"
#: src/client/game.cpp
msgid "Block bounds shown for all blocks"
-msgstr ""
+msgstr "Límites de bloque mostrados para todos los bloques"
#: src/client/game.cpp
msgid "Block bounds shown for current block"
@@ -1286,12 +1364,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)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
msgid "Change Password"
-msgstr ""
+msgstr "Cambiar Contraseña"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
@@ -1302,9 +1380,8 @@ msgid "Cinematic mode enabled"
msgstr "Modo cinematográfico activado"
#: src/client/game.cpp
-#, fuzzy
msgid "Client disconnected"
-msgstr "Customización del cliente"
+msgstr "El cliente se desconectó"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
@@ -1316,7 +1393,7 @@ msgstr "Conectando al servidor..."
#: src/client/game.cpp
msgid "Connection failed for unknown reason"
-msgstr ""
+msgstr "La conexión falló por razones desconocidas"
#: src/client/game.cpp
msgid "Continue"
@@ -1358,7 +1435,7 @@ msgstr ""
#: src/client/game.cpp
#, c-format
msgid "Couldn't resolve address: %s"
-msgstr ""
+msgstr "No se pudo resolver la dirección : %s"
#: src/client/game.cpp
msgid "Creating client..."
@@ -1417,6 +1494,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Rango de visión ilimitada activado"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Creando cliente..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Salir al menú"
@@ -1478,7 +1560,7 @@ msgstr "KiB/s"
#: src/client/game.cpp
msgid "Media..."
-msgstr "Media..."
+msgstr "Multimedia..."
#: src/client/game.cpp
msgid "MiB/s"
@@ -1567,12 +1649,12 @@ msgstr "Sonido no silenciado"
#: src/client/game.cpp
#, c-format
msgid "The server is probably running a different version of %s."
-msgstr ""
+msgstr "Este servidor probablemente use una versión diferente de %s."
#: src/client/game.cpp
#, c-format
msgid "Unable to connect to %s because IPv6 is disabled"
-msgstr ""
+msgstr "No se puede conectar a %s porque IPv6 esta"
#: src/client/game.cpp
#, c-format
@@ -1916,34 +1998,11 @@ msgstr "Minimapa en modo textura"
#: src/gui/guiChatConsole.cpp
#, fuzzy
msgid "Failed to open webpage"
-msgstr "Fallo al descargar $1"
+msgstr "Fallo al abrir la página web"
#: 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!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Registrarse y unirse"
-
-#: 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 ""
-"Te vas unir al servidor con el nombre \"%s\" por primera vez.\n"
-"Cuando procedas, se creará una nueva cuenta en este servidor usando tus "
-"credenciales.\n"
-"Por favor, reescribe tu contraseña y haz clic en 'Registrarse y unirse' para "
-"confirmar la creación de la cuenta, o haz clic en 'Cancelar' para abortar."
+msgstr "Abriendo página web"
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
@@ -1977,7 +2036,7 @@ msgstr "Límites de bloque"
msgid "Change camera"
msgstr "Cambiar cámara"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Chat"
@@ -2030,10 +2089,8 @@ msgid "Key already in use"
msgstr "La tecla ya se está utilizando"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Combinaciones de teclas. (Si este menú da error, elimina líneas en minetest."
-"conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2104,10 +2161,6 @@ msgid "Change"
msgstr "Cambiar"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Confirmar contraseña"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Contraseña nueva"
@@ -2115,6 +2168,10 @@ msgstr "Contraseña nueva"
msgid "Old Password"
msgstr "Contraseña anterior"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "¡Las contraseñas no coinciden!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Cerrar"
@@ -2124,15 +2181,9 @@ msgid "Muted"
msgstr "Silenciado"
#: src/gui/guiVolumeChange.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Sound Volume: %d%%"
-msgstr "Volumen del sonido: "
-
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Ingresar "
+msgstr "Volumen del sonido: %d%%"
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
@@ -2141,6 +2192,16 @@ msgstr "Ingresar "
msgid "LANG_CODE"
msgstr "es"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "¡Por favor, elige un nombre!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2316,6 +2377,10 @@ msgstr ""
"Nota: el modo entrelazado requiere que los shaders estén activados."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2393,8 +2458,11 @@ msgstr ""
"sólo), por ejemplo para pantallas 4K."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Adjust the detected display density, used for scaling UI elements."
msgstr ""
+"Adjuste la densidad de visualización detectada, usada para escalar elementos "
+"de la interfaz."
#: src/settings_translation_file.cpp
#, c-format
@@ -2413,6 +2481,11 @@ msgstr ""
"siempre pruébelo para asegurarse) crea una isla flotante compacta."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Añadir nombre de objeto"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avanzado"
@@ -2433,7 +2506,8 @@ msgstr ""
"tiene muy poco efecto en la luz natural nocturna."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Siempre volando y rápido"
#: src/settings_translation_file.cpp
@@ -2514,6 +2588,10 @@ msgstr ""
"Fijado en bloques de mapa (16 nodos)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Tecla de avance automático"
@@ -2523,7 +2601,7 @@ msgstr "Saltar obstáculos de un nodo automáticamente."
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
-msgstr "Automáticamente informar a la lista del servidor."
+msgstr "Informar automáticamente a la lista del servidor."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
@@ -2554,10 +2632,6 @@ msgid "Base terrain height."
msgstr "Altura base del terreno."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Básico"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Privilegios básicos"
@@ -2578,7 +2652,8 @@ msgid "Bind address"
msgstr "Dirección BIND"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Parámetros de ruido y humedad en la API de temperatura de biomas"
#: src/settings_translation_file.cpp
@@ -2590,6 +2665,10 @@ msgid "Block send optimize distance"
msgstr "Optimizar la distancia del envío de bloques"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Ruta de la fuente en negrita y cursiva"
@@ -2614,6 +2693,11 @@ msgid "Builtin"
msgstr "Incorporado"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Cambiar cámara"
+
+#: 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"
@@ -2781,6 +2865,11 @@ msgid "Client side node lookup range restriction"
msgstr "Restricción del rango de búsqueda del nodo del lado cliente"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Customización del cliente"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Velocidad de escalada"
@@ -2850,20 +2939,30 @@ msgid "Command key"
msgstr "Tecla 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 ""
+"Nivel de compresión a usar para guardar bloques del mapa al disco.\n"
+"-1 - usar compresión por defecto\n"
+"0 - menor compresión, más rápido\n"
+"9 - mejor compresión, más lento"
#: 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 ""
+"Nivel de compresión a usar cuando se envían bloques del mapa al cliente.\n"
+"-1 - usar nivel de compresión por defecto\n"
+"0 - menor compresión, más rápido\n"
+"9 - mejor compresión, más lento"
#: src/settings_translation_file.cpp
msgid "Connect glass"
@@ -2875,7 +2974,7 @@ msgstr "Conectar a un servidor media externo"
#: src/settings_translation_file.cpp
msgid "Connects glass if supported by node."
-msgstr "Conectar gafas si el nodo lo soporta."
+msgstr "Conectar gafas si el nodo lo permite."
#: src/settings_translation_file.cpp
msgid "Console alpha"
@@ -2890,6 +2989,11 @@ msgid "Console height"
msgstr "Altura de consola"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "Contenido del repositorio en linea"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "Lista negra de Contenido de la Base de Datos"
@@ -2929,8 +3033,10 @@ msgstr ""
"inalterado."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Controla la velocidad de hundimiento en líquidos."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -3006,12 +3112,12 @@ msgid "Debug log level"
msgstr "Nivel de registro de depuración"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Dec. tecla de volumen"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Disminuya esto para aumentar la resistencia del líquido al movimiento."
+msgid "Dec. volume key"
+msgstr "Dec. tecla de volumen"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3055,6 +3161,9 @@ msgid ""
"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
"but also uses more resources."
msgstr ""
+"Define la calidad del filtro de sombras.\n"
+"Esto simula el efecto de sombras suaves aplicando un PCF o Poisson disk\n"
+"pero tambien utiliza más recursos."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -3072,7 +3181,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Defines distribution of higher terrain."
-msgstr "Define is distribución del terreno alto."
+msgstr "Define la distribución del terreno alto."
#: src/settings_translation_file.cpp
msgid "Defines full size of caverns, smaller values create larger caverns."
@@ -3167,6 +3276,11 @@ msgid "Desynchronize block animation"
msgstr "Desincronizar la animación de los bloques"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Decoraciones"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Tecla Excavar"
@@ -3184,6 +3298,12 @@ msgstr "No permitir contraseñas vacías"
#: src/settings_translation_file.cpp
msgid "Display Density Scaling Factor"
+msgstr "Factor del Escalado de la Densidad de Visualización"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3236,15 +3356,14 @@ 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."
+"Si el valor es verdadero, utiliza \"poisson disk\" para proyectar sombras "
+"suaves. De otro modo utiliza filtrado PCF."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3269,6 +3388,10 @@ msgid "Enable joysticks"
msgstr "Activar joysticks"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Activar soporte para los canales de mods."
@@ -3285,18 +3408,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Habilitar entrada aleatoria (solo usar para pruebas)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-msgstr "Habilitar confirmación de registro"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
-msgstr ""
-"Habilitar confirmación de registro al conectar al servidor\n"
-"Si esta deshabilitado, se registrará una nueva cuenta automáticamente."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3305,6 +3416,10 @@ msgstr ""
"Deshabilítalo para mayor velocidad o una vista diferente."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3397,6 +3512,15 @@ 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 ""
+"Habilita compensaciones que reducen la carga del procesador o aumentan el "
+"rendimiento de la renderizacion\n"
+"a cambio de pequeños errores visuales que no impactan a la jugabilidad del "
+"juego."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "Perfilador"
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -3426,6 +3550,10 @@ msgstr ""
"tierras bajas más planas, apropiada para una capa de tierra flotante sólida."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "FPS cuando está en segundo plano o pausado"
@@ -3500,23 +3628,24 @@ 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, 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"
+"Las texturas filtradas pueden mezclar valores RGB con sus nodos adyacentes "
+"que sean completamente transparentes,\n"
"los cuales los optimizadores de PNG usualmente descartan, lo que a veces "
"resulta en un borde claro u\n"
-"oscuro en las texturas transparentes. Aplica éste filtro para limpiar ésto\n"
-"al cargar las texturas."
+"oscuro en las texturas transparentes. Aplica éste filtro para limpiar esto\n"
+"al cargar las texturas. Esto se habilita automaticamente si el mapeado MIP "
+"tambien lo está."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtrado"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Suavizado:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3583,6 +3712,11 @@ msgid "Fog toggle key"
msgstr "Tecla para alternar niebla"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Tamaño de la fuente"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Fuente en negrita por defecto"
@@ -3604,17 +3738,15 @@ msgstr "Tamaño de la fuente"
#: src/settings_translation_file.cpp
msgid "Font size divisible by"
-msgstr ""
+msgstr "Tamaño de fuente divisible por"
#: src/settings_translation_file.cpp
-#, 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)."
+msgstr "Tamaño de la fuente por defecto donde 1 unidad = 1 pixel a 96 DPI"
#: src/settings_translation_file.cpp
-#, 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)."
+msgstr "Tamaño de la fuente monoespaciada donde 1 unidad = 1 pixel a 96 DPI"
#: src/settings_translation_file.cpp
msgid ""
@@ -3635,6 +3767,14 @@ msgid ""
"be\n"
"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
msgstr ""
+"Para fuentes pixeladas que no escalan bien, esto asegura que los tamaños de "
+"fuente utilizados\n"
+"con esta fuente siempre seran divisibles por este valor, en píxeles. Por "
+"ejemplo,\n"
+"una fuente pixelada de 16 píxeles de alto debería tener un valor de 16, "
+"entonces solo tendrá\n"
+"un tamaño de 16,32,48,etc., por lo que un mod pidiendo un tamaño de 25 "
+"recibira uno de 32."
#: src/settings_translation_file.cpp
msgid ""
@@ -3751,19 +3891,31 @@ msgid "GUI scaling filter txr2img"
msgstr "Filtro de escala de IGU \"txr2img\""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Juegos"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
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 jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
-"Atributos del generador de mapas globales.\n"
+"Atributos globales del generador de mapas.\n"
"En el generador de mapas V6 la opción (o marcador) \"decorations\" controla "
-"todos los elementos decorativos excepto los árboles \n"
+"todos los elementos decorativos excepto los árboles\n"
"y la hierba de la jungla, en todos los otros generadores de mapas esta "
"opción controla todas las decoraciones."
@@ -3788,6 +3940,16 @@ msgid "Graphics"
msgstr "Gráficos"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Gráficos"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Gráficos"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Gravedad"
@@ -3804,8 +3966,13 @@ msgid "HTTP mods"
msgstr "Mods HTTP"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "Factor de escala HUD"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "Escala de IGU"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -3848,10 +4015,11 @@ msgid "Heat noise"
msgstr "Calor del ruido"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Height component of the initial window size. Ignored in fullscreen mode."
-msgstr "Componente de altura del tamaño inicial de la ventana."
+msgstr ""
+"Componente de altura del tamaño inicial de la ventana. Ignorado en el modo "
+"de pantalla completa."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -4065,8 +4233,10 @@ msgstr ""
"Requiere que se habiliten los líquidos de agitación."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"Cuanto espera el servidor antes de descargar los bloques de mapa no "
@@ -4074,6 +4244,13 @@ msgstr ""
"Con valores mayores es mas fluido, pero se utiliza mas RAM."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "Disminuya esto para aumentar la resistencia del líquido al movimiento."
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "Ancho de los ríos."
@@ -4140,17 +4317,25 @@ msgstr ""
"Requiere del privilegio \"noclip\" en el servidor."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"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 "
+"Si está activada, la tecla \"Aux1\" en lugar de la tecla \"Sneak\" se "
"utilizará para bajar y\n"
"descender."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Habilitar confirmación de registro al conectar al servidor\n"
+"Si esta deshabilitado, se registrará una nueva cuenta automáticamente."
+
+#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
@@ -4170,7 +4355,7 @@ msgid ""
msgstr ""
"Si se habilita, los datos del mundo inválidos no causarán que el servidor se "
"apague.\n"
-"Actívelo sólo si sabe lo que hace."
+"Actívelo solo si sabe lo que hace."
#: src/settings_translation_file.cpp
msgid ""
@@ -4181,7 +4366,10 @@ msgstr ""
"lanzamiento del jugador cuando vuela o nada."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
"Si esta activado, los nuevos jugadores no pueden unirse con contraseñas "
"vacías."
@@ -4236,10 +4424,6 @@ msgid "Ignore world errors"
msgstr "Ignora los errores del mundo"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "Dentro del juego"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
"Valor alfa del fondo de la consola de chat durante el juego (opacidad, entre "
@@ -4302,16 +4486,13 @@ msgid "Instrument the methods of entities on registration."
msgstr "Instrumenta los métodos de las entidades en el registro."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Instrumentación"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""
"Intervalo de guardar cambios importantes en el mundo, expresado en segundos."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "Intervalo de envío de la hora del día a los clientes."
#: src/settings_translation_file.cpp
@@ -5175,6 +5356,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
"Expulsa a los jugadores que enviaron más de X mensajes cada 10 segundos."
@@ -5232,10 +5417,11 @@ msgid "Left key"
msgstr "Tecla izquierda"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"Duración de un tick del servidor y el intervalo en el que los objetos se "
"actualizan generalmente sobre la\n"
@@ -5250,19 +5436,26 @@ msgstr ""
"Requiere que se habiliten los líquidos ondulados."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+#, fuzzy
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
"Período de tiempo entre ciclos de ejecución de Active Block Modifier (ABM)"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "Cantidad de tiempo entre ciclos de ejecución de NodeTimer"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "Periodo de tiempo entre ciclos de gestión de bloques activos"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5271,7 +5464,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Nivel de registro que se escribirá en debug.txt:\n"
"- <nada> (sin registro)\n"
@@ -5307,6 +5501,11 @@ msgid "Light curve low gradient"
msgstr "Curva de luz de bajo gradiente"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Iluminación suave"
+
+#: 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"
@@ -5586,9 +5785,8 @@ msgid "Max block send distance"
msgstr "Distancia máxima de envío de bloques"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Max liquids processed per step."
-msgstr "Líquidos máximos procesados por paso."
+msgstr "Máxima cantidad de líquidos procesada por paso."
#: src/settings_translation_file.cpp
msgid "Max. clearobjects extra blocks"
@@ -5765,10 +5963,6 @@ msgid "Maximum users"
msgstr "Usuarios máximos"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menús"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "Caché de mallas poligonales"
@@ -5803,7 +5997,7 @@ msgstr "Altura de escaneo del minimapa"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr "Ruido 3D que determina la cantidad de mazmorras por chunk."
+msgstr "Límite mínimo del número aleatorio de cuevas grandes por mapchunk."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
@@ -5819,12 +6013,26 @@ msgid "Mipmapping"
msgstr "Mapeado de relieve"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "Perfilador"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Seguridad"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Modifies the size of the HUD elements."
-msgstr ""
+msgstr "Modifica el tamaño de los elementos del HUD."
#: src/settings_translation_file.cpp
msgid "Monospace font path"
@@ -5835,13 +6043,12 @@ 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"
+msgstr "Tamaño de fuente monoespaciada divisible por"
#: src/settings_translation_file.cpp
msgid "Mountain height noise"
-msgstr ""
+msgstr "Ruido de altura de montañas"
#: src/settings_translation_file.cpp
msgid "Mountain noise"
@@ -5849,7 +6056,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Mountain variation noise"
-msgstr ""
+msgstr "Variación del ruido de montaña"
#: src/settings_translation_file.cpp
msgid "Mountain zero level"
@@ -5865,13 +6072,15 @@ msgstr "Multiplicador de sensiblidad del ratón."
#: src/settings_translation_file.cpp
msgid "Mud noise"
-msgstr ""
+msgstr "Ruido del barro"
#: 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 ""
+"Multiplicador del balanceo de caída.\n"
+"Por ejemplo: 0 para no ver balanceo; 1.0 para normal; 2.0 para doble."
#: src/settings_translation_file.cpp
msgid "Mute key"
@@ -5888,6 +6097,10 @@ msgid ""
"Current mapgens in a highly unstable state:\n"
"- The optional floatlands of v7 (disabled by default)."
msgstr ""
+"Nombre del generador de mapas que se utilizará al crear un nuevo mundo.\n"
+"Crear un mundo en el menú principal anulará esto.\n"
+"Los generadores de mapas actuales estan en un estado altamente inestable:\n"
+"- …Las floatlands opcionales de la v7 (desactivado por defecto)."
#: src/settings_translation_file.cpp
msgid ""
@@ -5904,20 +6117,25 @@ msgstr ""
msgid ""
"Name of the server, to be displayed when players join and in the serverlist."
msgstr ""
+"Nombre del servior, será mostrado cuando los jugadores se unan y en la lista "
+"de servidores."
#: src/settings_translation_file.cpp
msgid "Near plane"
msgstr "Plano cercano"
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Red"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
msgstr ""
+"Puerto de red a escuchar (UDP).\n"
+"Este valor será anulado al iniciar desde el menú principal."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "Red"
#: src/settings_translation_file.cpp
msgid "New users need to input this password."
@@ -5932,16 +6150,21 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Resaltar nodos"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Resaltado de los nodos"
#: src/settings_translation_file.cpp
msgid "NodeTimer interval"
-msgstr ""
+msgstr "Intervalo de cronometro de nodo"
#: src/settings_translation_file.cpp
msgid "Noises"
-msgstr ""
+msgstr "Ruidos"
#: src/settings_translation_file.cpp
msgid "Number of emerge threads"
@@ -5962,15 +6185,15 @@ 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"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Contenido del repositorio en linea"
+"Número de bloques extra que pueden ser cargados por /clearobjects a la vez.\n"
+"Esto es un intercambio entre una sobrecarga de transacciones SQLite y\n"
+"consumo de memoria (4096=100MB, como regla general)."
#: src/settings_translation_file.cpp
msgid "Opaque liquids"
@@ -5980,6 +6203,8 @@ msgstr "Líquidos opacos"
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
msgstr ""
+"Opacidad (alfa) de la sombra detrás de la fuente predeterminada, entre 0 y "
+"255."
#: src/settings_translation_file.cpp
msgid ""
@@ -5987,10 +6212,13 @@ msgid ""
"formspec is\n"
"open."
msgstr ""
+"Abrir el menú de pausa al perder el foco de la ventana. No se pausa si hay "
+"un formulario\n"
+"abierto."
#: src/settings_translation_file.cpp
msgid "Optional override for chat weblink color."
-msgstr ""
+msgstr "Anulación opcional del color de un enlace web en el chat."
#: src/settings_translation_file.cpp
msgid ""
@@ -5998,46 +6226,62 @@ msgid ""
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"Ruta de la fuente de respaldo. Debe ser una fuente TrueType.\n"
+"Esta fuente será utilizada para ciertos idiomas o si la fuente por defecto "
+"no está disponible."
#: 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 ""
+"Ruta en la que guardar capturas de pantalla. Puede ser una ruta absoluta o "
+"relativa.\n"
+"La carpeta será creada si no existe."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Path to shader directory. If no path is defined, default location will be "
"used."
msgstr ""
+"Ruta al directorio de los shaders. Si no es especificada, se usará la "
+"ubicación por defecto."
#: src/settings_translation_file.cpp
msgid "Path to texture directory. All textures are first searched from here."
msgstr ""
+"Ruta al directorio de texturas. Todas las texturas se buscaran primero desde "
+"aquí."
#: 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 ""
+"Ruta a la fuente por defecto. Debe ser una fuente TrueType.\n"
+"La fuente de respaldo se utilizará si la fuente no se puede cargar."
#: 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 ""
+"Ruta a la fuente monoespaciada. Debe ser una fuente TrueType.\n"
+"Este fuente es usada, por ejemplo, para la consola y la pantalla del "
+"perfilador."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
-msgstr ""
+msgstr "Pausar cuando se pierda el foco de la ventana"
#: src/settings_translation_file.cpp
msgid "Per-player limit of queued blocks load from disk"
-msgstr ""
+msgstr "Límite por jugador de bloques en cola que se cargan desde el disco"
#: src/settings_translation_file.cpp
msgid "Per-player limit of queued blocks to generate"
-msgstr ""
+msgstr "Límite por jugador de bloques en espera para generar"
#: src/settings_translation_file.cpp
msgid "Physics"
@@ -6056,22 +6300,19 @@ msgstr "Modo de movimiento de inclinación activado"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Place key"
-msgstr "Tecla vuelo"
+msgstr "Tecla Colocar"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place repetition interval"
-msgstr "Intervalo de repetición del botón del Joystick"
+msgstr "Intervalo de repetición para colocar"
#: 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 "Nombre del jugador"
+"El jugador es capaz de volar sin ser afectado por la gravedad.\n"
+"Esto requiere el privilegio \"fly\" en el servidor."
#: src/settings_translation_file.cpp
msgid "Player transfer distance"
@@ -6099,6 +6340,9 @@ 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 ""
+"Evite que cavar y colocar se repita cuando mantenga presionados los botones "
+"del ratón.\n"
+"Habilite esto cuando excave o coloque con demasiada frecuencia por accidente."
#: src/settings_translation_file.cpp
msgid "Prevent mods from doing insecure things like running shell commands."
@@ -6109,10 +6353,13 @@ msgid ""
"Print the engine's profiling data in regular intervals (in seconds).\n"
"0 = disable. Useful for developers."
msgstr ""
+"Imprima los datos de perfilado del motor en intervalos regulares (en "
+"segundos).\n"
+"0 = desactivar. Útil para desarrolladores."
#: src/settings_translation_file.cpp
msgid "Privileges that players with basic_privs can grant"
-msgstr ""
+msgstr "Privilegios que los jugadores con privilegios basicos pueden otorgar"
#: src/settings_translation_file.cpp
msgid "Profiler"
@@ -6120,11 +6367,7 @@ msgstr "Perfilador"
#: src/settings_translation_file.cpp
msgid "Profiler toggle key"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Perfilando"
+msgstr "Tecla para alternar perfiles"
#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
@@ -6140,7 +6383,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
-msgstr ""
+msgstr "Proporción de cuevas grandes que contienen líquido."
#: src/settings_translation_file.cpp
msgid ""
@@ -6148,10 +6391,13 @@ msgid ""
"Values larger than 26 will start to produce sharp cutoffs at cloud area "
"corners."
msgstr ""
+"Radio del área de nube indicado en número de 64 nodos cuadrados de nube.\n"
+"Los valores mayores de 26 comenzarán a producir cortes agudos en las "
+"esquinas del área de nubes."
#: src/settings_translation_file.cpp
msgid "Raises terrain to make valleys around the rivers."
-msgstr ""
+msgstr "Levanta terreno para hacer valles alrededor de los ríos."
#: src/settings_translation_file.cpp
msgid "Random input"
@@ -6163,7 +6409,7 @@ msgstr "Tecla seleccionar rango de visión"
#: src/settings_translation_file.cpp
msgid "Recent Chat Messages"
-msgstr ""
+msgstr "Mensajes Recientes del Chat"
#: src/settings_translation_file.cpp
msgid "Regular font path"
@@ -6182,6 +6428,8 @@ msgid ""
"Remove color codes from incoming chat messages\n"
"Use this to stop players from being able to use color in their messages"
msgstr ""
+"Eliminar códigos de color de los mensajes de chat entrantes\n"
+"Use esto para evitar que los jugadores puedan usar color en sus mensajes"
#: src/settings_translation_file.cpp
msgid "Replaces the default main menu with a custom one."
@@ -6205,6 +6453,23 @@ msgid ""
"csm_restriction_noderange)\n"
"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
msgstr ""
+"Restringe el acceso de ciertas funciones del lado del cliente en los "
+"servidores.\n"
+"Combine los byteflags a continuación para restringir las características del "
+"lado del cliente, o establezca en 0\n"
+"para no tener restricciones:\n"
+"LOAD_CLIENT_MODS: 1 (desactivar la carga de mods proporcionados por el "
+"cliente)\n"
+"CHAT_MESSAGES: 2 (desactivar la llamada send_chat_message del lado del "
+"cliente)\n"
+"READ_ITEMDEFS: 4 (deshabilitar la llamada get_item_def del lado del "
+"cliente)\n"
+"READ_NODEDEFS: 8 (deshabilitar la llamada get_node_def del lado del "
+"cliente)\n"
+"LOOKUP_NODES_LIMIT: 16 (limita la llamada get_node del lado del cliente a\n"
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (desactivar la llamada get_player_names del lado del "
+"cliente)"
#: src/settings_translation_file.cpp
msgid "Ridge mountain spread noise"
@@ -6216,7 +6481,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Ridge underwater noise"
-msgstr ""
+msgstr "Ruido de las crestas marinas"
#: src/settings_translation_file.cpp
msgid "Ridged mountain size noise"
@@ -6248,9 +6513,8 @@ msgid "River size"
msgstr "Tamaño del río"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River valley width"
-msgstr "Profundidad del relleno"
+msgstr "Anchura de los valles con ríos"
#: src/settings_translation_file.cpp
msgid "Rollback recording"
@@ -6266,7 +6530,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Round minimap"
-msgstr ""
+msgstr "Minimapa redondo"
#: src/settings_translation_file.cpp
msgid "Safe digging and placing"
@@ -6274,21 +6538,22 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Sandy beaches occur when np_beach exceeds this value."
-msgstr ""
+msgstr "Las playas de arena se producen cuando np_beach supera este valor."
#: src/settings_translation_file.cpp
msgid "Save the map received by the client on disk."
-msgstr ""
+msgstr "Guardar el mapa recibido por el cliente en el disco."
#: src/settings_translation_file.cpp
msgid "Save window size automatically when modified."
-msgstr ""
+msgstr "Guardar el tamaño de la ventana automáticamente cuando se modifique."
#: src/settings_translation_file.cpp
msgid "Saving map received from server"
-msgstr ""
+msgstr "Guardando el mapa recibido del servidor"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Scale GUI by a user specified value.\n"
"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
@@ -6296,18 +6561,29 @@ msgid ""
"pixels when scaling down, at the cost of blurring some\n"
"edge pixels when images are scaled by non-integer sizes."
msgstr ""
+"Escala la interfaz por un valor epecificado por el usuario.\n"
+"Utilice el filtro anti-alias mas cercano para escalar la interfaz.\n"
+"Esto suavizará algunos de los bordes ásperos y mezclará\n"
+"píxeles al reducir el tamaño, a costa de difuminar algunos\n"
+"píxeles en los bordes cuando las imágenes son escaladas por tamaños que no "
+"sean números enteros"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Pantalla:"
#: src/settings_translation_file.cpp
msgid "Screen height"
-msgstr ""
+msgstr "Altura de la pantalla"
#: src/settings_translation_file.cpp
msgid "Screen width"
-msgstr ""
+msgstr "Ancho de la pantalla"
#: src/settings_translation_file.cpp
msgid "Screenshot folder"
-msgstr ""
+msgstr "Carpeta de captura de pantalla"
#: src/settings_translation_file.cpp
msgid "Screenshot format"
@@ -6323,41 +6599,43 @@ msgid ""
"1 means worst quality; 100 means best quality.\n"
"Use 0 for default quality."
msgstr ""
+"Calidad de captura de pantalla. Solo se utiliza para el formato JPEG.\n"
+"1 significa la peor calidad; 100 significa la mejor calidad.\n"
+"Utilice 0 para la calidad predeterminada."
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Screenshots"
+msgstr "Captura de pantalla"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
-msgstr "Ruido de cueva Nº1"
+msgstr "Ruido del lecho marino"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Second of 4 2D noises that together define hill/mountain range height."
-msgstr "Primero de 2 ruidos 3D que juntos definen túneles."
+msgstr ""
+"Segundo de 4 ruidos 2D que juntos definen la altura de la colina/cordillera."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Second of two 3D noises that together define tunnels."
-msgstr "Primero de 2 ruidos 3D que juntos definen túneles."
-
-#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Seguridad"
+msgstr "Segundo de 2 ruidos 3D que juntos definen túneles."
#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
-msgstr ""
+msgstr "Ver https://www.sqlite.org/pragma.html#pragma_synchronous"
#: src/settings_translation_file.cpp
msgid "Selection box border color (R,G,B)."
-msgstr ""
+msgstr "Color del borde del cuadro de selección (R, G, B)."
#: src/settings_translation_file.cpp
msgid "Selection box color"
-msgstr ""
+msgstr "Color del cuadro de selección"
#: src/settings_translation_file.cpp
msgid "Selection box width"
-msgstr ""
+msgstr "Ancho de la caja de selección"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6403,8 +6681,19 @@ msgstr ""
"18 = Conjunto de Julia 4D \"Mandelbulb\"."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Servidor / Un jugador"
+#, fuzzy
+msgid "Server"
+msgstr "URL del servidor"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Nombre del servidor"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Descripción del servidor"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6431,10 +6720,20 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Puerto del servidor"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "Lista de las URLs de servidores"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "Lista de las URLs de servidores"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Archivo de la lista de servidores"
@@ -6443,23 +6742,39 @@ msgid ""
"Set the language. Leave empty to use the system language.\n"
"A restart is required after changing this."
msgstr ""
+"Seleccionar el idioma. Dejar vacío para usar el idioma del sistema.\n"
+"Se requiere reiniciar para cambiar esto."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
+"Establecer la longitud máxima de caracteres de un mensaje de chat enviado "
+"por los clientes."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
+"Establecer la fuerza de la sombra.\n"
+"Un valor menor significa sombras más claras, un valor mayor valor significa "
+"sombras más oscuras."
#: 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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
+"Establecer el tamaño del radio de las sombras suaves.\n"
+"Los valores más bajos significan sombras más nítidas, los valores más altos "
+"significan sombras más suaves.\n"
+"Valor mínimo: 1.0; valor máximo: 10.0"
#: src/settings_translation_file.cpp
msgid ""
@@ -6467,15 +6782,17 @@ msgid ""
"Value of 0 means no tilt / vertical orbit.\n"
"Minimum value: 0.0; maximum value: 60.0"
msgstr ""
+"Establecer la inclinación de la órbita del Sol/Luna en grados.\n"
+"El valor 0 significa que no hay inclinación / órbita vertical.\n"
+"Valor mínimo: 0.0; valor máximo: 60.0"
#: 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."
+"Establecer en verdero para habilitar el mapeo de sombras.\n"
+"Requiere que los sombreadores estén habilitados."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6522,6 +6839,10 @@ msgid ""
"cards.\n"
"This only works with the OpenGL video backend."
msgstr ""
+"Los sombreadores permiten efectos visuales avanzados y pueden aumentar el "
+"rendimiento en algunas tarjetas de\n"
+"vídeo.\n"
+"Esto solo funciona con el motor de vídeo OpenGL."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6548,16 +6869,17 @@ msgid ""
msgstr "Compensado de sombra de fuente, si es 0 no se dibujará la sombra."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
-msgstr ""
+#, fuzzy
+msgid "Shadow strength gamma"
+msgstr "Intensidad de sombra"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
-msgstr ""
+msgstr "Forma del minimapa. Habilitado = redodondo, deshabilitado = cuadrado."
#: src/settings_translation_file.cpp
msgid "Show debug info"
-msgstr ""
+msgstr "Mostrar la informacion de la depuración"
#: src/settings_translation_file.cpp
msgid "Show entity selection boxes"
@@ -6632,14 +6954,18 @@ msgid ""
"Smooths camera when looking around. Also called look or mouse smoothing.\n"
"Useful for recording videos."
msgstr ""
+"Suaviza la cámara al mirar alrededor. También se llama suavizado de mirada o "
+"ratón.\n"
+"Útil para grabar vídeos."
#: src/settings_translation_file.cpp
msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
msgstr ""
+"Suaviza la rotación de la cámara en modo cinematográfico. 0 para desactivar."
#: src/settings_translation_file.cpp
msgid "Smooths rotation of camera. 0 to disable."
-msgstr ""
+msgstr "Suaviza la rotación de la cámara. 0 para desactivar."
#: src/settings_translation_file.cpp
msgid "Sneak key"
@@ -6652,7 +6978,7 @@ msgstr "Velocidad del caminar"
#: src/settings_translation_file.cpp
msgid "Sneaking speed, in nodes per second."
-msgstr ""
+msgstr "Velocidad agachado, en nodos por segundo."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6672,11 +6998,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
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 ""
+"Especifica el tamaño por defecto de los stacks (Montónes) de nodos, items y "
+"bloques.\n"
+"Cabe aclarar que los mods o juegos pueden establecer un stack para algunos "
+"items (o todos)."
#: src/settings_translation_file.cpp
msgid ""
@@ -6695,7 +7026,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
-msgstr ""
+msgstr "Punto de aparición estático"
#: src/settings_translation_file.cpp
msgid "Steepness noise"
@@ -6748,20 +7079,24 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Temperature variation for biomes."
-msgstr ""
+msgstr "Variación de temperatura de los biomas."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Ajustes"
#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
-msgstr ""
+msgstr "Ruido alternativo de terreno"
#: src/settings_translation_file.cpp
msgid "Terrain base noise"
-msgstr ""
+msgstr "Ruido base del terreno"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Terrain height"
-msgstr "Altura base del terreno"
+msgstr "Altura del terreno"
#: src/settings_translation_file.cpp
msgid "Terrain higher noise"
@@ -6769,7 +7104,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Terrain noise"
-msgstr ""
+msgstr "Ruido del terreno"
#: src/settings_translation_file.cpp
msgid ""
@@ -6777,6 +7112,9 @@ msgid ""
"Controls proportion of world area covered by hills.\n"
"Adjust towards 0.0 for a larger proportion."
msgstr ""
+"Umbral de ruido del terreno para las colinas.\n"
+"Controla la proporción del mundo cubierta por colinas.\n"
+"Ajústalo hacia 0.0 para una mayor proporción."
#: src/settings_translation_file.cpp
msgid ""
@@ -6784,6 +7122,9 @@ msgid ""
"Controls proportion of world area covered by lakes.\n"
"Adjust towards 0.0 for a larger proportion."
msgstr ""
+"Umbral de ruido del terreno para los lagos.\n"
+"Controla la proporción del mundo cubierta por lagos.\n"
+"Ajústalo hacia 0.0 para una mayor proporción."
#: src/settings_translation_file.cpp
msgid "Terrain persistence noise"
@@ -6812,11 +7153,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "The URL for the content repository"
-msgstr ""
+msgstr "La URL para el repositorio de contenido"
#: src/settings_translation_file.cpp
msgid "The dead zone of the joystick"
-msgstr ""
+msgstr "La zona muerta del joystick"
#: src/settings_translation_file.cpp
msgid ""
@@ -6826,7 +7167,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "The depth of dirt or other biome filler node."
-msgstr ""
+msgstr "La profundidad de la tierra u otros nodos de relleno de biomas."
#: src/settings_translation_file.cpp
msgid ""
@@ -6919,10 +7260,12 @@ msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
+"El tiempo en segundos entre la colocación de cada nodo mientras\n"
+"se mantiene pulsado el botón para colocar."
#: src/settings_translation_file.cpp
msgid "The type of joystick"
-msgstr ""
+msgstr "El tipo de joystick"
#: src/settings_translation_file.cpp
msgid ""
@@ -6952,10 +7295,10 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Time speed"
-msgstr ""
+msgstr "Velocidad del tiempo"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6968,7 +7311,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Toggle camera mode key"
-msgstr ""
+msgstr "Tecla para cambiar el modo de cámara"
#: src/settings_translation_file.cpp
msgid "Tooltip delay"
@@ -6980,14 +7323,23 @@ msgid "Touch screen threshold"
msgstr "Límite de ruido de playa"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+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"
+msgid "Transparency Sorting Distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Trees noise"
+msgstr "Ruido de árboles"
+
+#: src/settings_translation_file.cpp
msgid "Trilinear filtering"
msgstr "Filtrado trilineal"
@@ -6997,6 +7349,9 @@ msgid ""
"False = 128\n"
"Usable to make minimap smoother on slower machines."
msgstr ""
+"Habilitado = 256\n"
+"Deshabilitado= 128\n"
+"Sirve para suavizar el minimapa en dispositivos mas lentos."
#: src/settings_translation_file.cpp
msgid "Trusted mods"
@@ -7004,7 +7359,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "URL to the server list displayed in the Multiplayer Tab."
-msgstr ""
+msgstr "URL a la lista de servidores mostrada en la pestaña de Multijugador."
#: src/settings_translation_file.cpp
msgid "Undersampling"
@@ -7037,11 +7392,11 @@ msgstr "Límite superior Y de las tierras flotantes."
#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
-msgstr ""
+msgstr "Usar nubes 3D en lugar de planas."
#: src/settings_translation_file.cpp
msgid "Use a cloud animation for the main menu background."
-msgstr ""
+msgstr "Usar nubes con animaciones para el fondo del menú principal."
#: src/settings_translation_file.cpp
msgid "Use anisotropic filtering when viewing at textures from an angle."
@@ -7049,7 +7404,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Use bilinear filtering when scaling textures."
-msgstr ""
+msgstr "Usar filtrado bilinear al escalar texturas."
#: src/settings_translation_file.cpp
msgid ""
@@ -7068,9 +7423,22 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"Usa el antialiasing multimuestra (MSAA) para suavizar los bordes de los "
+"bloques.\n"
+"Este algoritmo suaviza la vizualización 3D mientras que la imagen sigue "
+"nítida,\n"
+"pero esto no afecta el interior de las texturas\n"
+"(lo que es especialmente visible con texturas transparentes).\n"
+"Aparecen espacios visibles cuando los sombreadores estan deshabilitados.\n"
+"Si se establece en 0, se desactiva MSAA.\n"
+"Se requiere un reinicio después de cambiar esta opción."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
+msgstr "Usar filtrado trilinear al escalar texturas."
+
+#: src/settings_translation_file.cpp
+msgid "User Interfaces"
msgstr ""
#: src/settings_translation_file.cpp
@@ -7078,8 +7446,9 @@ msgid "VBO"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "VSync"
-msgstr ""
+msgstr "VSync (Sincronización vertical)"
#: src/settings_translation_file.cpp
msgid "Valley depth"
@@ -7103,7 +7472,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Variation of maximum mountain height (in nodes)."
-msgstr ""
+msgstr "Variación de la altura maxima de las montañas (En nodos)."
#: src/settings_translation_file.cpp
msgid "Variation of number of caves."
@@ -7132,11 +7501,11 @@ msgstr "Controla lo escarpado/alto de las colinas."
#: src/settings_translation_file.cpp
msgid "Vertical climbing speed, in nodes per second."
-msgstr ""
+msgstr "Velocidad de escalado vertical, en nodos por segundo."
#: src/settings_translation_file.cpp
msgid "Vertical screen synchronization."
-msgstr ""
+msgstr "Sincronización vertical de la pantalla."
#: src/settings_translation_file.cpp
msgid "Video driver"
@@ -7148,15 +7517,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "View distance in nodes."
-msgstr ""
+msgstr "Distancia de visión en nodos."
#: src/settings_translation_file.cpp
msgid "View range decrease key"
-msgstr ""
+msgstr "Tecla para disminuir el rango de visión"
#: src/settings_translation_file.cpp
msgid "View range increase key"
-msgstr ""
+msgstr "Tecla para aumentar el rango de visión"
#: src/settings_translation_file.cpp
msgid "View zoom key"
@@ -7194,7 +7563,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Walking and flying speed, in nodes per second."
-msgstr ""
+msgstr "Velocidad al caminar y volar, en nodos por segundo."
#: src/settings_translation_file.cpp
msgid "Walking speed"
@@ -7206,7 +7575,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Water level"
-msgstr ""
+msgstr "Nivel del agua"
#: src/settings_translation_file.cpp
msgid "Water surface level of the world."
@@ -7315,6 +7684,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -7333,6 +7711,9 @@ msgid ""
"background.\n"
"Contains the same information as the file debug.txt (default name)."
msgstr ""
+"Solo para sistemas Windows: Iniciar Minetest con la ventana de la linea de "
+"comandos en el fondo.\n"
+"Contiene la misma información que el archivo debug.txt (Nombre por defecto)."
#: src/settings_translation_file.cpp
msgid ""
@@ -7390,7 +7771,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Y-level of cavern upper limit."
-msgstr ""
+msgstr "Nivel Y del límite superior de las cavernas."
#: src/settings_translation_file.cpp
msgid "Y-level of higher terrain that creates cliffs."
@@ -7398,11 +7779,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Y-level of lower terrain and seabed."
-msgstr ""
+msgstr "Nivel Y del terreno bajo y el fondo marino."
#: src/settings_translation_file.cpp
msgid "Y-level of seabed."
-msgstr ""
+msgstr "Nivel Y del fondo marino."
+
+#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr "cURL"
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
@@ -7453,6 +7838,9 @@ msgstr "Límite de cURL en paralelo"
#~ msgid "Back"
#~ msgstr "Atrás"
+#~ msgid "Basic"
+#~ msgstr "Básico"
+
#~ 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 "
@@ -7483,6 +7871,12 @@ msgstr "Límite de cURL en paralelo"
#~ msgid "Configure"
#~ msgstr "Configurar"
+#~ msgid "Connect"
+#~ msgstr "Conectar"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Controla la velocidad de hundimiento en líquidos."
+
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value."
@@ -7528,12 +7922,24 @@ msgstr "Límite de cURL en paralelo"
#~ "Define el intervalo de muestreo de las texturas.\n"
#~ "Un valor más alto causa mapas de relieve más suaves."
+#~ msgid "Del. Favorite"
+#~ msgstr "Borrar Fav."
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Descarga un subjuego, como minetest_game, desde minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Descarga uno desde minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Descargando e instalando $1, por favor espere..."
#~ msgid "Enable VBO"
#~ msgstr "Activar VBO"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Habilitar confirmación de registro"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7564,6 +7970,9 @@ msgstr "Límite de cURL en paralelo"
#~ "Habilita mapeado de oclusión de paralaje.\n"
#~ "Requiere habilitar sombreadores."
+#~ msgid "Enter "
+#~ msgstr "Ingresar "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7583,6 +7992,9 @@ msgstr "Límite de cURL en paralelo"
#~ msgid "Fallback font size"
#~ msgstr "Tamaño de la fuente de reserva"
+#~ msgid "Filtering"
+#~ msgstr "Filtrado"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Ruido de altura base para tierra flotante"
@@ -7601,6 +8013,9 @@ msgstr "Límite de cURL en paralelo"
#~ msgid "Full screen BPP"
#~ msgstr "Profundidad de color en pantalla completa"
+#~ msgid "Game"
+#~ msgstr "Juego"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7610,15 +8025,30 @@ msgstr "Límite de cURL en paralelo"
#~ msgid "Generate normalmaps"
#~ msgstr "Generar mapas normales"
+#~ msgid "HUD scale factor"
+#~ msgstr "Factor de escala HUD"
+
#~ msgid "High-precision FPU"
#~ msgstr "Alta-precisión FPU"
#~ msgid "IPv6 support."
#~ msgstr "soporte IPv6."
+#~ msgid "In-Game"
+#~ msgstr "Dentro del juego"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Instalar: Archivo: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Instrumentación"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Combinaciones de teclas. (Si este menú da error, elimina líneas en "
+#~ "minetest.conf)"
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "Características de la Lava"
@@ -7633,6 +8063,9 @@ msgstr "Límite de cURL en paralelo"
#~ msgstr ""
#~ "Hace que DirectX funcione con LuaJIT. Desactivar si ocasiona problemas."
+#~ msgid "Menus"
+#~ msgstr "Menús"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Minimapa en modo radar, Zoom x2"
@@ -7683,6 +8116,12 @@ msgstr "Límite de cURL en paralelo"
#~ msgid "Path to save screenshots at."
#~ msgstr "Ruta para guardar las capturas de pantalla."
+#~ msgid "Player name"
+#~ msgstr "Nombre del jugador"
+
+#~ msgid "Profiling"
+#~ msgstr "Perfilando"
+
#~ msgid "PvP enabled"
#~ msgstr "PvP activado"
@@ -7692,6 +8131,9 @@ msgstr "Límite de cURL en paralelo"
#~ msgid "Select Package File:"
#~ msgstr "Seleccionar el archivo del paquete:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Servidor / Un jugador"
+
#, fuzzy
#~ msgid ""
#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
@@ -7729,6 +8171,22 @@ msgstr "Límite de cURL en paralelo"
#~ msgid "Yes"
#~ msgstr "Sí"
+#, 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 ""
+#~ "Te vas unir al servidor con el nombre \"%s\" por primera vez.\n"
+#~ "Cuando procedas, se creará una nueva cuenta en este servidor usando tus "
+#~ "credenciales.\n"
+#~ "Por favor, reescribe tu contraseña y haz clic en 'Registrarse y unirse' "
+#~ "para confirmar la creación de la cuenta, o haz clic en 'Cancelar' para "
+#~ "abortar."
+
#~ msgid "You died."
#~ msgstr "Has muerto."
diff --git a/po/et/minetest.po b/po/et/minetest.po
index 8031c9451..150005f02 100644
--- a/po/et/minetest.po
+++ b/po/et/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Estonian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -113,6 +113,31 @@ msgid "The server has requested a reconnect:"
msgstr "Server taotles taasühendumist:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Vali mod"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Protokolli versioon ei sobi. "
@@ -125,6 +150,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Server toetab protokolli versioone $1 kuni $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Meie toetame ainult protokolli versiooni $1."
@@ -132,14 +161,21 @@ msgstr "Meie toetame ainult protokolli versiooni $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Meie toetame protokolli versioone $1 kuni $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Tühista"
@@ -278,7 +314,6 @@ msgid "Failed to download $1"
msgstr "$1 allalaadimine nurjus"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Mängud"
@@ -300,7 +335,6 @@ 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
msgid "Mods"
msgstr "MOD-id"
@@ -393,12 +427,9 @@ msgid "Decorations"
msgstr "Ilmestused"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Lae alla mäng: näiteks „Minetest Game“, aadressilt: minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Laadi minetest.net-st üks mäng alla"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Hoiatus: \"Arendustest\" on mõeldud arendajatele."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -416,10 +447,6 @@ msgstr "Taevas hõljuvad saared"
msgid "Floatlands (experimental)"
msgstr "Lendsaared (katseline)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Mäng"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Mitte-fraktaalse maastiku tekitamine: mered ja süvapinnas"
@@ -437,6 +464,15 @@ msgid "Increases humidity around rivers"
msgstr "Suurendab niiskust jõe lähistel"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Paigalda $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Järved"
@@ -538,10 +574,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Väga suured koopasaalid maapõue sügavuses"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Hoiatus: \"Arendustest\" on mõeldud arendajatele."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Maailma nimi"
@@ -571,6 +603,39 @@ msgstr "PakiHaldur: väär asukoht „$1“"
msgid "Delete World \"$1\"?"
msgstr "Kustutad maailma \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Kinnita parooli"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Maailma tekitus-valemi nimi"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Nimi"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Salasõna"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Paroolid ei ole samad!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Registreeru ja liitu"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Nõustu"
@@ -603,6 +668,16 @@ msgstr "< Tagasi lehele „Seaded“"
msgid "Browse"
msgstr "Sirvi"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Sisu"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Sisu"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Keelatud"
@@ -660,7 +735,7 @@ msgstr "Vali kataloog"
msgid "Select file"
msgstr "Vali fail"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Kuva tehnilised nimetused"
@@ -810,6 +885,10 @@ msgstr "Eelnevad panustajad"
msgid "Previous Core Developers"
msgstr "Eelnevad põhi-arendajad"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Sirvi veebist sisu"
@@ -878,10 +957,6 @@ msgstr "Majuta külastajatele"
msgid "Install games from ContentDB"
msgstr "Lisa mänge sisuvaramust"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Nimi"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Uus"
@@ -890,10 +965,6 @@ msgstr "Uus"
msgid "No world created or selected!"
msgstr "Pole valitud ega loodud ühtegi maailma!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Salasõna"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Mängi"
@@ -927,10 +998,6 @@ msgid "Clear"
msgstr "Tühjenda"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Ühine"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Looja"
@@ -940,10 +1007,6 @@ msgid "Damage / PvP"
msgstr "Vigastused mängijatelt"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Pole lemmik"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Lemmikud"
@@ -956,6 +1019,10 @@ msgid "Join Game"
msgstr "Ühine"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Viivitus"
@@ -968,10 +1035,19 @@ msgid "Refresh"
msgstr "Värskenda"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Pole lemmik"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Võõrustaja kirjeldus"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1016,7 +1092,8 @@ msgid "Dynamic shadows"
msgstr "Elavad varjud"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "Elavad varjud: "
#: builtin/mainmenu/tab_settings.lua
@@ -1112,7 +1189,8 @@ msgid "Tone Mapping"
msgstr "Tooni kaardistamine"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "Puutelävi: (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1120,7 +1198,8 @@ msgid "Trilinear Filter"
msgstr "Tri-lineaar filtreerimine"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+#, fuzzy
+msgid "Very High"
msgstr "Ülikõrge"
#: builtin/mainmenu/tab_settings.lua
@@ -1139,6 +1218,11 @@ msgstr "Lainetavad vedelikud"
msgid "Waving Plants"
msgstr "Lehvivad taimed"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Ühenduse viga (Aeg otsas?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Ühendus aegus."
@@ -1277,7 +1361,7 @@ msgid "Camera update enabled"
msgstr "Kaamera värskendamine on lubatud"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1407,6 +1491,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Piiramatu vaatamisulatus lubatud"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Kliendi loomine..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Välju menüüsse"
@@ -1912,29 +2001,6 @@ msgstr "$1 allalaadimine nurjus"
msgid "Opening webpage"
msgstr ""
-#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
-msgid "Passwords do not match!"
-msgstr "Paroolid ei ole samad!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Registreeru ja liitu"
-
-#: 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 ""
-"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"
@@ -1967,7 +2033,7 @@ msgstr "Klotsi piirid"
msgid "Change camera"
msgstr "Muuda kaamerat"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Jututuba"
@@ -2020,10 +2086,8 @@ msgid "Key already in use"
msgstr "Nupp juba kasutuses"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Nupusätted. (Kui see menüü sassi läheb, siis kustuta asju failist minetest."
-"conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2094,10 +2158,6 @@ msgid "Change"
msgstr "Muuda"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Kinnita parooli"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Uus parool"
@@ -2105,6 +2165,10 @@ msgstr "Uus parool"
msgid "Old Password"
msgstr "Vana parool"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Paroolid ei ole samad!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Välju"
@@ -2118,12 +2182,6 @@ msgstr "Vaigistatud"
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
-msgid "Enter "
-msgstr "Sisesta "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2131,6 +2189,16 @@ msgstr "Sisesta "
msgid "LANG_CODE"
msgstr "et"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Palun vali nimi!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2261,6 +2329,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2342,6 +2414,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Maailma nimi"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Arenenud sätted"
@@ -2355,7 +2432,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2424,6 +2501,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Automaatse edasiliikumise klahv"
@@ -2464,10 +2545,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2488,7 +2565,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2500,6 +2577,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2524,6 +2605,11 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Muuda kaamerat"
+
+#: 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"
@@ -2682,6 +2768,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2777,6 +2867,10 @@ msgid "Console height"
msgstr "Konsooli kõrgus"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2810,7 +2904,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2877,11 +2973,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3026,6 +3122,11 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Ilmestused"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Kaevuri klahv"
@@ -3046,6 +3147,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3115,6 +3222,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3131,19 +3242,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3217,6 +3322,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3235,6 +3344,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3312,8 +3425,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtreerimine"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Silu servad:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3380,6 +3494,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3528,6 +3646,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Mängud"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3559,6 +3690,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3575,10 +3714,15 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "Liidese näitamine"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr ""
@@ -3815,11 +3959,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3880,6 +4031,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3901,7 +4058,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3941,10 +4100,6 @@ msgid "Ignore world errors"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "Mängu-sisene"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
@@ -3995,15 +4150,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4624,6 +4775,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4679,7 +4834,7 @@ msgstr "Vasak klahv"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4689,15 +4844,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4709,7 +4867,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4737,6 +4896,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Sujuv valgustus"
+
+#: 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"
@@ -5126,10 +5290,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menüüd"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5178,6 +5338,18 @@ msgid "Mipmapping"
msgstr "Astmik-tapeetimine"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5264,16 +5436,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5286,6 +5458,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Valitud klotsi ilme"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5323,10 +5500,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5420,10 +5593,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5470,10 +5639,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5642,6 +5807,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Ekraan:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5669,6 +5839,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Kuvatõmmis"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5681,10 +5856,6 @@ 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 ""
@@ -5724,10 +5895,21 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
+#, fuzzy
+msgid "Server"
+msgstr "Majuta külastajatele"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
msgstr "Võõrusta / Üksi"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Võõrustaja kirjeldus"
+
+#: src/settings_translation_file.cpp
msgid "Server URL"
msgstr ""
@@ -5752,10 +5934,20 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Võõrustaja kanal"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "Võõrustaja-loendi aadress"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "Võõrustaja-loendi aadress"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Võõrustaja-loendi fail"
@@ -5766,12 +5958,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5779,7 +5973,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5855,7 +6049,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6055,6 +6249,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Sätted"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6257,7 +6456,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6281,10 +6480,19 @@ msgid "Touch screen threshold"
msgstr "Puuteekraani lävi"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Puuteekraani lävi"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6375,6 +6583,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6608,6 +6820,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6697,6 +6918,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL faili allalaadimine aegus"
@@ -6735,6 +6960,9 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Kohanda"
+#~ msgid "Connect"
+#~ msgstr "Ühine"
+
#~ msgid "Credits"
#~ msgstr "Tegijad"
@@ -6744,6 +6972,12 @@ msgstr ""
#~ msgid "Darkness sharpness"
#~ msgstr "Pimeduse teravus"
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Lae alla mäng: näiteks „Minetest Game“, aadressilt: minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Laadi minetest.net-st üks mäng alla"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Palun oota $1 allalaadimist ja paigaldamist…"
@@ -6754,18 +6988,39 @@ msgstr ""
#~ msgid "Enables filmic tone mapping"
#~ msgstr "Lubab filmic tone mapping"
+#~ msgid "Enter "
+#~ msgstr "Sisesta "
+
+#~ msgid "Filtering"
+#~ msgstr "Filtreerimine"
+
+#~ msgid "Game"
+#~ msgstr "Mäng"
+
#~ msgid "Generate Normal Maps"
#~ msgstr "Loo normaalkaardistusi"
+#~ msgid "In-Game"
+#~ msgstr "Mängu-sisene"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Paigaldus: fail: \"$1\""
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Nupusätted. (Kui see menüü sassi läheb, siis kustuta asju failist "
+#~ "minetest.conf)"
+
#~ msgid "Main"
#~ msgstr "Peamine"
#~ msgid "Main menu style"
#~ msgstr "Peamenüü ilme"
+#~ msgid "Menus"
+#~ msgstr "Menüüd"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Radarkaart, Suurendus ×2"
@@ -6819,6 +7074,21 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "Jah"
+#, 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 ""
+#~ "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."
+
#~ msgid "You died."
#~ msgstr "Said otsa."
diff --git a/po/eu/minetest.po b/po/eu/minetest.po
index 2cd9b4b74..dc360ef85 100644
--- a/po/eu/minetest.po
+++ b/po/eu/minetest.po
@@ -7,9 +7,9 @@ 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-02-23 15:50+0000\n"
-"Last-Translator: Osoitz <oelkoro@gmail.com>\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-04-29 20:12+0000\n"
+"Last-Translator: JonAnder Oier <jonanderetaoier@gmail.com>\n"
"Language-Team: Basque <https://hosted.weblate.org/projects/minetest/minetest/"
"eu/>\n"
"Language: eu\n"
@@ -17,15 +17,15 @@ 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.12.1\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
-msgstr ""
+msgstr "Garbitu txat-ilara"
#: builtin/client/chatcommands.lua
msgid "Empty command."
-msgstr ""
+msgstr "Agindu hutsa."
#: builtin/client/chatcommands.lua
#, fuzzy
@@ -33,29 +33,28 @@ msgid "Exit to main menu"
msgstr "Itzuli menu nagusira"
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Invalid command: "
-msgstr "Agindu lokala"
+msgstr "Komando baliogabea: "
#: builtin/client/chatcommands.lua
msgid "Issued command: "
-msgstr ""
+msgstr "Igorritako komandoa: "
#: builtin/client/chatcommands.lua
msgid "List online players"
-msgstr ""
+msgstr "Online jokalariak zerrendatu"
#: builtin/client/chatcommands.lua
msgid "Online players: "
-msgstr ""
+msgstr "Online jokalariak: "
#: builtin/client/chatcommands.lua
msgid "The out chat queue is now empty."
-msgstr ""
+msgstr "Irteerako txat-ilara hutsik dago orain."
#: builtin/client/chatcommands.lua
msgid "This command is disabled by server."
-msgstr ""
+msgstr "Komando hau serbitzariaren bidez desgaituta dago."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -66,31 +65,31 @@ msgid "You died"
msgstr "Hil zara"
#: builtin/common/chatcommands.lua
-#, fuzzy
msgid "Available commands:"
-msgstr "Agindu lokala"
+msgstr "Komando erabilgarriak:"
#: builtin/common/chatcommands.lua
-#, fuzzy
msgid "Available commands: "
-msgstr "Agindu lokala"
+msgstr "Komando erabilgarriak: "
#: builtin/common/chatcommands.lua
msgid "Command not available: "
-msgstr ""
+msgstr "Komandoa ez dago eskuragarri: "
#: builtin/common/chatcommands.lua
msgid "Get help for commands"
-msgstr ""
+msgstr "Eskuratu laguntza komandoetarako"
#: builtin/common/chatcommands.lua
msgid ""
"Use '.help <cmd>' to get more information, or '.help all' to list everything."
msgstr ""
+"Erabili '.help <cmd>' informazio gehiago eskuratzeko, edo '.help all' guztia "
+"zerrendatzeko."
#: builtin/common/chatcommands.lua
msgid "[all | <cmd>]"
-msgstr ""
+msgstr "[guztia | <cmd>]"
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
@@ -98,7 +97,7 @@ msgstr "Ados"
#: builtin/fstk/ui.lua
msgid "<none available>"
-msgstr ""
+msgstr "<bat ere ez dago eskuragarri>"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
@@ -121,6 +120,31 @@ msgid "The server has requested a reconnect:"
msgstr "Zerbitzariak birkonexioa eskatu du:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Hautatu Modak"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Protokoloaren bertsioen desadostasuna. "
@@ -133,6 +157,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Zerbitzariak $1 eta $2 arteko protokolo bertsioak onartzen ditu. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "$1 bertsioa soilik onartzen dugu."
@@ -140,14 +168,21 @@ msgstr "$1 bertsioa soilik onartzen dugu."
msgid "We support protocol versions between version $1 and $2."
msgstr "$1 eta $2 arteko protokolo bertsioak onartzen ditugu."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Utzi"
@@ -235,7 +270,7 @@ msgstr "$1 et $2 mendekotasunak instalatuko dira."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 bider $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
@@ -287,7 +322,6 @@ msgid "Failed to download $1"
msgstr "Huts egin du $1 deskargatzean"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Jolasak"
@@ -304,14 +338,10 @@ 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"
+msgstr "Instalazioa: Fitxategi ez bateragarria edo fitxategi hautsia"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mod-ak"
@@ -404,13 +434,9 @@ msgid "Decorations"
msgstr "Apaingarriak"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr ""
-"Deskargatu jolasen bat, esaterako Minetest Game, minetest.net zerbitzaritik"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Deskargatu minetest.net zerbitzaritik"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Abisua: Garapen Testa garatzaileentzat da."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -422,15 +448,11 @@ msgstr "Lurrazal laua"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr ""
+msgstr "Zeruan flotatzen duten lur-masak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-msgstr ""
-
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Jolasa"
+msgstr "Lur flotagarriak (esperimentala)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
@@ -449,6 +471,15 @@ msgid "Increases humidity around rivers"
msgstr "Hezetasuna areagotu erreka inguruetan"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "$1 Instalatu"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Lakuak"
@@ -468,19 +499,19 @@ msgstr "Mapgen banderatxoak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mapgen-specific flags"
-msgstr ""
+msgstr "Mapgen berariazko banderak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
-msgstr ""
+msgstr "Mendiak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
-msgstr ""
+msgstr "Lokatz-jarioa"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
-msgstr ""
+msgstr "Tunel eta kobazuloen sarea"
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
@@ -488,19 +519,19 @@ msgstr "Ez da jolasik aukeratu"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces heat with altitude"
-msgstr ""
+msgstr "Beroa murrizten du altuerarekin"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces humidity with altitude"
-msgstr ""
+msgstr "Hezetasuna murrizten du altuerarekin"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Rivers"
-msgstr ""
+msgstr "Ibaiak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
-msgstr ""
+msgstr "Itsas mailako ibaiak"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -509,50 +540,47 @@ msgstr "Hazia"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
-msgstr ""
+msgstr "Biomen arteko trantsizio leuna"
#: builtin/mainmenu/dlg_create_world.lua
msgid ""
"Structures appearing on the terrain (no effect on trees and jungle grass "
"created by v6)"
msgstr ""
+"Lurrean agertzen diren egiturak (v6-z sortutako ohianeko zuhaitzetan eta "
+"belarretan eraginik gabe)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Structures appearing on the terrain, typically trees and plants"
-msgstr ""
+msgstr "Lurrean agertzen diren egiturak, normalean zuhaitzak eta landareak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert"
-msgstr ""
+msgstr "Epela, Basamortua"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle"
-msgstr ""
+msgstr "Epela, Basamortua, Ohiana"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr ""
+msgstr "Epela, Basamortua, Ohiana, Tundra, Taiga"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Terrain surface erosion"
-msgstr ""
+msgstr "Lurraren gainazaleko higidura"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
-msgstr ""
+msgstr "Zuhaitzak eta ohianeko belarra"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Vary river depth"
-msgstr ""
+msgstr "Ibaiaren sakonera aldatu"
#: 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 "Abisua: \"Minimal development test\" garatzaileentzako da."
+msgstr "Kobazulo oso handiak lurpean sakon"
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -584,6 +612,38 @@ msgstr "pkgmgr: \"$1\" bide baliogabea"
msgid "Delete World \"$1\"?"
msgstr "Ezabatu \"$1\" mundua?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Berretsi pasahitza"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Izena"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Pasahitza"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Pasahitzak ez datoz bat!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Eman izena eta hasi saioa"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Onartu"
@@ -616,6 +676,16 @@ msgstr "< Itzuli ezarpenen orrira"
msgid "Browse"
msgstr "Arakatu"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Edukia"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Edukia"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Desgaituta"
@@ -634,11 +704,11 @@ msgstr "Hutsunetasuna"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Octaves"
-msgstr ""
+msgstr "Zortzigarrenak"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
-msgstr ""
+msgstr "Desplazamendua"
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
@@ -673,7 +743,7 @@ msgstr "Hautatu direktorioa"
msgid "Select file"
msgstr "Hautatu fitxategia"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Erakutsi izen teknikoak"
@@ -779,7 +849,7 @@ msgstr "Kargatzen..."
#: builtin/mainmenu/serverlistmgr.lua
msgid "Public server list is disabled"
-msgstr ""
+msgstr "Zerbitzari publikoen zerrenda desgaituta dago"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
@@ -789,31 +859,31 @@ msgstr ""
#: builtin/mainmenu/tab_about.lua
msgid "About"
-msgstr ""
+msgstr "Buruz"
#: 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"
+msgstr "Renderizatzaile aktiboa:"
#: 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"
+msgstr "Ireki Erabiltzaile Datuen 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 ""
+"Erabiltzaileak emandako munduak, jokoak, modak\n"
+"eta testura paketeak fitxategi kudeatzaile / esploratzaile batean."
#: builtin/mainmenu/tab_about.lua
msgid "Previous Contributors"
@@ -823,6 +893,10 @@ msgstr "Lehenagoko laguntzaileak"
msgid "Previous Core Developers"
msgstr "Lehenagoko garatzaile nagusiak"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Lineako edukiak esploratu"
@@ -891,59 +965,45 @@ msgstr "Zerbitzari ostalaria"
msgid "Install games from ContentDB"
msgstr "Instalatu ContentDB-ko jolasak"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
-msgstr ""
+msgstr "Berria"
#: 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 ""
+msgstr "Ez da mundurik sortu edo hautatu!"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
-msgstr ""
+msgstr "Jolastu Jokoa"
#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
-msgstr ""
+msgstr "Portua"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Hautatu"
+msgstr "Hautatu Modak"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
-msgstr ""
+msgstr "Munduko selekzioa:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr ""
+msgstr "Zerbitzariaren portua"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
msgstr "Hasi partida"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Address"
-msgstr "Helbidea lotu"
+msgstr "Helbidea"
#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
msgid "Clear"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr ""
+msgstr "Garbi"
#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
@@ -951,58 +1011,66 @@ msgstr "Sormen modua"
#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Damage / PvP"
-msgstr "Kaltea"
-
-#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr ""
+msgstr "Mina / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
-msgstr ""
+msgstr "Gogokoak"
#: builtin/mainmenu/tab_online.lua
msgid "Incompatible Servers"
-msgstr ""
+msgstr "Zerbitzari bateraezinak"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
msgstr "Elkartu partidara"
#: builtin/mainmenu/tab_online.lua
-msgid "Ping"
+msgid "Login"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Ping"
+msgstr "Ping"
+
+#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Public Servers"
msgstr "Zerbitzaria iragarri"
#: builtin/mainmenu/tab_online.lua
msgid "Refresh"
-msgstr ""
+msgstr "Freskatu"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Ez. gogokoena"
#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
+msgstr "Zerbitzariaren deskribapena"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
-msgstr ""
+msgstr "2x"
#: builtin/mainmenu/tab_settings.lua
msgid "3D Clouds"
-msgstr ""
+msgstr "3D Hodeiak"
#: 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"
@@ -1010,71 +1078,75 @@ msgstr "Ezarpen guztiak"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
-msgstr ""
+msgstr "Antialiasinga:"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
-msgstr ""
+msgstr "Gorde automatikoki Pantailaren Tamaina"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
-msgstr ""
+msgstr "Iragazki bilineala"
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
msgid "Change Keys"
-msgstr ""
+msgstr "Aldatu teklak"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr ""
+msgstr "Konektatutako beira"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Dynamic shadows"
-msgstr ""
+msgstr "Itzal dinamikoak"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr ""
+#, fuzzy
+msgid "Dynamic shadows:"
+msgstr "Itzal dinamikoak: "
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Fancy Leaves"
-msgstr ""
+msgstr "Luxuzko hostoak"
#: builtin/mainmenu/tab_settings.lua
msgid "High"
-msgstr ""
+msgstr "Altua"
#: builtin/mainmenu/tab_settings.lua
msgid "Low"
-msgstr ""
+msgstr "Baxua"
#: builtin/mainmenu/tab_settings.lua
msgid "Medium"
-msgstr ""
+msgstr "Erdi"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr ""
+msgstr "Mipmap"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "Mipmap + Iragazki Aniso."
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr ""
+msgstr "Iragazkirik gabe"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "No Mipmap"
-msgstr ""
+msgstr "Mipmap gabe"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
-msgstr ""
+msgstr "Nabarmendu nodoak"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
-msgstr ""
+msgstr "Nodoen ingerada"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
@@ -1090,11 +1162,11 @@ msgstr "Ur opakoa"
#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
-msgstr ""
+msgstr "Partikulak"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
-msgstr ""
+msgstr "Pantaila:"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
@@ -1102,119 +1174,125 @@ msgstr "Ezarpenak"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
-msgstr ""
+msgstr "Itzalgailuak"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (experimental)"
-msgstr ""
+msgstr "Itzalgailuak (esperimentala)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr ""
+msgstr "Itzalgailuak (ez dago eskuragarri)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
-msgstr ""
+msgstr "Orri sinpleak"
#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
-msgstr ""
+msgstr "Argiztapen leuna"
#: builtin/mainmenu/tab_settings.lua
msgid "Texturing:"
-msgstr ""
+msgstr "Testurizazioa:"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
-msgstr ""
+msgstr "Iragazki hirulineala"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
-msgstr ""
+#, fuzzy
+msgid "Very High"
+msgstr "Ultra Altua"
#: builtin/mainmenu/tab_settings.lua
msgid "Very Low"
-msgstr ""
+msgstr "Oso Baxua"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr ""
+msgstr "Hosto Uhinduak"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Liquids"
-msgstr ""
+msgstr "Likido Uhinduak"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr ""
+msgstr "Landare Uhinduak"
+
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Konexio-errorea (denbora agortua?)"
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
-msgstr ""
+msgstr "Konexioaren itxaronaldia agortu egin da."
#: src/client/client.cpp
msgid "Done!"
-msgstr ""
+msgstr "Egina!"
#: src/client/client.cpp
msgid "Initializing nodes"
-msgstr ""
+msgstr "Nodoak hasieratzen"
#: src/client/client.cpp
msgid "Initializing nodes..."
-msgstr ""
+msgstr "Nodoak hasieratzen..."
#: src/client/client.cpp
msgid "Loading textures..."
-msgstr ""
+msgstr "Testurak kargatzen..."
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-msgstr ""
+msgstr "Itzalgailuak berreraikitzen..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
-msgstr ""
+msgstr "Konexio-errorea (denbora agortua?)"
#: src/client/clientlauncher.cpp
msgid "Could not find or load game: "
-msgstr ""
+msgstr "Ezin izan da jokoa aurkitu edo kargatu: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
-msgstr ""
+msgstr "Jokoaren espezifikazioa ez da baliozkoa."
#: src/client/clientlauncher.cpp
msgid "Main Menu"
-msgstr ""
+msgstr "Menu nagusia"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
-msgstr ""
+msgstr "Ez da mundurik hautatu eta ez da helbiderik eman. Ez dago zer eginik."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr ""
+msgstr "Jokalariaren izena luzeegia da."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr ""
+msgstr "Mesedez, aukeratu izen bat!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr ""
+msgstr "Ezin izan da ireki emandako pasahitzaren fitxategia: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
-msgstr ""
+msgstr "Zehaztutako munduaren ibilbidea ez da existitzen: "
#: src/client/game.cpp
msgid ""
@@ -1224,28 +1302,28 @@ msgstr ""
#: src/client/game.cpp
msgid "- Address: "
-msgstr ""
+msgstr "- Helbidea: "
#: src/client/game.cpp
msgid "- Mode: "
-msgstr ""
+msgstr "- Modua: "
#: src/client/game.cpp
msgid "- Port: "
-msgstr ""
+msgstr "- Ataka: "
#: src/client/game.cpp
msgid "- Public: "
-msgstr ""
+msgstr "- Publikoa: "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
-msgstr ""
+msgstr "- Jokalaria Jokalariaren aurka (PvP): "
#: src/client/game.cpp
msgid "- Server Name: "
-msgstr ""
+msgstr "- Zerbitzariaren izena: "
#: src/client/game.cpp
#, fuzzy
@@ -1255,7 +1333,7 @@ msgstr "Errore bat gertatu da:"
#: src/client/game.cpp
#, c-format
msgid "Access denied. Reason: %s"
-msgstr ""
+msgstr "Sarbidea ukatuta. Arrazoia: %s"
#: src/client/game.cpp
msgid "Automatic forward disabled"
@@ -1283,31 +1361,31 @@ msgstr ""
#: src/client/game.cpp
msgid "Camera update disabled"
-msgstr ""
+msgstr "Kameraren eguneraketa desaktibatuta dago"
#: src/client/game.cpp
msgid "Camera update enabled"
-msgstr ""
+msgstr "Kameraren eguneraketa gaituta dago"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
msgid "Change Password"
-msgstr ""
+msgstr "Pasahitza aldatu"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
-msgstr ""
+msgstr "Modu zinematografiko desaktibatuta"
#: src/client/game.cpp
msgid "Cinematic mode enabled"
-msgstr ""
+msgstr "Modu zinematografiko gaituta"
#: src/client/game.cpp
msgid "Client disconnected"
-msgstr ""
+msgstr "Bezero deskonektatua"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
@@ -1315,15 +1393,15 @@ msgstr ""
#: src/client/game.cpp
msgid "Connecting to server..."
-msgstr ""
+msgstr "Zerbitzarira konektatzen..."
#: src/client/game.cpp
msgid "Connection failed for unknown reason"
-msgstr ""
+msgstr "Konexioak huts egin du arrazoi ezezagun batengatik"
#: src/client/game.cpp
msgid "Continue"
-msgstr ""
+msgstr "Jarraitu"
#: src/client/game.cpp
#, c-format
@@ -1347,7 +1425,7 @@ msgstr ""
#: src/client/game.cpp
#, c-format
msgid "Couldn't resolve address: %s"
-msgstr ""
+msgstr "Ezin izan da helbidea ebatzi: %s"
#: src/client/game.cpp
msgid "Creating client..."
@@ -1363,7 +1441,7 @@ msgstr "Arazte informazioa eta profilariaren grafikoa ezkutatuta"
#: src/client/game.cpp
msgid "Debug info shown"
-msgstr ""
+msgstr "Arazketari buruzko informazioa erakusten da"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
@@ -1394,20 +1472,25 @@ msgid "Enabled unlimited viewing range"
msgstr "Gaitu mugagabeko ikusmen barrutia"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Bezeroa sortzen..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr ""
+msgstr "Irten menura"
#: src/client/game.cpp
msgid "Exit to OS"
-msgstr ""
+msgstr "Irten sistema eragilera"
#: src/client/game.cpp
msgid "Fast mode disabled"
-msgstr ""
+msgstr "Modu azkarra desaktibatuta"
#: src/client/game.cpp
msgid "Fast mode enabled"
-msgstr ""
+msgstr "Modu azkarra gaituta"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
@@ -1427,15 +1510,15 @@ msgstr ""
#: src/client/game.cpp
msgid "Fog disabled"
-msgstr ""
+msgstr "Lainoa desaktibatuta"
#: src/client/game.cpp
msgid "Fog enabled"
-msgstr ""
+msgstr "Lainoa gaituta"
#: src/client/game.cpp
msgid "Game info:"
-msgstr ""
+msgstr "Jokoari buruzko informazioa:"
#: src/client/game.cpp
msgid "Game paused"
@@ -1447,7 +1530,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Item definitions..."
-msgstr ""
+msgstr "Itemen definizioak..."
#: src/client/game.cpp
msgid "KiB/s"
@@ -1483,7 +1566,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Node definitions..."
-msgstr ""
+msgstr "Nodoen definizioak..."
#: src/client/game.cpp
msgid "Off"
@@ -1507,7 +1590,7 @@ msgstr "Profilariaren grafikoa ikusigai"
#: src/client/game.cpp
msgid "Remote server"
-msgstr ""
+msgstr "Urruneko zerbitzaria"
#: src/client/game.cpp
msgid "Resolving address..."
@@ -1515,15 +1598,15 @@ msgstr ""
#: src/client/game.cpp
msgid "Shutting down..."
-msgstr ""
+msgstr "Itzaltzen..."
#: src/client/game.cpp
msgid "Singleplayer"
-msgstr ""
+msgstr "Jokalari bakarra"
#: src/client/game.cpp
msgid "Sound Volume"
-msgstr ""
+msgstr "Soinuaren bolumena"
#: src/client/game.cpp
msgid "Sound muted"
@@ -1544,17 +1627,17 @@ msgstr ""
#: src/client/game.cpp
#, c-format
msgid "The server is probably running a different version of %s."
-msgstr ""
+msgstr "Zerbitzaria ziurrenik %s bertsio desberdin bat exekutatzen ari da."
#: src/client/game.cpp
#, c-format
msgid "Unable to connect to %s because IPv6 is disabled"
-msgstr ""
+msgstr "Ezin da %s-ra konektatu IPv6 desaktibatuta dagoelako"
#: src/client/game.cpp
#, c-format
msgid "Unable to listen on %s because IPv6 is disabled"
-msgstr ""
+msgstr "Ezin da %s-n entzun IPv6 desaktibatuta dagoelako"
#: src/client/game.cpp
#, c-format
@@ -1574,7 +1657,7 @@ msgstr "Ikusmen barrutia minimoan dago: %d"
#: src/client/game.cpp
#, c-format
msgid "Volume changed to %d%%"
-msgstr ""
+msgstr "Bolumena %d%%ra aldatu da"
#: src/client/game.cpp
msgid "Wireframe shown"
@@ -1586,11 +1669,11 @@ msgstr ""
#: src/client/game.cpp
msgid "ok"
-msgstr ""
+msgstr "Ados"
#: src/client/gameui.cpp
msgid "Chat hidden"
-msgstr ""
+msgstr "Txat ezkutua"
#: src/client/gameui.cpp
msgid "Chat shown"
@@ -1635,7 +1718,7 @@ msgstr "Behera"
#: src/client/keycode.cpp
msgid "End"
-msgstr ""
+msgstr "Amaiera"
#: src/client/keycode.cpp
msgid "Erase EOF"
@@ -1651,7 +1734,7 @@ msgstr "Laguntza"
#: src/client/keycode.cpp
msgid "Home"
-msgstr ""
+msgstr "Hasiera"
#: src/client/keycode.cpp
msgid "IME Accept"
@@ -1704,7 +1787,7 @@ msgstr "Ezkerreko leihoa"
#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
-msgstr ""
+msgstr "Menu"
#: src/client/keycode.cpp
msgid "Middle Button"
@@ -1792,7 +1875,7 @@ msgstr ""
#: src/client/keycode.cpp
msgid "Play"
-msgstr ""
+msgstr "Jolastu"
#. ~ "Print screen" key
#: src/client/keycode.cpp
@@ -1801,7 +1884,7 @@ msgstr "Inprimatu"
#: src/client/keycode.cpp
msgid "Return"
-msgstr ""
+msgstr "Itzuli"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Right"
@@ -1850,7 +1933,7 @@ msgstr "Pantaila-argazkia"
#: src/client/keycode.cpp
msgid "Space"
-msgstr ""
+msgstr "Espazioa"
#: src/client/keycode.cpp
msgid "Tab"
@@ -1870,7 +1953,7 @@ msgstr "2. X botoia"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Zoom"
-msgstr ""
+msgstr "Zoom"
#: src/client/minimap.cpp
msgid "Minimap hidden"
@@ -1897,25 +1980,7 @@ 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!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Eman izena eta hasi saioa"
-
-#: 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 ""
+msgstr "Web orria irekitzen"
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
@@ -1931,7 +1996,7 @@ msgstr "Aurrera automatikoki"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
-msgstr ""
+msgstr "Jauzi automatikoa"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Aux1"
@@ -1949,7 +2014,7 @@ msgstr ""
msgid "Change camera"
msgstr "Aldatu kamera"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Txata"
@@ -1999,10 +2064,10 @@ msgstr "Jauzi"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Key already in use"
-msgstr ""
+msgstr "Dagoeneko erabiltzen ari den tekla"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -2071,11 +2136,7 @@ msgstr "sakatu tekla"
#: src/gui/guiPasswordChange.cpp
msgid "Change"
-msgstr ""
-
-#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr ""
+msgstr "Aldatu"
#: src/gui/guiPasswordChange.cpp
msgid "New Password"
@@ -2085,6 +2146,10 @@ msgstr ""
msgid "Old Password"
msgstr ""
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Pasahitzak ez datoz bat!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr ""
@@ -2098,12 +2163,6 @@ msgstr ""
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).
@@ -2111,6 +2170,16 @@ msgstr ""
msgid "LANG_CODE"
msgstr "eu"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Mesedez, aukeratu izen bat!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2236,6 +2305,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2317,6 +2390,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Munduaren izena"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2330,7 +2408,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2399,6 +2477,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2440,10 +2522,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2464,7 +2542,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2476,6 +2554,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2500,6 +2582,11 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Aldatu kamera"
+
+#: 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"
@@ -2657,6 +2744,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2752,6 +2843,11 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "Sareko eduki biltegia"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2785,7 +2881,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2852,11 +2950,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3002,6 +3100,11 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Developer Options"
+msgstr "Apaingarriak"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Dig key"
msgstr "Eskuinera tekla"
@@ -3022,6 +3125,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3092,6 +3201,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3108,19 +3221,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3198,6 +3305,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "Profilaria"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3216,6 +3328,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3293,8 +3409,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr ""
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Antialiasinga:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3362,6 +3479,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3516,6 +3637,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Jolasak"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3543,6 +3677,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3559,7 +3701,11 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3799,11 +3945,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3864,6 +4017,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3885,7 +4044,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3925,10 +4086,6 @@ 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 ""
@@ -3979,15 +4136,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4638,6 +4791,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4693,7 +4850,7 @@ msgstr "Ezkerrera tekla"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4703,15 +4860,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4723,7 +4883,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4751,6 +4912,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Argiztapen leuna"
+
+#: 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"
@@ -5138,10 +5304,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5190,6 +5352,19 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "Profilaria"
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5276,16 +5451,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5298,6 +5473,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Nabarmendu nodoak"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5335,10 +5515,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Sareko eduki biltegia"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5433,10 +5609,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "Jokalariaren transferentzia distantzia"
@@ -5483,10 +5655,6 @@ msgid "Profiler toggle key"
msgstr "Profilaria txandakatzeko tekla"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5655,6 +5823,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Pantaila:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5682,6 +5855,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Pantaila-argazkia"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5694,10 +5872,6 @@ 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 ""
@@ -5737,8 +5911,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr ""
+#, fuzzy
+msgid "Server"
+msgstr "Zerbitzari ostalaria"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "- Zerbitzariaren izena: "
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Zerbitzariaren deskribapena"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5765,10 +5950,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Zerbitzariaren portua"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5779,12 +5973,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5792,7 +5988,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5868,7 +6064,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6068,6 +6264,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Ezarpenak"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6273,7 +6474,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6300,10 +6501,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6394,6 +6603,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6629,6 +6842,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6718,6 +6940,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6742,12 +6968,26 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Konfiguratu"
+#~ msgid "Connect"
+#~ msgstr "Konektatu"
+
#~ msgid "Credits"
#~ msgstr "Kredituak"
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr ""
+#~ "Deskargatu jolasen bat, esaterako Minetest Game, minetest.net "
+#~ "zerbitzaritik"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Deskargatu minetest.net zerbitzaritik"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "$1 deskargatu eta instalatzen, itxaron mesedez..."
+#~ msgid "Game"
+#~ msgstr "Jolasa"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Instalakuntza: fitxategia: \"$1\""
diff --git a/po/fi/minetest.po b/po/fi/minetest.po
index 3639a255c..489b66b52 100644
--- a/po/fi/minetest.po
+++ b/po/fi/minetest.po
@@ -7,9 +7,9 @@ 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-09-19 07:38+0000\n"
-"Last-Translator: Markus Mikkonen <markus.mikkonen@outlook.com>\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-07 17:16+0000\n"
+"Last-Translator: Oftox <oftox@protonmail.com>\n"
"Language-Team: Finnish <https://hosted.weblate.org/projects/minetest/"
"minetest/fi/>\n"
"Language: fi\n"
@@ -17,7 +17,7 @@ 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.9-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -88,16 +88,15 @@ msgstr ""
#: builtin/common/chatcommands.lua
msgid "[all | <cmd>]"
-msgstr ""
+msgstr "[kaikki | <komento>]"
#: 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ä: "
+msgstr "<ei saatavilla>"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
@@ -120,6 +119,31 @@ msgid "The server has requested a reconnect:"
msgstr "Palvelin pyysi yhteyden muodostamista uudelleen:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Valitse modit"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Protokollaversiot epäyhteensopivat. "
@@ -129,7 +153,11 @@ msgstr "Palvelin vaatii protokollaversion $1. "
#: builtin/mainmenu/common.lua
msgid "Server supports protocol versions between $1 and $2. "
-msgstr "Palvelin tukee protokollaversioita välillä $1 ja $2. "
+msgstr "Palvelin tukee protokollia versioiden $1 ja $2 välillä. "
+
+#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
@@ -139,14 +167,21 @@ msgstr "Tuemme vain protokollaversiota $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Tuemme protokollaversioita välillä $1 ja $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Peruuta"
@@ -230,7 +265,7 @@ msgstr "\"$1\" on jo olemassa. Haluatko korvata sen?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Riippuvuudet $1 ja $2 asennetaan."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
@@ -241,6 +276,8 @@ msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 lataa,\n"
+"$2 jonossa"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 downloading..."
@@ -248,11 +285,11 @@ msgstr "$1 latautuu..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 tarvittavaa riippuvuutta ei löytynyt."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 asennetaan, ja $2 riippuvuutta sivuutetaan."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
@@ -283,7 +320,6 @@ msgid "Failed to download $1"
msgstr "Epäonnistui ladata $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Pelit"
@@ -301,16 +337,15 @@ msgstr "Asenna puuttuvat riippuvuudet"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install: Unsupported file type or broken archive"
-msgstr ""
+msgstr "Lataus: Tukematon tiedostotyyppi tai rikkinäinen arkisto"
#: 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 "Paketteja ei voitu noutaa"
+msgstr "Paketteja ei löydetty"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
@@ -382,7 +417,7 @@ msgstr "Biomit"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caverns"
-msgstr ""
+msgstr "Luolat"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caves"
@@ -394,15 +429,12 @@ msgstr "Luo"
#: 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 "Lataa peli, kuten Minetest Game, minetest.netistä"
+msgstr "Koristeet"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Lataa yksi minetest.netistä"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Varoitus: Development Test on tarkoitettu kehittäjille."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -414,16 +446,12 @@ msgstr "Tasainen maasto"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr ""
+msgstr "Taivaalla leijuvat maamassat"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Peli"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr ""
@@ -434,13 +462,22 @@ msgstr "Mäet"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Humid rivers"
-msgstr ""
+msgstr "Kosteat joet"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Increases humidity around rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Asenna $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Järvet"
@@ -540,10 +577,6 @@ 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 "Varoitus: Development Test on tarkoitettu kehittäjille."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Maailman nimi"
@@ -573,6 +606,38 @@ msgstr "pkgmgr: virheellinen polku \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Poista maailma \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Vahvista salasana"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Nimi"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Salasana"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Salasanat eivät täsmää!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Rekisteröidy ja liity"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Hyväksy"
@@ -603,6 +668,16 @@ msgstr "< Palaa asetussivulle"
msgid "Browse"
msgstr "Selaa"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Sisältö"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Sisältö"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Poistettu käytöstä"
@@ -659,7 +734,7 @@ msgstr "Valitse hakemisto"
msgid "Select file"
msgstr "Valitse tiedosto"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Näytä tekniset nimet"
@@ -806,6 +881,10 @@ msgstr ""
msgid "Previous Core Developers"
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Selaa sisältöä verkossa"
@@ -874,10 +953,6 @@ msgstr "Isännöi palvelin"
msgid "Install games from ContentDB"
msgstr "Asenna pelejä ContentDB:stä"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Nimi"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Uusi"
@@ -886,10 +961,6 @@ msgstr "Uusi"
msgid "No world created or selected!"
msgstr "Maailmaa ei ole luotu tai valittu!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Salasana"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Pelaa peliä"
@@ -923,10 +994,6 @@ msgid "Clear"
msgstr "Tyhjennä"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Yhdistä"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Luova tila"
@@ -936,10 +1003,6 @@ msgid "Damage / PvP"
msgstr "Vahinko / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Suosikit"
@@ -952,6 +1015,10 @@ msgid "Join Game"
msgstr "Liity peliin"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Viive"
@@ -964,10 +1031,18 @@ msgid "Refresh"
msgstr "Päivitä"
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Palvelimen kuvaus"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1012,7 +1087,8 @@ msgid "Dynamic shadows"
msgstr "Dynaamiset varjot"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "Dynaamiset varjot: "
#: builtin/mainmenu/tab_settings.lua
@@ -1108,7 +1184,7 @@ msgid "Tone Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1116,7 +1192,7 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1135,6 +1211,11 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Yhteys aikakatkaistiin."
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Yhteys aikakatkaistiin."
@@ -1269,7 +1350,7 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1373,6 +1454,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Luodaan asiakasta..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Poistu valikkoon"
@@ -1870,36 +1956,13 @@ msgid "Minimap in texture mode"
msgstr ""
#: src/gui/guiChatConsole.cpp
-#, fuzzy
msgid "Failed to open webpage"
-msgstr "Epäonnistui ladata $1"
+msgstr "Verkkosivun avaaminen epäonnistui"
#: src/gui/guiChatConsole.cpp
msgid "Opening webpage"
msgstr ""
-#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
-msgid "Passwords do not match!"
-msgstr "Salasanat eivät täsmää!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Rekisteröidy ja liity"
-
-#: 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 ""
-"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 ""
@@ -1932,7 +1995,7 @@ msgstr ""
msgid "Change camera"
msgstr "Vaihda kameraa"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Keskustelu"
@@ -1985,10 +2048,8 @@ msgid "Key already in use"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Näppäimistöasetukset. (Jos tämä valikko rikkoutuu, poista asioita minetest."
-"conf-tiedostosta)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2059,10 +2120,6 @@ msgid "Change"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Vahvista salasana"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Uusi salasana"
@@ -2070,6 +2127,10 @@ msgstr "Uusi salasana"
msgid "Old Password"
msgstr "Vanha salasana"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Salasanat eivät täsmää!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Poistu"
@@ -2079,15 +2140,9 @@ msgid "Muted"
msgstr "Mykistetty"
#: src/gui/guiVolumeChange.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Sound Volume: %d%%"
-msgstr "Äänenvoimakkuus: "
-
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr ""
+msgstr "Äänenvoimakkuus: %d%%"
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
@@ -2096,6 +2151,16 @@ msgstr ""
msgid "LANG_CODE"
msgstr "fi"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Valitse nimi!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2221,6 +2286,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2302,6 +2371,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Maailman nimi"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Lisäasetukset"
@@ -2315,7 +2389,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2384,6 +2458,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2424,10 +2502,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2448,7 +2522,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2460,6 +2534,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2484,6 +2562,11 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Vaihda kameraa"
+
+#: 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"
@@ -2560,7 +2643,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Chat commands"
-msgstr "Komento"
+msgstr "Chat-komennnot"
#: src/settings_translation_file.cpp
msgid "Chat font size"
@@ -2641,6 +2724,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2736,6 +2823,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2769,7 +2860,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2836,11 +2929,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2983,6 +3076,11 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Koristeet"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -3003,6 +3101,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3072,6 +3176,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3088,19 +3196,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3174,6 +3276,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3192,6 +3298,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3269,8 +3379,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr ""
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Reunanpehmennys:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3337,6 +3448,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3485,6 +3600,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Pelit"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3512,6 +3640,16 @@ msgid "Graphics"
msgstr "Grafiikka"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Grafiikka"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Grafiikka"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3528,7 +3666,11 @@ msgid "HTTP mods"
msgstr "HTTP-modit"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3768,11 +3910,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3833,6 +3982,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3854,7 +4009,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3894,10 +4051,6 @@ msgid "Ignore world errors"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "Pelinsisäinen"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
@@ -3948,15 +4101,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4577,6 +4726,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4632,7 +4785,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4642,15 +4795,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4662,7 +4818,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4690,6 +4847,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Tasainen valaistus"
+
+#: 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"
@@ -5074,10 +5236,6 @@ msgid "Maximum users"
msgstr "Käyttäjiä enintään"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Valikot"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5126,6 +5284,19 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Turvallisuus"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5212,16 +5383,17 @@ msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Verkko"
-
-#: 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
+#, fuzzy
+msgid "Networking"
+msgstr "Verkko"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Uusien käyttäjien tulee syöttää tämä salasana."
@@ -5234,6 +5406,10 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5271,10 +5447,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5368,10 +5540,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Pelaajan nimi"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5418,10 +5586,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5590,6 +5754,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Näyttö:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Näytön korkeus"
@@ -5617,6 +5786,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Kuvakaappaus"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5629,10 +5803,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Turvallisuus"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Lue https://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -5672,8 +5842,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Palvelin / yksinpeli"
+#, fuzzy
+msgid "Server"
+msgstr "Palvelimen URL"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Palvelimen nimi"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Palvelimen kuvaus"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5700,10 +5881,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Palvelimen portti"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5714,12 +5904,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5727,7 +5919,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5803,7 +5995,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6003,6 +6195,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Asetukset"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6205,7 +6402,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6229,10 +6426,19 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Koko näyttö"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6323,6 +6529,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6556,6 +6766,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6645,6 +6864,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6662,18 +6885,64 @@ msgstr ""
#~ msgid "- Damage: "
#~ msgstr "- Vahinko: "
+#~ msgid "Connect"
+#~ msgstr "Yhdistä"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Lataa peli, kuten Minetest Game, minetest.netistä"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Lataa yksi minetest.netistä"
+
#~ msgid "FreeType fonts"
#~ msgstr "FreeType-fontit"
+#~ msgid "Game"
+#~ msgstr "Peli"
+
+#~ msgid "In-Game"
+#~ msgstr "Pelinsisäinen"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Asenna: tiedosto: \"$1\""
+#~ 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)"
+
+#~ msgid "Menus"
+#~ msgstr "Valikot"
+
#~ msgid "Name / Password"
#~ msgstr "Nimi / Salasana"
+#~ msgid "Player name"
+#~ msgstr "Pelaajan nimi"
+
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Palvelin / yksinpeli"
+
#~ msgid "To enable shaders the OpenGL driver needs to be used."
#~ msgstr "Varjostimien käyttäminen vaatii, että käytössä on OpenGL-ajuri."
+#, 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 ""
+#~ "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."
+
#~ msgid "You died."
#~ msgstr "Kuolit."
diff --git a/po/fil/minetest.po b/po/fil/minetest.po
index ef7f88986..85444da23 100644
--- a/po/fil/minetest.po
+++ b/po/fil/minetest.po
@@ -7,685 +7,779 @@ 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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-06-27 03:16+0000\n"
+"Last-Translator: Marco Santos <enum.scima@gmail.com>\n"
+"Language-Team: Filipino <https://hosted.weblate.org/projects/minetest/"
+"minetest/fil/>\n"
"Language: fil\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 != 2 && n != 3 && (n % 10 == 4 "
+"|| n % 10 == 6 || n % 10 == 9);\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
-msgstr ""
+msgstr "Linisin ang pila ng out chat"
#: builtin/client/chatcommands.lua
msgid "Empty command."
-msgstr ""
+msgstr "Bakanteng utos."
#: builtin/client/chatcommands.lua
msgid "Exit to main menu"
-msgstr ""
+msgstr "Umalis sa main menu"
#: builtin/client/chatcommands.lua
msgid "Invalid command: "
-msgstr ""
+msgstr "Invalid na utos: "
#: builtin/client/chatcommands.lua
msgid "Issued command: "
-msgstr ""
+msgstr "Inisyu na utos: "
#: builtin/client/chatcommands.lua
msgid "List online players"
-msgstr ""
+msgstr "Ilista ang mga naka-online na player"
#: builtin/client/chatcommands.lua
msgid "Online players: "
-msgstr ""
+msgstr "Mga naka-online na player: "
#: builtin/client/chatcommands.lua
msgid "The out chat queue is now empty."
-msgstr ""
+msgstr "Bakante na ang pila ng out chat."
#: builtin/client/chatcommands.lua
msgid "This command is disabled by server."
-msgstr ""
+msgstr "Sinara ng server ang utos na ito."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
-msgstr ""
+msgstr "Mag-respawn"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
-msgstr ""
+msgstr "Namatay ka"
#: builtin/common/chatcommands.lua
msgid "Available commands:"
-msgstr ""
+msgstr "Mga magagamit na utos:"
#: builtin/common/chatcommands.lua
msgid "Available commands: "
-msgstr ""
+msgstr "Mga magagamit na utos: "
#: builtin/common/chatcommands.lua
msgid "Command not available: "
-msgstr ""
+msgstr "Di magagamit ang utos: "
#: builtin/common/chatcommands.lua
msgid "Get help for commands"
-msgstr ""
+msgstr "Humingi ng tulong para sa mga utos"
#: builtin/common/chatcommands.lua
msgid ""
"Use '.help <cmd>' to get more information, or '.help all' to list everything."
msgstr ""
+"Gamitin ang '.help <utos>' para makakuha ka pa ng mas maraming impormasyon, "
+"o '.help all' para ilista lahat."
#: builtin/common/chatcommands.lua
msgid "[all | <cmd>]"
-msgstr ""
+msgstr "[all | <utos>]"
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
-msgstr ""
+msgstr "Sige"
#: builtin/fstk/ui.lua
msgid "<none available>"
-msgstr ""
+msgstr "<wala>"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
-msgstr ""
+msgstr "May error sa Lua script:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
-msgstr ""
+msgstr "May error:"
#: builtin/fstk/ui.lua
msgid "Main menu"
-msgstr ""
+msgstr "Main menu"
#: builtin/fstk/ui.lua
msgid "Reconnect"
-msgstr ""
+msgstr "Kumonekta uli"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
+msgstr "Humiling ang server ng pagkonekta muli:"
+
+#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
msgstr ""
#: builtin/mainmenu/common.lua
-msgid "Protocol version mismatch. "
+#, fuzzy
+msgid "Client Mods"
+msgstr "Pumili ng mga Mod"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
msgstr ""
#: builtin/mainmenu/common.lua
-msgid "Server enforces protocol version $1. "
+msgid "Later"
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Di tumugmang bersyon ng protocol. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "Pinapatupad ng server ang bersyon ng protocol na $1. "
+
+#: builtin/mainmenu/common.lua
msgid "Server supports protocol versions between $1 and $2. "
msgstr ""
+"Sinusuportahan ng server ang mga bersyon ng protocol sa pagitan $1 at $2. "
#: builtin/mainmenu/common.lua
-msgid "We only support protocol version $1."
+msgid "Visit website"
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Suportado lang po namin ang bersyon ng protocol na $1."
+
+#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
msgstr ""
+"Suportado lang po namin ang mga bersyon ng protocol sa pagitan ng $1 at $2."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
-msgstr ""
+msgstr "Ikansela"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/tab_content.lua
msgid "Dependencies:"
-msgstr ""
+msgstr "Mga kailangan:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
-msgstr ""
+msgstr "Isara lahat"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr ""
+msgstr "Isara ang modpack"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
-msgstr ""
+msgstr "Buksan lahat"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr ""
+msgstr "Buksan ang modpack"
#: 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 ""
+"Bigong mabuksan ang mod na \"$1\" dahil naglalaman ito ng mga bawal na "
+"karakter. Tanging mga karakter na [a-z0-9_] lang ang pwede."
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr ""
+msgstr "Maghanap pa ng mga Mod"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
-msgstr ""
+msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr ""
+msgstr "Walang (optional na) kailangan"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
-msgstr ""
+msgstr "Walang binigay na paglalarawan sa laro."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr ""
+msgstr "Walang kailangang kailangan"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr ""
+msgstr "Walang binigay na paglalarawan sa modpack."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
-msgstr ""
+msgstr "Walang mga optional na kailangan"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
-msgstr ""
+msgstr "Mga optional na kailangan:"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
msgid "Save"
-msgstr ""
+msgstr "I-save"
#: builtin/mainmenu/dlg_config_world.lua
msgid "World:"
-msgstr ""
+msgstr "Mundo:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr ""
+msgstr "bukas"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "Meron na'ng \"$1\". Gusto mo bang i-overwrite ito?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Ii-install ang mga kailangan na $1 at $2."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 ni $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 dina-download,\n"
+"$2 nakapila"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 downloading..."
-msgstr ""
+msgstr "$1 dina-download..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "Di makita ang $1 (na) kailangan."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "Ii-install ang $1, at lalaktawan ang %2."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
-msgstr ""
+msgstr "Lahat ng package"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Already installed"
-msgstr ""
+msgstr "Naka-install na"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
-msgstr ""
+msgstr "Balik sa Main Menu"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Base Game:"
-msgstr ""
+msgstr "Basehang Laro:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr ""
+"Di magagamit ang ContentDB kapag na-compile ang Minetest nang walang cURL"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Downloading..."
-msgstr ""
+msgstr "Dina-download..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr ""
+msgstr "Bigong ma-download ang $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
-msgstr ""
+msgstr "Mga Laro"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install"
-msgstr ""
+msgstr "I-install"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install $1"
-msgstr ""
+msgstr "I-install ang $1"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install missing dependencies"
-msgstr ""
+msgstr "I-install ang mga nawawalang kailangan"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install: Unsupported file type or broken archive"
-msgstr ""
+msgstr "I-install: Di-suportadong file type o sirang archive"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
-msgstr ""
+msgstr "Mga Mod"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr ""
+msgstr "Walang makuhang mga package"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
-msgstr ""
+msgstr "Walang mga resulta"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No updates"
-msgstr ""
+msgstr "Walang mga update"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "Di nakita"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "I-overwrite"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Siguraduhing tama ang basehang laro."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Nakapila"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
-msgstr ""
+msgstr "Mga Texture Pack"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
-msgstr ""
+msgstr "Burahin"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
-msgstr ""
+msgstr "I-update"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "I-update Lahat [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Tumingin pa ng mas maraming impormasyon sa web browser"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
-msgstr ""
+msgstr "Meron na'ng mundong may pangalang \"$1\""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Additional terrain"
-msgstr ""
+msgstr "Karagdagang terrain"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Altitude chill"
-msgstr ""
+msgstr "Lamig ng altitude"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Altitude dry"
-msgstr ""
+msgstr "Tuyo ng altitude"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biome blending"
-msgstr ""
+msgstr "Paghahalo ng biome"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biomes"
-msgstr ""
+msgstr "Mga biome"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caverns"
-msgstr ""
+msgstr "Mga kweba"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caves"
-msgstr ""
+msgstr "Mga kweba"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
-msgstr ""
+msgstr "Gumawa"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Decorations"
-msgstr ""
+msgstr "Mga dekorasyon"
#: 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 ""
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Babala: Para sa mga developer ang Development Test."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
-msgstr ""
+msgstr "Mga dungeon"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Flat terrain"
-msgstr ""
+msgstr "Patag na terrain"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr ""
+msgstr "Mga lumulutang na kalupaan sa langit"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-msgstr ""
-
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr ""
+msgstr "Lumulutang na Lupa (eksperimento)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr ""
+msgstr "Gumawa ng di fractal na terrain: Mga karagatan at ilalim ng lupa"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
-msgstr ""
+msgstr "Mga burol"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Humid rivers"
-msgstr ""
+msgstr "Mga mahalumigmig na ilog"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Increases humidity around rivers"
+msgstr "Pinapataas ang halumigmig sa mga ilog"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "I-install ang $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
-msgstr ""
+msgstr "Mga lawa"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Low humidity and high heat causes shallow or dry rivers"
msgstr ""
+"Bumababa o natutuyo ang mga ilog kapag mababa ang halumigmig at mataas ang "
+"init"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
-msgstr ""
+msgstr "Mapgen"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen flags"
-msgstr ""
+msgstr "Mga flag ng mapgen"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mapgen-specific flags"
-msgstr ""
+msgstr "Mga flag na specific sa mapgen"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
-msgstr ""
+msgstr "Mga bundok"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
-msgstr ""
+msgstr "Agos ng putik"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
-msgstr ""
+msgstr "Network ng mga tunnel at kweba"
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
-msgstr ""
+msgstr "Walang larong napili"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces heat with altitude"
-msgstr ""
+msgstr "Binabawasan ang init ng altitude"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces humidity with altitude"
-msgstr ""
+msgstr "Binabawasan ang halumigmig ng altitude"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Rivers"
-msgstr ""
+msgstr "Mga ilog"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
-msgstr ""
+msgstr "Lebel ng dagat sa mga ilog"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
-msgstr ""
+msgstr "Seed"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
-msgstr ""
+msgstr "Malinis na transition sa pagitan ng mga biome"
#: builtin/mainmenu/dlg_create_world.lua
msgid ""
"Structures appearing on the terrain (no effect on trees and jungle grass "
"created by v6)"
msgstr ""
+"Mga istrakturang magpapakita sa terrain (walang epekto sa mga puno at damo "
+"sa gubat na nagawa ng v6)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Structures appearing on the terrain, typically trees and plants"
msgstr ""
+"Mga istrakturang magpapakita sa terrain, tipikal na mga puno at halaman"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert"
-msgstr ""
+msgstr "Temperate, Disyerto"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle"
-msgstr ""
+msgstr "Temperate, Disyerto, Kagubatan"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr ""
+msgstr "Temperate, Disyerto, Kagubatan, Tundra, Taiga"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Terrain surface erosion"
-msgstr ""
+msgstr "Erosyon sa lupa ng terrain"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
-msgstr ""
+msgstr "Mga puno at damo sa gubat"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Vary river depth"
-msgstr ""
+msgstr "Nagbabagong lalim ng ilog"
#: 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 ""
+msgstr "Mga napakalaking malalalim na kweba"
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
-msgstr ""
+msgstr "Pangalan ng mundo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "You have no games installed."
-msgstr ""
+msgstr "Wala kang na-install na mga laro."
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr ""
+msgstr "Sigurado ka bang buburahin mo ang \"$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 "Burahin"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr ""
+msgstr "pkgmgr: bigong mabura ang \"$1\""
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
-msgstr ""
+msgstr "pkgmgr: invalid na path na \"$1\""
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
+msgstr "Burahin ang Mundong \"$1\"?"
+
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Kumpirmahin ang Password"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
msgstr ""
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Pangalan"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Password"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Di tugma ang mga password!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Magparehistro at Sumali"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
-msgstr ""
+msgstr "Tanggapin"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr ""
+msgstr "I-rename ang Modpack:"
#: 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 ""
+"May explicit na pangalan ang modpack na ito na nakalagay sa modpack.conf "
+"nito na mag-o-override sa kahit anong pag-rename dito."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
-msgstr ""
+msgstr "(Walang binigay na paglalarawan)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
-msgstr ""
+msgstr "2D Noise"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
-msgstr ""
+msgstr "< Balik sa Pagsasaayos"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
-msgstr ""
+msgstr "Mag-browse"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Content"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Content"
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
-msgstr ""
+msgstr "Nakasara"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Edit"
-msgstr ""
+msgstr "Baguhin"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
-msgstr ""
+msgstr "Nakabukas"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Lacunarity"
-msgstr ""
+msgstr "Lacunarity"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Octaves"
-msgstr ""
+msgstr "Mga octave"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
-msgstr ""
+msgstr "Offset"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Persistence"
-msgstr ""
+msgstr "Persistence"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
-msgstr ""
+msgstr "Mangyaring maglagay ng valid na integer."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid number."
-msgstr ""
+msgstr "Mangyaring maglagay ng valid na bilang."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
-msgstr ""
+msgstr "I-restore ang Default"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
-msgstr ""
+msgstr "Scale"
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
-msgstr ""
+msgstr "Maghanap"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
-msgstr ""
+msgstr "Pumili ng directory"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select file"
-msgstr ""
+msgstr "Pumili ng file"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
-msgstr ""
+msgstr "Ipakita ang mga teknikal na pangalan"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
-msgstr ""
+msgstr "Dapat di bababa sa $1 ang value."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
-msgstr ""
+msgstr "Dapat di lalaki sa $1 ang value."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
-msgstr ""
+msgstr "X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X spread"
-msgstr ""
+msgstr "Pagkalat ng X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y"
-msgstr ""
+msgstr "Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y spread"
-msgstr ""
+msgstr "Pagkalat ng Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z"
-msgstr ""
+msgstr "Z"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z spread"
-msgstr ""
+msgstr "Pagkalat ng Z"
#. ~ "absvalue" is a noise parameter flag.
#. It is short for "absolute value".
@@ -693,14 +787,14 @@ msgstr ""
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
-msgstr ""
+msgstr "absvalue"
#. ~ "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 "defaults"
#. ~ "eased" is a noise parameter flag.
#. It is used to make the map smoother and
@@ -708,590 +802,610 @@ msgstr ""
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr ""
+msgstr "eased"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
-msgstr ""
+msgstr "$1 (Nakabukas)"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
-msgstr ""
+msgstr "$1 (na) mod"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
-msgstr ""
+msgstr "Bigong ma-install ang $1 sa $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr ""
+msgstr "I-install ang Mod: Bigong mahanap ang tunay na pangalan ng mod ng: $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
+"I-install ang Mod: Bigong mahanap ang akmang pangalan ng folder para sa "
+"modpack na $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr ""
+msgstr "Bigong makahanap ng valid na mod o modpack"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
-msgstr ""
+msgstr "Bigong ma-install ang $1 bilang texture pack"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
-msgstr ""
+msgstr "Bigong ma-install ang laro bilang $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a mod as a $1"
-msgstr ""
+msgstr "Bigong ma-install ang mod bilang $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a modpack as a $1"
-msgstr ""
+msgstr "Bigong ma-install ang modpack bilang $1"
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
msgid "Loading..."
-msgstr ""
+msgstr "Nilo-load..."
#: builtin/mainmenu/serverlistmgr.lua
msgid "Public server list is disabled"
-msgstr ""
+msgstr "Nakasara ang listahan ng mga pampublikong server"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+"Subukang buksan muli ang listahan ng pampublikong server at tingnan ang "
+"koneksyon mo sa internet."
#: builtin/mainmenu/tab_about.lua
msgid "About"
-msgstr ""
+msgstr "Patungkol"
#: builtin/mainmenu/tab_about.lua
msgid "Active Contributors"
-msgstr ""
+msgstr "Mga Aktibong Nag-aambag"
#: builtin/mainmenu/tab_about.lua
msgid "Active renderer:"
-msgstr ""
+msgstr "Aktibong renderer:"
#: builtin/mainmenu/tab_about.lua
msgid "Core Developers"
-msgstr ""
+msgstr "Mga Core Developer"
#: builtin/mainmenu/tab_about.lua
msgid "Open User Data Directory"
-msgstr ""
+msgstr "Buksan ang User Data Directory"
#: 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 ""
+"Bubuksan ang directory na naglalaman ng mga user-provided na mundo,\n"
+"laro, mod, at texture pack sa isang file manager/explorer."
#: builtin/mainmenu/tab_about.lua
msgid "Previous Contributors"
-msgstr ""
+msgstr "Mga Nakaraang Nag-ambag"
#: builtin/mainmenu/tab_about.lua
msgid "Previous Core Developers"
+msgstr "Mga Nakaraang Core Developer"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
msgstr ""
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr ""
+msgstr "Mag-browse ng online content"
#: builtin/mainmenu/tab_content.lua
msgid "Content"
-msgstr ""
+msgstr "Content"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
-msgstr ""
+msgstr "Isara ang Texture Pack"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
-msgstr ""
+msgstr "Impormasyon:"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
-msgstr ""
+msgstr "Mga Naka-install na Package:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
-msgstr ""
+msgstr "Walang mga kailangan."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr ""
+msgstr "Walang paglalarawan sa package"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
-msgstr ""
+msgstr "I-rename"
#: builtin/mainmenu/tab_content.lua
msgid "Uninstall Package"
-msgstr ""
+msgstr "Burahin ang Package"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
-msgstr ""
+msgstr "Gumamit ng Texture Pack"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr ""
+msgstr "Ianunsyo ang Server"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr ""
+msgstr "I-bind ang Address"
#: builtin/mainmenu/tab_local.lua
msgid "Creative Mode"
-msgstr ""
+msgstr "Creative Mode"
#: builtin/mainmenu/tab_local.lua
msgid "Enable Damage"
-msgstr ""
+msgstr "Buksan ang Pinsala"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
-msgstr ""
+msgstr "Mag-host ng Laro"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
-msgstr ""
+msgstr "Mag-host ng Server"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
-msgstr ""
-
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr ""
+msgstr "Mag-install ng mga laro mula sa ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "New"
-msgstr ""
+msgstr "Bago"
#: 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 ""
+msgstr "Walang nagawa o napiling mundo!"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
-msgstr ""
+msgstr "Maglaro"
#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
-msgstr ""
+msgstr "Port"
#: builtin/mainmenu/tab_local.lua
msgid "Select Mods"
-msgstr ""
+msgstr "Pumili ng mga Mod"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
-msgstr ""
+msgstr "Pumili ng Mundo:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr ""
+msgstr "Port ng Server"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
-msgstr ""
+msgstr "Magsimula"
#: builtin/mainmenu/tab_online.lua
msgid "Address"
-msgstr ""
+msgstr "Address"
#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
msgid "Clear"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr ""
+msgstr "Linisin"
#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
-msgstr ""
+msgstr "Creative mode"
#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
msgid "Damage / PvP"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr ""
+msgstr "Pinsala/PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
-msgstr ""
+msgstr "Mga Paborito"
#: builtin/mainmenu/tab_online.lua
msgid "Incompatible Servers"
-msgstr ""
+msgstr "Di compatible na mga Server"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
+msgstr "Sumali sa Laro"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Login"
msgstr ""
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
-msgstr ""
+msgstr "Ping"
#: builtin/mainmenu/tab_online.lua
msgid "Public Servers"
-msgstr ""
+msgstr "Mga Pampublikong Server"
#: builtin/mainmenu/tab_online.lua
msgid "Refresh"
-msgstr ""
+msgstr "I-refresh"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Burahin Paborito"
#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
+msgstr "Paglalarawan sa Server"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
-msgstr ""
+msgstr "2x"
#: builtin/mainmenu/tab_settings.lua
msgid "3D Clouds"
-msgstr ""
+msgstr "3D na Ulap"
#: 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 "Lahat ng Pagsasaayos"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
-msgstr ""
+msgstr "Antialiasing:"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
-msgstr ""
+msgstr "Kusang I-save ang Laki ng Screen"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
-msgstr ""
+msgstr "Bilinear Filter"
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
msgid "Change Keys"
-msgstr ""
+msgstr "Baguhin ang mga Key"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr ""
+msgstr "Konektadong Salamin"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Dynamic shadows"
-msgstr ""
+msgstr "Dynamic na mga anino"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr ""
+#, fuzzy
+msgid "Dynamic shadows:"
+msgstr "Dynamic na mga anino: "
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
-msgstr ""
+msgstr "Magagarang Dahon"
#: builtin/mainmenu/tab_settings.lua
msgid "High"
-msgstr ""
+msgstr "Mataas"
#: builtin/mainmenu/tab_settings.lua
msgid "Low"
-msgstr ""
+msgstr "Mababa"
#: builtin/mainmenu/tab_settings.lua
msgid "Medium"
-msgstr ""
+msgstr "Katamtaman"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr ""
+msgstr "Mipmap"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "Mipmap + Aniso. Filter"
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr ""
+msgstr "Walang Filter"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
-msgstr ""
+msgstr "Walang Mipmap"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
-msgstr ""
+msgstr "Pag-highlight sa Node"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
-msgstr ""
+msgstr "Pag-outline sa Node"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
-msgstr ""
+msgstr "Wala"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
-msgstr ""
+msgstr "Opaque na Dahon"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Water"
-msgstr ""
+msgstr "Opaque na Tubig"
#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
-msgstr ""
+msgstr "Mga Particle"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
-msgstr ""
+msgstr "Screen:"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
-msgstr ""
+msgstr "Pagsasaayos"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
-msgstr ""
+msgstr "Mga Shader"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (experimental)"
-msgstr ""
+msgstr "Mga Shader (eksperimento)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr ""
+msgstr "Mga Shader (di available)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
-msgstr ""
+msgstr "Simpleng Dahon"
#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
-msgstr ""
+msgstr "Malinis na Liwanag"
#: builtin/mainmenu/tab_settings.lua
msgid "Texturing:"
-msgstr ""
+msgstr "Pagte-texture:"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
-msgstr ""
+msgstr "Tone Mapping"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr ""
+#, fuzzy
+msgid "Touch threshold (px):"
+msgstr "Touchthreshold: (px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
-msgstr ""
+msgstr "Trilinear Filter"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
-msgstr ""
+#, fuzzy
+msgid "Very High"
+msgstr "Napakataas"
#: builtin/mainmenu/tab_settings.lua
msgid "Very Low"
-msgstr ""
+msgstr "Napakababa"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr ""
+msgstr "Nahahanginang Dahon"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Liquids"
-msgstr ""
+msgstr "Umaalong Tubig"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr ""
+msgstr "Nahahanginang Halaman"
+
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Error sa koneksyon (nag-timeout?)"
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
-msgstr ""
+msgstr "Nag-timeout ang koneksyon."
#: src/client/client.cpp
msgid "Done!"
-msgstr ""
+msgstr "Tapos na!"
#: src/client/client.cpp
msgid "Initializing nodes"
-msgstr ""
+msgstr "Ini-initialize ang mga node"
#: src/client/client.cpp
msgid "Initializing nodes..."
-msgstr ""
+msgstr "Ini-initialize ang mga node..."
#: src/client/client.cpp
msgid "Loading textures..."
-msgstr ""
+msgstr "Nilo-load ang mga texture..."
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-msgstr ""
+msgstr "Rine-rebuild ang mga shader..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
-msgstr ""
+msgstr "Error sa koneksyon (nag-timeout?)"
#: src/client/clientlauncher.cpp
msgid "Could not find or load game: "
-msgstr ""
+msgstr "Di mahanap o ma-load ang laro: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
-msgstr ""
+msgstr "Invalid na gamespec."
#: src/client/clientlauncher.cpp
msgid "Main Menu"
-msgstr ""
+msgstr "Main Menu"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
-msgstr ""
+msgstr "Walang napiling mundo at walang binigay na address. Walang gagawin."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr ""
+msgstr "Masyadong mahaba ang pangalan ng player."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr ""
+msgstr "Mangyaring pumili po ng pangalan!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr ""
+msgstr "Bigong mabuksan ang binigay na password file: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
-msgstr ""
+msgstr "Walang path sa mundo na tumugma sa binigay: "
#: src/client/game.cpp
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
+"\n"
+"Tingnan ang debug.txt para sa mga detalye."
#: src/client/game.cpp
msgid "- Address: "
-msgstr ""
+msgstr "- Address: "
#: src/client/game.cpp
msgid "- Mode: "
-msgstr ""
+msgstr "- Mode: "
#: src/client/game.cpp
msgid "- Port: "
-msgstr ""
+msgstr "- Port: "
#: src/client/game.cpp
msgid "- Public: "
-msgstr ""
+msgstr "- Pampubliko: "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
-msgstr ""
+msgstr "- PvP: "
#: src/client/game.cpp
msgid "- Server Name: "
-msgstr ""
+msgstr "- Pangalan ng Server: "
#: src/client/game.cpp
msgid "A serialization error occurred:"
-msgstr ""
+msgstr "May naganap na serialization error:"
#: src/client/game.cpp
#, c-format
msgid "Access denied. Reason: %s"
-msgstr ""
+msgstr "Tinanggihan ang access: Dahilan: %s"
#: src/client/game.cpp
msgid "Automatic forward disabled"
-msgstr ""
+msgstr "Nakasara ang kusang pag-abante"
#: src/client/game.cpp
msgid "Automatic forward enabled"
-msgstr ""
+msgstr "Nakabukas ang kusang pag-abante"
#: src/client/game.cpp
msgid "Block bounds hidden"
-msgstr ""
+msgstr "Nakatago ang mga block bound"
#: src/client/game.cpp
msgid "Block bounds shown for all blocks"
-msgstr ""
+msgstr "Ipinapakita ang mga block bound para sa lahat ng mga block"
#: src/client/game.cpp
msgid "Block bounds shown for current block"
-msgstr ""
+msgstr "Ipinapakita ang block bound para sa kasalukuyang block"
#: src/client/game.cpp
msgid "Block bounds shown for nearby blocks"
-msgstr ""
+msgstr "Ipinapakita ang mga block bound para sa mga malalapit na block"
#: src/client/game.cpp
msgid "Camera update disabled"
-msgstr ""
+msgstr "Nakasara ang pag-update sa kamera"
#: src/client/game.cpp
msgid "Camera update enabled"
-msgstr ""
+msgstr "Nakabukas ang pag-update sa kamera"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
+"Bawal maipakita ang mga block bound (kailangan ng pribilehiyong "
+"'basic_debug')"
#: src/client/game.cpp
msgid "Change Password"
-msgstr ""
+msgstr "Baguhin ang Password"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
-msgstr ""
+msgstr "Nakasara ang cinematic mode"
#: src/client/game.cpp
msgid "Cinematic mode enabled"
-msgstr ""
+msgstr "Nakabukas ang cinematic mode"
#: src/client/game.cpp
msgid "Client disconnected"
-msgstr ""
+msgstr "Nadiskonekta ang client"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
-msgstr ""
+msgstr "Nakasara ang scripting sa client side"
#: src/client/game.cpp
msgid "Connecting to server..."
-msgstr ""
+msgstr "Kumokonekta sa server..."
#: src/client/game.cpp
msgid "Connection failed for unknown reason"
-msgstr ""
+msgstr "Bigong makakonekta dahil sa di matukoy na dahilan"
#: src/client/game.cpp
msgid "Continue"
-msgstr ""
+msgstr "Magpatuloy"
#: src/client/game.cpp
#, c-format
@@ -1311,31 +1425,45 @@ msgid ""
"- Mouse wheel: select item\n"
"- %s: chat\n"
msgstr ""
+"Mga kontrol:\n"
+"- %s: abante paharap\n"
+"- %s: abante patalikod\n"
+"- %s: kumaliwa\n"
+"- %s: kumanan\n"
+"- %s: tumalon/umakyat\n"
+"- %s: maghukay/sumuntok\n"
+"- %s: maglagay/gumamit\n"
+"- %s: dahan-dahan/bumaba\n"
+"- %s: ihulog ang item\n"
+"- %s: inventory\n"
+"- Mouse: umikot/tumingin\n"
+"- Mouse wheel: pumili ng item\n"
+"- %s: chat\n"
#: src/client/game.cpp
#, c-format
msgid "Couldn't resolve address: %s"
-msgstr ""
+msgstr "Di maresolba ang address: %s"
#: src/client/game.cpp
msgid "Creating client..."
-msgstr ""
+msgstr "Ginagawa ang client..."
#: src/client/game.cpp
msgid "Creating server..."
-msgstr ""
+msgstr "Ginagawa ang server..."
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr ""
+msgstr "Nakatago ang debug info at profiler graph"
#: src/client/game.cpp
msgid "Debug info shown"
-msgstr ""
+msgstr "Ipinapakita ang debug info"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
-msgstr ""
+msgstr "Nakatago ang debug info, profiler graph, at wireframe"
#: src/client/game.cpp
msgid ""
@@ -1352,737 +1480,742 @@ msgid ""
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
msgstr ""
+"Mga Default na Kontrol:\n"
+"Kapag walang makikitang Menu:\n"
+"- isang pindot: i-activate ang button\n"
+"- dobleng pindot: ilagay/gamitin\n"
+"- padulasin ang daliri: tumingin-tingin sa paligid\n"
+"Kapag makikita ang Menu/Inventory:\n"
+"- dobleng pindot (sa labas):\n"
+" -->isara\n"
+"- pindutin ang stack, pindutin ang slot:\n"
+" --> ilipat ang stack\n"
+"- pindutin at i-drag, pindutin pangalawang daliri\n"
+" --> ilagay ang isang item sa slot\n"
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
-msgstr ""
+msgstr "Nakasara ang unlimited na viewing range"
#: src/client/game.cpp
msgid "Enabled unlimited viewing range"
-msgstr ""
+msgstr "Nakabukas ang unlimited na viewing range"
+
+#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Ginagawa ang client..."
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr ""
+msgstr "Umalis sa Menu"
#: src/client/game.cpp
msgid "Exit to OS"
-msgstr ""
+msgstr "Umalis sa OS"
#: src/client/game.cpp
msgid "Fast mode disabled"
-msgstr ""
+msgstr "Nakasara ang fast mode"
#: src/client/game.cpp
msgid "Fast mode enabled"
-msgstr ""
+msgstr "Nakabukas ang fast mode"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr ""
+msgstr "Nakabukas ang fast mode (paalala: walang pribilehiyong 'fast')"
#: src/client/game.cpp
msgid "Fly mode disabled"
-msgstr ""
+msgstr "Nakasara ang fly mode"
#: src/client/game.cpp
msgid "Fly mode enabled"
-msgstr ""
+msgstr "Nakabukas ang fly mode"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr ""
+msgstr "Nakabukas ang fly mode (paalala: walang pribilehiyong 'fly')"
#: src/client/game.cpp
msgid "Fog disabled"
-msgstr ""
+msgstr "Nakasara ang hamog"
#: src/client/game.cpp
msgid "Fog enabled"
-msgstr ""
+msgstr "Nakabukas ang hamog"
#: src/client/game.cpp
msgid "Game info:"
-msgstr ""
+msgstr "Info ng laro:"
#: src/client/game.cpp
msgid "Game paused"
-msgstr ""
+msgstr "Nakahinto ang laro"
#: src/client/game.cpp
msgid "Hosting server"
-msgstr ""
+msgstr "Nagho-host na server"
#: src/client/game.cpp
msgid "Item definitions..."
-msgstr ""
+msgstr "Mga definition ng item..."
#: src/client/game.cpp
msgid "KiB/s"
-msgstr ""
+msgstr "KiB/s"
#: src/client/game.cpp
msgid "Media..."
-msgstr ""
+msgstr "Media..."
#: src/client/game.cpp
msgid "MiB/s"
-msgstr ""
+msgstr "MiB/s"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr ""
+msgstr "Kasalukuyang sinara ng laro o mod ang minimap"
#: src/client/game.cpp
msgid "Multiplayer"
-msgstr ""
+msgstr "Multiplayer"
#: src/client/game.cpp
msgid "Noclip mode disabled"
-msgstr ""
+msgstr "Nakasara ang noclip mode"
#: src/client/game.cpp
msgid "Noclip mode enabled"
-msgstr ""
+msgstr "Nakabukas ang noclip mode"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr ""
+msgstr "Nakabukas ang noclip mode (paalala: walang pribilehiyong 'noclip')"
#: src/client/game.cpp
msgid "Node definitions..."
-msgstr ""
+msgstr "Mga definition ng node..."
#: src/client/game.cpp
msgid "Off"
-msgstr ""
+msgstr "Sarado"
#: src/client/game.cpp
msgid "On"
-msgstr ""
+msgstr "Bukas"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
-msgstr ""
+msgstr "Nakasara ang pitch move mode"
#: src/client/game.cpp
msgid "Pitch move mode enabled"
-msgstr ""
+msgstr "Nakabukas ang pitch move mode"
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr ""
+msgstr "Ipinapakita ang profiler graph"
#: src/client/game.cpp
msgid "Remote server"
-msgstr ""
+msgstr "Remote na server"
#: src/client/game.cpp
msgid "Resolving address..."
-msgstr ""
+msgstr "Rineresolba ang address..."
#: src/client/game.cpp
msgid "Shutting down..."
-msgstr ""
+msgstr "Sina-shutdown..."
#: src/client/game.cpp
msgid "Singleplayer"
-msgstr ""
+msgstr "Singleplayer"
#: src/client/game.cpp
msgid "Sound Volume"
-msgstr ""
+msgstr "Volume ng Tunog"
#: src/client/game.cpp
msgid "Sound muted"
-msgstr ""
+msgstr "Naka-mute ang tunog"
#: src/client/game.cpp
msgid "Sound system is disabled"
-msgstr ""
+msgstr "Nakasara ang system ng tunog"
#: src/client/game.cpp
msgid "Sound system is not supported on this build"
-msgstr ""
+msgstr "Di suportado ang system ng tunog sa build na ito"
#: src/client/game.cpp
msgid "Sound unmuted"
-msgstr ""
+msgstr "Di na naka-mute ang tunog"
#: src/client/game.cpp
#, c-format
msgid "The server is probably running a different version of %s."
-msgstr ""
+msgstr "Baka ibang bersyon ng %s ang pinapatakbo ng server."
#: src/client/game.cpp
#, c-format
msgid "Unable to connect to %s because IPv6 is disabled"
-msgstr ""
+msgstr "Bigong makakonekta sa %s dahil nakasara ang IPv6"
#: src/client/game.cpp
#, c-format
msgid "Unable to listen on %s because IPv6 is disabled"
-msgstr ""
+msgstr "Bigong makakinig sa %s dahil nakasara ang IPv6"
#: src/client/game.cpp
#, c-format
msgid "Viewing range changed to %d"
-msgstr ""
+msgstr "Binago ang viewing range papuntang %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at maximum: %d"
-msgstr ""
+msgstr "Nasa maximum na ang viewing range: %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at minimum: %d"
-msgstr ""
+msgstr "Nasa minimum na ang viewing range: %d"
#: src/client/game.cpp
#, c-format
msgid "Volume changed to %d%%"
-msgstr ""
+msgstr "Binago ang volume papuntang %d%%"
#: src/client/game.cpp
msgid "Wireframe shown"
-msgstr ""
+msgstr "Ipinapakita ang wireframe"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr ""
+msgstr "Kasalukuyang sinara ng laro o mod ang pag-zoom"
#: src/client/game.cpp
msgid "ok"
-msgstr ""
+msgstr "sige"
#: src/client/gameui.cpp
msgid "Chat hidden"
-msgstr ""
+msgstr "Nakatago ang chat"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr ""
+msgstr "Ipinapakita ang chat"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr ""
+msgstr "Nakatago ang HUD"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr ""
+msgstr "Ipinapakita ang HUD"
#: src/client/gameui.cpp
msgid "Profiler hidden"
-msgstr ""
+msgstr "Nakatago ang profiler"
#: src/client/gameui.cpp
#, c-format
msgid "Profiler shown (page %d of %d)"
-msgstr ""
+msgstr "Ipinapakita ang profiler (pahina %d ng %d)"
#: src/client/keycode.cpp
msgid "Apps"
-msgstr ""
+msgstr "Mga App"
#: src/client/keycode.cpp
msgid "Backspace"
-msgstr ""
+msgstr "Backspace"
#: src/client/keycode.cpp
msgid "Caps Lock"
-msgstr ""
+msgstr "Caps Lock"
#: src/client/keycode.cpp
msgid "Control"
-msgstr ""
+msgstr "Control"
#: src/client/keycode.cpp
msgid "Down"
-msgstr ""
+msgstr "Down"
#: src/client/keycode.cpp
msgid "End"
-msgstr ""
+msgstr "End"
#: src/client/keycode.cpp
msgid "Erase EOF"
-msgstr ""
+msgstr "Erase EOF"
#: src/client/keycode.cpp
msgid "Execute"
-msgstr ""
+msgstr "Execute"
#: src/client/keycode.cpp
msgid "Help"
-msgstr ""
+msgstr "Help"
#: src/client/keycode.cpp
msgid "Home"
-msgstr ""
+msgstr "Home"
#: src/client/keycode.cpp
msgid "IME Accept"
-msgstr ""
+msgstr "IME Accept"
#: src/client/keycode.cpp
msgid "IME Convert"
-msgstr ""
+msgstr "IME Convert"
#: src/client/keycode.cpp
msgid "IME Escape"
-msgstr ""
+msgstr "IME Escape"
#: src/client/keycode.cpp
msgid "IME Mode Change"
-msgstr ""
+msgstr "IME Mode Change"
#: src/client/keycode.cpp
msgid "IME Nonconvert"
-msgstr ""
+msgstr "IME Nonconvert"
#: src/client/keycode.cpp
msgid "Insert"
-msgstr ""
+msgstr "Insert"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Left"
-msgstr ""
+msgstr "Left"
#: src/client/keycode.cpp
msgid "Left Button"
-msgstr ""
+msgstr "Left Button"
#: src/client/keycode.cpp
msgid "Left Control"
-msgstr ""
+msgstr "Left Control"
#: src/client/keycode.cpp
msgid "Left Menu"
-msgstr ""
+msgstr "Left Menu"
#: src/client/keycode.cpp
msgid "Left Shift"
-msgstr ""
+msgstr "Left Shift"
#: src/client/keycode.cpp
msgid "Left Windows"
-msgstr ""
+msgstr "Left Windows"
#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
-msgstr ""
+msgstr "Menu"
#: src/client/keycode.cpp
msgid "Middle Button"
-msgstr ""
+msgstr "Middle Button"
#: src/client/keycode.cpp
msgid "Num Lock"
-msgstr ""
+msgstr "Num Lock"
#: 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"
-msgstr ""
+msgstr "OEM Clear"
#: src/client/keycode.cpp
msgid "Page down"
-msgstr ""
+msgstr "Page down"
#: src/client/keycode.cpp
msgid "Page up"
-msgstr ""
+msgstr "Page up"
#: src/client/keycode.cpp
msgid "Pause"
-msgstr ""
+msgstr "Pause"
#: src/client/keycode.cpp
msgid "Play"
-msgstr ""
+msgstr "Play"
#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
-msgstr ""
+msgstr "Print"
#: src/client/keycode.cpp
msgid "Return"
-msgstr ""
+msgstr "Return"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Right"
-msgstr ""
+msgstr "Right"
#: src/client/keycode.cpp
msgid "Right Button"
-msgstr ""
+msgstr "Right Button"
#: src/client/keycode.cpp
msgid "Right Control"
-msgstr ""
+msgstr "Right Control"
#: src/client/keycode.cpp
msgid "Right Menu"
-msgstr ""
+msgstr "Right Menu"
#: src/client/keycode.cpp
msgid "Right Shift"
-msgstr ""
+msgstr "Right Shift"
#: src/client/keycode.cpp
msgid "Right Windows"
-msgstr ""
+msgstr "Right Windows"
#: src/client/keycode.cpp
msgid "Scroll Lock"
-msgstr ""
+msgstr "Scroll Lock"
#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
-msgstr ""
+msgstr "Select"
#: 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 "Snapshot"
#: src/client/keycode.cpp
msgid "Space"
-msgstr ""
+msgstr "Space"
#: src/client/keycode.cpp
msgid "Tab"
-msgstr ""
+msgstr "Tab"
#: src/client/keycode.cpp
msgid "Up"
-msgstr ""
+msgstr "Up"
#: src/client/keycode.cpp
msgid "X Button 1"
-msgstr ""
+msgstr "X Button 1"
#: src/client/keycode.cpp
msgid "X Button 2"
-msgstr ""
+msgstr "X Button 2"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Zoom"
-msgstr ""
+msgstr "Zoom"
#: src/client/minimap.cpp
msgid "Minimap hidden"
-msgstr ""
+msgstr "Nakatago ang minimap"
#: src/client/minimap.cpp
#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr ""
+msgstr "Minimap sa radar mode, Zoom x%d"
#: src/client/minimap.cpp
#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr ""
+msgstr "Minimap sa surface mode, Zoom x%d"
#: src/client/minimap.cpp
msgid "Minimap in texture mode"
-msgstr ""
+msgstr "Minimap sa texture mode"
#: src/gui/guiChatConsole.cpp
msgid "Failed to open webpage"
-msgstr ""
+msgstr "Bigong mabuksan ang webpage"
#: 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 ""
+msgstr "Binubuksan ang webpage"
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
-msgstr ""
+msgstr "Tumuloy"
#: src/gui/guiKeyChangeMenu.cpp
msgid "\"Aux1\" = climb down"
-msgstr ""
+msgstr "\"Aux1\" = bumaba"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
-msgstr ""
+msgstr "Kusang abante"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
-msgstr ""
+msgstr "Kusang talon"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Aux1"
-msgstr ""
+msgstr "Aux1"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
-msgstr ""
+msgstr "Pabalik"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Block bounds"
-msgstr ""
+msgstr "Mga block bound"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
-msgstr ""
+msgstr "Palitan ang kamera"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
-msgstr ""
+msgstr "Chat"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Command"
-msgstr ""
+msgstr "Utos"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Console"
-msgstr ""
+msgstr "Console"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. range"
-msgstr ""
+msgstr "Dec. range"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
-msgstr ""
+msgstr "Dec. volume"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
-msgstr ""
+msgstr "Dobleng pindutin ang \"tumalon\" para makalipad"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Drop"
-msgstr ""
+msgstr "Ihulog"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Forward"
-msgstr ""
+msgstr "Abante"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. range"
-msgstr ""
+msgstr "Inc. range"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. volume"
-msgstr ""
+msgstr "Inc. volume"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inventory"
-msgstr ""
+msgstr "Inventory"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Jump"
-msgstr ""
+msgstr "Tumalon"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Key already in use"
-msgstr ""
+msgstr "May gamit na ang key"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
-msgstr ""
+msgstr "Lokal na utos"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Mute"
-msgstr ""
+msgstr "I-mute"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Next item"
-msgstr ""
+msgstr "Susunod na item"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Prev. item"
-msgstr ""
+msgstr "Nakaraang item"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Range select"
-msgstr ""
+msgstr "Pagpili sa saklaw"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Screenshot"
-msgstr ""
+msgstr "Mag-screenshot"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Sneak"
-msgstr ""
+msgstr "Magdahan-dahan"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
-msgstr ""
+msgstr "I-toggle ang HUD"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle chat log"
-msgstr ""
+msgstr "I-toggle ang chat log"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
-msgstr ""
+msgstr "I-toggle ang fast"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fly"
-msgstr ""
+msgstr "I-toggle ang fly"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fog"
-msgstr ""
+msgstr "I-toggle ang hamog"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle minimap"
-msgstr ""
+msgstr "I-toggle ang minimap"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
-msgstr ""
+msgstr "I-toggle ang noclip"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle pitchmove"
-msgstr ""
+msgstr "I-toggle ang pitchmove"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
-msgstr ""
+msgstr "pumindot ng key"
#: src/gui/guiPasswordChange.cpp
msgid "Change"
-msgstr ""
-
-#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr ""
+msgstr "Baguhin"
#: src/gui/guiPasswordChange.cpp
msgid "New Password"
-msgstr ""
+msgstr "Bagong Password"
#: src/gui/guiPasswordChange.cpp
msgid "Old Password"
-msgstr ""
+msgstr "Lumang Password"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Di tugma ang mga password!"
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
-msgstr ""
+msgstr "Umalis"
#: src/gui/guiVolumeChange.cpp
msgid "Muted"
-msgstr ""
+msgstr "Naka-mute"
#: 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 ""
+msgstr "Volume ng Tunog: %d%%"
#. ~ 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 "fil"
+
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
msgstr ""
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Mangyaring pumili po ng pangalan!"
+
#: 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 ""
+"(Android) Inaayos ang posisyon ng virtual joystick.\n"
+"Kung nakasara, isesentro ang virtual joystick sa posisyon na unang pinindot."
#: src/settings_translation_file.cpp
msgid ""
@@ -2090,6 +2223,10 @@ msgid ""
"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
+"(Android) Gamitin ang virtual joystick para i-trigger ang button na "
+"\"Aux1\".\n"
+"Kung nakabukas, pipindutin din ng virtual joystick ang button na \"Aux1\" "
+"kapag nasa labas ng pinakabilog."
#: src/settings_translation_file.cpp
msgid ""
@@ -2102,6 +2239,16 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
+"(X,Y,Z) offset ng fractal mula sa sentro ng mundo sa mga unit ng 'scale'.\n"
+"Pwedeng magamit para ilipat ang isang partikular na punto papunta sa (0,0) "
+"para\n"
+"makagawa ng isang maayos na spawn point, o para payagan ang\n"
+"pag-zoom papalapit sa naturang punto sa pamamagitan ng pagtaas sa 'scale'.\n"
+"Ginawa ang default para sa maayos na spawn point para sa\n"
+"mga Mandelbrot set na may mga default na parametro,\n"
+"posibleng kailangang baguhin ito sa ilang mga sitwasyon.\n"
+"Mula -2 hanggang 2 ang tipikal na saklaw. I-multiply sa 'scale' para sa "
+"offset sa mga node."
#: src/settings_translation_file.cpp
msgid ""
@@ -2113,56 +2260,70 @@ 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) scale ng fractal sa mga node.\n"
+"2 hanggang 3 beses na mas malaki ang aktwal na laki ng fractal.\n"
+"Pwede sobrang laki ang mga bilang nito, hindi naman dapat\n"
+"sinlaki ng mundo ang fractal.\n"
+"Palakihin ito para mag-zoom sa mga detalye ng fractal.\n"
+"Para sa isang hugis na inipit taas-baba ang default,\n"
+"na bagay para sa mga isla, itakda ang lahat ng 3 bilang nang magkakapareho "
+"para sa raw na hugis."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of ridged mountains."
msgstr ""
+"2D noise na kumokonttol sa hugis/laki ng mga mala-gulugod na kabundukan."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr ""
+msgstr "2D noise na kumokontrol sa hugis/laki ng mga malalambot na burol."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
-msgstr ""
+msgstr "2D noise na kumokontrol sa hugis/laki ng mga mala-hagdang kabundukan."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
msgstr ""
+"2D noise na kumokontrol sa laki/paglitaw ng mga mala-gulugod na kabundukan."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr ""
+msgstr "2D noise na kumokontrol sa laki/paglitaw ng mga malalambot na burol."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
msgstr ""
+"2D noise na kumokontrol sa laki/paglitaw ng mga mala-hagdang kabundukan."
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
-msgstr ""
+msgstr "2D noise na nagpapakita sa mga lambak-ilog at daluyan."
#: src/settings_translation_file.cpp
msgid "3D clouds"
-msgstr ""
+msgstr "Mga 3D na ulap"
#: src/settings_translation_file.cpp
msgid "3D mode"
-msgstr ""
+msgstr "3D mode"
#: src/settings_translation_file.cpp
msgid "3D mode parallax strength"
-msgstr ""
+msgstr "Tindi ng parallax ng 3D mode"
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
-msgstr ""
+msgstr "3D noise na gumagawa sa mga malalaking kweba."
#: src/settings_translation_file.cpp
msgid ""
"3D noise defining mountain structure and height.\n"
"Also defines structure of floatland mountain terrain."
msgstr ""
+"3D noise na gumagawa sa istraktura at taas ng bundok.\n"
+"Ito rij ang gumagawa sa istraktura ng terrain ng bundok sa mga lumulutang na "
+"lupa."
#: src/settings_translation_file.cpp
msgid ""
@@ -2171,22 +2332,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 noise na gumagawa sa istraktura ng mga lumulutang na lupa.\n"
+"Kung binago sa default, posibleng kailangang baguhin ang noise 'scale' (0.7 "
+"sa default),\n"
+"dahil mas maganda na kalalabasan nito kung ang noise ay may value\n"
+"na nasa pagitan ng -2.0 at 2.0."
#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
+"3D noise na gumagawa sa istraktura ng mga dingding ng bangin sa mga ilog."
#: src/settings_translation_file.cpp
msgid "3D noise defining terrain."
-msgstr ""
+msgstr "3D noise na gumagawa sa terrain."
#: src/settings_translation_file.cpp
msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
msgstr ""
+"3D noise para sa mga overhang ng bundok, dalisdis, atbp. Madalas na maliit "
+"ang mga pagbabago."
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr ""
+msgstr "3D noise na nagdedetermina sa bilang ng mga dungeon kada mapchunk."
#: src/settings_translation_file.cpp
msgid ""
@@ -2201,56 +2370,75 @@ msgid ""
"- pageflip: quadbuffer based 3d.\n"
"Note that the interlaced mode requires shaders to be enabled."
msgstr ""
+"Suporta sa 3D.\n"
+"Kasalukuyang suportado:\n"
+"- wala: walang 3d output.\n"
+"- anaglyph: kulay cyan/magenta color na 3d.\n"
+"- interlaced: linyang odd/even na nakabase sa suporta sa polarisation "
+"screen.\n"
+"- topbottom: hatiin ang screen taas-baba.\n"
+"- sidebyside: hatiin ang screen gilid sa gilid.\n"
+"- crossview: naka-cross eye na 3d\n"
+"- pageflip: nakabase sa quadbuffer na 3d.\n"
+"Tandaan na dapat nakabukas ang mga shader para gumana ang interlaced mode."
+
+#: src/settings_translation_file.cpp
+msgid "3d"
+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 ""
+"Piniling seed ng mapa para sa bagong mapa, ibakante para kahit ano.\n"
+"Io-override kapag gumagawa ng bagong mundo sa main menu."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
msgstr ""
+"Ipapakitang mensahe sa lahat ng mga client sakaling mag-crash ang server."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
msgstr ""
+"Mensaheng ipapakita sa lahat ng mga client kapag nag-shutdown ang server."
#: src/settings_translation_file.cpp
msgid "ABM interval"
-msgstr ""
+msgstr "Pagitan ng ABM"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "Budget sa oras ng ABM"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
-msgstr ""
+msgstr "Pinakalimit ng nakapilang block na lalabas"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
-msgstr ""
+msgstr "Acceleration sa ere"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
-msgstr ""
+msgstr "Acceleration ng gravity, sa node kada segundo kada segundo."
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
-msgstr ""
+msgstr "Mga Modifier sa Aktibong Block"
#: src/settings_translation_file.cpp
msgid "Active block management interval"
-msgstr ""
+msgstr "Pagitan sa management sa aktibong block"
#: src/settings_translation_file.cpp
msgid "Active block range"
-msgstr ""
+msgstr "Saklaw na aktibong block"
#: src/settings_translation_file.cpp
msgid "Active object send range"
-msgstr ""
+msgstr "Saklaw na mapapadala sa aktibong bagay"
#: src/settings_translation_file.cpp
msgid ""
@@ -2258,20 +2446,28 @@ msgid ""
"Leave this blank to start a local server.\n"
"Note that the address field in the main menu overrides this setting."
msgstr ""
+"Address na kokonektahan.\n"
+"Ibakante para magsimula ng lokal na server.\n"
+"Tandaan na ang ino-override ng pagsasaayos na ito ang address field sa main "
+"menu."
#: src/settings_translation_file.cpp
msgid "Adds particles when digging a node."
-msgstr ""
+msgstr "Nagdadagdag ng mga particle habang naghuhukay ng node."
#: src/settings_translation_file.cpp
msgid ""
"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
"screens."
msgstr ""
+"Ayusin ang dpi configuration ayon sa screen mo (non X11/Android lang) hal. "
+"para sa mga 4k screen."
#: src/settings_translation_file.cpp
msgid "Adjust the detected display density, used for scaling UI elements."
msgstr ""
+"Ayusin ang na-detect na display density, ginagamit para sa pag-scale sa mga "
+"UI element."
#: src/settings_translation_file.cpp
#, c-format
@@ -2282,10 +2478,22 @@ msgid ""
"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
"to be sure) creates a solid floatland layer."
msgstr ""
+"Ayusin ang density ng layer ng lumulutang na lupa.\n"
+"Pataasin ang value para pataasin ang density.\n"
+"Pwedeng maging postibo o negatibo.\n"
+"Value = 0.0: 50% ng volume ay lumulutang na lupa.\n"
+"Value = 2.0 (o mas mataas, depende sa 'mgv7_np_floatland', palaging subukan "
+"para makasiguro)\n"
+"gumagawa ng solidong layer ng lumulutang na lupa."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Idagdag ang pangalan ng item"
#: src/settings_translation_file.cpp
msgid "Advanced"
-msgstr ""
+msgstr "Karagdagan"
#: src/settings_translation_file.cpp
msgid ""
@@ -2295,60 +2503,70 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
+"Binabago ang kurba ng liwanag sa pamamagitan ng paglapat ng 'pagtama sa "
+"gamma' dito.\n"
+"Mas mataas ang value, mas maliwanag ang mga katamtaman at mabababang lebel "
+"ng liwanag.\n"
+"Kapag 1.0 ang value, walang mababago sa kurba ng liwanag.\n"
+"Malaki ang epekto nito sa liwanag ng araw at artipisyal,\n"
+"at maliit lang ang epekto nito sa natural na liwanag sa gabi."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
-msgstr ""
+#, fuzzy
+msgid "Always fly fast"
+msgstr "Palaging lumipad at mabilis"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
-msgstr ""
+msgstr "Ambient occlusion gamma"
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr ""
+msgstr "Dami ng mga mensaheng pwede maipadala ng isang player kada 10 segundo."
#: src/settings_translation_file.cpp
msgid "Amplifies the valleys."
-msgstr ""
+msgstr "Ina-amplify ang mga lambak."
#: src/settings_translation_file.cpp
msgid "Anisotropic filtering"
-msgstr ""
+msgstr "Anisotropic filtering"
#: src/settings_translation_file.cpp
msgid "Announce server"
-msgstr ""
+msgstr "Ianunsyo ang server"
#: src/settings_translation_file.cpp
msgid "Announce to this serverlist."
-msgstr ""
+msgstr "Ianunsyo sa serverlist na ito."
#: src/settings_translation_file.cpp
msgid "Append item name"
-msgstr ""
+msgstr "Idagdag ang pangalan ng item"
#: src/settings_translation_file.cpp
msgid "Append item name to tooltip."
-msgstr ""
+msgstr "Idagdag ang pangalan ng item sa tooltip."
#: src/settings_translation_file.cpp
msgid "Apple trees noise"
-msgstr ""
+msgstr "Noise ng mga puno ng mansanas"
#: src/settings_translation_file.cpp
msgid "Arm inertia"
-msgstr ""
+msgstr "Inertia ng braso"
#: src/settings_translation_file.cpp
msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
msgstr ""
+"Inertia ng braso, nagbibigay ng mas makatotohanang paggalaw sa\n"
+"braso kapag gumagalaw ang kamera."
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
-msgstr ""
+msgstr "Tanunging kung kokonekta uli matapos mag-crash"
#: src/settings_translation_file.cpp
msgid ""
@@ -2364,106 +2582,125 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
+"Sa layong ito, agresibong iooptimisa ng server ang mga\n"
+"block na ipapadala sa client.\n"
+"Posibleng humusay ang performance kapag mababa ang value, pero may mga "
+"makikita lang\n"
+"mga glitch sa pag-render (may mga block na hindi mare-render sa\n"
+"ilalim ng tubig at kweba, paminsan-minsan sa lupa rin).\n"
+"Kung lagpas ang value sa max_block_send_distance,\n"
+"isasara ang pag-ooptimisa.\n"
+"Tinukoy sa mga mapblock (16 na node)."
#: src/settings_translation_file.cpp
-msgid "Automatic forward key"
+msgid "Audio"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Automatic forward key"
+msgstr "Key sa kusang pag-abante"
+
+#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
-msgstr ""
+msgstr "Kusang tumalon sa mga harang na isang node."
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
-msgstr ""
+msgstr "Kusang mag-ulat sa serverlist."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
-msgstr ""
+msgstr "Kusang i-save ang laki ng screen"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
-msgstr ""
+msgstr "Kusang mag-scale"
#: src/settings_translation_file.cpp
msgid "Aux1 key"
-msgstr ""
+msgstr "Aux1 key"
#: src/settings_translation_file.cpp
msgid "Aux1 key for climbing/descending"
-msgstr ""
+msgstr "Aux1 key para sa pag-akyat/pagbaba"
#: src/settings_translation_file.cpp
msgid "Backward key"
-msgstr ""
+msgstr "Key sa pag-atras"
#: src/settings_translation_file.cpp
msgid "Base ground level"
-msgstr ""
+msgstr "Basehang lebel ng lupa"
#: src/settings_translation_file.cpp
msgid "Base terrain height."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
+msgstr "Basehang taas ng terrain."
#: src/settings_translation_file.cpp
msgid "Basic privileges"
-msgstr ""
+msgstr "Mga pribilehiyong basic"
#: src/settings_translation_file.cpp
msgid "Beach noise"
-msgstr ""
+msgstr "Noise ng dalampasigan"
#: src/settings_translation_file.cpp
msgid "Beach noise threshold"
-msgstr ""
+msgstr "Threshold ng noise ng dalampasigan"
#: src/settings_translation_file.cpp
msgid "Bilinear filtering"
-msgstr ""
+msgstr "Bilinear filtering"
#: src/settings_translation_file.cpp
msgid "Bind address"
-msgstr ""
+msgstr "Bind address"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
-msgstr ""
+#, fuzzy
+msgid "Biome API noise parameters"
+msgstr "Mga parametro sa noise ng temperatura at halumigmig sa Biome API"
#: src/settings_translation_file.cpp
msgid "Biome noise"
-msgstr ""
+msgstr "Noise ng biome"
#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
+msgstr "Layo ng pag-optimisa sa pagpadala ng block"
+
+#: src/settings_translation_file.cpp
+msgid "Bobbing"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
-msgstr ""
+msgstr "Path ng font na bold at italic"
#: src/settings_translation_file.cpp
msgid "Bold and italic monospace font path"
-msgstr ""
+msgstr "Path ng monospace font na bold at italic"
#: src/settings_translation_file.cpp
msgid "Bold font path"
-msgstr ""
+msgstr "Path ng font na bold"
#: src/settings_translation_file.cpp
msgid "Bold monospace font path"
-msgstr ""
+msgstr "Path ng monospace font na bold"
#: src/settings_translation_file.cpp
msgid "Build inside player"
-msgstr ""
+msgstr "Build sa player"
#: src/settings_translation_file.cpp
msgid "Builtin"
-msgstr ""
+msgstr "Builtin"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Palitan ang kamera"
#: src/settings_translation_file.cpp
msgid ""
@@ -2472,182 +2709,198 @@ msgid ""
"Increasing can reduce artifacting on weaker GPUs.\n"
"0.1 = Default, 0.25 = Good value for weaker tablets."
msgstr ""
+"Layo sa node ng 'near clipping plane' ng kamera, mula 0 hanggang 0.25\n"
+"Gagana lang sa mga GLES platform. Hindi kailangang baguhin ito ng karamihan "
+"sa mga user.\n"
+"Posibleng mabawasan ang pag-artifact sa mga mahihinang GPU kapag tinaasan "
+"ito.\n"
+"0.1 = Default, 0.25 = Magandang value para sa mga mahihinang tablet."
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
-msgstr ""
+msgstr "Pag-smooth sa kamera"
#: src/settings_translation_file.cpp
msgid "Camera smoothing in cinematic mode"
-msgstr ""
+msgstr "Pag-smooth sa kamera sa cinematic mode"
#: src/settings_translation_file.cpp
msgid "Camera update toggle key"
-msgstr ""
+msgstr "Toggle key sa pag-update sa kamera"
#: src/settings_translation_file.cpp
msgid "Cave noise"
-msgstr ""
+msgstr "Noise ng kweba"
#: src/settings_translation_file.cpp
msgid "Cave noise #1"
-msgstr ""
+msgstr "Noise ng kweba #1"
#: src/settings_translation_file.cpp
msgid "Cave noise #2"
-msgstr ""
+msgstr "Noise ng kweba #2"
#: src/settings_translation_file.cpp
msgid "Cave width"
-msgstr ""
+msgstr "Lapad ng kweba"
#: src/settings_translation_file.cpp
msgid "Cave1 noise"
-msgstr ""
+msgstr "Cave1 noise"
#: src/settings_translation_file.cpp
msgid "Cave2 noise"
-msgstr ""
+msgstr "Cave2 noise"
#: src/settings_translation_file.cpp
msgid "Cavern limit"
-msgstr ""
+msgstr "Limit ng kweba"
#: src/settings_translation_file.cpp
msgid "Cavern noise"
-msgstr ""
+msgstr "Noise ng kweba"
#: src/settings_translation_file.cpp
msgid "Cavern taper"
-msgstr ""
+msgstr "Taper ng kweba"
#: src/settings_translation_file.cpp
msgid "Cavern threshold"
-msgstr ""
+msgstr "Threshold ng kweba"
#: src/settings_translation_file.cpp
msgid "Cavern upper limit"
-msgstr ""
+msgstr "Mataas na limit ng kweba"
#: 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 ""
+"Gitna ng saklaw ng boost sa kurba ng liwanag.\n"
+"Kung saan 0.0 ang pinakamababang lebel ng liwanag, 1.0 naman ang "
+"pinakamataas."
#: src/settings_translation_file.cpp
msgid "Chat command time message threshold"
-msgstr ""
+msgstr "Threshold sa mensahe sa oras ng utos sa chat"
#: src/settings_translation_file.cpp
msgid "Chat commands"
-msgstr ""
+msgstr "Mga utos sa chat"
#: src/settings_translation_file.cpp
msgid "Chat font size"
-msgstr ""
+msgstr "Laki ng font ng chat"
#: src/settings_translation_file.cpp
msgid "Chat key"
-msgstr ""
+msgstr "Key ng chat"
#: src/settings_translation_file.cpp
msgid "Chat log level"
-msgstr ""
+msgstr "Lebel ng pag-log sa chat"
#: src/settings_translation_file.cpp
msgid "Chat message count limit"
-msgstr ""
+msgstr "Limit sa bilang ng mga mensahe sa chat"
#: src/settings_translation_file.cpp
msgid "Chat message format"
-msgstr ""
+msgstr "Format ng mensahe sa chat"
#: src/settings_translation_file.cpp
msgid "Chat message kick threshold"
-msgstr ""
+msgstr "Threshold sa pagsipa sa mensahe sa chat"
#: src/settings_translation_file.cpp
msgid "Chat message max length"
-msgstr ""
+msgstr "Max na haba ng mensahe sa chat"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
-msgstr ""
+msgstr "Toggle key sa chat"
#: src/settings_translation_file.cpp
msgid "Chat weblinks"
-msgstr ""
+msgstr "Mga weblink sa chat"
#: src/settings_translation_file.cpp
msgid "Chunk size"
-msgstr ""
+msgstr "Laki ng chunk"
#: src/settings_translation_file.cpp
msgid "Cinematic mode"
-msgstr ""
+msgstr "Cinematic mode"
#: src/settings_translation_file.cpp
msgid "Cinematic mode key"
-msgstr ""
+msgstr "Key sa cinematic mode"
#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
-msgstr ""
+msgstr "Malilinis na transparent na texture"
#: src/settings_translation_file.cpp
msgid ""
"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
"output."
msgstr ""
+"Nakabukas ang napipindot na mga weblink (gitnang pindot o Ctrl+kaliwang "
+"pindot) sa chat console output."
#: src/settings_translation_file.cpp
msgid "Client"
-msgstr ""
+msgstr "Client"
#: src/settings_translation_file.cpp
msgid "Client and Server"
-msgstr ""
+msgstr "Client at Server"
#: src/settings_translation_file.cpp
msgid "Client modding"
-msgstr ""
+msgstr "Pag-mod ng client"
#: src/settings_translation_file.cpp
msgid "Client side modding restrictions"
-msgstr ""
+msgstr "Mga restriksyon sa pag-mod ng client side"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
-msgstr ""
+msgstr "Restriksyon sa saklaw ng pagtingin sa node ng client side"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Pag-mod ng client"
#: src/settings_translation_file.cpp
msgid "Climbing speed"
-msgstr ""
+msgstr "Bilis ng pag-akyat"
#: src/settings_translation_file.cpp
msgid "Cloud radius"
-msgstr ""
+msgstr "Radius ng ulap"
#: src/settings_translation_file.cpp
msgid "Clouds"
-msgstr ""
+msgstr "Mga ulap"
#: src/settings_translation_file.cpp
msgid "Clouds are a client side effect."
-msgstr ""
+msgstr "Epekto sa client side ang mga ulap."
#: src/settings_translation_file.cpp
msgid "Clouds in menu"
-msgstr ""
+msgstr "Mga ulap sa menu"
#: src/settings_translation_file.cpp
msgid "Colored fog"
-msgstr ""
+msgstr "May kulay na hamog"
#: src/settings_translation_file.cpp
msgid "Colored shadows"
-msgstr ""
+msgstr "Makukulay na anino"
#: src/settings_translation_file.cpp
msgid ""
@@ -2717,6 +2970,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2750,7 +3007,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2817,11 +3076,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2964,6 +3223,11 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Mga dekorasyon"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -2984,6 +3248,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3053,6 +3323,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3069,19 +3343,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3155,6 +3423,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3173,6 +3445,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3250,8 +3526,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr ""
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Antialiasing:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3318,6 +3595,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3466,6 +3747,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Mga Laro"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3493,6 +3787,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3509,10 +3811,15 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "Ipinapakita ang HUD"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr ""
@@ -3749,11 +4056,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3814,6 +4128,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3835,7 +4155,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3875,10 +4197,6 @@ 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 ""
@@ -3929,15 +4247,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4558,6 +4872,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4613,7 +4931,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4623,15 +4941,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4643,7 +4964,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4671,6 +4993,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Malinis na Liwanag"
+
+#: 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"
@@ -5055,10 +5382,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5107,6 +5430,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5193,16 +5528,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5215,6 +5550,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Pag-highlight sa Node"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5252,10 +5592,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5349,10 +5685,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5399,10 +5731,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5571,6 +5899,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Screen:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5598,6 +5931,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Mag-screenshot"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5610,10 +5948,6 @@ 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 ""
@@ -5653,8 +5987,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr ""
+#, fuzzy
+msgid "Server"
+msgstr "Mag-host ng Server"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "- Pangalan ng Server: "
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Paglalarawan sa Server"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5681,10 +6026,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Port ng Server"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5695,12 +6049,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5708,7 +6064,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5784,7 +6140,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5984,6 +6340,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Pagsasaayos"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6186,7 +6547,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6210,10 +6571,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6304,6 +6673,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6537,6 +6910,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6626,6 +7008,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6636,3 +7022,43 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
+
+#~ msgid "Basic"
+#~ msgstr "Basic"
+
+#~ msgid "Connect"
+#~ msgstr "Kumonekta"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Mag-download ng laro, tulad ng Minetest Game, mula sa minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Mag-download ng isa mula sa minetest.net"
+
+#~ msgid "Enter "
+#~ msgstr "Ipasok "
+
+#~ msgid "Game"
+#~ msgstr "Laro"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Mga keybinding. (Kung pumalpak ang menu na ito, tanggalin ang laman ng "
+#~ "minetest.conf)"
+
+#, 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 ""
+#~ "Sasali ka sa server na ito na may pangalang \"%s\" sa unang pagkakataon.\n"
+#~ "Kung tutuloy ka, may magagawang bagong account sa server na ito gamit ang "
+#~ "iyong mga credential.\n"
+#~ "Mangyaring i-type muli ang password mo at pindutin ang 'Magparehistro at "
+#~ "Sumali' para kumpirmahin ang paggawa sa account, o pindutin ang "
+#~ "'Ikansela' para pigilan ito."
diff --git a/po/fr/minetest.po b/po/fr/minetest.po
index 551052004..815a0a4c2 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: 2022-01-25 23:19+0100\n"
-"PO-Revision-Date: 2022-01-29 00:17+0000\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-24 18:04+0000\n"
"Last-Translator: waxtatect <piero@live.ie>\n"
"Language-Team: French <https://hosted.weblate.org/projects/minetest/minetest/"
"fr/>\n"
@@ -12,7 +12,7 @@ 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.11-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -114,6 +114,34 @@ msgid "The server has requested a reconnect:"
msgstr "Le serveur souhaite rétablir une connexion :"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr "Une nouvelle $1 version est disponible"
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr "Mods client"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+"Version installée : $1\n"
+"Nouvelle version : $2\n"
+"Visiter $3 pour savoir comment obtenir la nouvelle version et rester à jour "
+"des fonctionnalités et des corrections de bogues."
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr "Plus tard"
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr "Jamais"
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "La version du protocole ne correspond pas. "
@@ -126,6 +154,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Le serveur supporte les versions de protocole entre $1 et $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr "Visiter le site web"
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Nous supportons seulement la version du protocole $1."
@@ -133,14 +165,21 @@ msgstr "Nous supportons seulement la version du protocole $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Nous supportons seulement les versions du protocole entre $1 et $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr "(Activé, a une erreur)"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+msgstr "(Insatisfait)"
+
#: 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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Annuler"
@@ -280,7 +319,6 @@ msgid "Failed to download $1"
msgstr "Échec du téléchargement de $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Jeux"
@@ -301,7 +339,6 @@ 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"
@@ -394,12 +431,8 @@ msgid "Decorations"
msgstr "Décorations"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from 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écharger en un depuis minetest.net"
+msgid "Development Test is meant for developers."
+msgstr "« Development Test » est destiné aux développeurs."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -417,10 +450,6 @@ msgstr "Masses de terrains flottants dans le ciel"
msgid "Floatlands (experimental)"
msgstr "Terrains flottants (expérimental)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-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 souterrains"
@@ -438,6 +467,14 @@ msgid "Increases humidity around rivers"
msgstr "Augmente l'humidité autour des rivières"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr "Installer un jeu"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr "Installer un autre jeu"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Lacs"
@@ -542,10 +579,6 @@ msgid "Very large caverns deep in the underground"
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."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Nom du monde"
@@ -575,6 +608,36 @@ msgstr "Gestionnaire de mods : chemin invalide de « $1 »"
msgid "Delete World \"$1\"?"
msgstr "Supprimer le monde « $1 » ?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Confirmer le mot de passe"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr "Rejoindre $1"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr "Nom manquant"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Nom"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Mot de passe"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr "Les mots de passe ne correspondent pas"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr "S'inscrire"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Accepter"
@@ -607,6 +670,14 @@ msgstr "< Revenir aux paramètres"
msgid "Browse"
msgstr "Parcourir"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr "Contenu : Jeux"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr "Contenu : Mods"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Désactivé"
@@ -663,7 +734,7 @@ msgstr "Choisir un répertoire"
msgid "Select file"
msgstr "Choisir un fichier"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Montrer les noms techniques"
@@ -815,6 +886,10 @@ msgstr "Anciens contributeurs"
msgid "Previous Core Developers"
msgstr "Anciens développeurs principaux"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr "Partager le journal de débogage"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Parcourir le contenu en ligne"
@@ -883,10 +958,6 @@ msgstr "Héberger le serveur"
msgid "Install games from ContentDB"
msgstr "Installer à partir de ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Nom"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Nouveau"
@@ -895,10 +966,6 @@ msgstr "Nouveau"
msgid "No world created or selected!"
msgstr "Aucun monde créé ou sélectionné !"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Mot de passe"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Jouer"
@@ -932,10 +999,6 @@ msgid "Clear"
msgstr "Effacer"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Rejoindre"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Mode créatif"
@@ -945,10 +1008,6 @@ 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 "Favorites"
msgstr "Favoris"
@@ -961,6 +1020,10 @@ msgid "Join Game"
msgstr "Rejoindre une partie"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr "Connexion"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -973,10 +1036,18 @@ msgid "Refresh"
msgstr "Actualiser"
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr "Supprimer le favori"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Description du serveur"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr "(support du jeu requis)"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2×"
@@ -998,7 +1069,7 @@ msgstr "Tous les paramètres"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
-msgstr "Anti-crénelage :"
+msgstr "Anticrénelage :"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
@@ -1021,8 +1092,8 @@ msgid "Dynamic shadows"
msgstr "Ombres dynamiques"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr "Ombres dynamiques : "
+msgid "Dynamic shadows:"
+msgstr "Ombres dynamiques :"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1117,15 +1188,15 @@ msgid "Tone Mapping"
msgstr "Mappage tonal"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr "Sensibilité du toucher (px)"
+msgid "Touch threshold (px):"
+msgstr "Sensibilité tactile (px) :"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
msgstr "Filtrage trilinéaire"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr "Très élevées"
#: builtin/mainmenu/tab_settings.lua
@@ -1144,6 +1215,10 @@ msgstr "Liquides ondulants"
msgid "Waving Plants"
msgstr "Plantes ondulantes"
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr "Connexion interrompue (erreur de protocole ?)."
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Connexion perdue."
@@ -1279,10 +1354,9 @@ 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)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
-"Impossible d'afficher les limites des blocs (nécessite le privilège "
-"« basic_debug »)"
+"Impossible d'afficher les limites des blocs (désactivé par un jeu ou un mod)"
#: src/client/game.cpp
msgid "Change Password"
@@ -1408,6 +1482,11 @@ msgid "Enabled unlimited viewing range"
msgstr "La limite de vue a été désactivée"
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr "Erreur de création du client : %s"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Menu principal"
@@ -1417,15 +1496,15 @@ msgstr "Quitter le jeu"
#: src/client/game.cpp
msgid "Fast mode disabled"
-msgstr "Vitesse en mode rapide désactivée"
+msgstr "Mode rapide désactivé"
#: src/client/game.cpp
msgid "Fast mode enabled"
-msgstr "Vitesse en mode rapide activée"
+msgstr "Mode rapide activé"
#: 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 "Mode rapide activé (note : pas de privilège « fast »)"
#: src/client/game.cpp
msgid "Fly mode disabled"
@@ -1509,11 +1588,11 @@ msgstr "Activé"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
-msgstr "Mode de mouvement à direction libre désactivé"
+msgstr "Mode mouvement de tangage désactivé"
#: src/client/game.cpp
msgid "Pitch move mode enabled"
-msgstr "Mode de mouvement à direction libre activé"
+msgstr "Mode mouvement de tangage activé"
#: src/client/game.cpp
msgid "Profiler graph shown"
@@ -1912,31 +1991,6 @@ msgstr "Échec de l'ouverture de la page Web"
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 !"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "S'enregistrer et rejoindre"
-
-#: 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 ""
-"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 cliquer sur "
-"« Annuler »."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Procéder"
@@ -1969,7 +2023,7 @@ msgstr "Limites des blocs"
msgid "Change camera"
msgstr "Changer la caméra"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Tchat"
@@ -2022,7 +2076,7 @@ msgid "Key already in use"
msgstr "Touche déjà utilisée"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr "Raccourcis clavier"
#: src/gui/guiKeyChangeMenu.cpp
@@ -2083,7 +2137,7 @@ msgstr "Mode sans collision"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle pitchmove"
-msgstr "Mouvement vertical"
+msgstr "Mouvement de tang."
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
@@ -2094,10 +2148,6 @@ msgid "Change"
msgstr "Changer"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Confirmer le mot de passe"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nouveau mot de passe"
@@ -2105,6 +2155,10 @@ msgstr "Nouveau mot de passe"
msgid "Old Password"
msgstr "Ancien mot de passe"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Les mots de passe ne correspondent pas !"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Quitter"
@@ -2118,12 +2172,6 @@ msgstr "Muet"
msgid "Sound Volume: %d%%"
msgstr "Volume du son : %d %%"
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Entrer "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2131,6 +2179,17 @@ msgstr "Entrer "
msgid "LANG_CODE"
msgstr "fr"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+"Le nom n'est pas enregistré. Pour créer un compte sur ce serveur, cliquer "
+"sur « S'inscrire »."
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr "Le nom est pris. Veuillez choisir un autre nom."
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2228,7 +2287,7 @@ msgstr "Mode écran 3D"
#: src/settings_translation_file.cpp
msgid "3D mode parallax strength"
-msgstr "Paralaxe en mode 3D"
+msgstr "Intensité parallaxe en mode 3D"
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
@@ -2297,6 +2356,10 @@ msgstr ""
"Noter que le mode entrelacé nécessite que les shaders soient activés."
#: src/settings_translation_file.cpp
+msgid "3d"
+msgstr "3D"
+
+#: 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."
@@ -2307,13 +2370,11 @@ 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 plante."
+msgstr "Un message envoyé à tous les joueurs lorsque le serveur plante."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
-msgstr ""
-"Un message qui sera affiché à tous les joueurs quand le serveur s’interrompt."
+msgstr "Un message envoyé à tous les joueurs lorsque le serveur s’arrête."
#: src/settings_translation_file.cpp
msgid "ABM interval"
@@ -2397,6 +2458,10 @@ msgstr ""
"vérifier pour être sûr) créée une couche de terrain flottant solide."
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr "Nom de l’administrateur"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avancé"
@@ -2416,8 +2481,8 @@ msgstr ""
"artificielle, elle a très peu d'effet sur la lumière naturelle nocturne."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
-msgstr "Toujours voler et être rapide"
+msgid "Always fly fast"
+msgstr "Toujours voler vite"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
@@ -2496,6 +2561,10 @@ msgstr ""
"Établie en blocs de carte (16 nœuds)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr "Audio"
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Touche marche automatique"
@@ -2536,10 +2605,6 @@ msgid "Base terrain height."
msgstr "Hauteur du terrain de base."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Principal"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Privilèges de base"
@@ -2560,8 +2625,8 @@ msgid "Bind address"
msgstr "Adresse à assigner"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
-msgstr "Paramètres de bruit de température et d'humidité de l'API des biomes"
+msgid "Biome API noise parameters"
+msgstr "Paramètres de bruit de l'API des biomes"
#: src/settings_translation_file.cpp
msgid "Biome noise"
@@ -2572,6 +2637,10 @@ msgid "Block send optimize distance"
msgstr "Distance d'optimisation d'envoi des blocs"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr "Balancement"
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Chemin de la police en gras et en italique"
@@ -2596,6 +2665,10 @@ msgid "Builtin"
msgstr "Intégré"
#: src/settings_translation_file.cpp
+msgid "Camera"
+msgstr "Caméra"
+
+#: 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"
@@ -2763,6 +2836,10 @@ msgid "Client side node lookup range restriction"
msgstr "Restriction de distance de recherche des noeuds côté client"
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr "Modding côté client"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Vitesse d'escalade du joueur"
@@ -2805,7 +2882,7 @@ msgstr ""
"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, consulter la liste "
-"complète à l'adresse https://content.minetest.net/help/content_flags/"
+"complète à l'adresse https://content.minetest.net/help/content_flags/."
#: src/settings_translation_file.cpp
msgid ""
@@ -2824,7 +2901,7 @@ msgid ""
msgstr ""
"Liste séparée par des virgules des mods de confiance qui sont autorisés à "
"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())."
+"des mods est activée (via « request_insecure_environment() »)."
#: src/settings_translation_file.cpp
msgid "Command key"
@@ -2881,6 +2958,10 @@ msgid "Console height"
msgstr "Hauteur de la console"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr "Dépôt de contenu"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "Drapeaux ContentDB en liste noire"
@@ -2921,8 +3002,12 @@ msgstr ""
"quoi éternellement."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Contrôle la vitesse de descente dans un liquide."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
+"Contrôle la vitesse d'immersion dans un liquide lorsque inactif. Des valeurs "
+"négatives feront remonter."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2961,7 +3046,7 @@ msgid ""
"This also applies to the object crosshair."
msgstr ""
"Opacité du réticule (entre 0 et 255).\n"
-"Cela contrôle également la couleur du réticule de l'objet."
+"Ceci s'applique également au réticule de l'objet."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2973,7 +3058,7 @@ msgid ""
"Also controls the object crosshair color"
msgstr ""
"Couleur du réticule (R,V,B).\n"
-"Contrôle également la couleur du réticule de l'objet"
+"Contrôle également la couleur du réticule de l'objet."
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2989,19 +3074,19 @@ msgstr "Touche infos de débogage"
#: src/settings_translation_file.cpp
msgid "Debug log file size threshold"
-msgstr "Seuil de la taille du fichier de journal"
+msgstr "Seuil de la taille du fichier journal de débogage"
#: src/settings_translation_file.cpp
msgid "Debug log level"
msgstr "Niveau du journal de débogage"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Touche réduire le volume"
+msgid "Debugging"
+msgstr "Débogage"
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Réduire ceci pour augmenter la résistance liquide au mouvement."
+msgid "Dec. volume key"
+msgstr "Touche réduire le volume"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3045,7 +3130,7 @@ msgid ""
"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
"but also uses more resources."
msgstr ""
-"Défini la qualité du filtrage des ombres. Cela simule l'effet d'ombres "
+"Définit 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."
@@ -3161,6 +3246,10 @@ msgid "Desynchronize block animation"
msgstr "Désynchroniser les animations de blocs"
#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr "Options de développeur"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Touche creuser"
@@ -3181,6 +3270,16 @@ msgid "Display Density Scaling Factor"
msgstr "Facteur d'échelle de la densité d'affichage"
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+"Distance en nœuds à laquelle le tri de profondeur de la transparence est "
+"activé.\n"
+"Utiliser cette option pour limiter l'impact sur les performances du tri de "
+"profondeur de la transparence."
+
+#: 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."
@@ -3253,13 +3352,17 @@ msgstr "Activer la console"
#: src/settings_translation_file.cpp
msgid "Enable creative mode for all players"
-msgstr "Activer le mode créatif pour tous les joueurs"
+msgstr "Activer le mode créatif pour tous les joueurs."
#: src/settings_translation_file.cpp
msgid "Enable joysticks"
msgstr "Activer les manettes"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr "Activer les manettes. Nécessite un redémarrage pour prendre effet."
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Activer le support des canaux de mods."
@@ -3277,24 +3380,16 @@ msgstr ""
"Active l'entrée aléatoire du joueur (seulement utilisé pour des tests)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-msgstr "Activer la confirmation d'enregistrement"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
-msgstr ""
-"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
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
msgstr ""
"Active l'éclairage doux avec une occlusion ambiante simple.\n"
-"Désactiver pour davantage de performances."
+"Désactiver pour davantage de performances ou pour un visuel différent."
+
+#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+msgstr "Active la séparation de connexion / s'inscrire"
#: src/settings_translation_file.cpp
msgid ""
@@ -3334,8 +3429,9 @@ 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 ""
-"Facteur de mouvement de bras.\n"
-"Par exemple : 0 = pas de mouvement, 1 = normal, 2 = double."
+"Active le balancement de la vue et la quantité de balancement de la vue.\n"
+"Par exemple : 0 pour aucun balancement de la vue, 1 pour normal, 2 pour "
+"double."
#: src/settings_translation_file.cpp
msgid ""
@@ -3394,6 +3490,10 @@ msgstr ""
"pas d'impact sur la jouabilité du jeu."
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr "Profileur de moteur"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Intervalle d'impression des données du moteur de profilage"
@@ -3420,6 +3520,10 @@ msgstr ""
"flottant."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr "FPS"
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "FPS lorsqu’il n’est pas sélectionné ou mis en pause"
@@ -3433,7 +3537,7 @@ msgstr "Facteur de bruit"
#: src/settings_translation_file.cpp
msgid "Fall bobbing factor"
-msgstr "Intensité du mouvement de tête en tombant"
+msgstr "Facteur de balancement de chute"
#: src/settings_translation_file.cpp
msgid "Fallback font path"
@@ -3507,8 +3611,8 @@ msgstr ""
"automatiquement activé si le mip-mapping est activé."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtrage"
+msgid "Filtering and Antialiasing"
+msgstr "Filtrage et anticrénelage"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3577,6 +3681,10 @@ msgid "Fog toggle key"
msgstr "Touche brouillard"
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr "Police"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Police en gras par défaut"
@@ -3697,7 +3805,8 @@ msgstr "Type fractal"
#: src/settings_translation_file.cpp
msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr ""
-"Fraction de la distance de vue à partir de laquelle le brouillard est affiché"
+"Fraction de la distance de vue à partir de laquelle le brouillard commence à "
+"être rendu."
#: src/settings_translation_file.cpp
msgid ""
@@ -3753,6 +3862,18 @@ msgid "GUI scaling filter txr2img"
msgstr "Filtrage de mise à l'échelle txr2img du GUI"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr "GUIs"
+
+#: src/settings_translation_file.cpp
+msgid "Gamepads"
+msgstr "Manettes de jeu"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "Général"
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Rappels globaux"
@@ -3788,6 +3909,14 @@ msgid "Graphics"
msgstr "Graphiques"
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr "Effets graphiques"
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr "Graphiques et audio"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Gravité"
@@ -3804,8 +3933,12 @@ msgid "HTTP mods"
msgstr "Mods HTTP"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "Facteur de mise à l'échelle de l'interface"
+msgid "HUD"
+msgstr "HUD"
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
+msgstr "Taille du HUD"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -3819,9 +3952,8 @@ msgid ""
"- 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"
-"– journal : imite et enregistre la trace des appels obsolètes (par défaut en "
-"mode debug).\n"
+"– aucun : n'enregistre pas les appels obsolètes.\n"
+"– journal : imite et enregistre la trace des appels obsolètes (par défaut).\n"
"– erreur : s'interrompt lors d'un appel obsolète (recommandé pour les "
"développeurs de mods)."
@@ -4068,14 +4200,23 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"Combien de temps le serveur attendra avant de décharger les blocs de carte "
-"inutilisés.\n"
+"inutilisés, établi en secondes.\n"
"Une valeur plus élevée est plus fluide, mais utilise plus de RAM."
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+"Ralentissement lors du déplacement dans un liquide.\n"
+"Réduire ceci pour augmenter la résistance liquide au mouvement."
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "Quelle largeur doivent avoir les rivières."
@@ -4124,11 +4265,11 @@ msgid ""
"invisible\n"
"so that the utility of noclip mode is reduced."
msgstr ""
-"Si activé, le serveur effectuera la détermination des blocs de la carte "
+"Si activé, le serveur effectuera la détermination des blocs de 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."
+"Le client ne recevra plus la plupart des blocs invisibles, de sorte que "
+"l'utilité du mode sans collision est réduite."
#: src/settings_translation_file.cpp
msgid ""
@@ -4151,6 +4292,16 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Si activé, l'enregistrement du compte est séparé de la connexion dans "
+"l'interface utilisateur.\n"
+"Si désactivé, les nouveaux comptes seront enregistrés automatiquement lors "
+"de la connexion."
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -4175,14 +4326,16 @@ msgid ""
"If enabled, makes move directions relative to the player's pitch when flying "
"or swimming."
msgstr ""
-"Si activé en même temps que le mode de vol, la direction du vol dépendra de "
-"la rotation verticle (lacet) du joueur."
+"Si activé, rend les directions de déplacement relatives à l'assiette du "
+"joueur lorsqu'il vole ou nage."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
-"Si activé, les nouveaux joueurs ne pourront pas se connecter avec un mot de "
-"passe vide."
+"Si activé, les joueurs ne peuvent pas se connecter sans un mot de passe ou "
+"de le remplacer par un mot de passe vide."
#: src/settings_translation_file.cpp
msgid ""
@@ -4222,7 +4375,7 @@ msgstr ""
"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é."
+"« debug.txt » 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."
@@ -4233,10 +4386,6 @@ msgid "Ignore world errors"
msgstr "Ignorer les erreurs du monde"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "Dans le jeu"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
"Opacité de l'arrière-plan de la console de tchat dans le jeu (entre 0 et "
@@ -4266,7 +4415,7 @@ msgid ""
msgstr ""
"Instrument d'intégration.\n"
"Ceci est habituellement nécessaire pour les contributeurs d'intégration au "
-"noyau"
+"noyau."
#: src/settings_translation_file.cpp
msgid "Instrument chat commands on registration."
@@ -4299,18 +4448,14 @@ msgid "Instrument the methods of entities on registration."
msgstr "Instrumentalise les systèmes d'entités lors de l'enregistrement."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-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, établi en "
"secondes."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
-msgstr "Intervalle d'envoi de l'heure aux clients."
+msgid "Interval of sending time of day to clients, stated in seconds."
+msgstr "Intervalle d'envoi de l'heure aux clients, établi en secondes."
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
@@ -4367,7 +4512,7 @@ msgstr "Intervalle de répétition des boutons de la manette"
#: src/settings_translation_file.cpp
msgid "Joystick dead zone"
-msgstr "Zone morte de la manette"
+msgstr "Zone morte de la manette."
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -4375,7 +4520,7 @@ msgstr "Sensibilité tronconique de la manette"
#: src/settings_translation_file.cpp
msgid "Joystick type"
-msgstr "Type de manette"
+msgstr "Type de manette."
#: src/settings_translation_file.cpp
msgid ""
@@ -4538,7 +4683,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour déplacer le joueurs en arrière.\n"
+"Touche pour déplacer le joueur en arrière.\n"
"Désactive également l’avance automatique, lorsqu’elle est active.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4549,7 +4694,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour avancer.\n"
+"Touche pour déplacer le joueur en avant.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4559,7 +4704,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour se déplacer à gauche.\n"
+"Touche pour déplacer le joueur à gauche.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4569,7 +4714,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour se déplacer à droite.\n"
+"Touche pour déplacer le joueur à droite.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5063,7 +5208,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour passer en mode sans-collision.\n"
+"Touche pour passer en mode sans collision.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5073,7 +5218,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour passer en mode de direction libre.\n"
+"Touche pour passer en mode mouvement de tangage.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5169,6 +5314,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr "Clavier et souris"
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
"Expulser les joueurs qui ont envoyé plus de X messages sur 10 secondes."
@@ -5230,8 +5379,10 @@ msgstr "Touche gauche"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
-msgstr "Temps d'intervalle entre la mise à jour des objets sur le réseau."
+"network, stated in seconds."
+msgstr ""
+"Durée d'intervalle serveur et intervalle auquel les objets sont généralement "
+"mis à jour sur le réseau, établie en secondes."
#: src/settings_translation_file.cpp
msgid ""
@@ -5242,17 +5393,22 @@ msgstr ""
"Nécessite les liquides ondulants pour être activé."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
-"Durée entre les cycles d’exécution du Modificateur de bloc actif (« ABM »)"
+"Durée entre les cycles d’exécution du Modificateur de Bloc Actif (« ABM »), "
+"établie en secondes."
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
-msgstr "Durée entre les cycles d’exécution « NodeTimer »"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
+msgstr "Durée entre les cycles d’exécution « NodeTimer », établie en secondes."
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
-msgstr "Durée entre les cycles de gestion des blocs actifs"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
+msgstr ""
+"Durée entre les cycles de gestion des blocs actifs, établie en secondes."
#: src/settings_translation_file.cpp
msgid ""
@@ -5263,7 +5419,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Niveau de journalisation à écrire dans « debug.txt » :\n"
"– < rien > (pas de journalisation)\n"
@@ -5272,7 +5429,8 @@ msgstr ""
"– avertissement\n"
"– action\n"
"– info\n"
-"– prolixe"
+"– prolixe\n"
+"– traçage"
#: src/settings_translation_file.cpp
msgid "Light curve boost"
@@ -5299,6 +5457,10 @@ msgid "Light curve low gradient"
msgstr "Faible gradient de la courbe de lumière"
#: src/settings_translation_file.cpp
+msgid "Lighting"
+msgstr "Lumière"
+
+#: 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"
@@ -5391,7 +5553,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
-msgstr "Rendre toutes les liquides opaques"
+msgstr "Rend toutes les liquides opaques."
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
@@ -5399,7 +5561,7 @@ msgstr "Niveau de compression des cartes pour le stockage sur disque"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr "Niveau de compression des cartes pour le transfert de réseau"
+msgstr "Niveau de compression de la carte pour le transfert réseau"
#: src/settings_translation_file.cpp
msgid "Map directory"
@@ -5631,9 +5793,9 @@ msgid ""
"The maximum total count is calculated dynamically:\n"
"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 nombre maximal de blocs envoyés simultanément par client.\n"
"Le compte total maximal est calculé dynamiquement :\n"
-"max_total = ceil((nbre clients + max_users) × per_client ÷ 4)"
+"max_total = ceil((nombre clients + max_users) × per_client ÷ 4)"
#: src/settings_translation_file.cpp
msgid "Maximum number of blocks that can be queued for loading."
@@ -5697,7 +5859,7 @@ 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 maximal 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."
@@ -5754,10 +5916,6 @@ msgid "Maximum users"
msgstr "Joueurs maximums"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menus"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "Mise en cache des maillages"
@@ -5808,6 +5966,18 @@ msgid "Mipmapping"
msgstr "Mip-mapping"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr "Divers"
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr "Profileur des mods"
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr "Sécurité des mods"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "Canaux de mods"
@@ -5860,8 +6030,9 @@ msgid ""
"Multiplier for fall bobbing.\n"
"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."
+"Facteur de balancement de chute.\n"
+"Par exemple : 0 pour aucun balancement de la vue, 1 pour normal, 2 pour "
+"double."
#: src/settings_translation_file.cpp
msgid "Mute key"
@@ -5907,10 +6078,6 @@ msgid "Near plane"
msgstr "Plan à proximité"
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Réseau"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
@@ -5919,6 +6086,10 @@ msgstr ""
"Cette valeur est annulée en commençant depuis le menu."
#: src/settings_translation_file.cpp
+msgid "Networking"
+msgstr "Réseau"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Les nouveaux joueurs ont besoin d'entrer ce mot de passe."
@@ -5931,6 +6102,10 @@ msgid "Noclip key"
msgstr "Touche mode sans collision"
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr "Surbrillance des blocs et des entités"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Surbrillance des blocs"
@@ -5986,10 +6161,6 @@ msgstr ""
"(4096 = 100 Mo, comme règle générale)."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Dépôt de contenu en ligne"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "Liquides opaques"
@@ -6079,11 +6250,11 @@ msgstr "Physique"
#: src/settings_translation_file.cpp
msgid "Pitch move key"
-msgstr "Touche vol libre"
+msgstr "Touche mouvement de tangage"
#: src/settings_translation_file.cpp
msgid "Pitch move mode"
-msgstr "Mode de mouvement libre"
+msgstr "Mode mouvement de tangage"
#: src/settings_translation_file.cpp
msgid "Place key"
@@ -6102,10 +6273,6 @@ msgstr ""
"Nécessite le privilège « fly » sur le serveur."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Nom du joueur"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "Distance de transfert du joueur"
@@ -6154,7 +6321,7 @@ msgstr ""
msgid "Privileges that players with basic_privs can grant"
msgstr ""
"Les privilèges que les joueurs avec le privilège « basic_privs » peuvent "
-"accorder"
+"accorder."
#: src/settings_translation_file.cpp
msgid "Profiler"
@@ -6165,10 +6332,6 @@ msgid "Profiler toggle key"
msgstr "Touche profilage"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Profilage"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr "Adresse d'écoute pour Prometheus"
@@ -6182,7 +6345,7 @@ msgstr ""
"Adresse d'écoute pour Prometheus.\n"
"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"
+"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."
@@ -6231,9 +6394,9 @@ msgid ""
"Remove color codes from incoming chat messages\n"
"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"
+"Supprime les codes couleurs venant des messages du tchat.\n"
"Utiliser cette option pour empêcher les joueurs d’utiliser la couleur dans "
-"leurs messages"
+"leurs messages."
#: src/settings_translation_file.cpp
msgid "Replaces the default main menu with a custom one."
@@ -6256,15 +6419,15 @@ msgid ""
"csm_restriction_noderange)\n"
"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"
+"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, 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"
+"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
@@ -6364,6 +6527,10 @@ msgstr ""
"les images sont mises à l'échelle par des valeurs fractionnelles."
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr "Écran"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Hauteur de la fenêtre"
@@ -6394,6 +6561,10 @@ msgstr ""
"Utiliser 0 pour la qualité par défaut."
#: src/settings_translation_file.cpp
+msgid "Screenshots"
+msgstr "Captures d'écran"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Bruit des fonds marins"
@@ -6408,10 +6579,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Deuxième des deux bruits 3D qui définissent ensemble les tunnels."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Sécurité"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Voir http://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6470,8 +6637,16 @@ msgstr ""
"18 = réglage Julia « Mandelbulb » 4D."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Serveur / Partie solo"
+msgid "Server"
+msgstr "Serveur"
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr "Jeu du serveur"
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
+msgstr "Sécurité du serveur"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6498,10 +6673,18 @@ msgid "Server side occlusion culling"
msgstr "Détermination des blocs invisibles côté serveur"
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr "Performance du serveur"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "URL de la liste des serveurs"
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr "Liste des serveurs et message du jour"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Fichier de la liste des serveurs"
@@ -6510,21 +6693,24 @@ msgid ""
"Set the language. Leave empty to use the system language.\n"
"A restart is required after changing this."
msgstr ""
-"Détermine la langue. Laisser vide pour utiliser celui de votre système.\n"
+"Définit la langue. Laisser vide pour utiliser la langue du système.\n"
"Un redémarrage est nécessaire après cette modification."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
-"Définit la longueur maximale de caractères d'un message de discussion envoyé "
+"Définit la longueur maximale d'un message de tchat (en caractères) envoyé "
"par les clients."
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
-"Définit la force de l'ombre.\n"
+"Définit l'intensité gamma de l'ombre.\n"
+"Ajuste l’intensité des ombres dynamiques dans le jeu.\n"
"Une valeur plus faible signifie des ombres plus claires, une valeur plus "
"élevée signifie des ombres plus sombres."
@@ -6532,12 +6718,12 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.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"
+"Valeur minimale : 1,0 ; valeur maximale : 15,0"
#: src/settings_translation_file.cpp
msgid ""
@@ -6632,8 +6818,8 @@ msgstr ""
"valeur est 0."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
-msgstr "Force de l'ombre"
+msgid "Shadow strength gamma"
+msgstr "Intensité gamma de l'ombre"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6661,7 +6847,7 @@ msgstr "Afficher l'arrière-plan des badges par défaut"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
-msgstr "Message d'arrêt du serveur"
+msgstr "Message d'arrêt"
#: src/settings_translation_file.cpp
msgid ""
@@ -6796,7 +6982,7 @@ msgid ""
"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é "
+"Répartit 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"
@@ -6885,6 +7071,10 @@ msgid "Temperature variation for biomes."
msgstr "Variation de température pour les biomes."
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr "Paramètres temporaires"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "Bruit alternatif de terrain"
@@ -6963,7 +7153,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "The URL for the content repository"
-msgstr "L'URL du dépôt de contenu en ligne"
+msgstr "L'URL du dépôt de contenu."
#: src/settings_translation_file.cpp
msgid "The dead zone of the joystick"
@@ -6992,7 +7182,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "The identifier of the joystick to use"
-msgstr "L'identifiant de la manette à utiliser"
+msgstr "L'identifiant de la manette à utiliser."
#: src/settings_translation_file.cpp
msgid "The length in pixels it takes for touch screen interaction to start."
@@ -7059,7 +7249,7 @@ msgstr ""
"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) "
-"et OGLES2 (expérimental)"
+"et OGLES2 (expérimental)."
#: src/settings_translation_file.cpp
msgid ""
@@ -7076,7 +7266,7 @@ 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 ""
-"Force (obscurité) de l'ombrage des blocs avec l'occlusion ambiante.\n"
+"Intensité (obscurité) de l'ombrage des blocs avec l'occlusion ambiante.\n"
"Les valeurs plus basses sont plus sombres, les valeurs plus hautes sont plus "
"claires.\n"
"Une gamme valide de valeurs pour ceci se situe entre 0,25 et 4,0. Si la "
@@ -7161,10 +7351,10 @@ msgid "Time speed"
msgstr "Vitesse du temps"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
"Délai d'interruption pour le client pour supprimer les données de carte "
-"inutilisées de la mémoire."
+"inutilisées de la mémoire, établi en secondes."
#: src/settings_translation_file.cpp
msgid ""
@@ -7191,10 +7381,18 @@ msgid "Touch screen threshold"
msgstr "Sensibilité de l'écran tactile"
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr "Écran tactile"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr "Compromis pour la performance"
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr "Distance de tri de la transparence"
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Bruit des arbres"
@@ -7215,7 +7413,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Trusted mods"
-msgstr "Mods sécurisés"
+msgstr "Mods de confiance"
#: src/settings_translation_file.cpp
msgid "URL to the server list displayed in the Multiplayer Tab."
@@ -7312,6 +7510,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "Utilisation du filtrage trilinéaire."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr "Interfaces utilisateur"
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7386,7 +7588,7 @@ msgstr "Pilote vidéo"
#: src/settings_translation_file.cpp
msgid "View bobbing factor"
-msgstr "Facteur du mouvement de tête"
+msgstr "Facteur de balancement de la vue"
#: src/settings_translation_file.cpp
msgid "View distance in nodes."
@@ -7568,7 +7770,7 @@ 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"
-"Définir sur Activer si le serveur est paramétré pour redémarrer "
+"Définir sur « Activé » si le serveur est paramétré pour redémarrer "
"automatiquement."
#: src/settings_translation_file.cpp
@@ -7589,6 +7791,20 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+"Détermine si les noms techniques doivent être affichés.\n"
+"Affecte les mods et les packs de textures dans les menus « Contenu » et « "
+"Sélectionner les mods », ainsi que les noms de paramètres dans « Tous les "
+"paramètres ».\n"
+"Contrôlé par la case à cocher dans le menu « Tous les paramètres »."
+
+#: 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 informations de débogage du client (même effet "
@@ -7703,6 +7919,10 @@ msgid "Y-level of seabed."
msgstr "Limite Y du fond marin."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr "cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Délai d'interruption de cURL lors d'un téléchargement de fichier"
@@ -7749,6 +7969,9 @@ msgstr "Limite parallèle de cURL"
#~ msgid "Back"
#~ msgstr "Retour"
+#~ msgid "Basic"
+#~ msgstr "Principal"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Bits par pixel (profondeur de couleur) en mode plein-écran."
@@ -7782,6 +8005,12 @@ msgstr "Limite parallèle de cURL"
#~ msgid "Configure"
#~ msgstr "Configurer"
+#~ msgid "Connect"
+#~ msgstr "Rejoindre"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Contrôle la vitesse de descente dans un liquide."
+
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value."
@@ -7827,12 +8056,24 @@ msgstr "Limite parallèle de cURL"
#~ "Niveau de lissage des normal maps.\n"
#~ "Une valeur plus grande lisse davantage les normal maps."
+#~ msgid "Del. Favorite"
+#~ msgstr "Supprimer favori"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Télécharger un jeu comme Minetest Game depuis minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Télécharger en un depuis minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Téléchargement et installation de $1, veuillez patienter..."
#~ msgid "Enable VBO"
#~ msgstr "Activer Vertex Buffer Object: objet tampon de vertex"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Activer la confirmation d'enregistrement"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7862,6 +8103,9 @@ msgstr "Limite parallèle de cURL"
#~ "Active l'occlusion parallaxe.\n"
#~ "Nécessite les shaders pour être activé."
+#~ msgid "Enter "
+#~ msgstr "Entrer "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7881,6 +8125,9 @@ msgstr "Limite parallèle de cURL"
#~ msgid "Fallback font size"
#~ msgstr "Taille de la police alternative"
+#~ msgid "Filtering"
+#~ msgstr "Filtrage"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Le bruit de hauteur de base des terres flottantes"
@@ -7899,6 +8146,9 @@ msgstr "Limite parallèle de cURL"
#~ msgid "Full screen BPP"
#~ msgstr "Bits par pixel en mode plein écran"
+#~ msgid "Game"
+#~ msgstr "Jeu"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7908,15 +8158,28 @@ msgstr "Limite parallèle de cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Normal mapping"
+#~ msgid "HUD scale factor"
+#~ msgstr "Facteur de mise à l'échelle de l'interface"
+
#~ msgid "High-precision FPU"
#~ msgstr "FPU de haute précision"
#~ msgid "IPv6 support."
#~ msgstr "Support IPv6."
+#~ msgid "In-Game"
+#~ msgstr "Dans le jeu"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Installation : fichier : « $1 »"
+#~ msgid "Instrumentation"
+#~ msgstr "Instrumentalisation"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr "Raccourcis clavier"
+
#~ msgid "Lava depth"
#~ msgstr "Profondeur de lave"
@@ -7937,6 +8200,9 @@ msgstr "Limite parallèle de cURL"
#~ "Rendre DirectX compatible avec LuaJIT. Désactiver si cela cause des "
#~ "problèmes."
+#~ msgid "Menus"
+#~ msgstr "Menus"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Mini-carte en mode radar, zoom x2"
@@ -8009,6 +8275,12 @@ msgstr "Limite parallèle de cURL"
#~ msgid "Path to save screenshots at."
#~ msgstr "Chemin où les captures d'écran sont sauvegardées."
+#~ msgid "Player name"
+#~ msgstr "Nom du joueur"
+
+#~ msgid "Profiling"
+#~ msgstr "Profilage"
+
#~ msgid "Projecting dungeons"
#~ msgstr "Projection des donjons"
@@ -8021,6 +8293,9 @@ msgstr "Limite parallèle de cURL"
#~ msgid "Select Package File:"
#~ msgstr "Sélectionner le fichier du mod :"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Serveur / Partie solo"
+
#~ msgid ""
#~ "Set the shadow update time.\n"
#~ "Lower value means shadows and map updates faster, but it consume more "
@@ -8113,6 +8388,23 @@ msgstr "Limite parallèle de cURL"
#~ msgid "Yes"
#~ msgstr "Oui"
+#, 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 ""
+#~ "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 cliquer sur "
+#~ "« Annuler »."
+
#~ msgid "You died."
#~ msgstr "Vous êtes mort."
diff --git a/po/gd/minetest.po b/po/gd/minetest.po
index dcc811dd4..5c46bfe9b 100644
--- a/po/gd/minetest.po
+++ b/po/gd/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -119,6 +119,30 @@ msgid "The server has requested a reconnect:"
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
#, fuzzy
msgid "Protocol version mismatch. "
msgstr " "
@@ -134,6 +158,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr " "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr ""
@@ -141,14 +169,21 @@ msgstr ""
msgid "We support protocol versions between version $1 and $2."
msgstr ""
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr ""
@@ -283,7 +318,6 @@ msgid "Failed to download $1"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr ""
@@ -306,7 +340,6 @@ 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 ""
@@ -399,11 +432,7 @@ 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"
+msgid "Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -422,10 +451,6 @@ msgstr "Tìr air fhleòd san speur"
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 ""
@@ -443,6 +468,15 @@ msgid "Increases humidity around rivers"
msgstr "Nì seo an tìr nas buige faisg air aibhnean"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Pacaidean air an stàladh:"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr ""
@@ -542,10 +576,6 @@ 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 ""
@@ -575,6 +605,37 @@ msgstr ""
msgid "Delete World \"$1\"?"
msgstr ""
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Ainm gineadair nam mapa"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr ""
@@ -605,6 +666,14 @@ msgstr ""
msgid "Browse"
msgstr ""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr ""
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
@@ -661,7 +730,7 @@ msgstr ""
msgid "Select file"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr ""
@@ -806,6 +875,10 @@ msgstr ""
msgid "Previous Core Developers"
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -874,10 +947,6 @@ msgstr ""
msgid "Install games from ContentDB"
msgstr "Stàlaich geamannan o ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr ""
@@ -886,10 +955,6 @@ msgstr ""
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 ""
@@ -924,10 +989,6 @@ msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr ""
@@ -938,10 +999,6 @@ msgid "Damage / PvP"
msgstr "– Dochann: "
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr ""
@@ -954,6 +1011,10 @@ msgid "Join Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
@@ -967,10 +1028,18 @@ msgid "Refresh"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr ""
@@ -1015,7 +1084,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1111,7 +1180,7 @@ msgid "Tone Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1119,7 +1188,7 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1138,6 +1207,10 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr ""
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1279,7 +1352,7 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1397,6 +1470,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr ""
@@ -1901,24 +1979,6 @@ msgstr ""
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 ""
@@ -1951,7 +2011,7 @@ msgstr ""
msgid "Change camera"
msgstr ""
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr ""
@@ -2004,7 +2064,7 @@ msgid "Key already in use"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -2076,15 +2136,15 @@ msgid "Change"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
+msgid "New Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "New Password"
+msgid "Old Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Old Password"
+msgid "Passwords do not match!"
msgstr ""
#: src/gui/guiVolumeChange.cpp
@@ -2100,12 +2160,6 @@ msgstr ""
msgid "Sound Volume: %d%%"
msgstr " "
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Cuir a-steach "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2113,6 +2167,15 @@ msgstr "Cuir a-steach "
msgid "LANG_CODE"
msgstr "gd"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr ""
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2246,6 +2309,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2327,6 +2394,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2345,7 +2416,8 @@ msgstr ""
"agus cha mhòr nach bi buaidh air solas oidhche nàdarra idir."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Sgiathaich an-còmhnaidh ’s gu luath"
#: src/settings_translation_file.cpp
@@ -2414,6 +2486,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2454,10 +2530,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Sochairean bunasach"
@@ -2478,7 +2550,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2490,6 +2562,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2514,6 +2590,10 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Camera"
+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"
@@ -2674,6 +2754,11 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Cuingeachadh tuilleadain air a’ chliant"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2769,6 +2854,11 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "Ionad-tasgaidh susbaint air loidhne"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2802,7 +2892,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2869,11 +2961,11 @@ msgid "Debug log level"
msgstr "Ìre an loga dì-bhugachaidh"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3018,6 +3110,10 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -3038,6 +3134,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3107,6 +3209,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3123,19 +3229,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3209,6 +3309,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3235,6 +3339,10 @@ msgstr ""
"do bhreath tìre air fhleòd sholadach."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3315,7 +3423,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
+msgid "Filtering and Antialiasing"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3383,6 +3491,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3533,6 +3645,18 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamepads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3570,6 +3694,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3586,7 +3718,11 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3826,11 +3962,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "Dè cho leathann ’s a bhios aibhnean."
@@ -3902,6 +4045,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3925,7 +4074,9 @@ msgstr ""
"sgiathaidh no snàimh."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3969,10 +4120,6 @@ msgid "Ignore world errors"
msgstr "Leig seachad mearachdan an t-saoghail"
#: 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 ""
@@ -4023,15 +4170,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4787,6 +4930,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4842,7 +4989,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4852,18 +4999,22 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -4872,7 +5023,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Ìre an loga a thèid a sgrìobhadh gu debug.txt:\n"
"- <bàn> (gun logadh)\n"
@@ -4908,6 +5060,10 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lighting"
+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"
@@ -5323,10 +5479,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5377,6 +5529,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5468,16 +5632,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5490,6 +5654,10 @@ msgid "Noclip key"
msgstr "Iuchair modha gun bhearradh"
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5527,10 +5695,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Ionad-tasgaidh susbaint air loidhne"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5629,10 +5793,6 @@ msgstr ""
"Bidh feum air sochair “fly†air an fhrithealaiche."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5679,10 +5839,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5853,6 +6009,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Sgrìn:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5880,6 +6041,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Sgrìn:"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5892,10 +6058,6 @@ 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 ""
@@ -5935,7 +6097,17 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
+#, fuzzy
+msgid "Server"
+msgstr "Aibhnean boga"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr " "
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5963,10 +6135,18 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5977,12 +6157,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5990,7 +6172,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6066,7 +6248,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6288,6 +6470,10 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6493,7 +6679,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6517,10 +6703,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6615,6 +6809,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6852,6 +7050,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6950,6 +7157,10 @@ msgid "Y-level of seabed."
msgstr "Àirde-Y aig grunnd na mara."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6971,6 +7182,9 @@ msgstr ""
#~ msgid "Address / Port"
#~ msgstr "Seòladh / Port"
+#~ msgid "Enter "
+#~ msgstr "Cuir a-steach "
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr ""
#~ "Claonadh na h-èifeachd occlusion na paraileig air fheadh, seo sgèile/2 "
diff --git a/po/gl/minetest.po b/po/gl/minetest.po
index 1593600ff..064f74087 100644
--- a/po/gl/minetest.po
+++ b/po/gl/minetest.po
@@ -7,9 +7,9 @@ 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: 2020-07-08 20:47+0000\n"
-"Last-Translator: sfan5 <sfan5@live.de>\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-06-27 03:16+0000\n"
+"Last-Translator: Raquel Fariña Agra <raquelagra1@gmail.com>\n"
"Language-Team: Galician <https://hosted.weblate.org/projects/minetest/"
"minetest/gl/>\n"
"Language: gl\n"
@@ -17,44 +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.2-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
-msgstr ""
+msgstr "Limpar a fila de espera do chat"
#: builtin/client/chatcommands.lua
msgid "Empty command."
-msgstr ""
+msgstr "Comando baleiro."
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Exit to main menu"
-msgstr "Menu principal"
+msgstr "Sair ao menú principal"
#: builtin/client/chatcommands.lua
msgid "Invalid command: "
-msgstr ""
+msgstr "Comando non válido: "
#: builtin/client/chatcommands.lua
msgid "Issued command: "
-msgstr ""
+msgstr "Comando emitido: "
#: builtin/client/chatcommands.lua
msgid "List online players"
-msgstr ""
+msgstr "Lista de xogadores en liña"
#: builtin/client/chatcommands.lua
msgid "Online players: "
-msgstr ""
+msgstr "Xogadores en liña: "
#: builtin/client/chatcommands.lua
msgid "The out chat queue is now empty."
-msgstr ""
+msgstr "A fila de espera do chat agora está baleira."
#: builtin/client/chatcommands.lua
msgid "This command is disabled by server."
-msgstr ""
+msgstr "Este comando está desactivado polo servidor."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -66,630 +65,717 @@ msgstr "Morreches"
#: builtin/common/chatcommands.lua
msgid "Available commands:"
-msgstr ""
+msgstr "Comandos dispoñibeis:"
#: builtin/common/chatcommands.lua
msgid "Available commands: "
-msgstr ""
+msgstr "Comandos dispoñibeis: "
#: builtin/common/chatcommands.lua
msgid "Command not available: "
-msgstr ""
+msgstr "Comando non dispoñible: "
#: builtin/common/chatcommands.lua
msgid "Get help for commands"
-msgstr ""
+msgstr "Obter axuda para os comandos"
#: builtin/common/chatcommands.lua
msgid ""
"Use '.help <cmd>' to get more information, or '.help all' to list everything."
msgstr ""
+"Usa '.help <cmd>' para conseguir máis información ou '.help all' para ver a "
+"lista completa."
#: builtin/common/chatcommands.lua
msgid "[all | <cmd>]"
-msgstr ""
+msgstr "[all | <cmd>]"
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
-msgstr "Vale"
+msgstr "Aceptar"
#: builtin/fstk/ui.lua
msgid "<none available>"
-msgstr ""
+msgstr "<Comando non dispoñible>"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
-msgstr ""
+msgstr "Produciuse un erro nun script Lua:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
-msgstr ""
+msgstr "Produciuse un erro:"
#: builtin/fstk/ui.lua
msgid "Main menu"
-msgstr "Menu principal"
+msgstr "Menú principal"
#: builtin/fstk/ui.lua
msgid "Reconnect"
-msgstr "Reconectar"
+msgstr "Volver conectar"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
-msgstr "O servidor solicitou que reconectes:"
+msgstr "O servidor solicitou volver conectar:"
#: builtin/mainmenu/common.lua
-msgid "Protocol version mismatch. "
+msgid "A new $1 version is available"
msgstr ""
#: builtin/mainmenu/common.lua
-msgid "Server enforces protocol version $1. "
+#, fuzzy
+msgid "Client Mods"
+msgstr "Seleccionar mods"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "A versión do protocolo non coincide "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "O servidor impor a versión do protocolo $1. "
+
+#: builtin/mainmenu/common.lua
msgid "Server supports protocol versions between $1 and $2. "
+msgstr "O servidor admite as versións de protocolo entre $1 e $2. "
+
+#: builtin/mainmenu/common.lua
+msgid "Visit website"
msgstr ""
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
-msgstr ""
+msgstr "Só admítese a versión de protocolo $1."
#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
+msgstr "Só admítense as versións de protocolo entre $1 e $2."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
-msgstr ""
+msgstr "Cancelar"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/tab_content.lua
msgid "Dependencies:"
-msgstr ""
+msgstr "Dependencias:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
-msgstr ""
+msgstr "Desactivar todo"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr ""
+msgstr "Desactivar paq. de mods"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
-msgstr ""
+msgstr "Activar todo"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr ""
+msgstr "Activar paq. de mods"
#: 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 ""
+"Erro ao activar o mod \"$1\" porque conteñe caracteres non autorizados. Só "
+"permítense os caracteres [a-z e 0-9]."
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr ""
+msgstr "Buscar máis mods"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
-msgstr ""
+msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr ""
+msgstr "Sen dependencias (opcionais)"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
-msgstr ""
+msgstr "Non se forneceu a descripción do xogo."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr ""
+msgstr "Sen dependencias importantes"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr ""
+msgstr "Non se forneceu a descripción do paquete de mods."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
-msgstr ""
+msgstr "Sen dependencias opcionais"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
-msgstr ""
+msgstr "Dependencias opcionais:"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
msgid "Save"
-msgstr ""
+msgstr "Gardar"
#: builtin/mainmenu/dlg_config_world.lua
msgid "World:"
-msgstr ""
+msgstr "Mundo:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr ""
+msgstr "activado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" xa existe. Desexa substituílo?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Instalaranse as dependencias $1 e $2."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 por $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 descargando,\n"
+"$2 en cola"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 downloading..."
-msgstr ""
+msgstr "Descargando $1..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "Non se puido atopar as dependencias requeridas para $1 ."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "Instalarase $1 e omitiranse as dependencias de $2."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
-msgstr ""
+msgstr "Todos os paq."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Already installed"
-msgstr ""
+msgstr "Xa está instalado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
-msgstr ""
+msgstr "Volver ao menú principal"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Base Game:"
-msgstr ""
+msgstr "Xogo base:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
-msgstr ""
+msgstr "ContentDB non está dispoñible cando Minetest compilouse sen cURL"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Downloading..."
-msgstr ""
+msgstr "Descargando..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr ""
+msgstr "Erro ao descargar $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
-msgstr ""
+msgstr "Xogos"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install"
-msgstr ""
+msgstr "Instalar"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install $1"
-msgstr ""
+msgstr "Instalar $1"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install missing dependencies"
-msgstr ""
+msgstr "Instalar dependencias faltantes"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install: Unsupported file type or broken archive"
msgstr ""
+"Instalación: Formato de ficheiro \"$1\" non compatible ou ficheiro corrupto"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
-msgstr ""
+msgstr "Mods"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr ""
+msgstr "Non se puido recuperar ningún paquete"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
-msgstr ""
+msgstr "Non hai resultados"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No updates"
-msgstr ""
+msgstr "Sen actualizacións"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "Non atopado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Sobrescribir"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Verifica que o xogo base esté correcto."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "En cola"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
-msgstr ""
+msgstr "Paq. de text."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
-msgstr ""
+msgstr "Desinstalar"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
-msgstr ""
+msgstr "Actualizar"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Actualizar Todo [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Ver máis información nun navegador web"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
-msgstr ""
+msgstr "Xa existe un mundo chamado \"$1\""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Additional terrain"
-msgstr ""
+msgstr "Terreo adicional"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Altitude chill"
-msgstr ""
+msgstr "Frío de altitude"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Altitude dry"
-msgstr ""
+msgstr "Sequedade en altitude"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biome blending"
-msgstr ""
+msgstr "Mestura de biomas"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biomes"
-msgstr ""
+msgstr "Biomas"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caverns"
-msgstr ""
+msgstr "Cavernas"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caves"
-msgstr ""
+msgstr "Covas"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
-msgstr ""
+msgstr "Crear"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Decorations"
-msgstr ""
+msgstr "Decoracións"
#: 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 ""
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Aviso: O Test de Desenvolvemento está destinado aos desenvolvedores."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
-msgstr ""
+msgstr "Calabozos"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Flat terrain"
-msgstr ""
+msgstr "Terreo chan"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr ""
+msgstr "Terreos flotantes no ceo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-msgstr ""
-
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr ""
+msgstr "Terreos flotantes (experimental)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr ""
+msgstr "Xerar terreo non fractal: Océanos e subsolo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
-msgstr ""
+msgstr "Outeiros"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Humid rivers"
-msgstr ""
+msgstr "Ríos húmidos"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Increases humidity around rivers"
+msgstr "Incrementa a humidade arredor dos ríos"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Instalar $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
-msgstr ""
+msgstr "Lagos"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Low humidity and high heat causes shallow or dry rivers"
msgstr ""
+"A baixa humidade e a calor elevada provocan ríos pouco profundos ou secos"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
-msgstr ""
+msgstr "Xerador de mundos"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen flags"
-msgstr ""
+msgstr "Parámetros do xerador de mundos"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mapgen-specific flags"
-msgstr ""
+msgstr "Parámetros específicos do xerador de mundos"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
-msgstr ""
+msgstr "Montañas"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
-msgstr ""
+msgstr "Fluxo de lodo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
-msgstr ""
+msgstr "Rede de túneis e covas"
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
-msgstr ""
+msgstr "Ningunha partida seleccionada"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces heat with altitude"
-msgstr ""
+msgstr "Reduce a calor coa altitude"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces humidity with altitude"
-msgstr ""
+msgstr "Reduce a humidade coa altitude"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Rivers"
-msgstr ""
+msgstr "Ríos"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
-msgstr ""
+msgstr "Ríos ao nivel do mar"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
-msgstr ""
+msgstr "Semente"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
-msgstr ""
+msgstr "Transición suave entre biomas"
#: builtin/mainmenu/dlg_create_world.lua
msgid ""
"Structures appearing on the terrain (no effect on trees and jungle grass "
"created by v6)"
msgstr ""
+"Estruturas que aparecen no terreo (sen efecto nas árbores e no céspede da "
+"xungla que creou a v6)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Structures appearing on the terrain, typically trees and plants"
-msgstr ""
+msgstr "Estruturas que aparecen no terreo, xeralmente árbores e plantas"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert"
-msgstr ""
+msgstr "Temperado, Deserto"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle"
-msgstr ""
+msgstr "Temperado, Deserto, Xungla"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr ""
+msgstr "Temperado, Deserto, Xungla, Tundra, Taiga"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Terrain surface erosion"
-msgstr ""
+msgstr "Erosión superficial do terreo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
-msgstr ""
+msgstr "Ãrbores e céspede da xungla"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Vary river depth"
-msgstr ""
+msgstr "Variar a profundidade do río"
#: 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 ""
+msgstr "Cavernas moi grandes nas profundidades do subsolo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
-msgstr ""
+msgstr "Nome do mundo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "You have no games installed."
-msgstr ""
+msgstr "Non tes xogos instalados."
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr ""
+msgstr "Desexa eliminar \"$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 "Eliminar"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr ""
+msgstr "pkgmgr: erro ao eliminar \"$1\""
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
-msgstr ""
+msgstr "pkgmgr: ruta \"$1\" non válida"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
+msgstr "Eliminar o mundo \"$1\"?"
+
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Confirmar contrasinal"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
msgstr ""
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Nome do xerador de mundos"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Nome"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Contrasinal"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Os contrasinais non coinciden!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Rexistrarse e unirse"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
-msgstr ""
+msgstr "Aceptar"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr ""
+msgstr "Renomear paquete 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 ""
+"Este paquete de mods ten un nome explícito no seu modpack.conf que non "
+"permitirá cambios de nome aquí."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
-msgstr ""
+msgstr "(Ningunha descripción da configuración dada)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
-msgstr ""
+msgstr "Ruído 2D"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
-msgstr ""
+msgstr "<Volver á configuración"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
-msgstr ""
+msgstr "Explorar"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Contido"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Contido"
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
-msgstr ""
+msgstr "Desactivado"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Edit"
-msgstr ""
+msgstr "Editar"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
-msgstr ""
+msgstr "Activado"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Lacunarity"
-msgstr ""
+msgstr "Lacunaridade"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Octaves"
-msgstr ""
+msgstr "Oitavas"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
-msgstr ""
+msgstr "Desprazamento"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Persistence"
-msgstr ""
+msgstr "Persistencia"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
-msgstr ""
+msgstr "Introduce un número enteiro válido."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid number."
-msgstr ""
+msgstr "Introduce un número válido."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
-msgstr ""
+msgstr "Restaurar"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
-msgstr ""
+msgstr "Escala"
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
-msgstr ""
+msgstr "Procurar"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
-msgstr ""
+msgstr "Seleccionar directorio"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select file"
-msgstr ""
+msgstr "Seleccionar ficheiro"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
-msgstr ""
+msgstr "Mostrar nomes técnicos"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
-msgstr ""
+msgstr "O valor debe ser polo menos $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
-msgstr ""
+msgstr "O valor non debe ser máis grande que $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
-msgstr ""
+msgstr "X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X spread"
-msgstr ""
+msgstr "Amplitude X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y"
-msgstr ""
+msgstr "Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y spread"
-msgstr ""
+msgstr "Amplitude Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z"
-msgstr ""
+msgstr "Z"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z spread"
-msgstr ""
+msgstr "Amplitude Z"
#. ~ "absvalue" is a noise parameter flag.
#. It is short for "absolute value".
@@ -697,14 +783,14 @@ msgstr ""
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
-msgstr ""
+msgstr "Valor absoluto"
#. ~ "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 "Predefinido"
#. ~ "eased" is a noise parameter flag.
#. It is used to make the map smoother and
@@ -712,590 +798,610 @@ msgstr ""
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr ""
+msgstr "Suavizado"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
-msgstr ""
+msgstr "$1 (Activado)"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
-msgstr ""
+msgstr "$1 mods"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
-msgstr ""
+msgstr "Error ao instalar $1 en $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr ""
+msgstr "Instalación do mod: Non se puido atopar o nome real do mod para: $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
+"Instalación do mod: Non se puido atopar un nome de cartafol adecuado para o "
+"paquete de mods $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr ""
+msgstr "Non se puido atopar un mod ou paquete de mods válido"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
-msgstr ""
+msgstr "Non se puido instalar $1 como paquete de texturas"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
-msgstr ""
+msgstr "Non se puido instalar un xogo como $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a mod as a $1"
-msgstr ""
+msgstr "Non se puido instalar un mod como $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a modpack as a $1"
-msgstr ""
+msgstr "Non se puido instalar un paquete de mods como $1"
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
msgid "Loading..."
-msgstr ""
+msgstr "Cargando..."
#: builtin/mainmenu/serverlistmgr.lua
msgid "Public server list is disabled"
-msgstr ""
+msgstr "A lista de servidores públicos está desactivada"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+"Tente volver activar a lista de servidores públicos e verifique a súa "
+"conexión a Internet."
#: builtin/mainmenu/tab_about.lua
msgid "About"
-msgstr ""
+msgstr "Acerca de"
#: builtin/mainmenu/tab_about.lua
msgid "Active Contributors"
-msgstr ""
+msgstr "Colaboradores activos"
#: builtin/mainmenu/tab_about.lua
msgid "Active renderer:"
-msgstr ""
+msgstr "Renderizador activo:"
#: builtin/mainmenu/tab_about.lua
msgid "Core Developers"
-msgstr ""
+msgstr "Desenvolvedores principais"
#: builtin/mainmenu/tab_about.lua
msgid "Open User Data Directory"
-msgstr ""
+msgstr "Abrir dir. 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 o directorio que contén mundos, xogos, mods fornecidos polo usuario\n"
+"e paquetes de textura nun xestor de ficheiros ou explorador."
#: builtin/mainmenu/tab_about.lua
msgid "Previous Contributors"
-msgstr ""
+msgstr "Colaboradores anteriores"
#: builtin/mainmenu/tab_about.lua
msgid "Previous Core Developers"
-msgstr ""
+msgstr "Desenvolvedores principais anteriores"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Mostrar información de depuración"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr ""
+msgstr "Explorar contido en liña"
#: builtin/mainmenu/tab_content.lua
msgid "Content"
-msgstr ""
+msgstr "Contido"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
-msgstr ""
+msgstr "Desactivar paq. de texturas"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
-msgstr ""
+msgstr "Información:"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
-msgstr ""
+msgstr "Paquetes instalados:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
-msgstr ""
+msgstr "Sen dependencias."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr ""
+msgstr "A descripción do paquete non está dispoñible"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
-msgstr ""
+msgstr "Renomear"
#: builtin/mainmenu/tab_content.lua
msgid "Uninstall Package"
-msgstr ""
+msgstr "Desinstalar paquete"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
-msgstr ""
+msgstr "Usar paquete de texturas"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr ""
+msgstr "Anunciar servidor"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr ""
+msgstr "Ligazón de enderezo"
#: builtin/mainmenu/tab_local.lua
msgid "Creative Mode"
-msgstr ""
+msgstr "Modo creativo"
#: builtin/mainmenu/tab_local.lua
msgid "Enable Damage"
-msgstr ""
+msgstr "Activar danos"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
-msgstr ""
+msgstr "Hospedar xogo"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
-msgstr ""
+msgstr "Hospedar servidor"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
-msgstr ""
-
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr ""
+msgstr "Instalar xogos do ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "New"
-msgstr ""
+msgstr "Novo"
#: 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 ""
+msgstr "Ningún mundo creado ou seleccionado!"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
-msgstr ""
+msgstr "Xogar"
#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
-msgstr ""
+msgstr "Porto"
#: builtin/mainmenu/tab_local.lua
msgid "Select Mods"
-msgstr ""
+msgstr "Seleccionar mods"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
-msgstr ""
+msgstr "Seleccionar mundo:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr ""
+msgstr "Porto do servidor"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
-msgstr ""
+msgstr "Xogar só"
#: builtin/mainmenu/tab_online.lua
msgid "Address"
-msgstr ""
+msgstr "Enderezo"
#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
msgid "Clear"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr ""
+msgstr "Limpar"
#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
-msgstr ""
+msgstr "Modo creativo"
#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
msgid "Damage / PvP"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr ""
+msgstr "Dano / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
-msgstr ""
+msgstr "Favoritos"
#: builtin/mainmenu/tab_online.lua
msgid "Incompatible Servers"
-msgstr ""
+msgstr "Servidores incompatibles"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
+msgstr "Xogar en liña"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Login"
msgstr ""
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
-msgstr ""
+msgstr "Ping"
#: builtin/mainmenu/tab_online.lua
msgid "Public Servers"
-msgstr ""
+msgstr "Servidores públicos"
#: builtin/mainmenu/tab_online.lua
msgid "Refresh"
-msgstr ""
+msgstr "Actualizar"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Porto remoto"
#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
+msgstr "Descripción do servidor"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
-msgstr ""
+msgstr "2x"
#: builtin/mainmenu/tab_settings.lua
msgid "3D Clouds"
-msgstr ""
+msgstr "Nubes 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"
-msgstr ""
+msgstr "Toda a configuración"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
-msgstr ""
+msgstr "Suavizado:"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
-msgstr ""
+msgstr "Autogardar tam. pantalla"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
-msgstr ""
+msgstr "Filtrado bilineal"
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
msgid "Change Keys"
-msgstr ""
+msgstr "Configurar teclas"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr ""
+msgstr "Vidro unificado"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Dynamic shadows"
-msgstr ""
+msgstr "Sombras dinámicas"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr ""
+#, fuzzy
+msgid "Dynamic shadows:"
+msgstr "Sombras dinámicas: "
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
-msgstr ""
+msgstr "Follas detalladas"
#: builtin/mainmenu/tab_settings.lua
msgid "High"
-msgstr ""
+msgstr "Alto"
#: builtin/mainmenu/tab_settings.lua
msgid "Low"
-msgstr ""
+msgstr "Baixo"
#: builtin/mainmenu/tab_settings.lua
msgid "Medium"
-msgstr ""
+msgstr "Medio"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr ""
+msgstr "Mipmap"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "Mipmap + Filtro aniso."
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr ""
+msgstr "Sen filtros"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
-msgstr ""
+msgstr "Sen Mipmap"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
-msgstr ""
+msgstr "Resaltar nodos"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
-msgstr ""
+msgstr "Marcar nodos"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
-msgstr ""
+msgstr "Ningún"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
-msgstr ""
+msgstr "Follas opacas"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Water"
-msgstr ""
+msgstr "Auga opaca"
#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
-msgstr ""
+msgstr "Partículas"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
-msgstr ""
+msgstr "Pantalla:"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
-msgstr ""
+msgstr "Configuración"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
-msgstr ""
+msgstr "Sombreadores"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (experimental)"
-msgstr ""
+msgstr "Sombreadores (experimental)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr ""
+msgstr "Sombreadores (non dispoñible)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
-msgstr ""
+msgstr "Follas simples"
#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
-msgstr ""
+msgstr "Iluminación suave"
#: builtin/mainmenu/tab_settings.lua
msgid "Texturing:"
-msgstr ""
+msgstr "Texturización:"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
-msgstr ""
+msgstr "Mapeado de tons"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr ""
+#, fuzzy
+msgid "Touch threshold (px):"
+msgstr "Nivel de sensibilidade ao toque (px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
-msgstr ""
+msgstr "Filtro trilineal"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
-msgstr ""
+#, fuzzy
+msgid "Very High"
+msgstr "Moi alto"
#: builtin/mainmenu/tab_settings.lua
msgid "Very Low"
-msgstr ""
+msgstr "Moi baixo"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr ""
+msgstr "Movemento das follas"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Liquids"
-msgstr ""
+msgstr "Movemento dos líquidos"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr ""
+msgstr "Movemento das plantas"
+
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Erro de conexión (tempo esgotado?)"
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
-msgstr ""
+msgstr "Esgotouse o tempo de conexión."
#: src/client/client.cpp
msgid "Done!"
-msgstr ""
+msgstr "Feito!"
#: src/client/client.cpp
msgid "Initializing nodes"
-msgstr ""
+msgstr "Iniciando nodos"
#: src/client/client.cpp
msgid "Initializing nodes..."
-msgstr ""
+msgstr "Iniciando nodos..."
#: src/client/client.cpp
msgid "Loading textures..."
-msgstr ""
+msgstr "Cargando texturas..."
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-msgstr ""
+msgstr "Reconstruíndo sombreadores..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
-msgstr ""
+msgstr "Erro de conexión (tempo esgotado?)"
#: src/client/clientlauncher.cpp
msgid "Could not find or load game: "
-msgstr ""
+msgstr "Non se puido atopar ou cargar o xogo: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
-msgstr ""
+msgstr "Especificación do xogo non válida."
#: src/client/clientlauncher.cpp
msgid "Main Menu"
-msgstr ""
+msgstr "Menú principal"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
-msgstr ""
+msgstr "Ningún mundo seleccionado e ningún enderezo fornecido. Nada que facer."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr ""
+msgstr "Nome do xogador demasiado longo."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr ""
+msgstr "Escolle un nome!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr ""
+msgstr "O ficheiro do contrasinal fornecido non se puido abrir: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
-msgstr ""
+msgstr "O camiño do mundo fornecido non existe: "
#: src/client/game.cpp
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
+"\n"
+"Verifique debug.txt para obter detalles."
#: src/client/game.cpp
msgid "- Address: "
-msgstr ""
+msgstr "- Enderezo: "
#: src/client/game.cpp
msgid "- Mode: "
-msgstr ""
+msgstr "- Modo: "
#: src/client/game.cpp
msgid "- Port: "
-msgstr ""
+msgstr "- Porto: "
#: src/client/game.cpp
msgid "- Public: "
-msgstr ""
+msgstr "- Público: "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
-msgstr ""
+msgstr "- PvP: "
#: src/client/game.cpp
msgid "- Server Name: "
-msgstr ""
+msgstr "- Nome do servidor: "
#: src/client/game.cpp
msgid "A serialization error occurred:"
-msgstr ""
+msgstr "Ocurreu un erro:"
#: src/client/game.cpp
#, c-format
msgid "Access denied. Reason: %s"
-msgstr ""
+msgstr "Acceso negado. Motivo: %s"
#: src/client/game.cpp
msgid "Automatic forward disabled"
-msgstr ""
+msgstr "Avance automático desactivado"
#: src/client/game.cpp
msgid "Automatic forward enabled"
-msgstr ""
+msgstr "Avance automático activado"
#: src/client/game.cpp
msgid "Block bounds hidden"
-msgstr ""
+msgstr "Lím. bloques ocultos"
#: src/client/game.cpp
msgid "Block bounds shown for all blocks"
-msgstr ""
+msgstr "Límites de bloque mostrados para todos os bloques"
#: src/client/game.cpp
msgid "Block bounds shown for current block"
-msgstr ""
+msgstr "Límites de bloques mostrados para o bloque actual"
#: src/client/game.cpp
msgid "Block bounds shown for nearby blocks"
-msgstr ""
+msgstr "Límites de bloques mostrados para bloques pretos"
#: src/client/game.cpp
msgid "Camera update disabled"
-msgstr ""
+msgstr "Actualización da cámara desactivada"
#: src/client/game.cpp
msgid "Camera update enabled"
-msgstr ""
+msgstr "Actualización da cámara activada"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
+"Non se puido mostrar os límites de bloco (é preciso o permiso 'basic_debug')"
#: src/client/game.cpp
msgid "Change Password"
-msgstr ""
+msgstr "Cambiar contrasinal"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
-msgstr ""
+msgstr "Modo cinematográfico desactivado"
#: src/client/game.cpp
msgid "Cinematic mode enabled"
-msgstr ""
+msgstr "Modo cinematográfico activado"
#: src/client/game.cpp
msgid "Client disconnected"
-msgstr ""
+msgstr "Cliente desconectado"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
-msgstr ""
+msgstr "O scripting de cliente está desactivado"
#: src/client/game.cpp
msgid "Connecting to server..."
-msgstr ""
+msgstr "Conectando ao servidor..."
#: src/client/game.cpp
msgid "Connection failed for unknown reason"
-msgstr ""
+msgstr "Erro na conexión por un motivo descoñecido"
#: src/client/game.cpp
msgid "Continue"
-msgstr ""
+msgstr "Continuar"
#: src/client/game.cpp
#, c-format
@@ -1315,31 +1421,46 @@ msgid ""
"- Mouse wheel: select item\n"
"- %s: chat\n"
msgstr ""
+"Controis:\n"
+"- %s: ir cara adiante\n"
+"- %s: ir cara atrás\n"
+"- %s: ir cara esquerda\n"
+"- %s: ir cara dereita\n"
+"- %s: saltar/escalar\n"
+"- %s: romper bloque/golpear\n"
+"- %s: colocar/usar\n"
+"- %s: agacharse/abaxaise\n"
+"- %s: soltar obxecto\n"
+"- %s: inventario\n"
+"- Rato: virarse/ver\n"
+"- Roda do rato: seleccionar obxecto\n"
+"- %s: chat\n"
#: src/client/game.cpp
#, c-format
msgid "Couldn't resolve address: %s"
-msgstr ""
+msgstr "Non se puido resolver o enderezo: %s"
#: src/client/game.cpp
msgid "Creating client..."
-msgstr ""
+msgstr "Creando cliente..."
#: src/client/game.cpp
msgid "Creating server..."
-msgstr ""
+msgstr "Creando servidor..."
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr ""
+msgstr "Información de depuración e gráfico de análise do mundo ocultos"
#: src/client/game.cpp
msgid "Debug info shown"
-msgstr ""
+msgstr "Info de depuración mostrada"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
msgstr ""
+"Info de depuración, gráfico de análise do mundo e estrutura de arames ocultos"
#: src/client/game.cpp
msgid ""
@@ -1356,724 +1477,717 @@ msgid ""
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
msgstr ""
+"Controis por defecto:\n"
+"Menú oculto:\n"
+"- Un clic: activa botón\n"
+"- Dobre clic: colocar/usar\n"
+"- Deslizar dedo: mirar arredor\n"
+"Menú/inventario visible:\n"
+"- Dobre clic: (fóra do menú/inventario):\n"
+" -->pechar\n"
+"- Clic no obxecto e logo clic nun compartimento:\n"
+" --> mover obxecto\n"
+"- Clic e arrastar, e logo clic con os dous dedos\n"
+" --> colocar un só obxecto\n"
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
-msgstr ""
+msgstr "Campo de visión ilimitada desactivado"
#: src/client/game.cpp
msgid "Enabled unlimited viewing range"
-msgstr ""
+msgstr "Campo de visión ilimitada activado"
+
+#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Creando cliente..."
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr ""
+msgstr "Saír ao menú"
#: src/client/game.cpp
msgid "Exit to OS"
-msgstr ""
+msgstr "Saír do xogo"
#: src/client/game.cpp
msgid "Fast mode disabled"
-msgstr ""
+msgstr "Modo rápido desactivado"
#: src/client/game.cpp
msgid "Fast mode enabled"
-msgstr ""
+msgstr "Modo rápido activado"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr ""
+msgstr "Modo rápido activado (nota: sen permiso 'rápido')"
#: src/client/game.cpp
msgid "Fly mode disabled"
-msgstr ""
+msgstr "Modo voo desactivado"
#: src/client/game.cpp
msgid "Fly mode enabled"
-msgstr ""
+msgstr "Modo voo activado"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr ""
+msgstr "Modo voo activado (nota: sen permiso de 'voo')"
#: src/client/game.cpp
msgid "Fog disabled"
-msgstr ""
+msgstr "Néboa desactivada"
#: src/client/game.cpp
msgid "Fog enabled"
-msgstr ""
+msgstr "Néboa activada"
#: src/client/game.cpp
msgid "Game info:"
-msgstr ""
+msgstr "Información do xogo:"
#: src/client/game.cpp
msgid "Game paused"
-msgstr ""
+msgstr "Xogo pausado"
#: src/client/game.cpp
msgid "Hosting server"
-msgstr ""
+msgstr "Servidor anfitrión"
#: src/client/game.cpp
msgid "Item definitions..."
-msgstr ""
+msgstr "Definicións dos obxectos..."
#: src/client/game.cpp
msgid "KiB/s"
-msgstr ""
+msgstr "KiB/s"
#: src/client/game.cpp
msgid "Media..."
-msgstr ""
+msgstr "Multimedia..."
#: src/client/game.cpp
msgid "MiB/s"
-msgstr ""
+msgstr "MiB/s"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr ""
+msgstr "O minimapa está actualmente desactivado polo xogo ou mod"
#: src/client/game.cpp
msgid "Multiplayer"
-msgstr ""
+msgstr "Xogar en liña"
#: src/client/game.cpp
msgid "Noclip mode disabled"
-msgstr ""
+msgstr "Modo espectador desactivado"
#: src/client/game.cpp
msgid "Noclip mode enabled"
-msgstr ""
+msgstr "Modo espectador activado"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr ""
+msgstr "Modo espectador activado (nota: sen permiso 'noclip')"
#: src/client/game.cpp
msgid "Node definitions..."
-msgstr ""
+msgstr "Definicións de nodos..."
#: src/client/game.cpp
msgid "Off"
-msgstr ""
+msgstr "Desactivado"
#: src/client/game.cpp
msgid "On"
-msgstr ""
+msgstr "Activado"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
-msgstr ""
+msgstr "Modo de movemiento rotación vertical desactivado"
#: src/client/game.cpp
msgid "Pitch move mode enabled"
-msgstr ""
+msgstr "Modo de movemiento de rotación vertical activado"
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr ""
+msgstr "Gráfico de análise do mundo mostrado"
#: src/client/game.cpp
msgid "Remote server"
-msgstr ""
+msgstr "Servidor remoto"
#: src/client/game.cpp
msgid "Resolving address..."
-msgstr ""
+msgstr "Resolvendo enderezo..."
#: src/client/game.cpp
msgid "Shutting down..."
-msgstr ""
+msgstr "Cerrando..."
#: src/client/game.cpp
msgid "Singleplayer"
-msgstr ""
+msgstr "Un xogador"
#: src/client/game.cpp
msgid "Sound Volume"
-msgstr ""
+msgstr "Volume do son"
#: src/client/game.cpp
msgid "Sound muted"
-msgstr ""
+msgstr "Sonido silenciado"
#: src/client/game.cpp
msgid "Sound system is disabled"
-msgstr ""
+msgstr "O sistema de son está desactivado"
#: src/client/game.cpp
msgid "Sound system is not supported on this build"
-msgstr ""
+msgstr "O sistema de son non é compatible con esta versión"
#: src/client/game.cpp
msgid "Sound unmuted"
-msgstr ""
+msgstr "Son reactivado"
#: src/client/game.cpp
#, c-format
msgid "The server is probably running a different version of %s."
-msgstr ""
+msgstr "É posible que o servidor esté executando unha versión diferente de %s."
#: src/client/game.cpp
#, c-format
msgid "Unable to connect to %s because IPv6 is disabled"
-msgstr ""
+msgstr "Non se puido conectar a %s porque o IPv6 está desactivado"
#: src/client/game.cpp
#, c-format
msgid "Unable to listen on %s because IPv6 is disabled"
-msgstr ""
+msgstr "Non se puido escoitar %s porque o IPv6 está desactivado"
#: src/client/game.cpp
#, c-format
msgid "Viewing range changed to %d"
-msgstr ""
+msgstr "Campo de visión cambiada a %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at maximum: %d"
-msgstr ""
+msgstr "O campo de visión está ao máximo: %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at minimum: %d"
-msgstr ""
+msgstr "O campo de visión está ao mínimo: %d"
#: src/client/game.cpp
#, c-format
msgid "Volume changed to %d%%"
-msgstr ""
+msgstr "Volume cambiado a %d%%"
#: src/client/game.cpp
msgid "Wireframe shown"
-msgstr ""
+msgstr "Estrutura de arames mostrada"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr ""
+msgstr "O zoom está actualmente desactivado polo xogo ou mod"
#: src/client/game.cpp
msgid "ok"
-msgstr ""
+msgstr "ok"
#: src/client/gameui.cpp
msgid "Chat hidden"
-msgstr ""
+msgstr "Chat oculto"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr ""
+msgstr "Chat visible"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr ""
+msgstr "HUD oculto"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr ""
+msgstr "HUD visible"
#: src/client/gameui.cpp
msgid "Profiler hidden"
-msgstr ""
+msgstr "Análise do mundo oculta"
#: src/client/gameui.cpp
#, c-format
msgid "Profiler shown (page %d of %d)"
-msgstr ""
+msgstr "Análise do mundo visible (páx. %d de %d)"
#: src/client/keycode.cpp
msgid "Apps"
-msgstr ""
+msgstr "Aplicaciones"
#: src/client/keycode.cpp
msgid "Backspace"
-msgstr ""
+msgstr "Retroceso"
#: src/client/keycode.cpp
msgid "Caps Lock"
-msgstr ""
+msgstr "Bloq Maiús"
#: src/client/keycode.cpp
msgid "Control"
-msgstr ""
+msgstr "Control"
#: src/client/keycode.cpp
msgid "Down"
-msgstr ""
+msgstr "Abaixo"
#: src/client/keycode.cpp
msgid "End"
-msgstr ""
+msgstr "Fin"
#: src/client/keycode.cpp
msgid "Erase EOF"
-msgstr ""
+msgstr "Borrar EOF"
#: src/client/keycode.cpp
msgid "Execute"
-msgstr ""
+msgstr "Executar"
#: src/client/keycode.cpp
msgid "Help"
-msgstr ""
+msgstr "Axuda"
#: src/client/keycode.cpp
msgid "Home"
-msgstr ""
+msgstr "Inicio"
#: src/client/keycode.cpp
msgid "IME Accept"
-msgstr ""
+msgstr "Aceptar IME"
#: src/client/keycode.cpp
msgid "IME Convert"
-msgstr ""
+msgstr "Converter IME"
#: src/client/keycode.cpp
msgid "IME Escape"
-msgstr ""
+msgstr "Saír do IME"
#: src/client/keycode.cpp
msgid "IME Mode Change"
-msgstr ""
+msgstr "Cambiar modo do IME"
#: src/client/keycode.cpp
msgid "IME Nonconvert"
-msgstr ""
+msgstr "Non converter IME"
#: src/client/keycode.cpp
msgid "Insert"
-msgstr ""
+msgstr "Inserir"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Left"
-msgstr ""
+msgstr "Esquerda"
#: src/client/keycode.cpp
msgid "Left Button"
-msgstr ""
+msgstr "Botón esquerdo"
#: src/client/keycode.cpp
msgid "Left Control"
-msgstr ""
+msgstr "Ctrl esq."
#: src/client/keycode.cpp
msgid "Left Menu"
-msgstr ""
+msgstr "Menú esquerdo"
#: src/client/keycode.cpp
msgid "Left Shift"
-msgstr ""
+msgstr "Shift esq."
#: src/client/keycode.cpp
msgid "Left Windows"
-msgstr ""
+msgstr "Win. esq."
#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
-msgstr ""
+msgstr "Menú"
#: src/client/keycode.cpp
msgid "Middle Button"
-msgstr ""
+msgstr "Botón central"
#: src/client/keycode.cpp
msgid "Num Lock"
-msgstr ""
+msgstr "Bloq. núm."
#: src/client/keycode.cpp
msgid "Numpad *"
-msgstr ""
+msgstr "Teclado numérico *"
#: src/client/keycode.cpp
msgid "Numpad +"
-msgstr ""
+msgstr "Teclado numérico +"
#: src/client/keycode.cpp
msgid "Numpad -"
-msgstr ""
+msgstr "Teclado numérico -"
#: src/client/keycode.cpp
msgid "Numpad ."
-msgstr ""
+msgstr "Teclado numérico ."
#: src/client/keycode.cpp
msgid "Numpad /"
-msgstr ""
+msgstr "Teclado numérico /"
#: src/client/keycode.cpp
msgid "Numpad 0"
-msgstr ""
+msgstr "Teclado numérico 0"
#: src/client/keycode.cpp
msgid "Numpad 1"
-msgstr ""
+msgstr "Teclado numérico 1"
#: src/client/keycode.cpp
msgid "Numpad 2"
-msgstr ""
+msgstr "Teclado numérico 2"
#: src/client/keycode.cpp
msgid "Numpad 3"
-msgstr ""
+msgstr "Teclado numérico 3"
#: src/client/keycode.cpp
msgid "Numpad 4"
-msgstr ""
+msgstr "Teclado numérico 4"
#: src/client/keycode.cpp
msgid "Numpad 5"
-msgstr ""
+msgstr "Teclado numérico 5"
#: src/client/keycode.cpp
msgid "Numpad 6"
-msgstr ""
+msgstr "Teclado numérico 6"
#: src/client/keycode.cpp
msgid "Numpad 7"
-msgstr ""
+msgstr "Teclado numérico 7"
#: src/client/keycode.cpp
msgid "Numpad 8"
-msgstr ""
+msgstr "Teclado numérico 8"
#: src/client/keycode.cpp
msgid "Numpad 9"
-msgstr ""
+msgstr "Teclado numérico 9"
#: src/client/keycode.cpp
msgid "OEM Clear"
-msgstr ""
+msgstr "Limpar OEM"
#: src/client/keycode.cpp
msgid "Page down"
-msgstr ""
+msgstr "Avance páx."
#: src/client/keycode.cpp
msgid "Page up"
-msgstr ""
+msgstr "Retroceso pax."
#: src/client/keycode.cpp
msgid "Pause"
-msgstr ""
+msgstr "Pausa"
#: src/client/keycode.cpp
msgid "Play"
-msgstr ""
+msgstr "Xogar"
#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
-msgstr ""
+msgstr "Impr. pant."
#: src/client/keycode.cpp
msgid "Return"
-msgstr ""
+msgstr "Enter"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Right"
-msgstr ""
+msgstr "Dereita"
#: src/client/keycode.cpp
msgid "Right Button"
-msgstr ""
+msgstr "Botón dereito"
#: src/client/keycode.cpp
msgid "Right Control"
-msgstr ""
+msgstr "Ctrl der."
#: src/client/keycode.cpp
msgid "Right Menu"
-msgstr ""
+msgstr "Menú dereito"
#: src/client/keycode.cpp
msgid "Right Shift"
-msgstr ""
+msgstr "Shift der."
#: src/client/keycode.cpp
msgid "Right Windows"
-msgstr ""
+msgstr "Win. der."
#: src/client/keycode.cpp
msgid "Scroll Lock"
-msgstr ""
+msgstr "Bloq. Despr."
#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
-msgstr ""
+msgstr "Seleccionar"
#: src/client/keycode.cpp
msgid "Shift"
-msgstr ""
+msgstr "Shift"
#: src/client/keycode.cpp
msgid "Sleep"
-msgstr ""
+msgstr "Suspender"
#: src/client/keycode.cpp
msgid "Snapshot"
-msgstr ""
+msgstr "Instantánea"
#: src/client/keycode.cpp
msgid "Space"
-msgstr ""
+msgstr "Espazo"
#: src/client/keycode.cpp
msgid "Tab"
-msgstr ""
+msgstr "Tabulador"
#: src/client/keycode.cpp
msgid "Up"
-msgstr ""
+msgstr "Arriba"
#: src/client/keycode.cpp
msgid "X Button 1"
-msgstr ""
+msgstr "X Botón 1"
#: src/client/keycode.cpp
msgid "X Button 2"
-msgstr ""
+msgstr "X Botón 2"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Zoom"
-msgstr ""
+msgstr "Zoom"
#: src/client/minimap.cpp
msgid "Minimap hidden"
-msgstr ""
+msgstr "Minimapa oculto"
#: src/client/minimap.cpp
#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr ""
+msgstr "Minimapa en modo radar, Zoom x%d"
#: src/client/minimap.cpp
#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr ""
+msgstr "Minimapa en modo superficie, Zoom x%d"
#: src/client/minimap.cpp
msgid "Minimap in texture mode"
-msgstr ""
+msgstr "Minimapa en modo textura"
#: src/gui/guiChatConsole.cpp
msgid "Failed to open webpage"
-msgstr ""
+msgstr "Erro ao abrir páxina web"
#: 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 ""
+msgstr "Abrindo páxina web"
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
-msgstr ""
+msgstr "Continuar"
#: src/gui/guiKeyChangeMenu.cpp
msgid "\"Aux1\" = climb down"
-msgstr ""
+msgstr "\"Aux1\" = baixar"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
-msgstr ""
+msgstr "Avance automático"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
-msgstr ""
+msgstr "Salto automático"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Aux1"
-msgstr ""
+msgstr "Aux1"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
-msgstr ""
+msgstr "Atrás"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Block bounds"
-msgstr ""
+msgstr "Lím. bloques"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
-msgstr ""
+msgstr "Cambiar cámara"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
-msgstr ""
+msgstr "Chat"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Command"
-msgstr ""
+msgstr "Comando"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Console"
-msgstr ""
+msgstr "Consola"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. range"
-msgstr ""
+msgstr "Dism. alcance"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
-msgstr ""
+msgstr "Baixar volume"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
-msgstr ""
+msgstr "Con 2 veces \"saltar\" voas"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Drop"
-msgstr ""
+msgstr "Soltar"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Forward"
-msgstr ""
+msgstr "Adiante"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. range"
-msgstr ""
+msgstr "Aum. alcance"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. volume"
-msgstr ""
+msgstr "Subir volume"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inventory"
-msgstr ""
+msgstr "Inventario"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Jump"
-msgstr ""
+msgstr "Saltar"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Key already in use"
-msgstr ""
+msgstr "A tecla xa está en uso"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
-msgstr ""
+msgstr "Comando local"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Mute"
-msgstr ""
+msgstr "Silenciar"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Next item"
-msgstr ""
+msgstr "Seg. obxecto"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Prev. item"
-msgstr ""
+msgstr "Obxecto ant."
#: src/gui/guiKeyChangeMenu.cpp
msgid "Range select"
-msgstr ""
+msgstr "Sel. alcance"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Screenshot"
-msgstr ""
+msgstr "Captura"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Sneak"
-msgstr ""
+msgstr "Ir agachado"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
-msgstr ""
+msgstr "Alt. HUD"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle chat log"
-msgstr ""
+msgstr "Alt. rexistro chat"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
-msgstr ""
+msgstr "Alt. correr"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fly"
-msgstr ""
+msgstr "Alt. voo"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fog"
-msgstr ""
+msgstr "Alt. néboa"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle minimap"
-msgstr ""
+msgstr "Alt. minimapa"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
-msgstr ""
+msgstr "Modo espectar"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle pitchmove"
-msgstr ""
+msgstr "Alt. rot. vertical"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
-msgstr ""
+msgstr "Unha tecla"
#: src/gui/guiPasswordChange.cpp
msgid "Change"
-msgstr ""
-
-#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr ""
+msgstr "Cambiar"
#: src/gui/guiPasswordChange.cpp
msgid "New Password"
-msgstr ""
+msgstr "Novo"
#: src/gui/guiPasswordChange.cpp
msgid "Old Password"
-msgstr ""
+msgstr "Anterior contrasinal"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Os contrasinais non coinciden!"
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
-msgstr ""
+msgstr "Pechar"
#: src/gui/guiVolumeChange.cpp
msgid "Muted"
-msgstr ""
+msgstr "Silenciado"
#: 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 ""
+msgstr "Son: %d%%"
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
@@ -2082,11 +2196,24 @@ msgstr ""
msgid "LANG_CODE"
msgstr "gl"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Escolle un nome!"
+
#: 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 ""
+"(Android) Corrixe a posición do joystick virtual.\n"
+"Se está desactivado, o joystick virtual centrarase na posición do primeiro "
+"toque."
#: src/settings_translation_file.cpp
msgid ""
@@ -2094,6 +2221,9 @@ msgid ""
"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
+"(Android) Use o joystick virtual para activar o botón \"Aux1\".\n"
+"Se está activado, o joystick virtual tamén tocará o botón \"Aux1\" cando "
+"estea fóra do círculo principal."
#: src/settings_translation_file.cpp
msgid ""
@@ -2106,6 +2236,17 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
+"(X,Y,Z) compensación do fractal do centro do mundo en unidades de 'escala'.\n"
+"Pódese usar para mover un punto desexado a (0, 0) e para crear un\n"
+"punto de reaparición adecuado, ou para permitir \"aproximarse\" a un\n"
+"punto desexado aumentando a \"escala\".\n"
+"O valor predeterminado está axustado para un punto de aparición adecuado "
+"para Mandelbrot\n"
+"conxuntos con parámetros predeterminados, pode ser necesario modificar "
+"noutras\n"
+"situacións.\n"
+"Intervalo aproximadamente entre -2 e 2. Multiplique por \"escala\" para a "
+"compensación nos nós."
#: src/settings_translation_file.cpp
msgid ""
@@ -2117,56 +2258,66 @@ 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) Escala fractal en nós\n"
+"O tamaño real do fractal será de 2 a 3 veces maior.\n"
+"Estes números poden ser moi grandes, pero o fractal\n"
+"non ten que caber no mundo.\n"
+"Aumenta estes valores para indagar nos detalles do fractal.\n"
+"O valor por defecto é para axustar verticalmente a forma e que sexa "
+"adecuada\n"
+"para unha illa, establece os 3 números iguais para a forma inicial."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of ridged mountains."
-msgstr ""
+msgstr "Ruído 2D que controla a forma/tamaño das montañas escarpadas."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr ""
+msgstr "Ruído 2D que controla a forma/tamaño dos outeiros."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
-msgstr ""
+msgstr "Ruído 2D que controla a forma/tamaño das montañas inclinadas."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
-msgstr ""
+msgstr "Ruído 2D que controla o tamaño/frecuencia das cordilleiras montañosas."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr ""
+msgstr "Ruído 2D que controla o tamaño/frecuencia dos outeiros."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
-msgstr ""
+msgstr "Ruído 2D que controla o tamaño/frecuencia das cordilleiras de paso."
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
-msgstr ""
+msgstr "Ruído 2D que localiza os vales fluviais e canles dos ríos."
#: src/settings_translation_file.cpp
msgid "3D clouds"
-msgstr ""
+msgstr "Nubes 3D"
#: src/settings_translation_file.cpp
msgid "3D mode"
-msgstr ""
+msgstr "Modo 3D"
#: src/settings_translation_file.cpp
msgid "3D mode parallax strength"
-msgstr ""
+msgstr "Forza de paralaxe en modo 3D"
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
-msgstr ""
+msgstr "Ruído 3D que define cavernas xigantes."
#: src/settings_translation_file.cpp
msgid ""
"3D noise defining mountain structure and height.\n"
"Also defines structure of floatland mountain terrain."
msgstr ""
+"Ruído 3D que define a estrutura e a altura da montaña.\n"
+"Tamén define a estrutura do terreo montañoso flotante."
#: src/settings_translation_file.cpp
msgid ""
@@ -2175,22 +2326,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 ""
+"Ruído 3D que define a estrutura dos terreos flotantes.\n"
+"Se se modifica a partir do valor por defecto, é posible que necesite a "
+"\"escala\" de ruído (0,7 por defecto).\n"
+"para ser axustado, xa que o tapering flotante funciona mellor cando este "
+"ruído ten\n"
+"un intervalo de valores de aproximadamente -2,0 a 2,0."
#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
-msgstr ""
+msgstr "Ruído 3D que define a estrutura das paredes do canón do río."
#: src/settings_translation_file.cpp
msgid "3D noise defining terrain."
-msgstr ""
+msgstr "Ruído 3D que define o terreo."
#: src/settings_translation_file.cpp
msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
msgstr ""
+"Ruído 3D que define saíntes de montañas, acantilados, etc. Normalmente "
+"pequenas variacións."
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr ""
+msgstr "Ruído 3D que determina a cantidade de calabozos por chunk."
#: src/settings_translation_file.cpp
msgid ""
@@ -2205,56 +2364,74 @@ msgid ""
"- pageflip: quadbuffer based 3d.\n"
"Note that the interlaced mode requires shaders to be enabled."
msgstr ""
+"Soporte 3D.\n"
+"Modos admitidos actualmente:\n"
+"- none: ningún efecto 3D.\n"
+"- anaglyph: sistema de cor Ciano/Magenta (lentes 3D azul e vermelho).\n"
+"- interlaced: sistema interlazado (lentes polarizadas).\n"
+"- topbottom: divide a pantalla en dous: unha encima e a outra debaixo.\n"
+"- sidebyside: divide a pantalla en dous: lado a lado.\n"
+" - crossview: 3D de ollos cruzados.\n"
+" - pageflip: quadbuffer basado en 3D.\n"
+"Ten en conta que o modo interlazado precisa que os sombreadores estean "
+"activados."
+
+#: src/settings_translation_file.cpp
+msgid "3d"
+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 ""
+"Semente aleatoria para un novo mundo (deixar en branco para que sexa "
+"aleatoria).\n"
+"Será sustituída ao crearse un novo mundo no menú principal."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
-msgstr ""
+msgstr "Mostrarase unha mensaxe a todos os clientes cando o servidor falle."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
-msgstr ""
+msgstr "Mostrarase unha mensaxe a todos os clientes cando o servidor peche."
#: src/settings_translation_file.cpp
msgid "ABM interval"
-msgstr ""
+msgstr "Intervalo ABM"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "Límite de tempo para MBA"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
-msgstr ""
+msgstr "Límite absoluto de bloques en proceso de emerxer"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
-msgstr ""
+msgstr "Aceleración no aire"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
-msgstr ""
+msgstr "Aceleración da gravidade, en nós por segundo."
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
-msgstr ""
+msgstr "Modificadores de bloques activos"
#: src/settings_translation_file.cpp
msgid "Active block management interval"
-msgstr ""
+msgstr "Intervalo de administración de bloques activos"
#: src/settings_translation_file.cpp
msgid "Active block range"
-msgstr ""
+msgstr "Rango de bloque activo"
#: src/settings_translation_file.cpp
msgid "Active object send range"
-msgstr ""
+msgstr "Rango de envío en obxetos activos"
#: src/settings_translation_file.cpp
msgid ""
@@ -2262,20 +2439,28 @@ msgid ""
"Leave this blank to start a local server.\n"
"Note that the address field in the main menu overrides this setting."
msgstr ""
+"Enderezo ao que se conectar.\n"
+"Deixa isto en branco para iniciar un servidor local.\n"
+"Teña en conta que o campo de enderezo do menú principal anula esta "
+"configuración."
#: src/settings_translation_file.cpp
msgid "Adds particles when digging a node."
-msgstr ""
+msgstr "Añade partículas ao excavar un nó."
#: src/settings_translation_file.cpp
msgid ""
"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
"screens."
msgstr ""
+"Axusta a configuración de ppp á túa pantalla (no X11/Android non) p. ex. "
+"para pantallas 4K."
#: src/settings_translation_file.cpp
msgid "Adjust the detected display density, used for scaling UI elements."
msgstr ""
+"Axusta a densidade de visualización detectada, usada para escalar os "
+"elementos da IU."
#: src/settings_translation_file.cpp
#, c-format
@@ -2286,10 +2471,20 @@ msgid ""
"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
"to be sure) creates a solid floatland layer."
msgstr ""
+"Axusta a densidade da capa flotante.\n"
+"Aumentar o valor para aumentar a densidade. Pode ser positivo ou negativo.\n"
+"Valor = 0,0: o 50 % do volume é terreo flotante.\n"
+"Valor = 2.0 (pode ser maior dependendo de 'mgv7_np_floatland', probar\n"
+"para estar seguro) crea una capa sólida de terreo flotante."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Añadir nome de obxeto"
#: src/settings_translation_file.cpp
msgid "Advanced"
-msgstr ""
+msgstr "Avanzado"
#: src/settings_translation_file.cpp
msgid ""
@@ -2299,60 +2494,69 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
+"Altera a curva de luz aplicándolle \"corrección gamma\".\n"
+"Os valores máis altos fan que os niveis de luz medio e inferior sexan máis "
+"brillantes.\n"
+"O valor \"1,0\" deixa a curva de luz inalterada.\n"
+"Isto só ten máis efecto na luz do día e na artificia,\n"
+"ten moi pouco efecto sobre a luz nocturna natural."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
-msgstr ""
+#, fuzzy
+msgid "Always fly fast"
+msgstr "Sempre voar e correr"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
-msgstr ""
+msgstr "Oclusión ambiental gamma"
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr ""
+msgstr "Cantidade de mensaxes que un xogador pode enviar en 10 segundos."
#: src/settings_translation_file.cpp
msgid "Amplifies the valleys."
-msgstr ""
+msgstr "Amplifica os vales."
#: src/settings_translation_file.cpp
msgid "Anisotropic filtering"
-msgstr ""
+msgstr "Filtrado anisotrópico"
#: src/settings_translation_file.cpp
msgid "Announce server"
-msgstr ""
+msgstr "Anunciar o servidor"
#: src/settings_translation_file.cpp
msgid "Announce to this serverlist."
-msgstr ""
+msgstr "Anuncar en esta lista de servidores."
#: src/settings_translation_file.cpp
msgid "Append item name"
-msgstr ""
+msgstr "Añadir nome de obxeto"
#: src/settings_translation_file.cpp
msgid "Append item name to tooltip."
-msgstr ""
+msgstr "Añadir nome do obxecto á descripción."
#: src/settings_translation_file.cpp
msgid "Apple trees noise"
-msgstr ""
+msgstr "Ruído das maceiras"
#: src/settings_translation_file.cpp
msgid "Arm inertia"
-msgstr ""
+msgstr "Inercia do brazo"
#: src/settings_translation_file.cpp
msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
msgstr ""
+"Inercia do brazo proporciona un movementomáis realista\n"
+"do brazo cando a cámara se move."
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
-msgstr ""
+msgstr "Preguntar para reconectar logo dunha caída de conexión"
#: src/settings_translation_file.cpp
msgid ""
@@ -2368,106 +2572,127 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
+"A esta distancia, o servidor optimizará de forma agresiva a que bloques se "
+"envían\n"
+"clientes.\n"
+"Os valores pequenos poden mellorar moito o rendemento, a costa de\n"
+"fallos visibles de renderizado (algúns bloques non se mostrarán baixo a auga "
+"nin nas covas,\n"
+"así como ás veces en chán).\n"
+"Establecer isto nun valor maior que \"max_block_send_distance\" desactiva "
+"isto\n"
+"optimización.\n"
+"Indicado en bloques de mapas (16 nós)."
#: src/settings_translation_file.cpp
-msgid "Automatic forward key"
+msgid "Audio"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Automatic forward key"
+msgstr "Tecla de avance automático"
+
+#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
-msgstr ""
+msgstr "Saltar obstáculos de un só no automáticamente."
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
-msgstr ""
+msgstr "Informar automáticamente á lista do servidor."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
-msgstr ""
+msgstr "Autogardar o tamaño da pantalla"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
-msgstr ""
+msgstr "Modo de autoescalado"
#: src/settings_translation_file.cpp
msgid "Aux1 key"
-msgstr ""
+msgstr "Tecla Aux1"
#: src/settings_translation_file.cpp
msgid "Aux1 key for climbing/descending"
-msgstr ""
+msgstr "Tecla Aux1 para escalar/descender"
#: src/settings_translation_file.cpp
msgid "Backward key"
-msgstr ""
+msgstr "Tecla retroceso"
#: src/settings_translation_file.cpp
msgid "Base ground level"
-msgstr ""
+msgstr "Nivel do chán base"
#: src/settings_translation_file.cpp
msgid "Base terrain height."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
+msgstr "Altura base do terreo."
#: src/settings_translation_file.cpp
msgid "Basic privileges"
-msgstr ""
+msgstr "Permisos básicos"
#: src/settings_translation_file.cpp
msgid "Beach noise"
-msgstr ""
+msgstr "Ruído da praia"
#: src/settings_translation_file.cpp
msgid "Beach noise threshold"
-msgstr ""
+msgstr "Límite de ruído de praia"
#: src/settings_translation_file.cpp
msgid "Bilinear filtering"
-msgstr ""
+msgstr "Filtrado bilineal"
#: src/settings_translation_file.cpp
msgid "Bind address"
-msgstr ""
+msgstr "Vincular enderezo"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
-msgstr ""
+#, fuzzy
+msgid "Biome API noise parameters"
+msgstr "Parámetros de ruído de humidade e temperatura da API de bioma"
#: src/settings_translation_file.cpp
msgid "Biome noise"
-msgstr ""
+msgstr "Ruído de bioma"
#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
+msgstr "Distancia de optimización do envío de bloques"
+
+#: src/settings_translation_file.cpp
+msgid "Bobbing"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
-msgstr ""
+msgstr "Camiño das fontes negras e cursivas"
#: src/settings_translation_file.cpp
msgid "Bold and italic monospace font path"
-msgstr ""
+msgstr "Camiño das fontes negras e cursivas monoespaciadas"
#: src/settings_translation_file.cpp
msgid "Bold font path"
-msgstr ""
+msgstr "Camiño das fontes negras"
#: src/settings_translation_file.cpp
msgid "Bold monospace font path"
-msgstr ""
+msgstr "Camiño das fontes negras monoespaciadas"
#: src/settings_translation_file.cpp
msgid "Build inside player"
-msgstr ""
+msgstr "Colocar bloque na posición do xogador"
#: src/settings_translation_file.cpp
msgid "Builtin"
-msgstr ""
+msgstr "Integrado"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Cambiar cámara"
#: src/settings_translation_file.cpp
msgid ""
@@ -2476,182 +2701,196 @@ msgid ""
"Increasing can reduce artifacting on weaker GPUs.\n"
"0.1 = Default, 0.25 = Good value for weaker tablets."
msgstr ""
+"Distancia do plano próximo á cámara en nós, entre 0 e 0,25\n"
+"Só funciona en plataformas GLES. A maioría dos usuarios non terán que "
+"cambiar isto.\n"
+"Aumentalo pode reducir a aparición de artefactos en GPU máis débiles.\n"
+"0,1 = Por defecto, 0,25 = Bo valor para tabletas débiles."
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
-msgstr ""
+msgstr "Suavizado de cámara"
#: src/settings_translation_file.cpp
msgid "Camera smoothing in cinematic mode"
-msgstr ""
+msgstr "Suavizado de cámara en modo cinematográfico"
#: src/settings_translation_file.cpp
msgid "Camera update toggle key"
-msgstr ""
+msgstr "Alt. actualización de cámara"
#: src/settings_translation_file.cpp
msgid "Cave noise"
-msgstr ""
+msgstr "Ruído de covas"
#: src/settings_translation_file.cpp
msgid "Cave noise #1"
-msgstr ""
+msgstr "Ruído de covas #1"
#: src/settings_translation_file.cpp
msgid "Cave noise #2"
-msgstr ""
+msgstr "Sonido de covas #2"
#: src/settings_translation_file.cpp
msgid "Cave width"
-msgstr ""
+msgstr "Ancho da cova"
#: src/settings_translation_file.cpp
msgid "Cave1 noise"
-msgstr ""
+msgstr "Sonido de cova1"
#: src/settings_translation_file.cpp
msgid "Cave2 noise"
-msgstr ""
+msgstr "Sonido de cova2"
#: src/settings_translation_file.cpp
msgid "Cavern limit"
-msgstr ""
+msgstr "Limite da cova"
#: src/settings_translation_file.cpp
msgid "Cavern noise"
-msgstr ""
+msgstr "Ruído da cova"
#: src/settings_translation_file.cpp
msgid "Cavern taper"
-msgstr ""
+msgstr "Conicidade da cova"
#: src/settings_translation_file.cpp
msgid "Cavern threshold"
-msgstr ""
+msgstr "Límite da cova"
#: src/settings_translation_file.cpp
msgid "Cavern upper limit"
-msgstr ""
+msgstr "Límite superior da cova"
#: 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 ""
+"Rango de aumento do centro da curva de luz.\n"
+"0,0 é o nível mínimo de luz, 1,0 é o nível máximo."
#: src/settings_translation_file.cpp
msgid "Chat command time message threshold"
-msgstr ""
+msgstr "Límite de tempo de mensaxe de comando de chat"
#: src/settings_translation_file.cpp
msgid "Chat commands"
-msgstr ""
+msgstr "Comandos do chat"
#: src/settings_translation_file.cpp
msgid "Chat font size"
-msgstr ""
+msgstr "Tamaño da fonte do chat"
#: src/settings_translation_file.cpp
msgid "Chat key"
-msgstr ""
+msgstr "Tecla do chat"
#: src/settings_translation_file.cpp
msgid "Chat log level"
-msgstr ""
+msgstr "Nivel de rexistro do chat"
#: src/settings_translation_file.cpp
msgid "Chat message count limit"
-msgstr ""
+msgstr "Límite de mensaxes do chat"
#: src/settings_translation_file.cpp
msgid "Chat message format"
-msgstr ""
+msgstr "Formato da mensaxe do chat"
#: src/settings_translation_file.cpp
msgid "Chat message kick threshold"
-msgstr ""
+msgstr "Límite da mensaxe de expulsión"
#: src/settings_translation_file.cpp
msgid "Chat message max length"
-msgstr ""
+msgstr "Lonxitude máxima da mensaxe do chat"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
-msgstr ""
+msgstr "Alt. chat"
#: src/settings_translation_file.cpp
msgid "Chat weblinks"
-msgstr ""
+msgstr "Ligazóns web do chat"
#: src/settings_translation_file.cpp
msgid "Chunk size"
-msgstr ""
+msgstr "Tamaño do chunk"
#: src/settings_translation_file.cpp
msgid "Cinematic mode"
-msgstr ""
+msgstr "Modo cinematográfico"
#: src/settings_translation_file.cpp
msgid "Cinematic mode key"
-msgstr ""
+msgstr "Tecla para modo cinematográfico"
#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
-msgstr ""
+msgstr "Limpar texturas transparentes"
#: src/settings_translation_file.cpp
msgid ""
"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
"output."
msgstr ""
+"Ligazóns da web que se poden clicar (clic do medio ou Ctrl + botón "
+"esquerdo). Actívanse na saída da consola do chat."
#: src/settings_translation_file.cpp
msgid "Client"
-msgstr ""
+msgstr "Cliente"
#: src/settings_translation_file.cpp
msgid "Client and Server"
-msgstr ""
+msgstr "Cliente e servidor"
#: src/settings_translation_file.cpp
msgid "Client modding"
-msgstr ""
+msgstr "Personalización do cliente"
#: src/settings_translation_file.cpp
msgid "Client side modding restrictions"
-msgstr ""
+msgstr "Restricións para modear no lado do cliente"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
-msgstr ""
+msgstr "Restrición do rango de busca do nodo do lado do cliente"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Personalización do cliente"
#: src/settings_translation_file.cpp
msgid "Climbing speed"
-msgstr ""
+msgstr "Velocidade de escalada"
#: src/settings_translation_file.cpp
msgid "Cloud radius"
-msgstr ""
+msgstr "Radio de nubes"
#: src/settings_translation_file.cpp
msgid "Clouds"
-msgstr ""
+msgstr "Nubes"
#: src/settings_translation_file.cpp
msgid "Clouds are a client side effect."
-msgstr ""
+msgstr "As nubes son un efecto do lado do cliente."
#: src/settings_translation_file.cpp
msgid "Clouds in menu"
-msgstr ""
+msgstr "Nubes no menú"
#: src/settings_translation_file.cpp
msgid "Colored fog"
-msgstr ""
+msgstr "Néboa colorida"
#: src/settings_translation_file.cpp
msgid "Colored shadows"
-msgstr ""
+msgstr "Sombras coloridas"
#: src/settings_translation_file.cpp
msgid ""
@@ -2663,22 +2902,36 @@ msgid ""
"These flags are independent from Minetest versions,\n"
"so see a full list at https://content.minetest.net/help/content_flags/"
msgstr ""
+"Lista de marcas separadas por comas para ocultar no repositorio de contido.\n"
+"\"Non libre\" pódese usar para ocultar paquetes que non sexan \"software "
+"libre\",\n"
+"segundo a definición da Free Software Foundation.\n"
+"Tamén podes especificar clasificacións de contido.\n"
+"Estas marcas son independentes das versións de Minetest,\n"
+"así que consulta unha lista completa en https://content.minetest.net/help/"
+"content_flags/"
#: 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 ""
+"Lista separada por comas de mods que poden acceder ás API de HTTP, que\n"
+"permiten cargar e descargar datos a/desde Internet."
#: 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 ""
+"Lista separada por comas de mods de confianza que poden acceder funcións "
+"inseguras\n"
+"incluso cando a seguridade mod está activada (cía "
+"request_insecure_environment())."
#: src/settings_translation_file.cpp
msgid "Command key"
-msgstr ""
+msgstr "Tecla comando"
#: src/settings_translation_file.cpp
msgid ""
@@ -2687,6 +2940,10 @@ msgid ""
"0 - least compression, fastest\n"
"9 - best compression, slowest"
msgstr ""
+"Nivel de compresión para usar ao gardar mundos no disco.\n"
+"-1 - usa o nivel de compresión por defecto\n"
+"0 - menor compresión, máis rápido\n"
+"9 - mellor compresión, máis lenta"
#: src/settings_translation_file.cpp
msgid ""
@@ -2695,56 +2952,67 @@ msgid ""
"0 - least compression, fastest\n"
"9 - best compression, slowest"
msgstr ""
+"Nivel de compresión para usar ao mandar mundos ao cliente:\n"
+"-1 - usa o nivel de compresión por defecto\n"
+"0 - menor compresión, máis rápido\n"
+"9 - mellor compresión, máis lenta"
#: src/settings_translation_file.cpp
msgid "Connect glass"
-msgstr ""
+msgstr "Unificar vidro"
#: src/settings_translation_file.cpp
msgid "Connect to external media server"
-msgstr ""
+msgstr "Conectar a un servidor multimedia externo"
#: src/settings_translation_file.cpp
msgid "Connects glass if supported by node."
-msgstr ""
+msgstr "Unifica o vidro se o bloque é compatible."
#: src/settings_translation_file.cpp
msgid "Console alpha"
-msgstr ""
+msgstr "Opacidade da consola"
#: src/settings_translation_file.cpp
msgid "Console color"
-msgstr ""
+msgstr "Cor da consola"
#: src/settings_translation_file.cpp
msgid "Console height"
-msgstr ""
+msgstr "Altura da consola"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "Contido do repositorio en liña"
#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
-msgstr ""
+msgstr "Lista negra de marcas de ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "Descargas máximas simultáneas para ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
-msgstr ""
+msgstr "Ligazón URL de ContentDB"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
-msgstr ""
+msgstr "Avance contínuo"
#: 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 ""
+"Movemento contínuo cara diante. Actívase coa tecla de autoavance.\n"
+"Preme a tecla de autoavance outra vez ou retrocede para desactivar."
#: src/settings_translation_file.cpp
msgid "Controls"
-msgstr ""
+msgstr "Controis"
#: src/settings_translation_file.cpp
msgid ""
@@ -2752,18 +3020,23 @@ msgid ""
"Examples:\n"
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
msgstr ""
+"Controla a duración do ciclo de día/noite.\n"
+"Exemplos:\n"
+"72 = 20min, 360 = 4min, 1 = 24hour, 0 = Día/noite permanece inalterado."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
-msgstr ""
+msgstr "Controla a inclinación/profundidade dos lagos."
#: src/settings_translation_file.cpp
msgid "Controls steepness/height of hills."
-msgstr ""
+msgstr "Controla a inclinación/altura dos outeiros."
#: src/settings_translation_file.cpp
msgid ""
@@ -2771,96 +3044,105 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Controla o ancho dos túneis. Un valor menor crea túneis máis anchos.\n"
+"Valor >= 10.0 desactiva completamente a xeración de túneis e evita\n"
+"cálculos intensivos de ruído."
#: src/settings_translation_file.cpp
msgid "Crash message"
-msgstr ""
+msgstr "Mensaxe de erro"
#: src/settings_translation_file.cpp
msgid "Creative"
-msgstr ""
+msgstr "Creativo"
#: src/settings_translation_file.cpp
msgid "Crosshair alpha"
-msgstr ""
+msgstr "Opacidade do cursor"
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"This also applies to the object crosshair."
msgstr ""
+"Opacidade do cursor (entre 0 e 255).\n"
+"Tamén pasa o menos con a cruz do obxecto."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
-msgstr ""
+msgstr "Cor da cruz"
#: src/settings_translation_file.cpp
msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Cor da cruz (R, G, B)\n"
+"Tamén pasa o mesmo coa cruz do obxecto"
#: src/settings_translation_file.cpp
msgid "DPI"
-msgstr ""
+msgstr "DPI"
#: src/settings_translation_file.cpp
msgid "Damage"
-msgstr ""
+msgstr "Dano"
#: src/settings_translation_file.cpp
msgid "Debug info toggle key"
-msgstr ""
+msgstr "Alt. inf. para depuración"
#: src/settings_translation_file.cpp
msgid "Debug log file size threshold"
-msgstr ""
+msgstr "Límite do tamaño do ficheiro de información de depuración"
#: src/settings_translation_file.cpp
msgid "Debug log level"
-msgstr ""
+msgstr "Nivel de rexistro de depuración"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
+msgid "Dec. volume key"
+msgstr "Tecla baixar volume"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
-msgstr ""
+msgstr "Intervalo de servidor dedicado"
#: src/settings_translation_file.cpp
msgid "Default acceleration"
-msgstr ""
+msgstr "Aceleración por defecto"
#: src/settings_translation_file.cpp
msgid "Default game"
-msgstr ""
+msgstr "Xogo por defecto"
#: 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 ""
+"Xogo por defecto ao crear un novo mundo.\n"
+"Sobreescribirase ao crear un mundo desde o menú principal."
#: src/settings_translation_file.cpp
msgid "Default password"
-msgstr ""
+msgstr "Contrasinal por defecto"
#: src/settings_translation_file.cpp
msgid "Default privileges"
-msgstr ""
+msgstr "Permisos por defecto"
#: src/settings_translation_file.cpp
msgid "Default report format"
-msgstr ""
+msgstr "Formato de reporte por defecto"
#: src/settings_translation_file.cpp
msgid "Default stack size"
-msgstr ""
+msgstr "Tamaño do agrupamento de obxectos por defecto"
#: src/settings_translation_file.cpp
msgid ""
@@ -2868,168 +3150,198 @@ msgid ""
"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
"but also uses more resources."
msgstr ""
+"Define a calidade do filtrado de sombras.\n"
+"Isto simula un efecto de sombras suaves aplicando un PCF ou Poisson disk\n"
+"pero tamén consume máis recursos."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
-msgstr ""
+msgstr "Define as áreas onde as árbores teñen mazás."
#: src/settings_translation_file.cpp
msgid "Defines areas with sandy beaches."
-msgstr ""
+msgstr "Define áreas con praias areosas."
#: src/settings_translation_file.cpp
msgid "Defines distribution of higher terrain and steepness of cliffs."
msgstr ""
+"Define a distribución de terreos más elevados e a inclinación de acantilados."
#: src/settings_translation_file.cpp
msgid "Defines distribution of higher terrain."
-msgstr ""
+msgstr "Define a distribución de terreos elevados."
#: src/settings_translation_file.cpp
msgid "Defines full size of caverns, smaller values create larger caverns."
msgstr ""
+"Define o tamaño de covas. Valores máis baixos crean covas máis grandes."
#: src/settings_translation_file.cpp
msgid "Defines large-scale river channel structure."
-msgstr ""
+msgstr "Define estruturas de canles fluviais a gran escala."
#: src/settings_translation_file.cpp
msgid "Defines location and terrain of optional hills and lakes."
-msgstr ""
+msgstr "Define a localización e terreo de outeiros e lagos opcionais."
#: src/settings_translation_file.cpp
msgid "Defines the base ground level."
-msgstr ""
+msgstr "Define o nivel base do terreo."
#: src/settings_translation_file.cpp
msgid "Defines the depth of the river channel."
-msgstr ""
+msgstr "Define a profundidade da canle do río."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
msgstr ""
+"Define a distancia máxima de transferencia de xogadores en bloques (0 = "
+"ilimitado)."
#: src/settings_translation_file.cpp
msgid "Defines the width of the river channel."
-msgstr ""
+msgstr "Define a largura da canle do río."
#: src/settings_translation_file.cpp
msgid "Defines the width of the river valley."
-msgstr ""
+msgstr "Define a largura do val do río."
#: src/settings_translation_file.cpp
msgid "Defines tree areas and tree density."
-msgstr ""
+msgstr "Define as áreas arbóreas e a densidade das árbores."
#: 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 ""
+"Atraso entre as actualizacións de mallas do cliente en ms. Incrementar isto "
+"consegue\n"
+"reducir a cantidade de actualizacións de mallas, reducindo así a "
+"inestabilidade nos clientes máis lentos."
#: src/settings_translation_file.cpp
msgid "Delay in sending blocks after building"
-msgstr ""
+msgstr "Atraso no envío de bloques logo de construír"
#: src/settings_translation_file.cpp
msgid "Delay showing tooltips, stated in milliseconds."
-msgstr ""
+msgstr "Atraso para mostrar información de herramientas, en milisegundos."
#: src/settings_translation_file.cpp
msgid "Deprecated Lua API handling"
-msgstr ""
+msgstr "Manexo de funcións de API Lua obsoletas"
#: src/settings_translation_file.cpp
msgid "Depth below which you'll find giant caverns."
-msgstr ""
+msgstr "Profundidade na que atoparás cavernas xigantes."
#: src/settings_translation_file.cpp
msgid "Depth below which you'll find large caves."
-msgstr ""
+msgstr "Profundidade na que atoparás covas grandes."
#: src/settings_translation_file.cpp
msgid ""
"Description of server, to be displayed when players join and in the "
"serverlist."
msgstr ""
+"Descripción do servidor. Móstrase na lista de servidores e cando os "
+"xogadores únense."
#: src/settings_translation_file.cpp
msgid "Desert noise threshold"
-msgstr ""
+msgstr "Límite do ruído do deserto"
#: 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 ""
+"Os desertos aparecen cando np_biome supera este valor.\n"
+"Cando a marca 'snowbiomes' actívase, isto é ignorado."
#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
-msgstr ""
+msgstr "Desincronizar a animación dos bloques"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Decoracións"
#: src/settings_translation_file.cpp
msgid "Dig key"
-msgstr ""
+msgstr "Tecla romper bloque"
#: src/settings_translation_file.cpp
msgid "Digging particles"
-msgstr ""
+msgstr "Partículas ao excavar"
#: src/settings_translation_file.cpp
msgid "Disable anticheat"
-msgstr ""
+msgstr "Desactivar anticheat"
#: src/settings_translation_file.cpp
msgid "Disallow empty passwords"
-msgstr ""
+msgstr "Non permitir contrasinais baleiros"
#: src/settings_translation_file.cpp
msgid "Display Density Scaling Factor"
+msgstr "Factor de escala de densidade de exposición"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
-msgstr ""
+msgstr "Nome do servidor. Mostrarase na lista de servidores."
#: src/settings_translation_file.cpp
msgid "Double tap jump for fly"
-msgstr ""
+msgstr "Pulsar dúas veces \"salto\" para voar"
#: src/settings_translation_file.cpp
msgid "Double-tapping the jump key toggles fly mode."
-msgstr ""
+msgstr "Pulsar dúas veces \"salto\" serve para activar e desactivar o voo."
#: src/settings_translation_file.cpp
msgid "Drop item key"
-msgstr ""
+msgstr "Tecla para soltar obxecto"
#: src/settings_translation_file.cpp
msgid "Dump the mapgen debug information."
-msgstr ""
+msgstr "Mostrar información de depuración do xerador de terreos."
#: src/settings_translation_file.cpp
msgid "Dungeon maximum Y"
-msgstr ""
+msgstr "Nº máx. de calabozos Y"
#: src/settings_translation_file.cpp
msgid "Dungeon minimum Y"
-msgstr ""
+msgstr "Nº mín. de calabozos Y"
#: src/settings_translation_file.cpp
msgid "Dungeon noise"
-msgstr ""
+msgstr "Sonido de calabozos"
#: src/settings_translation_file.cpp
msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"Activar axuda IPv6 (para o cliente e o servidor).\n"
+"É preciso para que as conexións IPv6 funcionen."
#: src/settings_translation_file.cpp
msgid ""
"Enable Lua modding support on client.\n"
"This support is experimental and API can change."
msgstr ""
+"Activar a axuda de mods de Lua no cliente.\n"
+"Isto é experimental e a API pode cambiar."
#: src/settings_translation_file.cpp
msgid ""
@@ -3037,55 +3349,61 @@ msgid ""
"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
"filtering."
msgstr ""
+"Activar filtrado \"poisson disk\".\n"
+"Utiliza o \"poisson disk\" para proxectar sombras suaves cando o valor sexa "
+"verdadero. Senón, utiliza o filtrado PCF."
#: src/settings_translation_file.cpp
msgid ""
"Enable colored shadows.\n"
"On true translucent nodes cast colored shadows. This is expensive."
msgstr ""
+"Activar sombras coloridas.\n"
+"Se o valor é verdadeiro, os bloques traslúcidos proxectarán sombras "
+"coloridas. Esta opción precisa de moitos recursos."
#: src/settings_translation_file.cpp
msgid "Enable console window"
-msgstr ""
+msgstr "Activar a xanela da consola"
#: src/settings_translation_file.cpp
msgid "Enable creative mode for all players"
-msgstr ""
+msgstr "Activar o modo creativo para todos os xogadores"
#: src/settings_translation_file.cpp
msgid "Enable joysticks"
+msgstr "Activar joysticks"
+
+#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
-msgstr ""
+msgstr "Activar axuda para as canles de mods."
#: src/settings_translation_file.cpp
msgid "Enable mod security"
-msgstr ""
+msgstr "Activar seguridade dos mods"
#: src/settings_translation_file.cpp
msgid "Enable players getting damage and dying."
-msgstr ""
+msgstr "Activar dano e morte dos xogadores."
#: 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 ""
+msgstr "Activar a entrada de comandos aleatoria (só para tests)."
#: src/settings_translation_file.cpp
msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
+"Activar a iluminación suave con oclusión de ambiente simple.\n"
+"Desactivar para velocidade ou vistas diferentes."
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3096,6 +3414,10 @@ msgid ""
"to new servers, but they may not support all new features that you are "
"expecting."
msgstr ""
+"Activar para impedir a conexión de clientes antigos.\n"
+"Os clientes máis antigos son compatibles porque non fallarán ao conectarse\n"
+"a novos servidores, pero é posible que non sexan compatibles todas as "
+"funcións novas que esperan."
#: src/settings_translation_file.cpp
msgid ""
@@ -3104,18 +3426,26 @@ msgid ""
"textures)\n"
"when connecting to the server."
msgstr ""
+"Activa o uso do servidor multimedia remoto (se o proporciona o servidor).\n"
+"Os servidores remotos ofrecen unha forma máis rápida de descargar datos (por "
+"exemplo, texturas)\n"
+"ao conectarse ao servidor."
#: src/settings_translation_file.cpp
msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Activar os objectos buffer de vértice.\n"
+"Isto debería mellorar muito o rendimento gráfico."
#: 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 ""
+"Activa o balanceo de vista e canto o fai.\n"
+"Por exemplo: 0 para nada de balanceo; 1.0 para o normal; 2.0 para o dobre."
#: src/settings_translation_file.cpp
msgid ""
@@ -3123,6 +3453,9 @@ msgid ""
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
+"Activa/desactiva a execución dun servidor IPv6.\n"
+"Ignorado se establécese bind_address.\n"
+"É preciso enable_ipv6 para activalo."
#: src/settings_translation_file.cpp
msgid ""
@@ -3131,18 +3464,22 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"Activa o mapeo de tons fílmicos 'Uncharted 2' de Hable.\n"
+"Simula a curva de ton da película fotográfica e como esta se aproxima á\n"
+"aparición de imaxes de alto rango dinámico. O contraste de gama media é\n"
+"un poulllo mellor, pois as luces e as sombras comprímense gradualmente."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
-msgstr ""
+msgstr "Activa a animación de obxetos no inventario."
#: src/settings_translation_file.cpp
msgid "Enables caching of facedir rotated meshes."
-msgstr ""
+msgstr "Activa o rexistro de mallas xiradas."
#: src/settings_translation_file.cpp
msgid "Enables minimap."
-msgstr ""
+msgstr "Activa o minimapa."
#: src/settings_translation_file.cpp
msgid ""
@@ -3151,20 +3488,32 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Activa o son.\n"
+"Se está desactivado, deixarán de escoitarse todos os sons e os sons do xogo\n"
+"xa non funcionarán.\n"
+"Para cambiar esta configuración, é necesario reiniciar."
#: 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 ""
+"Permite compensar para reducir a carga da CPU ou aumenta o desempeño de "
+"renderización\n"
+"a costa de pequenos falllos visuais que non afectan á hora de xogar."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "Perfil dos vales"
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
-msgstr ""
+msgstr "Intervalo de exposición dos datos da perfilaxe do motor"
#: src/settings_translation_file.cpp
msgid "Entity methods"
-msgstr ""
+msgstr "Métodos de entidade"
#: src/settings_translation_file.cpp
msgid ""
@@ -3175,56 +3524,70 @@ 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 ""
+"Expoñente do estreitamento da terreo flotante. Altera este comportamento.\n"
+"O valor = 1,0 crea un estrechamento uniforme e lineal.\n"
+"Os valores > 1.0 crean un afilamento suave adecuado para a separación "
+"predeterminada\n"
+"cháns flotantes.\n"
+"Os valores < 1,0 (por exemplo 0,25) crean un nivel de superficie máis "
+"definido con\n"
+"cháns baixas máis planas, adecuadas para unha capa sólida de terreo flotante."
#: src/settings_translation_file.cpp
-msgid "FPS when unfocused or paused"
+msgid "FPS"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS when unfocused or paused"
+msgstr "FPS cando está en segundo plano ou pausado"
+
+#: src/settings_translation_file.cpp
msgid "FSAA"
-msgstr ""
+msgstr "FSAA"
#: src/settings_translation_file.cpp
msgid "Factor noise"
-msgstr ""
+msgstr "Factor de ruído"
#: src/settings_translation_file.cpp
msgid "Fall bobbing factor"
-msgstr ""
+msgstr "Factor de balanceo en caída"
#: src/settings_translation_file.cpp
msgid "Fallback font path"
-msgstr ""
+msgstr "Camiño da fonte alternativa"
#: src/settings_translation_file.cpp
msgid "Fast key"
-msgstr ""
+msgstr "Tecla de correr"
#: src/settings_translation_file.cpp
msgid "Fast mode acceleration"
-msgstr ""
+msgstr "Aceleración no modo rápido"
#: src/settings_translation_file.cpp
msgid "Fast mode speed"
-msgstr ""
+msgstr "Velocidade do modo rápido"
#: src/settings_translation_file.cpp
msgid "Fast movement"
-msgstr ""
+msgstr "Movemento rápido"
#: src/settings_translation_file.cpp
msgid ""
"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
+"Movemento rápido (vía tecla \"Aux1\").\n"
+"É preciso o permiso \"fast\" no servidor."
#: src/settings_translation_file.cpp
msgid "Field of view"
-msgstr ""
+msgstr "Campo de visión"
#: src/settings_translation_file.cpp
msgid "Field of view in degrees."
-msgstr ""
+msgstr "Campo de visión en grados."
#: src/settings_translation_file.cpp
msgid ""
@@ -3232,18 +3595,21 @@ msgid ""
"the\n"
"Multiplayer Tab."
msgstr ""
+"Ficheiro no cartafol client/serverlist/ que contén os seus servidores "
+"favoritos.\n"
+"Móstranse na xanela de Xogar en liña."
#: src/settings_translation_file.cpp
msgid "Filler depth"
-msgstr ""
+msgstr "Profundidade de recheo"
#: src/settings_translation_file.cpp
msgid "Filler depth noise"
-msgstr ""
+msgstr "Ruído da profundidade de recheo"
#: src/settings_translation_file.cpp
msgid "Filmic tone mapping"
-msgstr ""
+msgstr "Mapa de tons fílmico"
#: src/settings_translation_file.cpp
msgid ""
@@ -3252,112 +3618,129 @@ msgid ""
"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 ""
+"As texturas filtradas poden combinar valores RGB con áreas totalmente "
+"transparentes.\n"
+"que os optimizadores PNG adoitan descartar, a miúdo resultando en\n"
+"bordos claros ou escuros en texturas transparentes. Aplique un filtro para "
+"limpalo\n"
+"no tempo de carga da textura. Isto habilitarase automaticamente se o "
+"\"mipmapping \"está activado."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr ""
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Suavizado:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
msgstr ""
+"Primeiro de 4 ruídos 2D que xuntos definen a altura de outeiros/montañas."
#: src/settings_translation_file.cpp
msgid "First of two 3D noises that together define tunnels."
-msgstr ""
+msgstr "Primeiro de 2 ruídos 3D que xuntos definen túneis."
#: src/settings_translation_file.cpp
msgid "Fixed map seed"
-msgstr ""
+msgstr "Semente de mapa fixa"
#: src/settings_translation_file.cpp
msgid "Fixed virtual joystick"
-msgstr ""
+msgstr "Joystick virtual fixo"
#: src/settings_translation_file.cpp
msgid "Floatland density"
-msgstr ""
+msgstr "Densidade dos terreos flotantes"
#: src/settings_translation_file.cpp
msgid "Floatland maximum Y"
-msgstr ""
+msgstr "Valor máximo de Y dos terreos flotantes"
#: src/settings_translation_file.cpp
msgid "Floatland minimum Y"
-msgstr ""
+msgstr "Valor mínimo de Y dos terreos flotantes"
#: src/settings_translation_file.cpp
msgid "Floatland noise"
-msgstr ""
+msgstr "Ruído de terreos flotantes"
#: src/settings_translation_file.cpp
msgid "Floatland taper exponent"
-msgstr ""
+msgstr "Expoñente de conicidade de terreos flotantes"
#: src/settings_translation_file.cpp
msgid "Floatland tapering distance"
-msgstr ""
+msgstr "Distancia cónica de terreos flotantes"
#: src/settings_translation_file.cpp
msgid "Floatland water level"
-msgstr ""
+msgstr "Nivel da auga de terreos flotantes"
#: src/settings_translation_file.cpp
msgid "Fly key"
-msgstr ""
+msgstr "Tecla de voo"
#: src/settings_translation_file.cpp
msgid "Flying"
-msgstr ""
+msgstr "Voar"
#: src/settings_translation_file.cpp
msgid "Fog"
-msgstr ""
+msgstr "Néboa"
#: src/settings_translation_file.cpp
msgid "Fog start"
-msgstr ""
+msgstr "Inicio de néboa"
#: src/settings_translation_file.cpp
msgid "Fog toggle key"
-msgstr ""
+msgstr "Alt. néboa"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Tamaño da fonte"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "Fonte en negra por defecto"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Fonte en cursiva por defecto"
#: src/settings_translation_file.cpp
msgid "Font shadow"
-msgstr ""
+msgstr "Sombra da fonte"
#: src/settings_translation_file.cpp
msgid "Font shadow alpha"
-msgstr ""
+msgstr "Opacidade da sombra da fonte"
#: src/settings_translation_file.cpp
msgid "Font size"
-msgstr ""
+msgstr "Tamaño da fonte"
#: src/settings_translation_file.cpp
msgid "Font size divisible by"
-msgstr ""
+msgstr "Tamaño da fonte divisible por"
#: src/settings_translation_file.cpp
msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
-msgstr ""
+msgstr "Tamaño da fonte por defecto. 1 unidade = 1 píxel en 96 DPI"
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
-msgstr ""
+msgstr "Tamaño da fonte monoespacial. 1 unidade = 1 píxel en 96 DPI"
#: 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 ""
+"Tamaño da fonte do texto do chat reciente e do indicador do chat en puntos "
+"(pt).\n"
+"O valor 0 utilizará o tamaño de fonte por defecto."
#: src/settings_translation_file.cpp
msgid ""
@@ -3369,6 +3752,14 @@ msgid ""
"be\n"
"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
msgstr ""
+"Para fontes de estilo píxel que non se escalan ben, isto garante que se "
+"utilicen os tamaños de letra\n"
+"con este tipo de letra sempre serán divisible por este valor, en píxeles. "
+"Por exemplo,\n"
+"un tipo de letra de 16 píxeles de alto debería ter este valor establecido en "
+"16, polo que só o será\n"
+"tamaño 16, 32, 48, etc., polo que un mod que solicite un tamaño de 25 obterá "
+"32."
#: src/settings_translation_file.cpp
msgid ""
@@ -3376,69 +3767,74 @@ msgid ""
"placeholders:\n"
"@name, @message, @timestamp (optional)"
msgstr ""
+"Formato dos mensajes do chat do xogador. As seguintes cadeas son válidas:\n"
+"@name, @message, @timestamp (opcional)"
#: src/settings_translation_file.cpp
msgid "Format of screenshots."
-msgstr ""
+msgstr "Formato das capturas de pantalla."
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Color"
-msgstr ""
+msgstr "Cor de fondo por defecto para formularios"
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Opacity"
-msgstr ""
+msgstr "Opacidade de fondo por defecto para formularios"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Color"
-msgstr ""
+msgstr "Cor de fondo para formularios en pantalla completa"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Opacity"
-msgstr ""
+msgstr "Opacidade dos formularios en pantalla completa"
#: src/settings_translation_file.cpp
msgid "Formspec default background color (R,G,B)."
-msgstr ""
+msgstr "Cor de fondo por defecto para os formularios (R, G, B)."
#: src/settings_translation_file.cpp
msgid "Formspec default background opacity (between 0 and 255)."
-msgstr ""
+msgstr "Opacidade por defecto do fondo dos formularios (entre 0 e 255)."
#: src/settings_translation_file.cpp
msgid "Formspec full-screen background color (R,G,B)."
-msgstr ""
+msgstr "Cor de fondo para os formularios en pantalla completa(R, G, B)."
#: src/settings_translation_file.cpp
msgid "Formspec full-screen background opacity (between 0 and 255)."
-msgstr ""
+msgstr "Opacidade de fondo por defecto para os formularios (entre 0 e 255)."
#: src/settings_translation_file.cpp
msgid "Forward key"
-msgstr ""
+msgstr "Tecla avance"
#: src/settings_translation_file.cpp
msgid "Fourth of 4 2D noises that together define hill/mountain range height."
-msgstr ""
+msgstr "Cuarto de 4 ruídos 2D que xuntos definen a altura das montañas."
#: src/settings_translation_file.cpp
msgid "Fractal type"
-msgstr ""
+msgstr "Tipo de fractal"
#: src/settings_translation_file.cpp
msgid "Fraction of the visible distance at which fog starts to be rendered"
-msgstr ""
+msgstr "Fracción de distancia visible na que a néboa comeza a aparecer"
#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
msgstr ""
+"Distancia máxima de xeración de bloques para clientes, en mapblocks (16x3 "
+"bloques)."
#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
msgstr ""
+"Distancia máxima de envío de bloques para clientes, en mapblocks (16 nós)."
#: src/settings_translation_file.cpp
msgid ""
@@ -3448,77 +3844,122 @@ 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 ""
+"Onde ata os clientes receben información dos obxectos, indicado en bloques "
+"(16 nós).\n"
+"\n"
+"Establecer isto máis grande que active_block_range tamén fará que o "
+"servidor\n"
+"manteña os obxectos activos ata esta distancia na dirección que o\n"
+"xogador está mirando. (Isto pode evitar que os enemigos desaparezan "
+"repentinamente)"
#: src/settings_translation_file.cpp
msgid "Full screen"
-msgstr ""
+msgstr "Pantalla completa"
#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
-msgstr ""
+msgstr "Modo de pantalla completa."
#: src/settings_translation_file.cpp
msgid "GUI scaling"
-msgstr ""
+msgstr "Escala de IGU"
#: src/settings_translation_file.cpp
msgid "GUI scaling filter"
-msgstr ""
+msgstr "Filtro de escala de IGU"
#: src/settings_translation_file.cpp
msgid "GUI scaling filter txr2img"
+msgstr "Filtro de escala de IGU \"txr2img\""
+
+#: src/settings_translation_file.cpp
+msgid "GUIs"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Global callbacks"
+#, fuzzy
+msgid "Gamepads"
+msgstr "Xogos"
+
+#: src/settings_translation_file.cpp
+msgid "General"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Global callbacks"
+msgstr "Chamadas de retorno globais"
+
+#: 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 ""
+"Atributos globais do xerador de mundos.\n"
+"En Mapgen v6 o marcador \"decoracións\" controla todas as decoracións "
+"excepto as árbores\n"
+"e herba da selva, en todos os demais xeradores de mundos este marcador "
+"controla todas as decoracións."
#: src/settings_translation_file.cpp
msgid ""
"Gradient of light curve at maximum light level.\n"
"Controls the contrast of the highest light levels."
msgstr ""
+"Gradiente da curva de luz no nivel máximo de luz.\n"
+"Controla o contraste dos niveis de luz máis altos."
#: src/settings_translation_file.cpp
msgid ""
"Gradient of light curve at minimum light level.\n"
"Controls the contrast of the lowest light levels."
msgstr ""
+"Gradiente da curva de luz no nivel mímino de luz.\n"
+"Controla o contraste dos niveis de luz máis baixos."
#: src/settings_translation_file.cpp
msgid "Graphics"
-msgstr ""
+msgstr "Gráficos"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Gráficos"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Gráficos"
#: src/settings_translation_file.cpp
msgid "Gravity"
-msgstr ""
+msgstr "Gravidade"
#: src/settings_translation_file.cpp
msgid "Ground level"
-msgstr ""
+msgstr "Nivel do chán"
#: src/settings_translation_file.cpp
msgid "Ground noise"
-msgstr ""
+msgstr "Ruído do chán"
#: src/settings_translation_file.cpp
msgid "HTTP mods"
-msgstr ""
+msgstr "Mods HTTP"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "Escala de IGU"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
-msgstr ""
+msgstr "Alt. HUD"
#: src/settings_translation_file.cpp
msgid ""
@@ -3527,6 +3968,11 @@ msgid ""
"- log: mimic and log backtrace of deprecated call (default).\n"
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
+"Manexo de chamadas obsoletas da API de Lua:\n"
+"- none: non rexistrar chamadas obsoletas\n"
+"- log: imitar e rexistrar o rexistro de chamadas obsoletas (por defecto).\n"
+"- error: abortar ao usar a chamada obsoleta (suxerido para desenvolvedores "
+"do mod)."
#: src/settings_translation_file.cpp
msgid ""
@@ -3536,213 +3982,226 @@ msgid ""
"call).\n"
"* Instrument the sampler being used to update the statistics."
msgstr ""
+"Ter o propio instrumento de análise do mundor:\n"
+"* Instrumentar unha función baleira.\n"
+"Isto estima a sobrecarga que a instrumentación está engadindo (chamada de "
+"función +1).\n"
+"* Instrumentar a mostraxe que se utiliza para actualizar as estatísticas."
#: src/settings_translation_file.cpp
msgid "Heat blend noise"
-msgstr ""
+msgstr "Ruído de mestura de calor"
#: src/settings_translation_file.cpp
msgid "Heat noise"
-msgstr ""
+msgstr "Ruído da calor"
#: src/settings_translation_file.cpp
msgid ""
"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
+"Componente de altura do tamaño inicial xanela inicial. Ignórase en pantalla "
+"completa."
#: src/settings_translation_file.cpp
msgid "Height noise"
-msgstr ""
+msgstr "Altura do ruído"
#: src/settings_translation_file.cpp
msgid "Height select noise"
-msgstr ""
+msgstr "Altura do ruído seleccionado"
#: src/settings_translation_file.cpp
msgid "Hill steepness"
-msgstr ""
+msgstr "Desnivel do outeiro"
#: src/settings_translation_file.cpp
msgid "Hill threshold"
-msgstr ""
+msgstr "Límites do outeiro"
#: src/settings_translation_file.cpp
msgid "Hilliness1 noise"
-msgstr ""
+msgstr "Sonido de outeiros 1"
#: src/settings_translation_file.cpp
msgid "Hilliness2 noise"
-msgstr ""
+msgstr "Sonido de outeiros 2"
#: src/settings_translation_file.cpp
msgid "Hilliness3 noise"
-msgstr ""
+msgstr "Sonido de outeiros 3"
#: src/settings_translation_file.cpp
msgid "Hilliness4 noise"
-msgstr ""
+msgstr "Sonido de outeiros 4"
#: src/settings_translation_file.cpp
msgid "Homepage of server, to be displayed in the serverlist."
-msgstr ""
+msgstr "Páxina web do servidor. Mostrarase na lista de servidores."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal acceleration in air when jumping or falling,\n"
"in nodes per second per second."
msgstr ""
+"Aceleración horizontal no aire ao saltar ou caer,\n"
+"en nodos por segundo."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration in fast mode,\n"
"in nodes per second per second."
msgstr ""
+"Aceleración horizontal e vertical en modo rápido,\n"
+"en nodos por segundo."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration on ground or when climbing,\n"
"in nodes per second per second."
msgstr ""
+"Aceleración horizontal e vertical no chán ou ao escalar,\n"
+"en nodos por segundo."
#: src/settings_translation_file.cpp
msgid "Hotbar next key"
-msgstr ""
+msgstr "Tecla de próximo obxecto na barra principal"
#: src/settings_translation_file.cpp
msgid "Hotbar previous key"
-msgstr ""
+msgstr "Tecla de obxecto anterior na barra principal"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 1 key"
-msgstr ""
+msgstr "Tecla de rañura 1"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 10 key"
-msgstr ""
+msgstr "Tecla de rañura 10"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 11 key"
-msgstr ""
+msgstr "Tecla de rañura 11"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 12 key"
-msgstr ""
+msgstr "Tecla de rañura 12"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 13 key"
-msgstr ""
+msgstr "Tecla de rañura 13"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 14 key"
-msgstr ""
+msgstr "Tecla de rañura 14"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 15 key"
-msgstr ""
+msgstr "Tecla de rañura 15"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 16 key"
-msgstr ""
+msgstr "Tecla de rañura 16"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 17 key"
-msgstr ""
+msgstr "Tecla de rañura 17"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 18 key"
-msgstr ""
+msgstr "Tecla de rañura 18"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 19 key"
-msgstr ""
+msgstr "Tecla de rañura 19"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 2 key"
-msgstr ""
+msgstr "Tecla de rañura 2"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 20 key"
-msgstr ""
+msgstr "Tecla de rañura 20"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 21 key"
-msgstr ""
+msgstr "Tecla de rañura 21"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 22 key"
-msgstr ""
+msgstr "Tecla de rañura 22"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 23 key"
-msgstr ""
+msgstr "Tecla de rañura 23"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 24 key"
-msgstr ""
+msgstr "Tecla de rañura 24"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 25 key"
-msgstr ""
+msgstr "Tecla de rañura 25"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 26 key"
-msgstr ""
+msgstr "Tecla de rañura 26"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 27 key"
-msgstr ""
+msgstr "Tecla de rañura 27"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 28 key"
-msgstr ""
+msgstr "Tecla de rañura 28"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 29 key"
-msgstr ""
+msgstr "Tecla de rañura 29"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 3 key"
-msgstr ""
+msgstr "Tecla de rañura 3"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 30 key"
-msgstr ""
+msgstr "Tecla de rañura 30"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 31 key"
-msgstr ""
+msgstr "Tecla de rañura 31"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 32 key"
-msgstr ""
+msgstr "Tecla de rañura 32"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 4 key"
-msgstr ""
+msgstr "Tecla de rañura 4"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 5 key"
-msgstr ""
+msgstr "Tecla de rañura 5"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 6 key"
-msgstr ""
+msgstr "Tecla de rañura 6"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 7 key"
-msgstr ""
+msgstr "Tecla de rañura 7"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 8 key"
-msgstr ""
+msgstr "Tecla de rañura 8"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 9 key"
-msgstr ""
+msgstr "Tecla de rañura 9"
#: src/settings_translation_file.cpp
msgid "How deep to make rivers."
-msgstr ""
+msgstr "Profundidade dos ríos."
#: src/settings_translation_file.cpp
msgid ""
@@ -3750,48 +4209,67 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Velocidade das ondas dos líquidos. Máis alto = máis rápido.\n"
+"Se o valor é negativo, as ondas moveranse cara atrás.\n"
+"É necesario activar a ondulación dos líquidos."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
+"Tempo de espera do servidor en eliminar bloques non utilizados.\n"
+"Canta maior resolución maior fluidez, aínda que consume máis memoria RAM."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "Diminúe isto para aumentar a resistencia do líquido ao movemento."
#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
-msgstr ""
+msgstr "Largura dos ríos."
#: src/settings_translation_file.cpp
msgid "Humidity blend noise"
-msgstr ""
+msgstr "Ruído de mestura da humidade"
#: src/settings_translation_file.cpp
msgid "Humidity noise"
-msgstr ""
+msgstr "Ruído da humidade"
#: src/settings_translation_file.cpp
msgid "Humidity variation for biomes."
-msgstr ""
+msgstr "Variación da humidade dos biomas."
#: src/settings_translation_file.cpp
msgid "IPv6"
-msgstr ""
+msgstr "IPv6"
#: src/settings_translation_file.cpp
msgid "IPv6 server"
-msgstr ""
+msgstr "Servidor 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 ""
+"Se os FPS fosen máis altos que isto, limítaos suspendendo o programa\n"
+"para non gastar a potencia da CPU innecesariamente."
#: 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 ""
+"Se está desactivado, a tecla \"Aux1\" usarase para voar rápido se o modo voo "
+"e rápido están\n"
+"ativados."
#: src/settings_translation_file.cpp
msgid ""
@@ -3801,6 +4279,12 @@ msgid ""
"invisible\n"
"so that the utility of noclip mode is reduced."
msgstr ""
+"Se está activado, o servidor realizará a eliminación de oclusión de bloques "
+"de mapa baseándose\n"
+"na posición dos ollos do xogador. Isto pode reducir o número de bloques\n"
+"enviado ao cliente entre un 50 % e un 80 %. O cliente xa non recibirá o máis "
+"invisible,\n"
+"de xeito que se reduce a utilidade do modo espectador."
#: src/settings_translation_file.cpp
msgid ""
@@ -3808,6 +4292,9 @@ msgid ""
"nodes.\n"
"This requires the \"noclip\" privilege on the server."
msgstr ""
+"Se se activa xunto co modo voar, o xogador poderá voar a través de nós "
+"sólidos.\n"
+"Isto require o permiso \"noclip\" no servidor."
#: src/settings_translation_file.cpp
msgid ""
@@ -3815,32 +4302,58 @@ msgid ""
"and\n"
"descending."
msgstr ""
+"Se está activada, a tecla \"Aux1\" utilízase en lugar da tecla \"Agacharse\" "
+"para baixar e\n"
+"descender."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Activar confirmación de rexistro ao se conectar ao servidor\n"
+"Se está desactivado, rexistrarase unha nova conta automáticamente."
#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
+"Se está activado, as accións rexístranse para logo podelas desfacer.\n"
+"Esta opción só funciona cando se inicia o servidor."
#: src/settings_translation_file.cpp
msgid "If enabled, disable cheat prevention in multiplayer."
msgstr ""
+"Se está activado, o sistema de prevención de trampas no modo de xogo en liña "
+"desactivarase."
#: 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 ""
+"Se está activado, os datos non válidos do mundo non farán que o servidor "
+"peche.\n"
+"Actívao só se sabes o que fas."
#: src/settings_translation_file.cpp
msgid ""
"If enabled, makes move directions relative to the player's pitch when flying "
"or swimming."
msgstr ""
+"Se está activado, fai direccións de movemento relativas á rotación vertical "
+"do xogador cando voa ou nada."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
+"Se está activado, os novos xogadores non poderán unirse con contrasinais "
+"baleiros."
#: src/settings_translation_file.cpp
msgid ""
@@ -3848,6 +4361,9 @@ msgid ""
"you stand.\n"
"This is helpful when working with nodeboxes in small areas."
msgstr ""
+"Se está activado, pode colocar bloques na posición (pés + nivel dos ollos) "
+"onde está.\n"
+"Isto é útil cando se traballa con caixas de nós en áreas pequenas."
#: src/settings_translation_file.cpp
msgid ""
@@ -3855,12 +4371,17 @@ msgid ""
"limited\n"
"to this distance from the player to the node."
msgstr ""
+"Se a restrición CSM para o intervalo de nodos está activada, as chamadas "
+"get_node están limitadas\n"
+"a esta distancia do xogador ao 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 ""
+"Se a execución dun comando de chat leva máis tempo do que o especificado en\n"
+"segundos, engade a información da hora á mensaxe de comando de chat"
#: src/settings_translation_file.cpp
msgid ""
@@ -3869,112 +4390,121 @@ msgid ""
"deleting an older debug.txt.1 if it exists.\n"
"debug.txt is only moved if this setting is positive."
msgstr ""
+"Se o tamaño do ficheiro de debug.txt supera o número de megabytes "
+"especificado en\n"
+"esta configuración cando se abre, o ficheiro móvese a debug.txt.1,\n"
+"eliminando un debug.txt.1 máis antigo se existe.\n"
+"debug.txt só se move se esta configuración ten un valor positivo."
#: src/settings_translation_file.cpp
msgid "If this is set, players will always (re)spawn at the given position."
msgstr ""
+"Se isto se establece, os xogadores sempre (re) aparecerán na posición "
+"indicada."
#: src/settings_translation_file.cpp
msgid "Ignore world errors"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr ""
+msgstr "Ignorar erros do mundo"
#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
-msgstr ""
+msgstr "Opacidade do fondo da consola do chat no xogo (entre 0 e 255)."
#: src/settings_translation_file.cpp
msgid "In-game chat console background color (R,G,B)."
-msgstr ""
+msgstr "Cor do fondo da consola do chat no xogo (R, G, B)."
#: src/settings_translation_file.cpp
msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
-msgstr ""
+msgstr "Altura da consola do chat no xogo, entre 0,1 (10 %) e 1,0 (100 %)."
#: src/settings_translation_file.cpp
msgid "Inc. volume key"
-msgstr ""
+msgstr "Tecla para aumentar o volume"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
-msgstr ""
+msgstr "Velocidade vertical ao saltar, en nodos por segundo."
#: src/settings_translation_file.cpp
msgid ""
"Instrument builtin.\n"
"This is usually only needed by core/builtin contributors"
msgstr ""
+"Instrumento aplicado.\n"
+"Isto case sempre só o necesitan os contribuidores principais"
#: src/settings_translation_file.cpp
msgid "Instrument chat commands on registration."
-msgstr ""
+msgstr "Instrumento de comandos do chat no rexistro."
#: src/settings_translation_file.cpp
msgid ""
"Instrument global callback functions on registration.\n"
"(anything you pass to a minetest.register_*() function)"
msgstr ""
+"Instrumentación das funcións de chamadas de retorno globais no rexistro.\n"
+"(todo o que pasee a unha función minetest.register_*())"
#: src/settings_translation_file.cpp
msgid ""
"Instrument the action function of Active Block Modifiers on registration."
msgstr ""
+"Instrumenta a función de acción dos modificadores de bloque activos no "
+"rexistro."
#: src/settings_translation_file.cpp
msgid ""
"Instrument the action function of Loading Block Modifiers on registration."
msgstr ""
+"Instrumenta e función de acción de carga de modificadores de bloque no "
+"rexistro."
#: src/settings_translation_file.cpp
msgid "Instrument the methods of entities on registration."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr ""
+msgstr "Instrumenta os métodos das entidades durante o rexistro."
#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""
+"Intervalo para gardado de cambios importantes no mundo, indicado en segundos."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
-msgstr ""
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
+msgstr "Intervalo de envío da hora do dia aos clientes."
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
-msgstr ""
+msgstr "Animacións dos obxectos do inventario"
#: src/settings_translation_file.cpp
msgid "Inventory key"
-msgstr ""
+msgstr "Tecla de inventario"
#: src/settings_translation_file.cpp
msgid "Invert mouse"
-msgstr ""
+msgstr "Inverter rato"
#: src/settings_translation_file.cpp
msgid "Invert vertical mouse movement."
-msgstr ""
+msgstr "Inverter o movemento vertical do rato."
#: src/settings_translation_file.cpp
msgid "Italic font path"
-msgstr ""
+msgstr "Ruta da fonte cursiva"
#: src/settings_translation_file.cpp
msgid "Italic monospace font path"
-msgstr ""
+msgstr "Ruta da fonte monoespaciada en cursiva"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
-msgstr ""
+msgstr "TTL da entidade obxecto"
#: src/settings_translation_file.cpp
msgid "Iterations"
-msgstr ""
+msgstr "Iteracións"
#: src/settings_translation_file.cpp
msgid ""
@@ -3983,26 +4513,30 @@ msgid ""
"increases processing load.\n"
"At iterations = 20 this mapgen has a similar load to mapgen V7."
msgstr ""
+"Iteracións da función recursiva.\n"
+"Aumentar isto aumenta a cantidade de pequenos detalles, pero tamén\n"
+"aumenta a carga de procesamento.\n"
+"En iteracións = 20 este xerador de mundos ten unha carga similar ao da V7."
#: src/settings_translation_file.cpp
msgid "Joystick ID"
-msgstr ""
+msgstr "ID do joystick"
#: src/settings_translation_file.cpp
msgid "Joystick button repetition interval"
-msgstr ""
+msgstr "Intervalo de repetición do botón do joystick"
#: src/settings_translation_file.cpp
msgid "Joystick dead zone"
-msgstr ""
+msgstr "Zona morta do joystick"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
-msgstr ""
+msgstr "Sensibilidade do gatillo do joystick"
#: src/settings_translation_file.cpp
msgid "Joystick type"
-msgstr ""
+msgstr "Tipo de joystick"
#: src/settings_translation_file.cpp
msgid ""
@@ -4012,6 +4546,11 @@ msgid ""
"Has no effect on 3D fractals.\n"
"Range roughly -2 to 2."
msgstr ""
+"Só conxunto de Julia.\n"
+"Compoñente W da constante hipercomplexa.\n"
+"Altera a forma do fractal.\n"
+"Non ten efecto nos fractais 3D.\n"
+"Rango de aproximadamente -2 a 2."
#: src/settings_translation_file.cpp
msgid ""
@@ -4020,6 +4559,10 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
+"Só conxunto de Julia.\n"
+"Compoñente X da constante hipercomplexa.\n"
+"Altera a forma do fractal.\n"
+"Rango de aproximadamente -2 a 2."
#: src/settings_translation_file.cpp
msgid ""
@@ -4028,6 +4571,10 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
+"Só conxunto de Julia.\n"
+"Compoñente Y da constante hipercomplexa.\n"
+"Altera a forma do fractal.\n"
+"Rango de aproximadamente -2 a 2."
#: src/settings_translation_file.cpp
msgid ""
@@ -4036,30 +4583,34 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
+"Só conxunto de Julia.\n"
+"Compoñente Z da constante hipercomplexa.\n"
+"Altera a forma do fractal.\n"
+"Rango de aproximadamente -2 a 2."
#: src/settings_translation_file.cpp
msgid "Julia w"
-msgstr ""
+msgstr "Julia w"
#: src/settings_translation_file.cpp
msgid "Julia x"
-msgstr ""
+msgstr "Julia x"
#: src/settings_translation_file.cpp
msgid "Julia y"
-msgstr ""
+msgstr "Julia y"
#: src/settings_translation_file.cpp
msgid "Julia z"
-msgstr ""
+msgstr "Julia z"
#: src/settings_translation_file.cpp
msgid "Jump key"
-msgstr ""
+msgstr "Tecla de salto"
#: src/settings_translation_file.cpp
msgid "Jumping speed"
-msgstr ""
+msgstr "Velocidade de salto"
#: src/settings_translation_file.cpp
msgid ""
@@ -4067,6 +4618,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para disminuir o campo de visión.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4074,6 +4628,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para disminuir o volume.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4081,6 +4638,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para romper bloques.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4088,6 +4648,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para soltar o obxecto seleccionado.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4095,6 +4658,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para aumentar o campo de visión.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4102,6 +4668,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para aumentar o volume.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4109,6 +4678,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para saltar.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4116,6 +4688,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para moverse máis axilmente en modo rápido.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4124,6 +4699,10 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para mover o xogador cara atrás.\n"
+"Tamén desactivará o desprazamento automático cando estea activo.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4131,6 +4710,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para moverse cara adiante.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4138,6 +4720,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para moverse cara esquerda.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4145,6 +4730,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para moverse cara dereita.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4152,6 +4740,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para silenciar o xogo.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4159,6 +4750,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para abrir a xanela do chat e escribir comandos.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4166,6 +4760,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para abrir a xanela do chat e escribir comandos locales.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4173,6 +4770,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para abrir a xanela do chat.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4180,6 +4780,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para abrir o inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4187,6 +4790,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para colocar un obxecto.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4194,6 +4800,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 11 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4201,6 +4810,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 12 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4208,6 +4820,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 13 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4215,6 +4830,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 14 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4222,6 +4840,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 15 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4229,6 +4850,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 16 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4236,6 +4860,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 17 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4243,6 +4870,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 18 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4250,6 +4880,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 19 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4257,6 +4890,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 20 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4264,6 +4900,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 21 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4271,6 +4910,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 22 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4278,6 +4920,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 23 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4285,6 +4930,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 24 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4292,6 +4940,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 25 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4299,6 +4950,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 26 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4306,6 +4960,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 27 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4313,6 +4970,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 28 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4320,6 +4980,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 29 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4327,6 +4990,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 30 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4334,6 +5000,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 31 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4341,6 +5010,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 32 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4348,6 +5020,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 8 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4355,6 +5030,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 5 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4362,6 +5040,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 1 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4369,6 +5050,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 4 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4376,6 +5060,10 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar o seguinte obxecto na barra de acceso directo do "
+"inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4383,6 +5071,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 9 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4390,6 +5081,10 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar o obxecto anterior na barra de acceso directo do "
+"inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4397,6 +5092,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 2 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4404,6 +5102,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 7 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4411,6 +5112,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 6 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4418,6 +5122,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 10 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4425,6 +5132,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para seleccionar a rañura 3 do inventario.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4434,6 +5144,11 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para agacharse.\n"
+"Tamén serve para descender dentro da auga se aux1_descends está "
+"desactivado.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4441,6 +5156,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para cambiar entre a cámara en primeira e terceira persoa.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4448,6 +5166,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para facer capturas.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4455,6 +5176,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar avance automático.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4462,6 +5186,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar modo cinemático.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4469,6 +5196,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar visualización do minimapa.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4476,6 +5206,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar modo rápido.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4483,6 +5216,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar voo.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4490,6 +5226,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar modo espectador.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4497,6 +5236,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar modo de rotación horizontal.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4504,6 +5246,10 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar actualización da cámara. Usado só para o "
+"desenvolvemento.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4511,6 +5257,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar chat.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4518,6 +5267,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar visualización de información de depuración.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4525,6 +5277,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar a visualización da néboa.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4532,6 +5287,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar visualización do HUD.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4539,6 +5297,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar visualización do chat de consola largo.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4546,6 +5307,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar a análise do mundo. Emprégase para o desenvolvemento.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4553,6 +5317,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para alternar campo de visión ilimitado.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4560,46 +5327,53 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para facer zoom cando sexa posible.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-msgid "Kick players who sent more than X messages per 10 seconds."
+msgid "Keyboard and Mouse"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Kick players who sent more than X messages per 10 seconds."
+msgstr "Expulsar xogadores que enviaron máis de X mensaxes cada 10 segundos."
+
+#: src/settings_translation_file.cpp
msgid "Lake steepness"
-msgstr ""
+msgstr "Inclinación dos lagos"
#: src/settings_translation_file.cpp
msgid "Lake threshold"
-msgstr ""
+msgstr "Límite de lagos no mapa"
#: src/settings_translation_file.cpp
msgid "Language"
-msgstr ""
+msgstr "Idiomas"
#: src/settings_translation_file.cpp
msgid "Large cave depth"
-msgstr ""
+msgstr "Profundidade das covas grandes"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "Número máximo de covas grandes"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "Número mínimo de covas grandes"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "Proporción de covas grandes inundadas"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
-msgstr ""
+msgstr "Tecla da consola do chat grande"
#: src/settings_translation_file.cpp
msgid "Leaves style"
-msgstr ""
+msgstr "Apariencia das follas"
#: src/settings_translation_file.cpp
msgid ""
@@ -4608,37 +5382,55 @@ msgid ""
"- Simple: only outer faces, if defined special_tiles are used\n"
"- Opaque: disable transparency"
msgstr ""
+"Apariencia das follas:\n"
+"- Detalladas: todas as caras son visibles\n"
+"- Simples: só vense as caras externas, se se utilizan special_tiles "
+"definidos\n"
+"- Opacas: desactiva a transparencia"
#: src/settings_translation_file.cpp
msgid "Left key"
-msgstr ""
+msgstr "Tecla esquerda"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
+"Duración do tick do servidor e o intervalo no que os obxetos actualízanse "
+"polo xeral\n"
+"na rede."
#: src/settings_translation_file.cpp
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Lonxitude das ondas de líquidos.\n"
+"É necesario que a ondulación dos líquidos estea activa."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
-msgstr ""
+#, fuzzy
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
+msgstr "Periodo de tempo entre os ciclos de execución dos ABM"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
-msgstr ""
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
+msgstr "Periodo de tempo entre os ciclos de execución de NodeTimer"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
-msgstr ""
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
+msgstr "Periodo de tempo entre os ciclos de xestión de bloques activos"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -4647,32 +5439,46 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
+"Nivel de rexistro que se gardará en debug.txt:\n"
+"- <nothing> (sen rexistro)\n"
+"- none (mensaxes sen nivel)\n"
+"- error\n"
+"- warning\n"
+"- action\n"
+"- info\n"
+"- verbose"
#: src/settings_translation_file.cpp
msgid "Light curve boost"
-msgstr ""
+msgstr "Impulso da curva da luz"
#: src/settings_translation_file.cpp
msgid "Light curve boost center"
-msgstr ""
+msgstr "Centro de impulso da curva de luz"
#: src/settings_translation_file.cpp
msgid "Light curve boost spread"
-msgstr ""
+msgstr "Dispersión de impulso de curva de luz"
#: src/settings_translation_file.cpp
msgid "Light curve gamma"
-msgstr ""
+msgstr "Gamma da curva de luz"
#: src/settings_translation_file.cpp
msgid "Light curve high gradient"
-msgstr ""
+msgstr "Gradiente alto da curva de luz"
#: src/settings_translation_file.cpp
msgid "Light curve low gradient"
-msgstr ""
+msgstr "Gradiente baixo da curva de luz"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Iluminación suave"
#: src/settings_translation_file.cpp
msgid ""
@@ -4680,6 +5486,9 @@ msgid ""
"Only mapchunks completely within the mapgen limit are generated.\n"
"Value is stored per-world."
msgstr ""
+"Límite de xeración de mundos, en nós, nas 6 direccións desde (0, 0, 0).\n"
+"Só se xeran fragmentos do mundo dentro do límite.\n"
+"O valor almacénase por mundo."
#: src/settings_translation_file.cpp
msgid ""
@@ -4689,38 +5498,44 @@ msgid ""
"- Downloads performed by main menu (e.g. mod manager).\n"
"Only has an effect if compiled with cURL."
msgstr ""
+"Limita o número de solicitudes paralelas HTTP. Afecta:\n"
+"- Recuperación de medios se o servidor usa a configuración "
+"\"remote_media\".\n"
+"- Descarga da lista de servidores e anuncio do servidor.\n"
+"- Descargas realizadas polo menú principal (por exemplo, xestor de mods).\n"
+"Só ten efecto se se compila con cURL."
#: src/settings_translation_file.cpp
msgid "Liquid fluidity"
-msgstr ""
+msgstr "Fluidez dos líquidos"
#: src/settings_translation_file.cpp
msgid "Liquid fluidity smoothing"
-msgstr ""
+msgstr "Suavizado da fluidez dos líquidos"
#: src/settings_translation_file.cpp
msgid "Liquid loop max"
-msgstr ""
+msgstr "Límite de procesamento de líquidos"
#: src/settings_translation_file.cpp
msgid "Liquid queue purge time"
-msgstr ""
+msgstr "Tempo para eliminar filas de líquidos"
#: src/settings_translation_file.cpp
msgid "Liquid sinking"
-msgstr ""
+msgstr "Afundimento en líquidos"
#: src/settings_translation_file.cpp
msgid "Liquid update interval in seconds."
-msgstr ""
+msgstr "Intervalo de actualización de líquidos en segundos."
#: src/settings_translation_file.cpp
msgid "Liquid update tick"
-msgstr ""
+msgstr "Periodo de actualización dos líquidos"
#: src/settings_translation_file.cpp
msgid "Load the game profiler"
-msgstr ""
+msgstr "Cargar a análise do mundo"
#: src/settings_translation_file.cpp
msgid ""
@@ -4728,53 +5543,61 @@ msgid ""
"Provides a /profiler command to access the compiled profile.\n"
"Useful for mod developers and server operators."
msgstr ""
+"Carga a análise do mundo para recoller datos.\n"
+"Ofrece un comando /profiler para acceder ao perfil compilado.\n"
+"É útil para desenvolvedores de mods e operadores de servidores."
#: src/settings_translation_file.cpp
msgid "Loading Block Modifiers"
-msgstr ""
+msgstr "Carga de modiificadores de bloques"
#: src/settings_translation_file.cpp
msgid "Lower Y limit of dungeons."
-msgstr ""
+msgstr "Límite inferior Y de calabozos."
#: src/settings_translation_file.cpp
msgid "Lower Y limit of floatlands."
-msgstr ""
+msgstr "Límite inferior Y de terreos flotantes."
#: src/settings_translation_file.cpp
msgid "Main menu script"
-msgstr ""
+msgstr "Script do menú principal"
#: src/settings_translation_file.cpp
msgid ""
"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
msgstr ""
+"Facer que as cores da néboa e do ceo dependan do día (amencer/posta de sol) "
+"e da dirección da vista."
#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
-msgstr ""
+msgstr "Fai que todos os líquidos sexan opacos"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "Nivel de compresión do mapa para almacenamiento de disco"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "Nivel de compresión do mapa para tranferencias pola rede"
#: src/settings_translation_file.cpp
msgid "Map directory"
-msgstr ""
+msgstr "Directorio de mapas"
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen Carpathian."
msgstr ""
+"Atributos de xeración de mundos específicos do xerador de mundos carpatianos."
#: 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 ""
+"Atributos de xeración de mapas específicos de mundos planos.\n"
+"Os lagos e outeiros pódense engadir ao mundo plano ás veces."
#: src/settings_translation_file.cpp
msgid ""
@@ -4782,6 +5605,9 @@ msgid ""
"'terrain' enables the generation of non-fractal terrain:\n"
"ocean, islands and underground."
msgstr ""
+"Atributos de xeración de mundos específicos de mundos planos.\n"
+"'terreo' permite a xeración de terreos non fractales:\n"
+"océanos, illas e subterráneos."
#: src/settings_translation_file.cpp
msgid ""
@@ -4792,10 +5618,17 @@ msgid ""
"to become shallower and occasionally dry.\n"
"'altitude_dry': Reduces humidity with altitude."
msgstr ""
+"Atributos de xeración de mapas específicos de xerador de mundos con vales.\n"
+"'altitude_chill': reduce a calor coa altitude.\n"
+"'humid_rivers': aumenta a humidade arredor dos ríos.\n"
+"'vary_river_depth': se está activado, a baixa humidade e a alta calor fan os "
+"ríos\n"
+"máis profundos e ocasionalmente secos.\n"
+"'altitude_dry': reduce a humidade coa altitude."
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen v5."
-msgstr ""
+msgstr "Atributos de xeración de mundos específicos do xerador de mundos v5."
#: src/settings_translation_file.cpp
msgid ""
@@ -4804,6 +5637,11 @@ msgid ""
"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
"the 'jungles' flag is ignored."
msgstr ""
+"Atributos de xeración de mundos específicos do xerador de mundos v6.\n"
+"O marcador \"snowbiomes\" activa o novo sistema de 5 biomas.\n"
+"Cando o marcador \"snowbiomes\" está activado, as selvas están habilitadas "
+"automaticamente e\n"
+"o marcador \"selvas\" é ignorado."
#: src/settings_translation_file.cpp
msgid ""
@@ -4812,152 +5650,162 @@ msgid ""
"'floatlands': Floating land masses in the atmosphere.\n"
"'caverns': Giant caves deep underground."
msgstr ""
+"Atributos de xeración de mapas específicos do xerador de mundos v7.\n"
+"'cristas': ríos.\n"
+"'floatlands': masas terrestres flotantes na atmosfera.\n"
+"'cavernas': covas xigantes no subsolo."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
-msgstr ""
+msgstr "Límite de xeración de mapas"
#: src/settings_translation_file.cpp
msgid "Map save interval"
-msgstr ""
+msgstr "Intervalo de gardado de mapa"
#: src/settings_translation_file.cpp
msgid "Map shadows update frames"
-msgstr ""
+msgstr "Tempo de actualización das sombras do mapa"
#: src/settings_translation_file.cpp
msgid "Mapblock limit"
-msgstr ""
+msgstr "Límite do mapa de bloques"
#: src/settings_translation_file.cpp
msgid "Mapblock mesh generation delay"
-msgstr ""
+msgstr "Retraso da xeración da malla do mapa de bloques"
#: src/settings_translation_file.cpp
msgid "Mapblock mesh generator's MapBlock cache size in MB"
msgstr ""
+"Tamaño da caché do mapa de bloques do xerador da malla do mapa de bloques en "
+"MB"
#: src/settings_translation_file.cpp
msgid "Mapblock unload timeout"
-msgstr ""
+msgstr "Tempo límite de eliminación do mapa de bloques"
#: src/settings_translation_file.cpp
msgid "Mapgen Carpathian"
-msgstr ""
+msgstr "Xerador de mundos carpatianos"
#: src/settings_translation_file.cpp
msgid "Mapgen Carpathian specific flags"
-msgstr ""
+msgstr "Parámetros específicos de mundos carpatianos"
#: src/settings_translation_file.cpp
msgid "Mapgen Flat"
-msgstr ""
+msgstr "Xerador de mundos planos"
#: src/settings_translation_file.cpp
msgid "Mapgen Flat specific flags"
-msgstr ""
+msgstr "Parámetros específicos de mundos planos"
#: src/settings_translation_file.cpp
msgid "Mapgen Fractal"
-msgstr ""
+msgstr "Xerador de mundos fractais"
#: src/settings_translation_file.cpp
msgid "Mapgen Fractal specific flags"
-msgstr ""
+msgstr "Parámetros específicos de mundos fractais"
#: src/settings_translation_file.cpp
msgid "Mapgen V5"
-msgstr ""
+msgstr "Xerador de mundos v5"
#: src/settings_translation_file.cpp
msgid "Mapgen V5 specific flags"
-msgstr ""
+msgstr "Parámetros específicos do xerador de mundos v5"
#: src/settings_translation_file.cpp
msgid "Mapgen V6"
-msgstr ""
+msgstr "Xerador de mundos v6"
#: src/settings_translation_file.cpp
msgid "Mapgen V6 specific flags"
-msgstr ""
+msgstr "Parámetros específicos do xerador de mundos v6"
#: src/settings_translation_file.cpp
msgid "Mapgen V7"
-msgstr ""
+msgstr "Xerador de mundos v7"
#: src/settings_translation_file.cpp
msgid "Mapgen V7 specific flags"
-msgstr ""
+msgstr "Parámetros específicos do xerador de mundos v7"
#: src/settings_translation_file.cpp
msgid "Mapgen Valleys"
-msgstr ""
+msgstr "Xerador de mundos con vales"
#: src/settings_translation_file.cpp
msgid "Mapgen Valleys specific flags"
-msgstr ""
+msgstr "Parámetros espcíficos o xerador de mundos con vales"
#: src/settings_translation_file.cpp
msgid "Mapgen debug"
-msgstr ""
+msgstr "Depuración do xerador de mundos"
#: src/settings_translation_file.cpp
msgid "Mapgen name"
-msgstr ""
+msgstr "Nome do xerador de mundos"
#: src/settings_translation_file.cpp
msgid "Max block generate distance"
-msgstr ""
+msgstr "Distancia máxima de xeración de bloques"
#: src/settings_translation_file.cpp
msgid "Max block send distance"
-msgstr ""
+msgstr "Distancia máxima de envío de bloques"
#: src/settings_translation_file.cpp
msgid "Max liquids processed per step."
-msgstr ""
+msgstr "Máximo de líquidos procesados por paso."
#: src/settings_translation_file.cpp
msgid "Max. clearobjects extra blocks"
-msgstr ""
+msgstr "Max. clearobjects bloques extra"
#: src/settings_translation_file.cpp
msgid "Max. packets per iteration"
-msgstr ""
+msgstr "Máx. paquetes por iteración"
#: src/settings_translation_file.cpp
msgid "Maximum FPS"
-msgstr ""
+msgstr "FPS máximos"
#: src/settings_translation_file.cpp
msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
+"FPS máximos cando a xanela non está enfocada ou cando o xogo está en pausa."
#: src/settings_translation_file.cpp
msgid "Maximum distance to render shadows."
-msgstr ""
+msgstr "Distancia máxima para renderizar as sombras."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
-msgstr ""
+msgstr "Máximo de bloques cargados de maneira forzada"
#: src/settings_translation_file.cpp
msgid "Maximum hotbar width"
-msgstr ""
+msgstr "Largura máxima da barra do inventario"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Límite máximo de covas grandes aleatorias por chunk."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Límite máximo de covas pequenas aleatorias por chunk."
#: src/settings_translation_file.cpp
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
+"Resistencia máxma a líquidos. Controla a desaceleración ao entrar en "
+"líquidos a\n"
+"alta velocidade."
#: src/settings_translation_file.cpp
msgid ""
@@ -4965,22 +5813,30 @@ msgid ""
"The maximum total count is calculated dynamically:\n"
"max_total = ceil((#clients + max_users) * per_client / 4)"
msgstr ""
+"Número máximo de bloques que se envían simultaneamente por cliente.\n"
+"O reconto total máximo calcúlase de forma dinámica:\n"
+"max_total = ceil((#clientes + max_users) * por_cliente / 4)"
#: src/settings_translation_file.cpp
msgid "Maximum number of blocks that can be queued for loading."
-msgstr ""
+msgstr "Número máximo de bloques que se poden poñer en cola para a súa carga."
#: 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 a poñer en cola que se van xerar.\n"
+"Este límite aplícase por xogador."
#: 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 que se deben poñer en cola que se van cargar desde "
+"o ficheiro.\n"
+"Este límite aplícase por xogador."
#: src/settings_translation_file.cpp
msgid ""
@@ -4988,16 +5844,21 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"Número máximo de descargas simultáneas. As descargas que superen este límite "
+"poñeranse en cola.\n"
+"Debería ser inferior a 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 de maneira forzada."
#: 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 mapas para que o cliente os manteña na memoria.\n"
+"Establecese en -1 para cantidade ilimitada."
#: src/settings_translation_file.cpp
msgid ""
@@ -5005,172 +5866,197 @@ 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 etapa de envío. Se tes unha conexión "
+"lenta\n"
+"intenta reducilo, pero non ata un número inferior ao dobre do que ten por "
+"obxectivo o cliente."
#: src/settings_translation_file.cpp
msgid "Maximum number of players that can be connected simultaneously."
-msgstr ""
+msgstr "Número máximo de xogadores que se poden conectar simultaneamente."
#: src/settings_translation_file.cpp
msgid "Maximum number of recent chat messages to show"
-msgstr ""
+msgstr "Número máximo de mensaxes de chat recientes para mostrar"
#: src/settings_translation_file.cpp
msgid "Maximum number of statically stored objects in a block."
-msgstr ""
+msgstr "Número máximo de obxectos almacenados estáticamente nun bloque."
#: src/settings_translation_file.cpp
msgid "Maximum objects per block"
-msgstr ""
+msgstr "Obxectos 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 da xanela actual que se utilizará para a barra do "
+"inventario.\n"
+"Útil se hai algo para mostrar á dereita ou á esquerda da barra."
#: src/settings_translation_file.cpp
msgid "Maximum simultaneous block sends per client"
-msgstr ""
+msgstr "Número máximo de envíos de bloques simultáneos por cliente"
#: src/settings_translation_file.cpp
msgid "Maximum size of the out chat queue"
-msgstr ""
+msgstr "Tamaño máximo da cola de saída do 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 da fila de chat de saída.\n"
+"0 para desactivar a cola e -1 para que o tamaño da cola sexa ilimitado."
#: src/settings_translation_file.cpp
msgid ""
"Maximum time a file download (e.g. a mod download) may take, stated in "
"milliseconds."
msgstr ""
+"Tempo máximo que pode tardar unha descarga dun ficheiro (por exemplo, un "
+"mod), expresado en milisegundos."
#: 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 que pode tardar unha solicitude interactiva (por exemplo, a "
+"recuperación da lista de servidores), expresado en milisegundos."
#: src/settings_translation_file.cpp
msgid "Maximum users"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
+msgstr "Usuarios máximos"
#: src/settings_translation_file.cpp
msgid "Mesh cache"
-msgstr ""
+msgstr "Caché de malla"
#: src/settings_translation_file.cpp
msgid "Message of the day"
-msgstr ""
+msgstr "Mensaxe do día"
#: src/settings_translation_file.cpp
msgid "Message of the day displayed to players connecting."
-msgstr ""
+msgstr "Mensaxe do día mostrada aos xogadores que se conectan."
#: src/settings_translation_file.cpp
msgid "Method used to highlight selected object."
-msgstr ""
+msgstr "Método usado para resaltar o obxecto seleccionado."
#: src/settings_translation_file.cpp
msgid "Minimal level of logging to be written to chat."
-msgstr ""
+msgstr "Nivel mínimo de rexistro para escribir no chat."
#: src/settings_translation_file.cpp
msgid "Minimap"
-msgstr ""
+msgstr "Minimapa"
#: src/settings_translation_file.cpp
msgid "Minimap key"
-msgstr ""
+msgstr "Tecla do minimapa"
#: src/settings_translation_file.cpp
msgid "Minimap scan height"
-msgstr ""
+msgstr "Altura de escaneo do minimapa"
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Ruído 3D que determina a cantidade de calabozos por chunk."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Límite mínimo do número aleatorio de covas pequenas por chunk."
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
-msgstr ""
+msgstr "Tamaño mínimo de textura"
#: src/settings_translation_file.cpp
msgid "Mipmapping"
+msgstr "Mapeado do relieve"
+
+#: src/settings_translation_file.cpp
+msgid "Misc"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "Análise do mundo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Seguridade"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
-msgstr ""
+msgstr "Canais de mod"
#: src/settings_translation_file.cpp
msgid "Modifies the size of the HUD elements."
-msgstr ""
+msgstr "Modifica o tamaño dos elementos do HUD."
#: src/settings_translation_file.cpp
msgid "Monospace font path"
-msgstr ""
+msgstr "Ruta da fonte monoespaciada"
#: src/settings_translation_file.cpp
msgid "Monospace font size"
-msgstr ""
+msgstr "Tamaño da fonte monoespaciada"
#: src/settings_translation_file.cpp
msgid "Monospace font size divisible by"
-msgstr ""
+msgstr "Tamaño da fonte monoespaciada divisible por"
#: src/settings_translation_file.cpp
msgid "Mountain height noise"
-msgstr ""
+msgstr "Ruído da altura das montañas"
#: src/settings_translation_file.cpp
msgid "Mountain noise"
-msgstr ""
+msgstr "Ruído das montañas"
#: src/settings_translation_file.cpp
msgid "Mountain variation noise"
-msgstr ""
+msgstr "Variación do ruído das montañas"
#: src/settings_translation_file.cpp
msgid "Mountain zero level"
-msgstr ""
+msgstr "Nivel cero das montañas"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity"
-msgstr ""
+msgstr "Sensibilidade do rato"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity multiplier."
-msgstr ""
+msgstr "Multiplicador da sensibilidade do rato."
#: src/settings_translation_file.cpp
msgid "Mud noise"
-msgstr ""
+msgstr "Ruído do lodo"
#: 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 ""
+"Multiplicador para balanceo dos brazos en caída.\n"
+"Por exemplo: 0 para velos estáticos; 1.0 para normal; 2.0 para o dobre."
#: src/settings_translation_file.cpp
msgid "Mute key"
-msgstr ""
+msgstr "Tecla para silenciar"
#: src/settings_translation_file.cpp
msgid "Mute sound"
-msgstr ""
+msgstr "Silenciar son"
#: src/settings_translation_file.cpp
msgid ""
@@ -5179,6 +6065,10 @@ msgid ""
"Current mapgens in a highly unstable state:\n"
"- The optional floatlands of v7 (disabled by default)."
msgstr ""
+"Nome do xerador de mundos que se utilizará ao crear un mundo novo.\n"
+"Crear un mundo no menú principal substituirá isto.\n"
+"Xeradores de mundos actuais nun estado moi inestable:\n"
+"- Os terreos flotantes opcionais de v7 (desactivados por defecto)."
#: src/settings_translation_file.cpp
msgid ""
@@ -5186,53 +6076,67 @@ msgid ""
"When running a server, clients connecting with this name are admins.\n"
"When starting from the main menu, this is overridden."
msgstr ""
+"Nome do xogador.\n"
+"Cando se executa un servidor, os clientes que se conectan con este nome son "
+"administradores.\n"
+"Ao comezar desde o menú principal, isto substitúese."
#: src/settings_translation_file.cpp
msgid ""
"Name of the server, to be displayed when players join and in the serverlist."
msgstr ""
+"Nome do servidor, que se mostrará na lista de servidores e cando os "
+"xogadores se unan."
#: src/settings_translation_file.cpp
msgid "Near plane"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr ""
+msgstr "Plano cercano"
#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
msgstr ""
+"Porto de rede para recibir ratos (UDP).\n"
+"Este valor substituirase ao comezar desde o menú principal."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "Rede"
#: src/settings_translation_file.cpp
msgid "New users need to input this password."
-msgstr ""
+msgstr "Os novos usuarios deben introducir este contrasinal."
#: src/settings_translation_file.cpp
msgid "Noclip"
-msgstr ""
+msgstr "Modo espectador"
#: src/settings_translation_file.cpp
msgid "Noclip key"
-msgstr ""
+msgstr "Tecla para modo espectador"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Resaltar nodos"
#: src/settings_translation_file.cpp
msgid "Node highlighting"
-msgstr ""
+msgstr "Resaltado dos nós"
#: src/settings_translation_file.cpp
msgid "NodeTimer interval"
-msgstr ""
+msgstr "Intervalo NodeTimer"
#: src/settings_translation_file.cpp
msgid "Noises"
-msgstr ""
+msgstr "Ruídos"
#: src/settings_translation_file.cpp
msgid "Number of emerge threads"
-msgstr ""
+msgstr "Número de fíos emerxentes"
#: src/settings_translation_file.cpp
msgid ""
@@ -5247,6 +6151,17 @@ 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 ""
+"Número de fíos emerxentes a usar.\n"
+"Valor 0:\n"
+"- Selección automática. O número de fíos emerxentes será\n"
+"- \"número de procesadores - 2\", cun límite inferior de 1.\n"
+"Calquera outro valor:\n"
+"- Especifica o número de fíos emerxentes, cun límite inferior de 1.\n"
+"AVISO: aumentar o número de fíos emerxentes aumenta o mundo do motor\n"
+"velocidade, pero isto pode prexudicar o rendemento do xogo ao interferir con "
+"outros\n"
+"procesos, especialmente en modo único e/ou cando se executa código Lua\n"
+"'on_xerado'. Para moitos usuarios, a configuración óptima pode ser \"1\"."
#: src/settings_translation_file.cpp
msgid ""
@@ -5254,19 +6169,20 @@ msgid ""
"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 ""
+"Número de bloques adicionais que se poden cargar con /clearobjects á vez.\n"
+"Esta é unha compensación entre a sobrecarga de transaccións de SQLite e\n"
+"consumo de memoria (4096=100MB, como regra xeral)."
#: src/settings_translation_file.cpp
msgid "Opaque liquids"
-msgstr ""
+msgstr "Líquidos opacos"
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
msgstr ""
+"Opacidade (alfa) da sombra detrás do tipo de letra por defecto, entre 0 e "
+"255."
#: src/settings_translation_file.cpp
msgid ""
@@ -5274,10 +6190,13 @@ msgid ""
"formspec is\n"
"open."
msgstr ""
+"Abre o menú de pausa cando se perda o foco da xanela. Non se detén se hai "
+"unha especificación de formulario\n"
+"aberto."
#: src/settings_translation_file.cpp
msgid "Optional override for chat weblink color."
-msgstr ""
+msgstr "Substitución opcional da cor da ligazón web do chat."
#: src/settings_translation_file.cpp
msgid ""
@@ -5285,130 +6204,146 @@ msgid ""
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"Camiño da fonte alternativa. Debe ser un tipo de letra TrueType.\n"
+"Emprégarase para certos idiomas ou se o tipo de letra por defecto non está "
+"dispoñible."
#: 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 ""
+"Camiño onde gardar capturas de pantalla. Pode ser un camiño absoluto ou "
+"relativo.\n"
+"O cartafol crearase se aínda non existe."
#: src/settings_translation_file.cpp
msgid ""
"Path to shader directory. If no path is defined, default location will be "
"used."
msgstr ""
+"Camiño ao directorio dos sombreadores. Se non se define ningún, utilizarase "
+"a localización por defecto."
#: src/settings_translation_file.cpp
msgid "Path to texture directory. All textures are first searched from here."
-msgstr ""
+msgstr "Camiño ao directorio de texturas. Primeiro búscanse alí."
#: 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 ""
+"Camiño ao tipo de letra por defecto. Debe ser un tipo de letra TrueType.\n"
+"Usarase o tipo de letra alternativo se non se pode cargar."
#: 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 ""
+"Camiño ao tipo de letra monoespacial. Debe ser un tipo de letra TrueType.\n"
+"Este tipo de letra úsase para, por exemplo, a consola e a pantalla da "
+"análise do mundo."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
-msgstr ""
+msgstr "Pausa cando se perfe o foco da pantalla"
#: src/settings_translation_file.cpp
msgid "Per-player limit of queued blocks load from disk"
-msgstr ""
+msgstr "Límite por xogador de carga de bloques en cola desde o disco"
#: src/settings_translation_file.cpp
msgid "Per-player limit of queued blocks to generate"
-msgstr ""
+msgstr "Límite por xogador de bloques en cola que xerar"
#: src/settings_translation_file.cpp
msgid "Physics"
-msgstr ""
+msgstr "Físicas"
#: src/settings_translation_file.cpp
msgid "Pitch move key"
-msgstr ""
+msgstr "Tecla de voo libre"
#: src/settings_translation_file.cpp
msgid "Pitch move mode"
-msgstr ""
+msgstr "Modo de rotación vertical"
#: src/settings_translation_file.cpp
msgid "Place key"
-msgstr ""
+msgstr "Tecla para colocar obxectos"
#: src/settings_translation_file.cpp
msgid "Place repetition interval"
-msgstr ""
+msgstr "Intervalo de repetición da acción \"colocar\""
#: 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 ""
+"O xogador é capaz de voar sen ser afectado pola gravidade.\n"
+"Isto require o permiso \"fly\" no servidor."
#: src/settings_translation_file.cpp
msgid "Player transfer distance"
-msgstr ""
+msgstr "Distancia de transferencia do xogador"
#: src/settings_translation_file.cpp
msgid "Player versus player"
-msgstr ""
+msgstr "Xogador contra xogador"
#: src/settings_translation_file.cpp
msgid "Poisson filtering"
-msgstr ""
+msgstr "Filtrado 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 ""
+"Porto para conectarse á (UDP).\n"
+"Ten en conta que o campo do porto do menú principal substitúe esta "
+"configuración."
#: 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 ""
+"Evita que a acción de romper e colocar bloques se repitan cando se manteñen "
+"os botóns do rato.\n"
+"Activa isto se rompes ou colocas bloques por accidente moitas veces."
#: src/settings_translation_file.cpp
msgid "Prevent mods from doing insecure things like running shell commands."
msgstr ""
+"Evita que os mods fagan cousas perigosas como executar comandos de shell."
#: src/settings_translation_file.cpp
msgid ""
"Print the engine's profiling data in regular intervals (in seconds).\n"
"0 = disable. Useful for developers."
msgstr ""
+"Expor os datos da perfilaxe en intervalos regulares (en segundos).\n"
+"0 = desactivar. Útil para desenvolvedores."
#: src/settings_translation_file.cpp
msgid "Privileges that players with basic_privs can grant"
-msgstr ""
+msgstr "Permisos que poden conceder os xogadores con basic_privs"
#: src/settings_translation_file.cpp
msgid "Profiler"
-msgstr ""
+msgstr "Análise do mundo"
#: src/settings_translation_file.cpp
msgid "Profiler toggle key"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
+msgstr "Alt. análise do mundo"
#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
-msgstr ""
+msgstr "Enderezo do Prometheus"
#: src/settings_translation_file.cpp
msgid ""
@@ -5417,10 +6352,14 @@ msgid ""
"enable metrics listener for Prometheus on that address.\n"
"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
+"Enderezo do Prometheus.\n"
+"Se Minetest se compila coa opción ENABLE_PROMETHEUS activada,\n"
+"habilita a obteción de métricas para Prometheus nese enderezo.\n"
+"As métricas pódense obter en http://127.0.0.1:30000/metrics"
#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
-msgstr ""
+msgstr "Proporción de covas grandes que conteñen líquido."
#: src/settings_translation_file.cpp
msgid ""
@@ -5428,48 +6367,53 @@ msgid ""
"Values larger than 26 will start to produce sharp cutoffs at cloud area "
"corners."
msgstr ""
+"Rango da área de nubes indicado nun número de 64 cadrados de nubes de nós.\n"
+"Os valores superiores a 26 comezarán a producir cortes nítidos nas esquinas "
+"da área de nubes."
#: src/settings_translation_file.cpp
msgid "Raises terrain to make valleys around the rivers."
-msgstr ""
+msgstr "Eleva o terreo para facer vales arredor dos ríos."
#: src/settings_translation_file.cpp
msgid "Random input"
-msgstr ""
+msgstr "Entrada aleatoria"
#: src/settings_translation_file.cpp
msgid "Range select key"
-msgstr ""
+msgstr "Tecla de campo de visión"
#: src/settings_translation_file.cpp
msgid "Recent Chat Messages"
-msgstr ""
+msgstr "Mensaxes do chat recientes"
#: src/settings_translation_file.cpp
msgid "Regular font path"
-msgstr ""
+msgstr "Camiño da fonte regular"
#: src/settings_translation_file.cpp
msgid "Remote media"
-msgstr ""
+msgstr "Medios remotos"
#: src/settings_translation_file.cpp
msgid "Remote port"
-msgstr ""
+msgstr "Porto remoto"
#: 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 ""
+"Elimina os códigos de cores das mensaxes de chat entrantes\n"
+"Usa isto para evitar que os xogadores poidan usar cor nas súas mensaxes"
#: src/settings_translation_file.cpp
msgid "Replaces the default main menu with a custom one."
-msgstr ""
+msgstr "Substitúe o menú principal por defecto por un personalizado."
#: src/settings_translation_file.cpp
msgid "Report path"
-msgstr ""
+msgstr "Directorio para logs"
#: src/settings_translation_file.cpp
msgid ""
@@ -5484,86 +6428,96 @@ msgid ""
"csm_restriction_noderange)\n"
"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
msgstr ""
+"Restrinxe o acceso de algunhas funcións do cliente en servidores.\n"
+"Combine isto de abaixo para restrinxir recursos aos clientes ou coloque 0 "
+"para que non haxa restriccións:\n"
+"LOAD_CLIENT_MODS: 1 (desactiva a carga de mods no cliente)\n"
+"CHAT_MESSAGES: 2 (desactiva a chamada \"send_chat_message\" no cliente)\n"
+"READ_ITEMDEFS: 4 (desactiva a chamada \"get_item_def\" no cliente)\n"
+"READ_NODEDEFS: 8 (desactiva a chamada \"get_node_def\" no cliente)\n"
+"LOOKUP_NODES_LIMIT: 16 (desactiva a chamada \"get_node\" no cliente para "
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (desactiva a chamada \"get_player_names\" no cliente)"
#: src/settings_translation_file.cpp
msgid "Ridge mountain spread noise"
-msgstr ""
+msgstr "Ruído de extensión do cume de montañas"
#: src/settings_translation_file.cpp
msgid "Ridge noise"
-msgstr ""
+msgstr "Ruído da cresta da montaña"
#: src/settings_translation_file.cpp
msgid "Ridge underwater noise"
-msgstr ""
+msgstr "Ruído das cristas debaixo da auga"
#: src/settings_translation_file.cpp
msgid "Ridged mountain size noise"
-msgstr ""
+msgstr "Ruído do tamaño das dorsais das montañas"
#: src/settings_translation_file.cpp
msgid "Right key"
-msgstr ""
+msgstr "Tecla dereita"
#: src/settings_translation_file.cpp
msgid "River channel depth"
-msgstr ""
+msgstr "Profundidade da canle do río"
#: src/settings_translation_file.cpp
msgid "River channel width"
-msgstr ""
+msgstr "Largura da canle do río"
#: src/settings_translation_file.cpp
msgid "River depth"
-msgstr ""
+msgstr "Profundidade do río"
#: src/settings_translation_file.cpp
msgid "River noise"
-msgstr ""
+msgstr "Ruído do río"
#: src/settings_translation_file.cpp
msgid "River size"
-msgstr ""
+msgstr "Tamaño do río"
#: src/settings_translation_file.cpp
msgid "River valley width"
-msgstr ""
+msgstr "Largura do val do río"
#: src/settings_translation_file.cpp
msgid "Rollback recording"
-msgstr ""
+msgstr "Rexistro das accións"
#: src/settings_translation_file.cpp
msgid "Rolling hill size noise"
-msgstr ""
+msgstr "Tamaño do ruído de outeiros redondeados"
#: src/settings_translation_file.cpp
msgid "Rolling hills spread noise"
-msgstr ""
+msgstr "Ruído espallado de outeiros redondeados"
#: src/settings_translation_file.cpp
msgid "Round minimap"
-msgstr ""
+msgstr "Minimapa circular"
#: src/settings_translation_file.cpp
msgid "Safe digging and placing"
-msgstr ""
+msgstr "Remover e colocar obxectos de maneira segura"
#: src/settings_translation_file.cpp
msgid "Sandy beaches occur when np_beach exceeds this value."
-msgstr ""
+msgstr "Aparecen praias areosas cando \"np_beach\" supera este valor."
#: src/settings_translation_file.cpp
msgid "Save the map received by the client on disk."
-msgstr ""
+msgstr "Gardar o mapa recibido polo cliente no disco."
#: src/settings_translation_file.cpp
msgid "Save window size automatically when modified."
-msgstr ""
+msgstr "Gardar automaticamente o tamaño da xanela cando é modificado."
#: src/settings_translation_file.cpp
msgid "Saving map received from server"
-msgstr ""
+msgstr "Gardar mapa recibido do servidor"
#: src/settings_translation_file.cpp
msgid ""
@@ -5573,26 +6527,36 @@ msgid ""
"pixels when scaling down, at the cost of blurring some\n"
"edge pixels when images are scaled by non-integer sizes."
msgstr ""
+"Escala a GUI por un valor especificado polo usuario.\n"
+"Use o filtro antialias de veciño máis próximo para escalar a GUI.\n"
+"Isto suavizará algúns dos bordos ásperos e mestura\n"
+"píxeles ao reducir a escala, a costa de difuminar algúns\n"
+"píxeles de bordo cando as imaxes son escaladas por tamaños non enteiros."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Pantalla:"
#: src/settings_translation_file.cpp
msgid "Screen height"
-msgstr ""
+msgstr "Altura da xanela"
#: src/settings_translation_file.cpp
msgid "Screen width"
-msgstr ""
+msgstr "Largura da xanela"
#: src/settings_translation_file.cpp
msgid "Screenshot folder"
-msgstr ""
+msgstr "Cartafol das capturas"
#: src/settings_translation_file.cpp
msgid "Screenshot format"
-msgstr ""
+msgstr "Formato de captura de pantalla"
#: src/settings_translation_file.cpp
msgid "Screenshot quality"
-msgstr ""
+msgstr "Calidade de captura de pantalla"
#: src/settings_translation_file.cpp
msgid ""
@@ -5600,38 +6564,43 @@ msgid ""
"1 means worst quality; 100 means best quality.\n"
"Use 0 for default quality."
msgstr ""
+"Calidade da captura de pantalla. Só se usa para formato JPEG.\n"
+"1 é a peor calidade; 100 é a mellor calidade.\n"
+"Usa 0 para a calidade por defecto."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Captura"
#: src/settings_translation_file.cpp
msgid "Seabed noise"
-msgstr ""
+msgstr "Sonido do fondo marino"
#: src/settings_translation_file.cpp
msgid "Second of 4 2D noises that together define hill/mountain range height."
msgstr ""
+"Segundo de 4 ruídos 2D que xuntos definen a altura de outeiros/montañas."
#: src/settings_translation_file.cpp
msgid "Second of two 3D noises that together define tunnels."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr ""
+msgstr "Segundo de 2 ruídos 3D que xuntos definen túneis."
#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
-msgstr ""
+msgstr "Ver https://www.sqlite.org/pragma.html#pragma_synchronous"
#: src/settings_translation_file.cpp
msgid "Selection box border color (R,G,B)."
-msgstr ""
+msgstr "Cor dos bordes da caixa de selección (R,G,B)."
#: src/settings_translation_file.cpp
msgid "Selection box color"
-msgstr ""
+msgstr "Cor da caixa de selección"
#: src/settings_translation_file.cpp
msgid "Selection box width"
-msgstr ""
+msgstr "Largura da caixa de selección"
#: src/settings_translation_file.cpp
msgid ""
@@ -5655,65 +6624,121 @@ msgid ""
"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
"18 = 4D \"Mandelbulb\" Julia set."
msgstr ""
+"Escolle un dos 18 tipos de fractais:\n"
+"1 = Conxunto 4D de Mandelbrot \"Roundy\".\n"
+"2 = Conxunto 4D de Julia \"Roundy\".\n"
+"3 = Conxunto 4D de Mandelbrot \"Squarryâ€.\n"
+"4 = Conxunto 4D de Julia \"Squarryâ€.\n"
+"5 = Conxunto 4D de Mandelbrot \"Mandy Cousin\".\n"
+"6 = Conxunto 4D de Julia \"Mandy Cousin\".\n"
+"7 = Conxunto 4D de Mandelbrot \"Variation\".\n"
+"8 = Conxunto 4D de Julia \"Variation\".\n"
+"9 = Conxunto 4D de Mandelbrot \"Mandelbrot/Mandelbar\".\n"
+"10 = Conxunto 3D de Julia \"Mandelbrot/Mandelbarâ€.\n"
+"11 = Conxunto 3D de Mandelbrot \"Christmas Tree\".\n"
+"12 = Conxunto 3D de Julia \"Christmas Tree\".\n"
+"13 = Conxunto 3D de Mandelbrot \"Mandelbulb\".\n"
+"14 = Conxunto 3D de Julia \"Mandelbulb\".\n"
+"15 = Conxunto 3D de Mandelbrot \"Cosine Mandelbulb\".\n"
+"16 = Conxunto 3D de Julia \"Cosine Mandelbulb\".\n"
+"17 = Conxunto 3D de Mandelbrot \"Mandelbulb\".\n"
+"18 = Conxunto 3D de Julia \"Mandelbulb\"."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr ""
+#, fuzzy
+msgid "Server"
+msgstr "URL do servidor"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Nome do servidor"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Descripción do servidor"
#: src/settings_translation_file.cpp
msgid "Server URL"
-msgstr ""
+msgstr "URL do servidor"
#: src/settings_translation_file.cpp
msgid "Server address"
-msgstr ""
+msgstr "Enderezo do servidor"
#: src/settings_translation_file.cpp
msgid "Server description"
-msgstr ""
+msgstr "Descripción do servidor"
#: src/settings_translation_file.cpp
msgid "Server name"
-msgstr ""
+msgstr "Nome do servidor"
#: src/settings_translation_file.cpp
msgid "Server port"
-msgstr ""
+msgstr "Porto do servidor"
#: src/settings_translation_file.cpp
msgid "Server side occlusion culling"
-msgstr ""
+msgstr "Determinar bloques invisibles do lado do servidor"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Porto do servidor"
#: src/settings_translation_file.cpp
msgid "Serverlist URL"
-msgstr ""
+msgstr "URL da lista de servidores"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "URL da lista de servidores"
#: src/settings_translation_file.cpp
msgid "Serverlist file"
-msgstr ""
+msgstr "Ficheiro da lista de servidores"
#: 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 ""
+"Establece o idioma. Deixa o campo baleiro para usar o idioma do sistema.\n"
+"É necesario reiniciar despois de cambiar isto."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
+"Establece a lonxitude máxima de caracteres dunha mensaxe de chat enviada "
+"polos clientes."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
+"Establece a forza da sombra.\n"
+"Un valor máis baixo son sombras máis claras, un valor máis alto son sombras "
+"máis escuras."
#: 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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
+"Establece o tamaño do raio de sombras suaves.\n"
+"Os valores máis baixos son sombras máis nítidas, os valores maiores "
+"significan son máis suaves.\n"
+"Valor mínimo: 1,0; valor máximo: 10,0"
#: src/settings_translation_file.cpp
msgid ""
@@ -5721,30 +6746,42 @@ msgid ""
"Value of 0 means no tilt / vertical orbit.\n"
"Minimum value: 0.0; maximum value: 60.0"
msgstr ""
+"Establece a inclinación da órbita Sol/Lúa en graos.\n"
+"O valor de 0 é sen inclinación/órbita vertical.\n"
+"Valor mínimo: 0,0; valor máximo: 60,0"
#: src/settings_translation_file.cpp
msgid ""
"Set to true to enable Shadow Mapping.\n"
"Requires shaders to be enabled."
msgstr ""
+"Establece o valor verdadeiro para activar o mapeado de sombras.\n"
+"É necesario que os sombreadores estean activados."
#: src/settings_translation_file.cpp
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
+"Establece o valor verdadeiro para activar o movemento das follas.\n"
+"É necesario que os sombreadores estean activados."
#: src/settings_translation_file.cpp
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
+"Establece o valor verdadeiro para activar o movemento dos líquidos (auga, "
+"por exemplo).\n"
+"É necesario que os sombreadores estean activados."
#: src/settings_translation_file.cpp
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
msgstr ""
+"Establece o valor verdadeiro para activar o movemento das plantas.\n"
+"É necesario que os sombreadores estean activados."
#: src/settings_translation_file.cpp
msgid ""
@@ -5752,10 +6789,13 @@ msgid ""
"On false, 16 bits texture will be used.\n"
"This can cause much more artifacts in the shadow."
msgstr ""
+"Establece a calidade da textura da sombra en 32 bits.\n"
+"En valor falso, utilizarase textura de 16 bits.\n"
+"Isto pode causar moitos máis detalles na sombra."
#: src/settings_translation_file.cpp
msgid "Shader path"
-msgstr ""
+msgstr "Camiño dos sombreadores"
#: src/settings_translation_file.cpp
msgid ""
@@ -5764,58 +6804,67 @@ msgid ""
"cards.\n"
"This only works with the OpenGL video backend."
msgstr ""
+"Os sombreadores permiten efectos visuais avanzados e poden aumentar o "
+"rendemento nalgunhas\n"
+"tarxetas de vídeo.\n"
+"Isto só funciona con o modo de vídeo OpenGL."
#: src/settings_translation_file.cpp
msgid "Shadow filter quality"
-msgstr ""
+msgstr "Calidade do filtro de sombras"
#: src/settings_translation_file.cpp
msgid "Shadow map max distance in nodes to render shadows"
-msgstr ""
+msgstr "Distancia do mapa de sombras en nós para renderizar sombras"
#: src/settings_translation_file.cpp
msgid "Shadow map texture in 32 bits"
-msgstr ""
+msgstr "Textura do mapa de sombras en 32 bits"
#: src/settings_translation_file.cpp
msgid "Shadow map texture size"
-msgstr ""
+msgstr "Tamaño 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 ""
+"Desfase de sombra (en píxeles) da fonte por defecto. Se é 0, non se fará a "
+"sombra."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
-msgstr ""
+#, fuzzy
+msgid "Shadow strength gamma"
+msgstr "Intensidade da sombra"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
-msgstr ""
+msgstr "Forma do minimapa. Activado = redondo, desactivado = cadrado."
#: src/settings_translation_file.cpp
msgid "Show debug info"
-msgstr ""
+msgstr "Mostrar información de depuración"
#: src/settings_translation_file.cpp
msgid "Show entity selection boxes"
-msgstr ""
+msgstr "Mostrar as caixas de selección de entidades"
#: src/settings_translation_file.cpp
msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
+"Mostrar as caixas de selección de entidades\n"
+"É necesario reiniciar despois de cambiar isto."
#: src/settings_translation_file.cpp
msgid "Show name tag backgrounds by default"
-msgstr ""
+msgstr "Mostra os fondos das etiquetas de nome por defecto"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
-msgstr ""
+msgstr "Mensaxe de desconexión"
#: src/settings_translation_file.cpp
msgid ""
@@ -5826,6 +6875,12 @@ msgid ""
"Altering this value is for special usage, leaving it unchanged is\n"
"recommended."
msgstr ""
+"Tamaño dos chunks que creou o xerador de terreos, indicado en bloques (16 "
+"nós).\n"
+"AVISO!: Non hai ningún beneficio, e hai varios perigos, ao\n"
+"aumentar este valor por riba de 5.\n"
+"Reducir este valor aumenta a densidade de covas e calabozos.\n"
+"Modificar este valor é para uso especial. Recoméndase non modificalo."
#: src/settings_translation_file.cpp
msgid ""
@@ -5833,72 +6888,79 @@ msgid ""
"increase the cache hit %, reducing the data being copied from the main\n"
"thread, thus reducing jitter."
msgstr ""
+"Tamaño da caché do xerador de terreos do xerador de malla. Isto fai que\n"
+"aumentae o % de acertos da caché, reducindo os datos que se copian do fío\n"
+"principal, reducindo así a fluctuación."
#: src/settings_translation_file.cpp
msgid "Sky Body Orbit Tilt"
-msgstr ""
+msgstr "Inclinación da órbita do ceo"
#: src/settings_translation_file.cpp
msgid "Slice w"
-msgstr ""
+msgstr "Porción w"
#: src/settings_translation_file.cpp
msgid "Slope and fill work together to modify the heights."
-msgstr ""
+msgstr "Pendente e recheo traballan xuntos para modificar as alturas."
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "Cantidade máxima de covas pequenas"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "Cantidade mínima de covas pequenas"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
msgstr ""
+"Variación de humidade a pequena escala para mesturar biomas nos bordes."
#: src/settings_translation_file.cpp
msgid "Small-scale temperature variation for blending biomes on borders."
msgstr ""
+"Variación de temperatura a pequena escala para mesturar biomas nos bordes."
#: src/settings_translation_file.cpp
msgid "Smooth lighting"
-msgstr ""
+msgstr "Iluminación suave"
#: src/settings_translation_file.cpp
msgid ""
"Smooths camera when looking around. Also called look or mouse smoothing.\n"
"Useful for recording videos."
msgstr ""
+"Suaviza a cámara ao mirar arredor. Tamén se chama suavización 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 ""
+msgstr "Suaviza a rotación da cámara en modo cinemático. 0 para desactivar."
#: src/settings_translation_file.cpp
msgid "Smooths rotation of camera. 0 to disable."
-msgstr ""
+msgstr "Suaviza a rotación da cámara. 0 para desactivar."
#: src/settings_translation_file.cpp
msgid "Sneak key"
-msgstr ""
+msgstr "Tecla para agacharse"
#: src/settings_translation_file.cpp
msgid "Sneaking speed"
-msgstr ""
+msgstr "Velocidade ao estar agachado"
#: src/settings_translation_file.cpp
msgid "Sneaking speed, in nodes per second."
-msgstr ""
+msgstr "Velocidade ao se agachar, en nós por segundo."
#: src/settings_translation_file.cpp
msgid "Soft shadow radius"
-msgstr ""
+msgstr "Radio das sombras suaves"
#: src/settings_translation_file.cpp
msgid "Sound"
-msgstr ""
+msgstr "Son"
#: src/settings_translation_file.cpp
msgid ""
@@ -5907,6 +6969,10 @@ msgid ""
"(obviously, remote_media should end with a slash).\n"
"Files that are not present will be fetched the usual way."
msgstr ""
+"Especifica o URL do que o cliente obtén os medios en lugar de usar UDP.\n"
+"$filename debe ser accesible desde $remote_media$filename a través de cURL\n"
+"(obviamente, remote_media debería rematar cunha barra).\n"
+"Os ficheiros que non están presentes buscaranse do xeito habitual."
#: src/settings_translation_file.cpp
msgid ""
@@ -5914,6 +6980,10 @@ msgid ""
"Note that mods or games may explicitly set a stack for certain (or all) "
"items."
msgstr ""
+"Especifica a cantidade por defecto na que se agrupan os nós, obxectos e "
+"ferramentas.\n"
+"Ten en conta que algúns xogos ou mods poden especificar unha cantidade na "
+"que agrupar algúns (ou todos) os obxectos."
#: src/settings_translation_file.cpp
msgid ""
@@ -5922,6 +6992,12 @@ msgid ""
"will consume more resources.\n"
"Minimum value: 1; maximum value: 16"
msgstr ""
+"Distribuír unha actualización completa do mapa de sombras sobre unha "
+"determinada cantidade de fotogramas.\n"
+"Os valores máis altos poden facer que as sombras sexan latentes e os valores "
+"máis baixos\n"
+"consumirán máis recursos.\n"
+"Valor mínimo: 1; Valor máximo 16"
#: src/settings_translation_file.cpp
msgid ""
@@ -5929,26 +7005,29 @@ msgid ""
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
msgstr ""
+"Difusión do intervalo de aumento da curva de luz.\n"
+"Controla a largura do intervalo que se quere aumentar.\n"
+"A desviación estándar da curva de luz gaussiana aumenta."
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
-msgstr ""
+msgstr "Punto de aparición estático"
#: src/settings_translation_file.cpp
msgid "Steepness noise"
-msgstr ""
+msgstr "Ruído das pendentes"
#: src/settings_translation_file.cpp
msgid "Step mountain size noise"
-msgstr ""
+msgstr "Ruído do tamaño das montañas de paso"
#: src/settings_translation_file.cpp
msgid "Step mountain spread noise"
-msgstr ""
+msgstr "Ruído doespallamento das montañas de paso"
#: src/settings_translation_file.cpp
msgid "Strength of 3D mode parallax."
-msgstr ""
+msgstr "Intensidade do modo de paralaxe 3D."
#: src/settings_translation_file.cpp
msgid ""
@@ -5956,14 +7035,17 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
+"Ampliación da curva de luz.\n"
+"Os 3 parámetros de \"impulso\" definen un rango da curva\n"
+"de luz que aumenta o brillo."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
-msgstr ""
+msgstr "Verificación estricta do protocolo"
#: src/settings_translation_file.cpp
msgid "Strip color codes"
-msgstr ""
+msgstr "Eliminar códigos de cores"
#: src/settings_translation_file.cpp
msgid ""
@@ -5978,34 +7060,55 @@ msgid ""
"server-intensive extreme water flow and to avoid vast flooding of the\n"
"world surface below."
msgstr ""
+"Nivel superficial de auga opcional colocado sobre unha capa sólida de terreo "
+"flotante.\n"
+"A auga está desactivada por defecto e só se colocará se se establece este "
+"valor\n"
+"arriba 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (o inicio do\n"
+"afilamento superior).\n"
+"***ADVERTENCIA, PERIGO POTENCIAL PARA OS MUNDOS E O RENDEMENTO DO "
+"SERVIDOR***:\n"
+"Ao activar a colocación de auga débense configurar e probar os terreos "
+"flotantes\n"
+"para ser unha capa sólida configurando 'mgv7_floatland_density' en 2.0 (ou "
+"outro\n"
+"valor necesario en función de 'mgv7_np_floatland'), para evitar\n"
+"fluxo de auga extremo intensivo en servidores e evitar grandes inundacións "
+"do\n"
+"superficie do mundo abaixo."
#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
-msgstr ""
+msgstr "SQLite sincrónico"
#: src/settings_translation_file.cpp
msgid "Temperature variation for biomes."
-msgstr ""
+msgstr "Variación de temperatura para biomas."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Configuración"
#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
-msgstr ""
+msgstr "Ruído alternativo do terreo"
#: src/settings_translation_file.cpp
msgid "Terrain base noise"
-msgstr ""
+msgstr "Ruído base do terreo"
#: src/settings_translation_file.cpp
msgid "Terrain height"
-msgstr ""
+msgstr "Altura do terreo"
#: src/settings_translation_file.cpp
msgid "Terrain higher noise"
-msgstr ""
+msgstr "Maior ruído do terreo"
#: src/settings_translation_file.cpp
msgid "Terrain noise"
-msgstr ""
+msgstr "Ruído do terreo"
#: src/settings_translation_file.cpp
msgid ""
@@ -6013,6 +7116,9 @@ msgid ""
"Controls proportion of world area covered by hills.\n"
"Adjust towards 0.0 for a larger proportion."
msgstr ""
+"Limiar de ruído do terreo para outeiros.\n"
+"Controla a proporción da superficie do mundo cuberta por outeiros.\n"
+"Axusta cara a 0,0 para unha proporción maior."
#: src/settings_translation_file.cpp
msgid ""
@@ -6020,14 +7126,17 @@ msgid ""
"Controls proportion of world area covered by lakes.\n"
"Adjust towards 0.0 for a larger proportion."
msgstr ""
+"Limiar de ruído do terreo para lagos.\n"
+"Controla a proporción da superficie do mundo cuberta por lagos.\n"
+"Axusta cara a 0,0 para unha proporción maior."
#: src/settings_translation_file.cpp
msgid "Terrain persistence noise"
-msgstr ""
+msgstr "Ruído de persistencia do terreo"
#: src/settings_translation_file.cpp
msgid "Texture path"
-msgstr ""
+msgstr "Camiño dos packs de textura"
#: src/settings_translation_file.cpp
msgid ""
@@ -6035,6 +7144,9 @@ msgid ""
"This must be a power of two.\n"
"Bigger numbers create better shadows but it is also more expensive."
msgstr ""
+"Tamaño da textura para renderizar o mapa de sombras.\n"
+"Este debe ser un poder de dous.\n"
+"Os números máis grandes crean mellores sombras pero tamén consume máis."
#: src/settings_translation_file.cpp
msgid ""
@@ -6045,37 +7157,51 @@ msgid ""
"this option allows enforcing it for certain node types. Note though that\n"
"that is considered EXPERIMENTAL and may not work properly."
msgstr ""
+"As texturas dun nodo poden estar aliñadas co nó ou co mundo.\n"
+"O primeiro modo se adapta mellor a cousas como máquinas, mobles, etc., "
+"mentres\n"
+"este último fai que as escaleiras e os microbloques se adapten mellor ao "
+"contorno.\n"
+"Non obstante, como esta posibilidade é nova, non pode ser utilizada por "
+"servidores máis antigos,\n"
+"esta opción permite aplicala para certos tipos de nodos. Ten en conta que\n"
+"que se considera EXPERIMENTAL e pode non funcionar correctamente."
#: src/settings_translation_file.cpp
msgid "The URL for the content repository"
-msgstr ""
+msgstr "O URL do repositorio de contido"
#: src/settings_translation_file.cpp
msgid "The dead zone of the joystick"
-msgstr ""
+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 por defecto no que se gardan as análises do mundo,\n"
+"ao chamar a `/profiler save [format]` sen formato."
#: src/settings_translation_file.cpp
msgid "The depth of dirt or other biome filler node."
-msgstr ""
+msgstr "A profundidade da chán ou outro nó de recheo do bioma."
#: src/settings_translation_file.cpp
msgid ""
"The file path relative to your worldpath in which profiles will be saved to."
msgstr ""
+"O camiño do ficheiro relativa ao camiño do mundo no que se gardarán os "
+"perfís."
#: src/settings_translation_file.cpp
msgid "The identifier of the joystick to use"
-msgstr ""
+msgstr "O identificador do joystick que se vai utilizar"
#: src/settings_translation_file.cpp
msgid "The length in pixels it takes for touch screen interaction to start."
msgstr ""
+"A lonxitude en píxeles que tarda en iniciar a interacción da pantalla táctil."
#: src/settings_translation_file.cpp
msgid ""
@@ -6085,16 +7211,24 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Altura máxima da superficie de líquidos con ondas.\n"
+"4.0 = Altura da onda é dous nós.\n"
+"0.0 = A onda non se move.\n"
+"Por defecto é 1.0 (medio nó).\n"
+"É necesario activar os líquidos con ondas."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
-msgstr ""
+msgstr "A interface de rede na que o servidor agarda a conexión."
#: 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 ""
+"Os permisos que obteñen automaticamente os novos usuarios.\n"
+"Consulta /privs no xogo para ver unha lista completa do teu servidor e da "
+"configuración do mod."
#: src/settings_translation_file.cpp
msgid ""
@@ -6106,6 +7240,12 @@ msgid ""
"maintained.\n"
"This should be configured together with active_object_send_range_blocks."
msgstr ""
+"O radio do volume de bloques ao redor de cada xogador que está suxeito ao\n"
+"material de bloque activo, indicado en bloques de mapas (16 nós).\n"
+"Nos bloques activos cárganse obxectos e execútanse os ABM.\n"
+"Este é tamén o intervalo mínimo no que se manteñen os obxectos activos "
+"(mobs).\n"
+"Isto debería configurarse xunto con active_object_send_range_blocks."
#: src/settings_translation_file.cpp
msgid ""
@@ -6116,12 +7256,21 @@ msgid ""
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
+"O motor de renderizado.\n"
+"É necesario un reinicio logo de cambiar isto.\n"
+"Nota: en Android, segue con OGLES1 se non está seguro. A aplicación pode non "
+"iniciarse doutro xeito.\n"
+"Noutras plataformas recoméndase OpenGL.\n"
+"Os sombreadores son compatibles con OpenGL (só para escritorio) e OGLES2 "
+"(experimental)"
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
"in-game view frustum around."
msgstr ""
+"A sensibilidade dos eixes do joystick para mover o\n"
+"vista no xogo frustum ao redor."
#: src/settings_translation_file.cpp
msgid ""
@@ -6130,6 +7279,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 intensidade (escuridade) do sombreado de oclusión ambiental do nó\n"
+"Abaixo é máis escuro, máis alto é máis claro. O intervalo de valores válido "
+"para isto\n"
+"a configuración é de 0,25 a 4,0 inclusive. Se o valor está fóra do intervalo "
+"será\n"
+"establecer o valor válido máis próximo."
#: src/settings_translation_file.cpp
msgid ""
@@ -6137,28 +7292,40 @@ 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 ""
+"O tempo (en segundos) que a cola de líquidos pode crecer máis alá da "
+"capacidade\n"
+"de procesamento ata que se intente diminuír o seu tamaño eliminando a cola "
+"antiga de\n"
+"elementos. Un valor de 0 desactiva isto."
#: 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 ""
+"O tempo permitido aos ABM para executarse en cada paso\n"
+"(como unha fracción do intervalo ABM)"
#: src/settings_translation_file.cpp
msgid ""
"The time in seconds it takes between repeated events\n"
"when holding down a joystick button combination."
msgstr ""
+"O tempo en segundos que tarda entre eventos repetidos\n"
+"ao manter premida unha combinación de botóns do joystick."
#: src/settings_translation_file.cpp
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
+"O tempo en segundos que tarda entre colocacións repetidas de nodos cando se "
+"mantén presionado\n"
+"o botón de colocar obxectos."
#: src/settings_translation_file.cpp
msgid "The type of joystick"
-msgstr ""
+msgstr "O tipo de joystick"
#: src/settings_translation_file.cpp
msgid ""
@@ -6166,32 +7333,41 @@ msgid ""
"enabled. Also the vertical distance over which humidity drops by 10 if\n"
"'altitude_dry' is enabled."
msgstr ""
+"A distancia vertical sobre a que a calor cae 20 se é 'altitude_chill'\n"
+"activado. Tamén a distancia vertical na que a humidade cae 10 se\n"
+"'altitude_dry' está activado."
#: src/settings_translation_file.cpp
msgid "Third of 4 2D noises that together define hill/mountain range height."
msgstr ""
+"Terceiro de 4 ruídos 2D que xuntos definen a altura de outeiros/montañas."
#: 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 ""
+"Tempo en segundos para que a entidade de obxecto (obxectos tirados) viva.\n"
+"Axustándoo a -1 desactiva a función."
#: src/settings_translation_file.cpp
msgid "Time of day when a new world is started, in millihours (0-23999)."
-msgstr ""
+msgstr "Hora do día en que se inicia un novo mundo, en milihoras (0-23999)."
#: src/settings_translation_file.cpp
msgid "Time send interval"
-msgstr ""
+msgstr "Intervalo de envío de tempo"
#: src/settings_translation_file.cpp
msgid "Time speed"
-msgstr ""
+msgstr "Velocidade do tempo"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
+"Tempo de espera para que o cliente elimine os datos do mapa non utilizados "
+"da memoria."
#: src/settings_translation_file.cpp
msgid ""
@@ -6200,30 +7376,43 @@ msgid ""
"This determines how long they are slowed down after placing or removing a "
"node."
msgstr ""
+"Para reducir a latencia, as transferencias en bloque son máis lentas cando "
+"un xogador está a construír algo.\n"
+"Isto determina canto tempo se ralentizan despois de colocar ou eliminar un "
+"nó."
#: src/settings_translation_file.cpp
msgid "Toggle camera mode key"
-msgstr ""
+msgstr "Tecla para alternar o modo cámara"
#: src/settings_translation_file.cpp
msgid "Tooltip delay"
-msgstr ""
+msgstr "Atraso da información sobre ferramentas"
#: src/settings_translation_file.cpp
msgid "Touch screen threshold"
-msgstr ""
+msgstr "Límite da pantalla táctil"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Límite da pantalla táctil"
#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
+msgstr "Compensacións para o rendemento"
+
+#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Trees noise"
-msgstr ""
+msgstr "Ruído das árbores"
#: src/settings_translation_file.cpp
msgid "Trilinear filtering"
-msgstr ""
+msgstr "Filtrado trilineal"
#: src/settings_translation_file.cpp
msgid ""
@@ -6231,18 +7420,21 @@ msgid ""
"False = 128\n"
"Usable to make minimap smoother on slower machines."
msgstr ""
+"Verdadeiro = 256\n"
+"Falso = 128\n"
+"Pódese usar para facer o minimapa máis suave en ordenadores máis lentos."
#: src/settings_translation_file.cpp
msgid "Trusted mods"
-msgstr ""
+msgstr "Mods seguros"
#: src/settings_translation_file.cpp
msgid "URL to the server list displayed in the Multiplayer Tab."
-msgstr ""
+msgstr "URL á lista de servidores que aparece na xanela Xogo en liña."
#: src/settings_translation_file.cpp
msgid "Undersampling"
-msgstr ""
+msgstr "Submostraxe"
#: src/settings_translation_file.cpp
msgid ""
@@ -6252,38 +7444,44 @@ msgid ""
"image.\n"
"Higher values result in a less detailed image."
msgstr ""
+"A submostraxe é semellante ao uso dunha resolución de pantalla inferior, "
+"pero aplícase\n"
+"só para o mundo, mantendo a GUI intacta.\n"
+"Debería dar un aumento máis significativo do rendemento a costa dunha imaxe "
+"menos detallada.\n"
+"Os valores máis altos dan como resultado unha imaxe menos detallada."
#: src/settings_translation_file.cpp
msgid "Unlimited player transfer distance"
-msgstr ""
+msgstr "Distancia de transferencia de xogador ilimitada"
#: src/settings_translation_file.cpp
msgid "Unload unused server data"
-msgstr ""
+msgstr "Eliminar datos do servidor non utilizados"
#: src/settings_translation_file.cpp
msgid "Upper Y limit of dungeons."
-msgstr ""
+msgstr "Límite Y superior dos calabozos."
#: src/settings_translation_file.cpp
msgid "Upper Y limit of floatlands."
-msgstr ""
+msgstr "Límite Y superior dos terreos flotantes."
#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
-msgstr ""
+msgstr "Activa as nubes 3D en lugar de nubes 2D (planas)."
#: src/settings_translation_file.cpp
msgid "Use a cloud animation for the main menu background."
-msgstr ""
+msgstr "Usa unha animación de nube para o fondo do menú principal."
#: src/settings_translation_file.cpp
msgid "Use anisotropic filtering when viewing at textures from an angle."
-msgstr ""
+msgstr "Usa o filtro anisótropo ao ver texturas desde un ángulo."
#: src/settings_translation_file.cpp
msgid "Use bilinear filtering when scaling textures."
-msgstr ""
+msgstr "Usa o filtro bilineal ao escalar texturas."
#: src/settings_translation_file.cpp
msgid ""
@@ -6291,6 +7489,10 @@ msgid ""
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
+"Usa o mipmapping para escalar texturas. Pode aumentar lixeiramente o "
+"rendemento,\n"
+"sobre todo cando se usa un paquete de texturas de alta resolución.\n"
+"Non se admite a redución de escala correcta gamma."
#: src/settings_translation_file.cpp
msgid ""
@@ -6302,116 +7504,135 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"Use o suavizado de varias mostras (MSAA) para suavizar os bordos do bloque.\n"
+"Este algoritmo suaviza a ventana 3D mentres mantén a imaxe nítida,\n"
+"pero non afecta o interior das texturas\n"
+"(nótase especialmente con texturas transparentes).\n"
+"Aparecen espazos visibles entre os nós cando os sombreadores están "
+"desactivados.\n"
+"Se se establece en 0, MSAA está desactivado.\n"
+"É necesario reiniciar logo de cambiar esta opción."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
+msgstr "Usa o filtro trilineal ao escalar texturas."
+
+#: src/settings_translation_file.cpp
+msgid "User Interfaces"
msgstr ""
#: src/settings_translation_file.cpp
msgid "VBO"
-msgstr ""
+msgstr "VBO"
#: src/settings_translation_file.cpp
msgid "VSync"
-msgstr ""
+msgstr "Sincronizaión vertical"
#: src/settings_translation_file.cpp
msgid "Valley depth"
-msgstr ""
+msgstr "Profundade dos vales"
#: src/settings_translation_file.cpp
msgid "Valley fill"
-msgstr ""
+msgstr "Recheo dos vales"
#: src/settings_translation_file.cpp
msgid "Valley profile"
-msgstr ""
+msgstr "Perfil dos vales"
#: src/settings_translation_file.cpp
msgid "Valley slope"
-msgstr ""
+msgstr "Inclinación dos vales"
#: src/settings_translation_file.cpp
msgid "Variation of biome filler depth."
-msgstr ""
+msgstr "Variación da profundidade do recheo do bioma."
#: src/settings_translation_file.cpp
msgid "Variation of maximum mountain height (in nodes)."
-msgstr ""
+msgstr "Variación da altura máxima da montaña (en nós)."
#: src/settings_translation_file.cpp
msgid "Variation of number of caves."
-msgstr ""
+msgstr "Variación do número de covas."
#: src/settings_translation_file.cpp
msgid ""
"Variation of terrain vertical scale.\n"
"When noise is < -0.55 terrain is near-flat."
msgstr ""
+"Variación da escala vertical do terreo.\n"
+"Cando o ruído é < -0,55 o terreo é case plano."
#: src/settings_translation_file.cpp
msgid "Varies depth of biome surface nodes."
-msgstr ""
+msgstr "Variación da profundidade dos nós da superficie do bioma."
#: src/settings_translation_file.cpp
msgid ""
"Varies roughness of terrain.\n"
"Defines the 'persistence' value for terrain_base and terrain_alt noises."
msgstr ""
+"Varía a rugosidade do terreo.\n"
+"Define o valor de \"persistencia\" para os ruídos \"chánin_base\" e "
+"\"chánin_alt\"."
#: src/settings_translation_file.cpp
msgid "Varies steepness of cliffs."
-msgstr ""
+msgstr "Varía a pendiente dos acantilados."
#: src/settings_translation_file.cpp
msgid "Vertical climbing speed, in nodes per second."
-msgstr ""
+msgstr "Velocidade de escalada vertical, en nós por segundo."
#: src/settings_translation_file.cpp
msgid "Vertical screen synchronization."
-msgstr ""
+msgstr "Sincronización de pantalla vertical."
#: src/settings_translation_file.cpp
msgid "Video driver"
-msgstr ""
+msgstr "Controlador de vídeo"
#: src/settings_translation_file.cpp
msgid "View bobbing factor"
-msgstr ""
+msgstr "Ver o factor de balance"
#: src/settings_translation_file.cpp
msgid "View distance in nodes."
-msgstr ""
+msgstr "Distancia de visión en nós."
#: src/settings_translation_file.cpp
msgid "View range decrease key"
-msgstr ""
+msgstr "Ver a tecla de diminución do intervalo"
#: src/settings_translation_file.cpp
msgid "View range increase key"
-msgstr ""
+msgstr "Ver a tecla de aumento do intervalo"
#: src/settings_translation_file.cpp
msgid "View zoom key"
-msgstr ""
+msgstr "Ver tecla de zoom"
#: src/settings_translation_file.cpp
msgid "Viewing range"
-msgstr ""
+msgstr "Campo de visión"
#: src/settings_translation_file.cpp
msgid "Virtual joystick triggers Aux1 button"
-msgstr ""
+msgstr "O joystick virtual activa o botón Aux1"
#: src/settings_translation_file.cpp
msgid "Volume"
-msgstr ""
+msgstr "Volume"
#: src/settings_translation_file.cpp
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
+"Todos os sons.\n"
+"É necesario que o son do sistema estea activado."
#: src/settings_translation_file.cpp
msgid ""
@@ -6421,58 +7642,64 @@ msgid ""
"Has no effect on 3D fractals.\n"
"Range roughly -2 to 2."
msgstr ""
+"Coordenada W da porción 3D xerada dun fractal 4D.\n"
+"Determina que parte 3D da forma 4D se xera.\n"
+"Altera a forma do fractal.\n"
+"Non ten efecto sobre os fractais 3D.\n"
+"Rango de aproximadamente -2 a 2."
#: src/settings_translation_file.cpp
msgid "Walking and flying speed, in nodes per second."
-msgstr ""
+msgstr "Velocidade ao camiñar e voar, en nós por segundo."
#: src/settings_translation_file.cpp
msgid "Walking speed"
-msgstr ""
+msgstr "Velocidade ao camiñar"
#: src/settings_translation_file.cpp
msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
msgstr ""
+"Velocidade ao camiñar, voar e escalar no modo rápido, en nós por segundo."
#: src/settings_translation_file.cpp
msgid "Water level"
-msgstr ""
+msgstr "Nivel da auga"
#: src/settings_translation_file.cpp
msgid "Water surface level of the world."
-msgstr ""
+msgstr "Nivel da superficie da auga no mundo."
#: src/settings_translation_file.cpp
msgid "Waving Nodes"
-msgstr ""
+msgstr "Bloques ondulantes"
#: src/settings_translation_file.cpp
msgid "Waving leaves"
-msgstr ""
+msgstr "Movemento das follas"
#: src/settings_translation_file.cpp
msgid "Waving liquids"
-msgstr ""
+msgstr "Ondas dos líquidos"
#: src/settings_translation_file.cpp
msgid "Waving liquids wave height"
-msgstr ""
+msgstr "Altura das ondas dos líquidos"
#: src/settings_translation_file.cpp
msgid "Waving liquids wave speed"
-msgstr ""
+msgstr "Velocidade de movemento das ondas dos líquidos"
#: src/settings_translation_file.cpp
msgid "Waving liquids wavelength"
-msgstr ""
+msgstr "Movemento das ondas dos líquidos"
#: src/settings_translation_file.cpp
msgid "Waving plants"
-msgstr ""
+msgstr "Movemento das plantas"
#: src/settings_translation_file.cpp
msgid "Weblink color"
-msgstr ""
+msgstr "Cor de ligazóns web"
#: src/settings_translation_file.cpp
msgid ""
@@ -6480,6 +7707,10 @@ msgid ""
"filtered in software, but some images are generated directly\n"
"to hardware (e.g. render-to-texture for nodes in inventory)."
msgstr ""
+"Cando gui_scaling_filter ten valor verdadeiro, todas as imaxes da GUI deben "
+"ser\n"
+"filtradas no software, pero algunhas imaxes xéranse directamente\n"
+"ao hardware (por exemplo, renderizado en textura para nós do inventario)."
#: src/settings_translation_file.cpp
msgid ""
@@ -6488,6 +7719,11 @@ msgid ""
"to the old scaling method, for video drivers that don't\n"
"properly support downloading textures back from hardware."
msgstr ""
+"Cando gui_scaling_filter_txr2img teña un valor verdadeiro, copia esas "
+"imaxes\n"
+"do hardware ao software para escalar. Cando sexa falso, retrocede\n"
+"ao método de escala antigo para controladores de vídeo que non o fan\n"
+"admite correctamente a descarga de texturas desde o hardware."
#: src/settings_translation_file.cpp
msgid ""
@@ -6500,36 +7736,57 @@ msgid ""
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
+"Cando se usan filtros bilineais/trilineais/anisótropos, texturas de baixa "
+"resolución\n"
+"poden ser borrosas, polo que amplíaos automaticamente co veciño máis "
+"próximo\n"
+"interpolación para preservar píxeles nítidos. Isto establece o tamaño mínimo "
+"de textura\n"
+"para as texturas mejoradas; valores máis altos parecen máis nítidos, pero "
+"requiren máis\n"
+"memoria. Recoméndase potencias de 2. Esta configuración só se aplica se\n"
+"O filtrado bilineal/trilineal/anisótropo está activado.\n"
+"Tamén se usa como tamaño de textura do nodo base para aliñados ao mundo\n"
+"autoescalado de texturas."
#: src/settings_translation_file.cpp
msgid ""
"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
+"Indica se os fondos das etiquetas de nome deberían mostrarse por defecto.\n"
+"Os mods aínda poden establecer un fondo."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
msgstr ""
+"Indica se as animacións de textura de nós deben desincronizarse por bloque "
+"de mapas."
#: 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 ""
+"Indica se os xogadores son mostrados aos clientes sen límites.\n"
+"Se non, utiliza a configuración player_transfer_distance no seu lugar."
#: src/settings_translation_file.cpp
msgid "Whether to allow players to damage and kill each other."
-msgstr ""
+msgstr "Se permitir que os xogadores se danen e se maten entre si."
#: 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 ""
+"Indica se pedir aos clientes volverse conectar logo dun fallo (Lua).\n"
+"Establece isto como verdadeiro se o teu servidor está configurado para "
+"reiniciarse automaticamente."
#: src/settings_translation_file.cpp
msgid "Whether to fog out the end of the visible area."
-msgstr ""
+msgstr "Indica se hai que poñar néboa ao final da zona visible."
#: src/settings_translation_file.cpp
msgid ""
@@ -6538,19 +7795,37 @@ msgid ""
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
+"Indica se hai que silenciar os sons. Podes activar o son en calquera "
+"momento, a non ser que\n"
+"esté desactivado (enable_sound=false).\n"
+"No xogo podes cambiar o estado de silencio coa tecla de silencio ou no\n"
+"menú de pausa."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
+"Debe mostrarse a información de depuración do cliente (premer F5 fai o "
+"mesmo)."
#: src/settings_translation_file.cpp
msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
+"Componente de largura do tamaño inicial da xanela. Ignórase en pantalla "
+"completa."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
-msgstr ""
+msgstr "Largura das liñas do bloque de selección arredor dos nós."
#: src/settings_translation_file.cpp
msgid ""
@@ -6558,16 +7833,21 @@ msgid ""
"background.\n"
"Contains the same information as the file debug.txt (default name)."
msgstr ""
+"Só sistemas Windows: Inicia Minetest coa xanela da liña de comandos en "
+"segundo plano.\n"
+"Contén a mesma información que o ficheiro debug.txt (nome por defecto)."
#: 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 ""
+"Directorio do mundo (todo almacénase aquí).\n"
+"Non é necesario se comeza desde o menú."
#: src/settings_translation_file.cpp
msgid "World start time"
-msgstr ""
+msgstr "Horario de inicio do mundo"
#: src/settings_translation_file.cpp
msgid ""
@@ -6578,28 +7858,39 @@ msgid ""
"See also texture_min_size.\n"
"Warning: This option is EXPERIMENTAL!"
msgstr ""
+"As texturas aliñadas ao mundo pódense escalar para abarcar varios nós. Non "
+"obstante,\n"
+"é posible que o servidor non envíe a escala que desexa, especialmente se "
+"usa\n"
+"un paquete de texturas especialmente deseñado; con esta opción, o cliente "
+"tenta\n"
+"determinar a escala automaticamente baseándose no tamaño da textura.\n"
+"Consulte tamén texture_min_size.\n"
+"Aviso: esta opción é EXPERIMENTAL!"
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
-msgstr ""
+msgstr "Modo de texturas aliñadas ao mundo"
#: src/settings_translation_file.cpp
msgid "Y of flat ground."
-msgstr ""
+msgstr "Y de terreo chán."
#: src/settings_translation_file.cpp
msgid ""
"Y of mountain density gradient zero level. Used to shift mountains "
"vertically."
msgstr ""
+"Y da densidade do gradiente nivel cero das montañas. Úsase para mover "
+"montañas verticalmente."
#: src/settings_translation_file.cpp
msgid "Y of upper limit of large caves."
-msgstr ""
+msgstr "Límite Y máximo das covas grandes."
#: src/settings_translation_file.cpp
msgid "Y-distance over which caverns expand to full size."
-msgstr ""
+msgstr "Distancia Y sobre a cal as cavernas expándense até o seu tamaño total."
#: src/settings_translation_file.cpp
msgid ""
@@ -6608,38 +7899,119 @@ 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 ""
+"Distancia Y sobre a cal os terreos flotantes estrechanse desde a densidade "
+"total ata nada.\n"
+"A diminución comeza a esta distancia do límite Y.\n"
+"Para unha capa sólida de terreo flotante, isto controla a altura dos "
+"outeiros/montañas.\n"
+"Debe ser menor ou igual á metade da distancia entre os límites Y."
#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
-msgstr ""
+msgstr "Nivel Y da superficie media do terreo."
#: src/settings_translation_file.cpp
msgid "Y-level of cavern upper limit."
-msgstr ""
+msgstr "Nivel Y do límite superior da caverna."
#: src/settings_translation_file.cpp
msgid "Y-level of higher terrain that creates cliffs."
-msgstr ""
+msgstr "Nivel Y de terreo que crea acantilados."
#: src/settings_translation_file.cpp
msgid "Y-level of lower terrain and seabed."
-msgstr ""
+msgstr "Nivel Y do terreo inferior e do solo oceánico."
#: src/settings_translation_file.cpp
msgid "Y-level of seabed."
+msgstr "Nivel Y do fondo do mar."
+
+#: src/settings_translation_file.cpp
+msgid "cURL"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
-msgstr ""
+msgstr "Tempo límite de descarga do ficheiro por cURL"
#: src/settings_translation_file.cpp
msgid "cURL interactive timeout"
-msgstr ""
+msgstr "Tempo limite de cURL"
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
-msgstr ""
+msgstr "Límite paralelo de cURL"
+
+#~ msgid "Basic"
+#~ msgstr "Básico"
+
+#~ msgid "Connect"
+#~ msgstr "Conectar"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Controla a velocidade de afundimento en líquidos."
+
+#~ msgid "Del. Favorite"
+#~ msgstr "Eliminar fav."
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Descarga un xogo como Minetest Game en minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Descarga un en minetest.net"
+
+#~ msgid "Enable register confirmation"
+#~ msgstr "Activar confirmación de rexistro"
+
+#~ msgid "Enter "
+#~ msgstr "Introducir: "
+
+#~ msgid "Filtering"
+#~ msgstr "Filtrado"
+
+#~ msgid "Game"
+#~ msgstr "Xogo"
+
+#~ msgid "HUD scale factor"
+#~ msgstr "Factor de escala HUD"
+
+#~ msgid "In-Game"
+#~ msgstr "No xogo"
+
+#~ msgid "Instrumentation"
+#~ msgstr "Instrumentación"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr "Combinacións de teclas"
+
+#~ msgid "Menus"
+#~ msgstr "Menús"
+
+#~ msgid "Player name"
+#~ msgstr "Nome do xogador"
+
+#~ msgid "Profiling"
+#~ msgstr "Perfilaxe"
+
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Servidor / Un xogador"
+
+#, 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 ""
+#~ "Estás a piques de unirte ao servidor \"%s\" por primeira vez.\n"
+#~ "Se continúas, crearase unha nova conta neste servidor usando as túas "
+#~ "credenciais.\n"
+#~ "Reescribe o teu contrasinal e fai clic en \"Rexistrarse e unirse\" para "
+#~ "confirmar a creación da conta ou fai clic en \"Cancelar\" para deter o "
+#~ "proceso."
#, fuzzy
#~ msgid "You died."
diff --git a/po/he/minetest.po b/po/he/minetest.po
index a6beb9def..f396cc0ba 100644
--- a/po/he/minetest.po
+++ b/po/he/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Hebrew (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -120,6 +120,31 @@ msgid "The server has requested a reconnect:"
msgstr "השרת מבקש התחברות מחדש:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "בחירת שיפורי×"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "שגי××” בגרס×ות הפרוטוקול. "
@@ -132,6 +157,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "השרת תומך ×‘×¤×¨×•×˜×•×§×•×œ×™× ×‘×™×Ÿ גרסה $1 וגרסה $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "×נו ×ª×•×ž×›×™× ×¨×§ בגירסה 1$ של הפרוטוקול."
@@ -139,14 +168,21 @@ msgstr "×נו ×ª×•×ž×›×™× ×¨×§ בגירסה 1$ של הפרוטוקול."
msgid "We support protocol versions between version $1 and $2."
msgstr "×נו ×ª×•×ž×›×™× ×‘×’×¨×¡×ות בין 1$ ל-2$ של הפרוטוקול."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "ביטול"
@@ -285,7 +321,6 @@ msgid "Failed to download $1"
msgstr "הורדת $1 נכשלה"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "משחקי×"
@@ -307,7 +342,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr "התקנה: סוג קובץ ×œ× × ×ª×ž×š \"$1\" ×ו שה×רכיב פגו×"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "שיפורי×"
@@ -400,12 +434,9 @@ msgid "Decorations"
msgstr "קישוטי×"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "הורדת משחק, כמו משחק Minetest, מ×תר minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "הורד ×חד מ×תר minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "×זהרה: מצב בדיקת הפיתוח נועד למפתחי×."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -423,10 +454,6 @@ msgstr "גושי ×דמה ×¦×¤×™× ×‘×©×ž×™×"
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 "צור שטח ×œ× ×¤×¨×§×˜×œ×™: ××•×§×™×™× ×•×¡×™× ×•×ª×ª קרקעי"
@@ -444,6 +471,15 @@ msgid "Increases humidity around rivers"
msgstr "הגברת הלחות בסביבת נהרות"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "התקנת $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "×גמי×"
@@ -543,10 +579,6 @@ 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 "×©× ×”×¢×•×œ×"
@@ -576,6 +608,38 @@ msgstr "pkgmgr: נתיב ×œ× ×—×•×§×™ \"$1\""
msgid "Delete World \"$1\"?"
msgstr "למחוק ×ת ×”×¢×•×œ× \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "×שר סיסמה"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "ש×"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "סיסמה"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "סיסמ×ות ×œ× ×ª×•×מות!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "×”×¨×©× ×•×”×¦×˜×¨×£"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "הסכמה"
@@ -608,6 +672,16 @@ msgstr "חזור לדף ההגדרות >"
msgid "Browse"
msgstr "דפדף"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "תוכן"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "תוכן"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "מושבת"
@@ -665,7 +739,7 @@ msgstr "× × ×œ×‘×—×•×¨ תיקיה"
msgid "Select file"
msgstr "× × ×œ×‘×—×•×¨ קובץ"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "הצגת שמות טכניי×"
@@ -814,6 +888,10 @@ msgstr "×ª×•×¨×ž×™× ×§×•×“×ž×™×"
msgid "Previous Core Developers"
msgstr "מפתחי ליבה קודמי×"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "עיון בתוכן מקוון"
@@ -882,10 +960,6 @@ msgstr "×כסון שרת"
msgid "Install games from ContentDB"
msgstr "התקנת משחק מContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "ש×"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "חדש"
@@ -894,10 +968,6 @@ msgstr "חדש"
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 "להתחיל לשחק"
@@ -932,10 +1002,6 @@ msgid "Clear"
msgstr "× ×§×”"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "התחברות"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "מצב יצירתי"
@@ -946,10 +1012,6 @@ msgid "Damage / PvP"
msgstr "חבלה"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "מחק מועדף"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "מועדף"
@@ -963,6 +1025,10 @@ msgid "Join Game"
msgstr "הצטרפות למשחק"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "פינג"
@@ -977,10 +1043,19 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "מחק מועדף"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "פורט לשרת"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "x2"
@@ -1025,7 +1100,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1121,7 +1196,8 @@ msgid "Tone Mapping"
msgstr "מיפוי גווני×"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "סף נגיעה: (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1129,7 +1205,7 @@ msgid "Trilinear Filter"
msgstr "פילטר תלת לינ×רי"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1148,6 +1224,11 @@ msgstr "× ×•×–×œ×™× ×¢× ×’×œ×™×"
msgid "Waving Plants"
msgstr "×¦×ž×—×™× ×ž×ª× ×•×¢× ×¢×™×"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "בעיה בחיבור (נגמר זמן ההמתנה?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "זמן המתנה לחיבור ×זל."
@@ -1285,7 +1366,7 @@ msgid "Camera update enabled"
msgstr "עדכון מצלמה מופעל"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1416,6 +1497,11 @@ msgid "Enabled unlimited viewing range"
msgstr "הפעלת טווח ר××™×” בלתי מוגבל"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "יוצר לקוח..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "יצי××” לתפריט"
@@ -1922,28 +2008,6 @@ msgstr "הורדת $1 נכשלה"
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 ""
-"×תה עומד להצטרף לשרת ×–×” ×¢× ×”×©× \"%s\" ×‘×¤×¢× ×”×¨×שונה.\n"
-"×× ×ª×ž×©×™×š, ייווצר חשבון חדש ב×מצעות ×ישוריך בשרת ×–×”.\n"
-"×× × ×”×§×œ×“ מחדש ×ת הסיסמה שלך ולחץ על '×”×™×¨×©× ×•×”×¦×˜×¨×£' כדי ל×שר ×ת יצירת החשבון, "
-"×ו לחץ על 'ביטול' כדי לבטל."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "להמשיך"
@@ -1977,7 +2041,7 @@ msgstr ""
msgid "Change camera"
msgstr "שנה מצלמה"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "צ'×ט"
@@ -2030,8 +2094,8 @@ msgid "Key already in use"
msgstr "מקש כבר בשימוש"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "קישור ×ž×§×©×™× (×× ×”×ª×¤×¨×™×˜ מתקלקל, הסר ×“×‘×¨×™× ×žminetest.conf)"
+msgid "Keybindings."
+msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2102,10 +2166,6 @@ msgid "Change"
msgstr "שנה"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "×שר סיסמה"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "סיסמה חדשה"
@@ -2113,6 +2173,10 @@ msgstr "סיסמה חדשה"
msgid "Old Password"
msgstr "סיסמה ישנה"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "סיסמ×ות ×œ× ×ª×•×מות!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "יצי××”"
@@ -2126,12 +2190,6 @@ msgstr "מושתק"
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).
@@ -2139,6 +2197,16 @@ msgstr "הכנס "
msgid "LANG_CODE"
msgstr "he"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "× × ×œ×‘×—×•×¨ ש×!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2302,6 +2370,10 @@ msgstr ""
"×©×™× ×œ×‘ שמצב interlaced מחייב הפעלת shaders."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2393,6 +2465,11 @@ msgstr ""
"כדי להיות בטוח) יוצר שכבת צף מוצקה."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "הוסף ×©× ×¤×¨×™×˜"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "מתקד×"
@@ -2411,7 +2488,8 @@ msgstr ""
"×–×” משפיע מעט מ×וד על ×ור הלילה הטבעי."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "תמיד לעוף ומהר"
#: src/settings_translation_file.cpp
@@ -2490,6 +2568,10 @@ msgstr ""
"מצוין במפה (16 קוביות)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "מקש התקדמות ×וטומטית"
@@ -2531,10 +2613,6 @@ msgid "Base terrain height."
msgstr "גובה השטח."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "בסיסי"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "הרש×ות בסיסיות"
@@ -2555,7 +2633,8 @@ msgid "Bind address"
msgstr "הצמד כתובת"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "פרמטרי רעש טמפרטורה ולחות של Biome API"
#: src/settings_translation_file.cpp
@@ -2567,6 +2646,10 @@ msgid "Block send optimize distance"
msgstr "×ופטימיזצית שליחת בלוק"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "נתיב גופן עבה/מוטה"
@@ -2591,6 +2674,11 @@ msgid "Builtin"
msgstr "בילד×ין"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+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"
@@ -2758,6 +2846,11 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "קלינט"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2853,6 +2946,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2886,7 +2983,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2953,11 +3052,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3101,6 +3200,11 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Developer Options"
+msgstr "קישוטי×"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Dig key"
msgstr "מקש התזוזה ימינה"
@@ -3122,6 +3226,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3191,6 +3301,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3207,19 +3321,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3293,6 +3401,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3311,6 +3423,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3388,8 +3504,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr ""
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "החלקת קצוות (AA):"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3456,6 +3573,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3604,6 +3725,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "משחקי×"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3631,6 +3765,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3648,10 +3790,15 @@ msgid "HTTP mods"
msgstr "מודי×"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "מידע-על-מסך מוצג"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr ""
@@ -3889,11 +4036,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3954,6 +4108,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3975,7 +4135,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4015,10 +4177,6 @@ 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 ""
@@ -4069,15 +4227,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4698,6 +4852,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4753,7 +4911,7 @@ msgstr "מקש התזוזה שמ×לה"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4763,15 +4921,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4783,7 +4944,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4811,6 +4973,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+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"
@@ -5201,10 +5368,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5253,6 +5416,18 @@ msgid "Mipmapping"
msgstr "מיפמ×פינג"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5339,16 +5514,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5361,6 +5536,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "הבלטת קוביות"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5398,10 +5578,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5495,10 +5671,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5546,10 +5718,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5718,6 +5886,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "מסך:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5745,6 +5918,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "×¦×™×œ×•× ×ž×¡×š"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5757,10 +5935,6 @@ 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 ""
@@ -5800,10 +5974,21 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
+#, fuzzy
+msgid "Server"
+msgstr "×כסון שרת"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
msgstr "שרת / שחקן יחיד"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "פורט לשרת"
+
+#: src/settings_translation_file.cpp
msgid "Server URL"
msgstr ""
@@ -5828,10 +6013,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "פורט לשרת"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5842,12 +6036,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5855,7 +6051,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5934,7 +6130,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6134,6 +6330,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "הגדרות"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6336,7 +6537,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6360,10 +6561,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6454,6 +6663,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6690,6 +6903,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6781,6 +7003,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "(cURL) זמן להורדה נגמר"
@@ -6802,25 +7028,47 @@ msgstr "(cURL) מגבלה לפעולות במקביל"
#~ msgid "Address / Port"
#~ msgstr "כתובת / פורט"
+#~ msgid "Basic"
+#~ msgstr "בסיסי"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "×‘×™×˜×™× ×œ×¤×™×§×¡×œ (עומק צבע) במצב מסך מל×."
#~ msgid "Configure"
#~ msgstr "קביעת תצורה"
+#~ msgid "Connect"
+#~ msgstr "התחברות"
+
#~ msgid "Credits"
#~ msgstr "תודות"
#~ msgid "Damage enabled"
#~ msgstr "נזק מופעל"
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "הורדת משחק, כמו משחק Minetest, מ×תר minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "הורד ×חד מ×תר minetest.net"
+
#, fuzzy
#~ msgid "Enable VBO"
#~ msgstr "×פשר בכל"
+#~ msgid "Enter "
+#~ msgstr "הכנס "
+
+#~ msgid "Game"
+#~ msgstr "משחק"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "התקנה: מקובץ: \"$1\""
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr "קישור ×ž×§×©×™× (×× ×”×ª×¤×¨×™×˜ מתקלקל, הסר ×“×‘×¨×™× ×žminetest.conf)"
+
#~ msgid "Main menu style"
#~ msgstr "סגנון התפריט הר×שי"
@@ -6852,6 +7100,20 @@ msgstr "(cURL) מגבלה לפעולות במקביל"
#~ msgid "Yes"
#~ msgstr "כן"
+#, 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 ""
+#~ "×תה עומד להצטרף לשרת ×–×” ×¢× ×”×©× \"%s\" ×‘×¤×¢× ×”×¨×שונה.\n"
+#~ "×× ×ª×ž×©×™×š, ייווצר חשבון חדש ב×מצעות ×ישוריך בשרת ×–×”.\n"
+#~ "×× × ×”×§×œ×“ מחדש ×ת הסיסמה שלך ולחץ על '×”×™×¨×©× ×•×”×¦×˜×¨×£' כדי ל×שר ×ת יצירת "
+#~ "החשבון, ×ו לחץ על 'ביטול' כדי לבטל."
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "מתת"
diff --git a/po/hi/minetest.po b/po/hi/minetest.po
index f21076beb..dc79d1c87 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: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -123,6 +123,31 @@ msgid "The server has requested a reconnect:"
msgstr "सरà¥à¤µà¤° वापस कनेकà¥à¤Ÿ करना चाहता है :"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "दà¥à¤¨à¤¿à¤¯à¤¾ चà¥à¤¨à¥à¤¹à¥‡à¤‚ :"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "पà¥à¤°à¥‹à¤Ÿà¥‹à¤•ॉल संखà¥à¤¯à¤¾ à¤à¤• नहीं है। "
@@ -135,6 +160,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "सरà¥à¤µà¤° केवल पà¥à¤°à¥‹à¤Ÿà¥‹à¤•ॉल $1 से $2 ही लेता है। "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "हम केवल पà¥à¤°à¥‹à¤Ÿà¥‹à¤•ॉल $1 ही लेते हैं।"
@@ -142,14 +171,21 @@ msgstr "हम केवल पà¥à¤°à¥‹à¤Ÿà¥‹à¤•ॉल $1 ही लेते à
msgid "We support protocol versions between version $1 and $2."
msgstr "हम पà¥à¤°à¥‹à¤Ÿà¥‹à¤•ॉल $1 से $2 ही लेते हैं।"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "रोकें"
@@ -289,7 +325,6 @@ msgid "Failed to download $1"
msgstr "$1 का डाऊनलोड असफल हà¥à¤†"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "अनेक खेल"
@@ -313,7 +348,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr "इनà¥à¤¸à¥à¤Ÿà¤¾à¤² : \"$1\" का फाईल टाईप अंजान है याफिर आरकाइव खराब है"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "माॅड"
@@ -407,12 +441,10 @@ msgid "Decorations"
msgstr "सजावट"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "मैनटेसà¥à¤Ÿ खेल जैसे अनà¥à¤¯ खेल minetest.net से डाऊनलोड किठजा सकते हैं"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "आप किसी भी खेल को minetest.net से डाऊनलोड कर सकते हैं"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr ""
+"चेतावनी : नà¥à¤¯à¥‚नतम विकास खेल (Minimal development test) खेल बनाने वालों के लिठहै।"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -430,10 +462,6 @@ msgstr "आसमान में तैरते हà¥à¤ भूमि-खंà
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 "Non-fractal भूमि तैयार हो : समà¥à¤¦à¥à¤° व भूमि के नीचे"
@@ -451,6 +479,15 @@ msgid "Increases humidity around rivers"
msgstr "नदियों के आसपास नमी बढ़ाता है"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "इनà¥à¤¸à¥à¤Ÿà¤¾à¤² करें"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "à¤à¥€à¤²à¥‡à¤‚"
@@ -550,11 +587,6 @@ 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 ""
-"चेतावनी : नà¥à¤¯à¥‚नतम विकास खेल (Minimal development test) खेल बनाने वालों के लिठहै।"
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "दà¥à¤¨à¤¿à¤¯à¤¾ का नाम"
@@ -584,6 +616,39 @@ msgstr "pkgmgr: \"$1\" फाईल पार गलत है"
msgid "Delete World \"$1\"?"
msgstr "दà¥à¤¨à¤¿à¤¯à¤¾ रदà¥à¤¦ करें?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "पासवरà¥à¤¡ दोबारा लिखें"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Password"
+msgstr "नया पासवरà¥à¤¡"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "पासवरà¥à¤¡ अलग-अलग हैं!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "पंजीकरण व खेलें"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "हां"
@@ -614,6 +679,16 @@ msgstr "वापस सेटिंग पृषà¥à¤  पर जाà¤à¤‚"
msgid "Browse"
msgstr "ढूंढें"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "वसà¥à¤¤à¥à¤à¤‚"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "वसà¥à¤¤à¥à¤à¤‚"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "रà¥à¤•ा हà¥à¤†"
@@ -671,7 +746,7 @@ msgstr "फाईल पाथ चà¥à¤¨à¥‡à¤‚"
msgid "Select file"
msgstr "फाईल चà¥à¤¨à¥‡à¤‚"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "तकनीकी नाम देखें"
@@ -818,6 +893,10 @@ msgstr "पूरà¥à¤µ सहायक"
msgid "Previous Core Developers"
msgstr "पूरà¥à¤µ मà¥à¤–à¥à¤¯ डेवेलपर"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "नेट पर वसà¥à¤¤à¥à¤à¤‚ ढूंढें"
@@ -886,10 +965,6 @@ msgstr "सरà¥à¤µà¤° चलाà¤à¤‚"
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 "नया"
@@ -898,11 +973,6 @@ msgstr "नया"
msgid "No world created or selected!"
msgstr "कोई दà¥à¤¨à¤¿à¤¯à¤¾ उपसà¥à¤¥à¤¿à¤¤ या चà¥à¤¨à¥€ गयी नहीं है !"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "नया पासवरà¥à¤¡"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "खेल खेलें"
@@ -938,10 +1008,6 @@ msgid "Clear"
msgstr "खाली करें"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "कनेकà¥à¤Ÿ करें"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "असीमित संसाधन"
@@ -952,10 +1018,6 @@ msgid "Damage / PvP"
msgstr "- हानि : "
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "पसंद हटाà¤à¤‚"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "पसंद"
@@ -969,6 +1031,10 @@ msgid "Join Game"
msgstr "खेल में शामिल होà¤à¤‚"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "पिंग"
@@ -983,10 +1049,19 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "पसंद हटाà¤à¤‚"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "सरà¥à¤µà¤° पोरà¥à¤Ÿ"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "दà¥à¤—à¥à¤¨à¤¾"
@@ -1031,7 +1106,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1128,7 +1203,8 @@ msgid "Tone Mapping"
msgstr "टोन मैपिंग"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "छूने की तà¥à¤°à¤¿à¤œà¥à¤¯à¤¾ : (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1136,7 +1212,7 @@ msgid "Trilinear Filter"
msgstr "तà¥à¤°à¤¿à¤°à¥‡à¤–ीय फिलà¥à¤Ÿà¤°"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1155,6 +1231,11 @@ msgstr "पानी में लहरें बनें"
msgid "Waving Plants"
msgstr "पाैधे लहराà¤à¤‚"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "कनेकà¥à¤¶à¤¨ खराबी (समय अंत?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "कनेकà¥à¤¶à¤¨ समय अंत|"
@@ -1292,7 +1373,7 @@ msgid "Camera update enabled"
msgstr "कैमरा चालू"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1422,6 +1503,11 @@ msgid "Enabled unlimited viewing range"
msgstr "दृषà¥à¤Ÿà¤¿ असीमित"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "कà¥à¤²à¤¾à¤‡à¤‚ट बनाया जा रहा है ..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "बंद करके मेनू पर जाà¤à¤‚"
@@ -1929,29 +2015,6 @@ msgstr "$1 का डाऊनलोड असफल हà¥à¤†"
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 ""
-"आप \"%s\" नाम से इस सरवर में पहली बार आने वाले हैं। अगर आप आगे बढ़ते हैं तो आपके लिठइस "
-"सरà¥à¤µà¤° पर à¤à¤• अकाउंट बनाया जाà¤à¤—ा।\n"
-"\n"
-"आगे बढ़ने ठलिखें कृपया अपने पासवरà¥à¤¡ को वापस लिखें और फिर 'पंजीकरण व खेलें' दबाà¤à¤‚, अथवा "
-"'रोकें' दबाà¤à¤‚।"
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "आगे बढ़े"
@@ -1985,7 +2048,7 @@ msgstr ""
msgid "Change camera"
msgstr "कैमरा बदलना"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "बातें"
@@ -2038,8 +2101,8 @@ msgid "Key already in use"
msgstr "की पहले से इसà¥à¤¤à¥‡à¤®à¤¾à¤² में है"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "कीबोरà¥à¤¡ सेटिंग (अगर यह मेनू खराब हो जाठतो minetest.conf से सब कà¥à¤› खाली कर दें)"
+msgid "Keybindings."
+msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2110,10 +2173,6 @@ msgid "Change"
msgstr "बदलें"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "पासवरà¥à¤¡ दोबारा लिखें"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "नया पासवरà¥à¤¡"
@@ -2121,6 +2180,10 @@ msgstr "नया पासवरà¥à¤¡"
msgid "Old Password"
msgstr "पà¥à¤°à¤¾à¤¨à¤¾ पासवरà¥à¤¡"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "पासवरà¥à¤¡ अलग-अलग हैं!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "निकास"
@@ -2134,12 +2197,6 @@ msgstr "चà¥à¤ª"
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).
@@ -2147,6 +2204,16 @@ msgstr "डालें "
msgid "LANG_CODE"
msgstr "hi"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "कृपया à¤à¤• नाम चà¥à¤¨à¥‡à¤‚!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2272,6 +2339,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2353,6 +2424,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "दà¥à¤¨à¤¿à¤¯à¤¾ का नाम"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2366,7 +2442,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "हमेशा उड़ान और तेज"
#: src/settings_translation_file.cpp
@@ -2435,6 +2512,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2476,10 +2557,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2500,7 +2577,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2512,6 +2589,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2536,6 +2617,11 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+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"
@@ -2694,6 +2780,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2789,6 +2879,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2822,7 +2916,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2889,11 +2985,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3036,6 +3132,11 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "सजावट"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -3056,6 +3157,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3125,6 +3232,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3141,19 +3252,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3227,6 +3332,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3245,6 +3354,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3325,8 +3438,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr ""
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "à¤à¤¨à¥à¤Ÿà¥€ à¤à¤²à¤¿à¤¯à¤¾à¤¸à¤¿à¤‚ग :"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3393,6 +3507,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3541,6 +3659,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "अनेक खेल"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3568,6 +3699,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3584,10 +3723,15 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "हे॰अ॰डि॰ दिखाई देंगी"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr ""
@@ -3824,11 +3968,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3897,6 +4048,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3918,7 +4075,9 @@ msgid ""
msgstr "चालू होने पर आप जहां देखेंगे उस दिशा को सामने माना जाà¤à¤—ा (पिच चलन)|"
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3960,10 +4119,6 @@ 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 ""
@@ -4014,15 +4169,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4643,6 +4794,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4698,7 +4853,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4708,15 +4863,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4728,7 +4886,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4756,6 +4915,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+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"
@@ -5140,10 +5304,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5192,6 +5352,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5278,16 +5450,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5300,6 +5472,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "डिबà¥à¤¬à¥‡à¤‚ उजाले हों"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5337,10 +5514,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5437,10 +5610,6 @@ msgstr ""
"इसके लिये \"उडान\" विषेशाधिकार आवशà¥à¤¯à¤• है |"
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5487,10 +5656,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5659,6 +5824,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "सà¥à¤•à¥à¤°à¥€à¤¨ :"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5686,6 +5856,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "सà¥à¤•à¥à¤°à¥€à¤¨à¤¶à¥‰à¤Ÿ"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5698,10 +5873,6 @@ 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 ""
@@ -5741,8 +5912,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr ""
+#, fuzzy
+msgid "Server"
+msgstr "सरà¥à¤µà¤° चलाà¤à¤‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "- सरà¥à¤µà¤° का नाम : "
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "सरà¥à¤µà¤° पोरà¥à¤Ÿ"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5769,10 +5951,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "सरà¥à¤µà¤° पोरà¥à¤Ÿ"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5783,12 +5974,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5796,7 +5989,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5872,7 +6065,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6074,6 +6267,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "सेटिंग"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6276,7 +6474,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6300,10 +6498,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6394,6 +6600,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6627,6 +6837,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6716,6 +6935,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6751,21 +6974,41 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "सेटिंग बदलें"
+#~ msgid "Connect"
+#~ msgstr "कनेकà¥à¤Ÿ करें"
+
#~ msgid "Credits"
#~ msgstr "आभार सूची"
#~ msgid "Damage enabled"
#~ msgstr "हानि व मृतà¥à¤¯à¥ हो सकती है"
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "मैनटेसà¥à¤Ÿ खेल जैसे अनà¥à¤¯ खेल minetest.net से डाऊनलोड किठजा सकते हैं"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "आप किसी भी खेल को minetest.net से डाऊनलोड कर सकते हैं"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "$1 का डाऊनलोड व इनà¥à¤¸à¥à¤Ÿà¤¾à¤² चल रहा है, कृपया ठहरें ..."
+#~ msgid "Enter "
+#~ msgstr "डालें "
+
+#~ msgid "Game"
+#~ msgstr "खेल"
+
#~ msgid "Generate Normal Maps"
#~ msgstr "मामूली नकà¥à¤¶à¥‡ बनाà¤à¤‚"
#~ msgid "Install: file: \"$1\""
#~ msgstr "इनà¥à¤¸à¥à¤Ÿà¤¾à¤² : फाईल : \"$1\""
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "कीबोरà¥à¤¡ सेटिंग (अगर यह मेनू खराब हो जाठतो minetest.conf से सब कà¥à¤› खाली कर दें)"
+
#~ msgid "Main"
#~ msgstr "मà¥à¤–à¥à¤¯"
@@ -6817,6 +7060,21 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "हां"
+#, 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 ""
+#~ "आप \"%s\" नाम से इस सरवर में पहली बार आने वाले हैं। अगर आप आगे बढ़ते हैं तो आपके लिठ"
+#~ "इस सरà¥à¤µà¤° पर à¤à¤• अकाउंट बनाया जाà¤à¤—ा।\n"
+#~ "\n"
+#~ "आगे बढ़ने ठलिखें कृपया अपने पासवरà¥à¤¡ को वापस लिखें और फिर 'पंजीकरण व खेलें' दबाà¤à¤‚, अथवा "
+#~ "'रोकें' दबाà¤à¤‚।"
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "आपकी मौत हो गयी"
diff --git a/po/hu/minetest.po b/po/hu/minetest.po
index ab9d0c49f..7bc6b5258 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: 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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-06-05 13:19+0000\n"
+"Last-Translator: Ãcs Zoltán <acszoltan111@gmail.com>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/minetest/"
"minetest/hu/>\n"
"Language: hu\n"
@@ -12,7 +12,7 @@ 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.11-dev\n"
+"X-Generator: Weblate 4.13-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -44,7 +44,7 @@ msgstr "Online játékosok: "
#: builtin/client/chatcommands.lua
msgid "The out chat queue is now empty."
-msgstr "A kiemenő üzenetek sora jelenleg üres."
+msgstr "A kimenő üzenetek sora jelenleg üres."
#: builtin/client/chatcommands.lua
msgid "This command is disabled by server."
@@ -87,11 +87,11 @@ 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 "<egy sem elérhető>"
+msgstr "<nincs elérhető>"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
@@ -111,7 +111,32 @@ msgstr "Újrakapcsolódás"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
-msgstr "A kiszolgáló újrakapcsolódást kért:"
+msgstr "A szerver újrakapcsolódást kért:"
+
+#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Modok kiválasztása"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
@@ -123,24 +148,35 @@ msgstr "A szerver által megkövetelt protokollverzió: $1. "
#: builtin/mainmenu/common.lua
msgid "Server supports protocol versions between $1 and $2. "
-msgstr "A kiszolgáló $1 és $2 protokollverzió közötti verziókat támogat. "
+msgstr "A szerver $1 és $2 protokollverzió közötti verziókat támogat. "
+
+#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
-msgstr "Csak $1 protokollverziót támogjuk."
+msgstr "Csak $1 protokollverziót támogatjuk."
#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
msgstr "$1 és $2 közötti protokollverziókat támogatjuk."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Mégse"
@@ -279,7 +315,6 @@ msgid "Failed to download $1"
msgstr "$1 letöltése nem sikerült"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Játékok"
@@ -300,7 +335,6 @@ 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"
@@ -314,19 +348,19 @@ msgstr "Nincs találat"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No updates"
-msgstr "nincs Frissiteni való"
+msgstr "Nincsenek frissítések"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr "nem található"
+msgstr "Nem található"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr "Felülír"
+msgstr "Felülírás"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr "az alapjáték ellenörzése szükséges ."
+msgstr "Az alapjáték ellenörzése szükséges ."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
@@ -350,7 +384,7 @@ msgstr "Összes frissítése [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr "További információ megnyitása a böngészőben"
+msgstr "További információ megtekintése böngészőben"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -393,12 +427,9 @@ msgid "Decorations"
msgstr "Dekorációk"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Játék (mint a minetest_game) letöltése a minetest.net címről"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Letöltés a minetest.net címről"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Figyelmeztetés: a Development Test fejlesztők számára készült."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -416,10 +447,6 @@ msgstr "Lebegő földtömegek az égben"
msgid "Floatlands (experimental)"
msgstr "Lebegő földek (kísérleti)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Játék"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Nem-fraktál terep generálása: Óceánok és földalatti rész"
@@ -437,6 +464,15 @@ msgid "Increases humidity around rivers"
msgstr "Megnöveli a páratartalmat a folyók körül"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "$1 telepítése"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Tavak"
@@ -464,7 +500,7 @@ msgstr "Hegyek"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
-msgstr "Iszap áramlás"
+msgstr "Iszapáramlás"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
@@ -497,7 +533,7 @@ msgstr "Kezdőérték"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
-msgstr "Sima átmenet a biomok között"
+msgstr "Lágy átmenet a biomok között"
#: builtin/mainmenu/dlg_create_world.lua
msgid ""
@@ -540,10 +576,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Nagyon nagy üregek mélyen a föld alatt"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Figyelmeztetés: a fejlesztői teszt fejlesztők számára készült."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Világ neve"
@@ -573,6 +605,39 @@ msgstr "pkgmgr: érvénytelen útvonal: „$1â€"
msgid "Delete World \"$1\"?"
msgstr "Törlöd a(z) „$1†világot?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Jelszó megerősítése"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Térképgenerátor neve"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Név"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Jelszó"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "A jelszavak nem egyeznek!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Regisztráció és belépés"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Elfogadás"
@@ -605,6 +670,16 @@ msgstr "< Vissza a Beállításokra"
msgid "Browse"
msgstr "Tallózás"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Tartalom"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Tartalom"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Letiltva"
@@ -661,7 +736,7 @@ msgstr "Útvonal kiválasztása"
msgid "Select file"
msgstr "Fájl kiválasztása"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Technikai nevek megjelenítése"
@@ -767,12 +842,12 @@ msgstr "Betöltés…"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Public server list is disabled"
-msgstr "A nyilvános kiszolgálólista le van tiltva"
+msgstr "A nyilvános szerverlista le van tiltva"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-"Próbáld újra engedélyezni a nyilvános kiszolgálólistát, és ellenőrizd az "
+"Próbáld újra engedélyezni a nyilvános szerverlistát, és ellenőrizd az "
"internetkapcsolatot."
#: builtin/mainmenu/tab_about.lua
@@ -789,11 +864,11 @@ msgstr "Aktív renderelő:"
#: builtin/mainmenu/tab_about.lua
msgid "Core Developers"
-msgstr "Belső fejlesztők"
+msgstr "Játékmotor-fejlesztők"
#: builtin/mainmenu/tab_about.lua
msgid "Open User Data Directory"
-msgstr "Felhasználói adatkönyvtár megnyitása"
+msgstr "Felhasználói adatok mappája"
#: builtin/mainmenu/tab_about.lua
msgid ""
@@ -810,7 +885,12 @@ msgstr "Korábbi közreműködők"
#: builtin/mainmenu/tab_about.lua
msgid "Previous Core Developers"
-msgstr "Korábbi belső fejlesztők"
+msgstr "Korábbi játékmotor-fejlesztők"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Hibakereső információ megjelenítése"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
@@ -826,7 +906,7 @@ msgstr "Textúracsomag kikapcsolása"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
-msgstr "információ:"
+msgstr "Információ:"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
@@ -870,7 +950,7 @@ msgstr "Sérülés engedélyezése"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
-msgstr "Játék létrehozása"
+msgstr "Játék megosztása"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
@@ -880,10 +960,6 @@ 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_online.lua
-msgid "Name"
-msgstr "Név"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Új"
@@ -892,10 +968,6 @@ 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_online.lua
-msgid "Password"
-msgstr "Jelszó"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Játék indítása"
@@ -914,7 +986,7 @@ msgstr "Világ kiválasztása:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr "Szerver port"
+msgstr "Szerver portja"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
@@ -929,10 +1001,6 @@ msgid "Clear"
msgstr "Törlés"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Kapcsolódás"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Kreatív mód"
@@ -942,22 +1010,22 @@ 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 "Favorites"
msgstr "Kedvencek"
#: builtin/mainmenu/tab_online.lua
msgid "Incompatible Servers"
-msgstr "Inkompatibilis szerverek"
+msgstr "Nem kompatibilis szerverek"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
msgstr "Csatlakozás játékhoz"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -970,8 +1038,17 @@ msgid "Refresh"
msgstr "Frissítés"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Távoli port"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
-msgstr "Szerver leírás"
+msgstr "Szerver leírása"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -999,7 +1076,7 @@ msgstr "Élsimítás:"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
-msgstr "Képernyőméret automatikus mentése"
+msgstr "Képernyőméret megjegyzése"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
@@ -1011,14 +1088,15 @@ msgstr "Gombok megváltoztatása"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr "Csatlakozó üveg"
+msgstr "Csatlakoztatott ü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: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "Dinamikus árnyékok: "
#: builtin/mainmenu/tab_settings.lua
@@ -1039,11 +1117,11 @@ msgstr "Közepes"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr "Mipmap effekt"
+msgstr "Mipmap"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr "Mipmap + Anizotróp szűrés"
+msgstr "Mipmap + anizotróp szűrés"
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
@@ -1051,15 +1129,15 @@ msgstr "Nincs szűrés"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
-msgstr "Nincs Mipmap"
+msgstr "Nincs mipmap"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
-msgstr "Node kiemelés"
+msgstr "Kockák kiemelése"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
-msgstr "Node körvonal"
+msgstr "Kockák körvonala"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
@@ -1091,7 +1169,7 @@ msgstr "Ãrnyalók"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (experimental)"
-msgstr "Shaderek (kísérleti)"
+msgstr "Ãrnyalók (kísérleti)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1103,7 +1181,7 @@ msgstr "Egyszerű levelek"
#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
-msgstr "Simított megvilágítás"
+msgstr "Lágy megvilágítás"
#: builtin/mainmenu/tab_settings.lua
msgid "Texturing:"
@@ -1111,10 +1189,11 @@ msgstr "Textúrázás:"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
-msgstr "Tónus rajzolás"
+msgstr "Színleképezés"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "Érintésküszöb (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1122,7 +1201,8 @@ msgid "Trilinear Filter"
msgstr "Trilineáris szűrés"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+#, fuzzy
+msgid "Very High"
msgstr "Nagyon magas"
#: builtin/mainmenu/tab_settings.lua
@@ -1131,7 +1211,7 @@ msgstr "Nagyon alacsony"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr "Hullámzó levelek"
+msgstr "Ringatózó lombok"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Liquids"
@@ -1139,7 +1219,12 @@ msgstr "Hullámzó folyadékok"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr "Hullámzó növények"
+msgstr "Ringatózó növények"
+
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Kapcsolódási hiba (időtúllépés?)"
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
@@ -1151,11 +1236,11 @@ msgstr "Kész!"
#: src/client/client.cpp
msgid "Initializing nodes"
-msgstr "Node-ok előkészítése"
+msgstr "Kockák előkészítése"
#: src/client/client.cpp
msgid "Initializing nodes..."
-msgstr "Node-ok előkészítése…"
+msgstr "Kockák előkészítése…"
#: src/client/client.cpp
msgid "Loading textures..."
@@ -1187,7 +1272,7 @@ msgstr "Nincs világ kiválasztva és nincs cím megadva. Nincs mit tenni."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr "A játékos neve túl hosszú."
+msgstr "A játékosnév túl hosszú."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
@@ -1195,7 +1280,7 @@ msgstr "Válassz egy nevet!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr "jelszófájl megnyitás hiba: "
+msgstr "A megadott jelszófájlt nem sikerült megnyitni: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
@@ -1207,7 +1292,7 @@ msgid ""
"Check debug.txt for details."
msgstr ""
"\n"
-"Részletekért tekintsd meg a debug.txt fájlt."
+"A részletekért tekintsd meg a debug.txt fájlt."
#: src/client/game.cpp
msgid "- Address: "
@@ -1232,11 +1317,11 @@ msgstr "- PvP: "
#: src/client/game.cpp
msgid "- Server Name: "
-msgstr "- Kiszolgáló neve: "
+msgstr "- Szerver neve: "
#: src/client/game.cpp
msgid "A serialization error occurred:"
-msgstr "Szerializációs hiba történt:"
+msgstr "Hiba történt a sorosítás közben:"
#: src/client/game.cpp
#, c-format
@@ -1245,11 +1330,11 @@ msgstr "Hozzáférés megtagadva. Oka: %s"
#: src/client/game.cpp
msgid "Automatic forward disabled"
-msgstr "Automatikus előre kikapcsolva"
+msgstr "Önjárás letiltva"
#: src/client/game.cpp
msgid "Automatic forward enabled"
-msgstr "Automatikus előre engedélyezve"
+msgstr "Önjárás engedélyezve"
#: src/client/game.cpp
msgid "Block bounds hidden"
@@ -1265,7 +1350,7 @@ 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"
+msgstr "Közeli blokkok blokkhatárainak megjelenítése"
#: src/client/game.cpp
msgid "Camera update disabled"
@@ -1276,21 +1361,22 @@ 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)"
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
"Blokkhatárok mutatása nem lehetséges ('basic_debug' jogosultság szükséges)"
#: src/client/game.cpp
msgid "Change Password"
-msgstr "Jelszó Módosítása"
+msgstr "Jelszó módosítása"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
-msgstr "Filmszerű mód letiltva"
+msgstr "Operatőr mód letiltva"
#: src/client/game.cpp
msgid "Cinematic mode enabled"
-msgstr "Filmszerű mód engedélyezve"
+msgstr "Operatőr mód engedélyezve"
#: src/client/game.cpp
msgid "Client disconnected"
@@ -1356,7 +1442,7 @@ msgstr "Kliens létrehozása…"
#: src/client/game.cpp
msgid "Creating server..."
-msgstr "Kiszolgáló létrehozása…"
+msgstr "Szerver létrehozása…"
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
@@ -1407,6 +1493,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Korlátlan látótáv engedélyezése"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Kliens létrehozása…"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Kilépés a főmenübe"
@@ -1496,7 +1587,7 @@ msgstr "Noclip mód engedélyezve (de nincs jogosultságod)"
#: src/client/game.cpp
msgid "Node definitions..."
-msgstr "Node-ok meghatározása…"
+msgstr "Kockák meghatározása…"
#: src/client/game.cpp
msgid "Off"
@@ -1520,7 +1611,7 @@ msgstr "Profilergrafika megjelenítése"
#: src/client/game.cpp
msgid "Remote server"
-msgstr "Távoli kiszolgáló"
+msgstr "Távoli szerver"
#: src/client/game.cpp
msgid "Resolving address..."
@@ -1680,11 +1771,11 @@ msgstr "IME Kilépés"
#: src/client/keycode.cpp
msgid "IME Mode Change"
-msgstr "IME Mód váltás"
+msgstr "IME módváltás"
#: src/client/keycode.cpp
msgid "IME Nonconvert"
-msgstr "IME Nem átalakított"
+msgstr "IME nem átalakított"
#: src/client/keycode.cpp
msgid "Insert"
@@ -1897,11 +1988,11 @@ 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"
+msgstr "Kistérkép textúra módban"
#: src/gui/guiChatConsole.cpp
msgid "Failed to open webpage"
@@ -1911,30 +2002,6 @@ msgstr "Weblap megnyitása nem sikerült"
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!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Regisztráció és belépés"
-
-#: 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 ""
-"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, 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"
@@ -1945,7 +2012,7 @@ msgstr "\"Aux1\" = lemászás"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
-msgstr "Automatikus előre"
+msgstr "Önjárás"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
@@ -1967,7 +2034,7 @@ msgstr "Blokkhatárok"
msgid "Change camera"
msgstr "Nézet váltása"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Csevegés"
@@ -2020,10 +2087,8 @@ msgid "Key already in use"
msgstr "A gomb már használatban van"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Billentyűzetkiosztás. (Ha ez a menü összeomlik, távolíts el néhány dolgot a "
-"minetest.conf-ból)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2094,10 +2159,6 @@ msgid "Change"
msgstr "Megváltoztatás"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Jelszó megerősítése"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Új jelszó"
@@ -2105,6 +2166,10 @@ msgstr "Új jelszó"
msgid "Old Password"
msgstr "Régi jelszó"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "A jelszavak nem egyeznek!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Kilépés"
@@ -2118,12 +2183,6 @@ msgstr "Némitva"
msgid "Sound Volume: %d%%"
msgstr "Hangerő: %d%%"
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Belépés "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2131,14 +2190,24 @@ msgstr "Belépés "
msgid "LANG_CODE"
msgstr "hu"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Válassz egy nevet!"
+
#: 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 ""
-"(Android) A virtuális joystick helyének javítása.\n"
-"Ha ez kikapcsolva, akkor a virtuális joystick középen lesz az 'Első "
-"kattintás' pozícióban."
+"(Android) A virtuális joystick helyének rögzítése.\n"
+"Ha le van tiltva, akkor a kijelző megérintésének kezdőpozíciója lesz a "
+"virtuális joystick középpontja."
#: src/settings_translation_file.cpp
msgid ""
@@ -2146,9 +2215,9 @@ msgid ""
"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(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."
+"(Android) Használd a virtuális joystickot az \"Aux1\" gomb működtetéséhez.\n"
+"Ha ez engedélyezve van, akkor a virtuális joystick fő körén kívülre húzáskor "
+"az \"Aux1\" gomb is lenyomódik."
#: src/settings_translation_file.cpp
msgid ""
@@ -2170,7 +2239,7 @@ msgstr ""
"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 "
+"Nagyjából -2 és 2 közötti értékek. Kockákban mért pozícióhoz szorzunk az "
"egységgel."
#: src/settings_translation_file.cpp
@@ -2183,7 +2252,7 @@ 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 (X,Y,Z) méretezési faktora kockatá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"
@@ -2296,7 +2365,11 @@ msgstr ""
"- 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."
+"Ne feledje, hogy az interlaced üzemmód, igényli az árnyalók használatát."
+
+#: src/settings_translation_file.cpp
+msgid "3d"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -2332,7 +2405,7 @@ msgstr "Gyorsulás levegőben"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
-msgstr "Gravitációs gyorsulás, node-okban másodpercenként."
+msgstr "Gravitációs gyorsulás, kocka/másodperc/másodpercben."
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
@@ -2362,7 +2435,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Adds particles when digging a node."
-msgstr "Részecskéket hoz létre egy node ásásakor."
+msgstr "Részecskéket mutat a kockák ásásakor."
#: src/settings_translation_file.cpp
msgid ""
@@ -2388,14 +2461,19 @@ msgid ""
"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"
+"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
+#, fuzzy
+msgid "Admin name"
+msgstr "Elemnév hozzáadása"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Haladó"
@@ -2414,8 +2492,9 @@ msgstr ""
"a természetes éjszakai fényre nagyon kis hatása van."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
-msgstr "Repülés és gyors mód mindig"
+#, fuzzy
+msgid "Always fly fast"
+msgstr "Ãllandó repülés és gyors mód"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
@@ -2492,15 +2571,19 @@ msgstr ""
"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)."
+"A távolság blokkokban értendő (16 kocka)."
+
+#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Automatic forward key"
-msgstr "Automatikus előre gomb"
+msgstr "Önjárás gomb"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
-msgstr "Automatikusan felugrik az egy node magas akadályokra."
+msgstr "Automatikusan felugrik az egy kocka magas akadályokra."
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
@@ -2508,7 +2591,7 @@ msgstr "Automatikus bejelentés a szerverlistára."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
-msgstr "Képernyőméret automatikus mentése"
+msgstr "Képernyőméret megjegyzése"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
@@ -2532,11 +2615,7 @@ msgstr "Talajszint"
#: src/settings_translation_file.cpp
msgid "Base terrain height."
-msgstr "Alap terep magassága."
-
-#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Alap"
+msgstr "Az elsődleges terep magassága."
#: src/settings_translation_file.cpp
msgid "Basic privileges"
@@ -2559,7 +2638,8 @@ msgid "Bind address"
msgstr "Cím csatolása"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Biom API hőmérséklet- és páratartalom zaj paraméterei"
#: src/settings_translation_file.cpp
@@ -2571,6 +2651,10 @@ msgid "Block send optimize distance"
msgstr "Max blokk küldési távolság"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Félkövér dőlt betűtípus útvonal"
@@ -2595,14 +2679,19 @@ msgid "Builtin"
msgstr "Beépített"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Nézet váltása"
+
+#: 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 ""
-"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"
+"A kamera \"közelségi vágósíkjának\" kockákban 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"
@@ -2610,11 +2699,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
-msgstr "Kamera simítás"
+msgstr "Kamera stabilizálása"
#: src/settings_translation_file.cpp
msgid "Camera smoothing in cinematic mode"
-msgstr "Kamera simítás filmszerű módban"
+msgstr "Lágy kameramozgás operatőr módban"
#: src/settings_translation_file.cpp
msgid "Camera update toggle key"
@@ -2722,11 +2811,11 @@ msgstr "Térképdarabka (chunk) mérete"
#: src/settings_translation_file.cpp
msgid "Cinematic mode"
-msgstr "Filmszerű mód"
+msgstr "Operatőr mód"
#: src/settings_translation_file.cpp
msgid "Cinematic mode key"
-msgstr "Filmszerű mód gomb"
+msgstr "Operatőr mód gomb"
#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
@@ -2758,7 +2847,12 @@ msgstr "Kliens modolási korlátozások"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
-msgstr "A blokk keresési távolság kliensoldali korlátozása"
+msgstr "A kockakeresési távolság kliensoldali korlátozása"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Kliens modolás"
#: src/settings_translation_file.cpp
msgid "Climbing speed"
@@ -2774,7 +2868,7 @@ msgstr "Felhők"
#: src/settings_translation_file.cpp
msgid "Clouds are a client side effect."
-msgstr "A felhő kliens oldali effekt."
+msgstr "A felhő kliens oldali effektus."
#: src/settings_translation_file.cpp
msgid "Clouds in menu"
@@ -2856,7 +2950,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Connect glass"
-msgstr "Üveg csatlakozása"
+msgstr "Üveg összeillesztése"
#: src/settings_translation_file.cpp
msgid "Connect to external media server"
@@ -2864,7 +2958,7 @@ msgstr "Csatlakozás külső médiaszerverhez"
#: src/settings_translation_file.cpp
msgid "Connects glass if supported by node."
-msgstr "Üveg csatlakoztatása ha a node támogatja."
+msgstr "Üvegfelületek egybeolvasztása, ha a kocka támogatja."
#: src/settings_translation_file.cpp
msgid "Console alpha"
@@ -2879,6 +2973,11 @@ msgid "Console height"
msgstr "Konzol magasság"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "Online tartalomtár"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "ContentDB zászló feketelista"
@@ -2892,16 +2991,15 @@ msgstr "ContentDB URL"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
-msgstr "Folyamatos előre"
+msgstr "Önjárás"
#: 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 ""
-"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."
+"Az \"Önjárás\" gombbal aktiválható folyamatos előre mozgás.\n"
+"Nyomja meg az \"Önjárás\" vagy a hátrafelé gombot a kikapcsoláshoz."
#: src/settings_translation_file.cpp
msgid "Controls"
@@ -2919,8 +3017,10 @@ msgstr ""
"változatlan marad."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Folyadékban a süllyedési sebességet szabályozza."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2994,12 +3094,12 @@ msgid "Debug log level"
msgstr "Hibakereső naplózás szintje"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Hangerő csökkentés gomb"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Csökkentse ezt hogy megnövelje a folyadék ellenállását."
+msgid "Dec. volume key"
+msgstr "Hangerő csökkentés gomb"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3135,7 +3235,7 @@ msgid ""
"Description of server, to be displayed when players join and in the "
"serverlist."
msgstr ""
-"A szerver leírása, ami a szerverlistában jelenik meg és amikor a játékosok "
+"A szerver leírása, amely a szerverlistában jelenik meg és amikor a játékosok "
"csatlakoznak."
#: src/settings_translation_file.cpp
@@ -3155,6 +3255,11 @@ msgid "Desynchronize block animation"
msgstr "Blokkanimáció deszinkronizálása"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Dekorációk"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Ãsás gomb"
@@ -3175,6 +3280,12 @@ msgid "Display Density Scaling Factor"
msgstr "Képsűrűség méretezési faktor"
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: 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."
@@ -3238,7 +3349,7 @@ msgid ""
"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. "
+"Igaz érték esetén az áttettsző kockák színes árnyékot vetnek. "
"Erőforrásigényes."
#: src/settings_translation_file.cpp
@@ -3254,6 +3365,10 @@ msgid "Enable joysticks"
msgstr "Joystick engedélyezése"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "A mod csatornák támogatásának engedélyezése."
@@ -3272,27 +3387,18 @@ msgstr ""
"használható)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-msgstr "Regisztráció megerősítés engedélyezése"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
-msgstr ""
-"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ű környezeti árnyékolással.\n"
+"A lágy 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
+msgid "Enable split login/register"
+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 "
@@ -3392,6 +3498,11 @@ msgstr ""
"befolyásolják a játszhatóságot."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "Völgyek profilja"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Játékmotor profiler adatok kiírási időköze"
@@ -3417,6 +3528,10 @@ msgstr ""
"egybefüggű lebegő föld réteghez használható."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "FPS, amikor a játék meg van állítva, vagy nincs fókuszban"
@@ -3488,7 +3603,7 @@ msgstr "Kitöltőanyag mélység zaj"
#: src/settings_translation_file.cpp
msgid "Filmic tone mapping"
-msgstr "Filmes tónus effekt"
+msgstr "Filmes színhatás"
#: src/settings_translation_file.cpp
msgid ""
@@ -3507,8 +3622,9 @@ msgstr ""
"kapcsolva."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Szűrés"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Élsimítás:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3578,6 +3694,11 @@ msgid "Fog toggle key"
msgstr "Köd váltása gomb"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Betűtípus mérete"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Félkövér betűtípus alapértelmezetten"
@@ -3609,7 +3730,8 @@ msgstr ""
#: src/settings_translation_file.cpp
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"
+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 ""
@@ -3711,14 +3833,14 @@ msgid ""
"nodes)."
msgstr ""
"Milyen távolságból generálódnak a blokkok a kliensek számára, "
-"térképblokkokban megadva (16 blokk)."
+"térképblokkokban megadva (16 kocka)."
#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
msgstr ""
"Milyen távolságból lesznek elküldve a blokkok a kliens számára, "
-"térképblokkokban megadva (16 blokk)."
+"térképblokkokban megadva (16 kocka)."
#: src/settings_translation_file.cpp
msgid ""
@@ -3729,7 +3851,7 @@ msgid ""
"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"
+"mérve (16 kocka).\n"
"\n"
"Ha nagyobbra van állítva, mint az active_block_range, akkor a szervert arra "
"kényszeríti, hogy\n"
@@ -3758,6 +3880,19 @@ msgid "GUI scaling filter txr2img"
msgstr "Felhasználói felület méretarány szűrő txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Játékok"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Globális visszatérések"
@@ -3794,6 +3929,16 @@ msgid "Graphics"
msgstr "Grafika"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Grafika"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Grafika"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Gravitáció"
@@ -3810,8 +3955,13 @@ msgid "HTTP mods"
msgstr "HTTP Modok"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "Vezérlőelemek mérete"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "Felhasználói felület méretaránya"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -3840,8 +3990,8 @@ msgid ""
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"
+"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
@@ -3900,7 +4050,7 @@ msgid ""
"in nodes per second per second."
msgstr ""
"Vízszintes gyorsulás a levegőben ugráskor vagy leeséskor,\n"
-"node/másodperc/másodpercben."
+"kocka/másodperc/másodpercben."
#: src/settings_translation_file.cpp
msgid ""
@@ -3908,7 +4058,7 @@ msgid ""
"in nodes per second per second."
msgstr ""
"Vízszintes és függőleges gyorsulás gyors módban,\n"
-"node/másodperc/másodpercben."
+"kocka/másodperc/másodpercben."
#: src/settings_translation_file.cpp
msgid ""
@@ -3916,7 +4066,7 @@ msgid ""
"in nodes per second per second."
msgstr ""
"Vízszintes és függőleges gyorsulás a földön, vagy mászáskor,\n"
-"node/másodpercben."
+"kocka/másodperc/másodpercben."
#: src/settings_translation_file.cpp
msgid "Hotbar next key"
@@ -4066,16 +4216,25 @@ msgid ""
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á."
+"Engedélyezni kell a hullámzó folyadékokat hozzá."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"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."
+"Magasabb érték stabilabb, de több RAM-ot használ."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "Csökkentse ezt hogy megnövelje a folyadék ellenállását."
#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
@@ -4114,8 +4273,8 @@ msgid ""
"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
-"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."
+"Ha le van tiltva, az \"Aux1\" gombbal lehet gyorsan repülni, ha a repülés és "
+"a gyors mód is engedélyezve van."
#: src/settings_translation_file.cpp
msgid ""
@@ -4137,7 +4296,7 @@ msgid ""
"This requires the \"noclip\" privilege on the server."
msgstr ""
"Ha a repülés móddal együtt van engedélyezve, a játékos átrepülhet szilárd\n"
-"node-okon. Szükséges hozzá a noclip jogosultság a szerveren."
+"kockákon. Szükséges hozzá a noclip jogosultság a szerveren."
#: src/settings_translation_file.cpp
msgid ""
@@ -4145,9 +4304,18 @@ msgid ""
"and\n"
"descending."
msgstr ""
-"Ha engedélyezve van, az \"Aux1\"gomb lesz használatban a \"lopakodás"
-"\" (sneak) helyett lefelé mászáskor,\n"
-"vagy ereszkedéskor."
+"Ha engedélyezve van, az \"Aux1\" gombbal lehet lefelé mászni vagy "
+"leereszkedni a \"Lopakodás\" gomb helyett."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"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 ""
@@ -4176,11 +4344,14 @@ msgid ""
"If enabled, makes move directions relative to the player's pitch when flying "
"or swimming."
msgstr ""
-"Ha engedélyezve van a játékos abba az irányba megy amerre néz, amikor úszik "
-"vagy repül."
+"Ha engedélyezve van, a játékos abba az irányba megy, amerre néz, amikor "
+"úszik vagy repül."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr "Ha engedélyezve van, új játékosok nem csatlakozhatnak jelszó nélkül."
#: src/settings_translation_file.cpp
@@ -4189,7 +4360,7 @@ msgid ""
"you stand.\n"
"This is helpful when working with nodeboxes in small areas."
msgstr ""
-"Ha engedélyezve van, elhelyezhetsz node-okat oda, ahol állsz (láb + "
+"Ha engedélyezve van, lehelyezhetsz kockákat oda, ahol állsz (láb + "
"szemmagasság).\n"
"Ez segít, ha kis területen dolgozol."
@@ -4199,10 +4370,10 @@ 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 "
+"Ha a CSM-korlátozás be van kapcsolva az aktív kockák távolságára, akkor a "
"get_node\n"
-"hívások korlátozva lesznek a játkostól e távolságon belül található "
-"blokkokra."
+"hívások korlátozva lesznek a játékostól e távolságon belül található "
+"kockákra."
#: src/settings_translation_file.cpp
msgid ""
@@ -4236,10 +4407,6 @@ msgid "Ignore world errors"
msgstr "Világhibák figyelmen kívül hagyása"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "Játékon belül"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
"Játékon belüli csevegő konzol hátterének átlátszósága (0 és 255 között)."
@@ -4259,7 +4426,7 @@ msgstr "Hangerő növelése gomb"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
-msgstr "Kezdeti függőleges sebesség ugráskor, node/másodpercben."
+msgstr "Kezdeti függőleges sebesség ugráskor, kocka/másodpercben."
#: src/settings_translation_file.cpp
msgid ""
@@ -4267,7 +4434,8 @@ msgid ""
"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"
+"Erre általában csak a játékmotor vagy a beépülők készítésében "
+"közreműködőknek van szükségük"
#: src/settings_translation_file.cpp
msgid "Instrument chat commands on registration."
@@ -4284,29 +4452,27 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Instrument the action function of Active Block Modifiers on registration."
-msgstr "Az Aktív blokk módosítók akciófüggvényének behangolása regisztrációkor."
+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."
+"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 "Az entitások metódusainak hangolása regisztrációkor."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Behangolás"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""
"Fontos változások mentésének időköze a világban, másodpercekben megadva."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "A napszak kliensnek való küldésének gyakorisága."
#: src/settings_translation_file.cpp
@@ -4319,7 +4485,7 @@ msgstr "Felszerelés gomb"
#: src/settings_translation_file.cpp
msgid "Invert mouse"
-msgstr "Fordított egér"
+msgstr "Egér megfordítása"
#: src/settings_translation_file.cpp
msgid "Invert vertical mouse movement."
@@ -4327,11 +4493,11 @@ msgstr "Függőleges egérmozgás megfordítása."
#: src/settings_translation_file.cpp
msgid "Italic font path"
-msgstr "Dőlt betűtípus útvonal"
+msgstr "Dőlt betűtípus útvonala"
#: src/settings_translation_file.cpp
msgid "Italic monospace font path"
-msgstr "Dőlt monspace betűtípus útvonal"
+msgstr "Dőlt monospace betűtípus útvonala"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -4360,7 +4526,7 @@ msgstr "Joystick ID"
#: src/settings_translation_file.cpp
msgid "Joystick button repetition interval"
-msgstr "Joystick gomb ismétlési időköz"
+msgstr "Joystick gomb ismétlési időköze"
#: src/settings_translation_file.cpp
msgid "Joystick dead zone"
@@ -4368,11 +4534,11 @@ msgstr "Joystick holttér"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
-msgstr "Joystick látómező érzékenység"
+msgstr "Joystick látómező-érzékenység"
#: src/settings_translation_file.cpp
msgid "Joystick type"
-msgstr "Joystick típus"
+msgstr "Joystick típusa"
#: src/settings_translation_file.cpp
msgid ""
@@ -4536,7 +4702,7 @@ msgid ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
"Gomb a játékos hátrafelé mozgásához.\n"
-"Az automatikus előremozgást is kikapcsolja, ha aktív.\n"
+"Kikapcsolja az önjárást is, ha aktív.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4626,7 +4792,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az elhelyezéshez.\n"
+"Gomb a lehelyezéshez.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4979,8 +5145,8 @@ msgid ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
"Gomb a lopakodáshoz.\n"
-"A lefelé mászáshoz és vízben történő ereszkedéshez is használt, ha a "
-"aux1_descends le van tiltva.\n"
+"A lefelé mászáshoz és vízben történő ereszkedéshez is ezt lehet használni, "
+"ha az aux1_descends le van tiltva.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5010,7 +5176,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az automatikus előrehaladás módra váltáshoz.\n"
+"Gomb az automatikus előrehaladás bekapcsolásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5020,7 +5186,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a filmszerű mód váltásához.\n"
+"Gomb az operatőr mód kapcsolgatásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5165,6 +5331,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
"Azon játékosok kirúgása, akik 10 másodpercenként több mint X üzenetet "
@@ -5214,20 +5384,21 @@ msgid ""
"- Opaque: disable transparency"
msgstr ""
"Levelek stílusa:\n"
-"- Szép: minden oldal látható\n"
-"- Egyszerű: csak a külső oldalak láthatók, ha meg van határozva a "
-"special_tiles használt\n"
-"- Ãtlátszatlan: átlátszóság kikapcsolása"
+"- fancy: (szép) minden oldal látható\n"
+"- simple: (egyszerű) csak a külső oldalak láthatók, a special_tiles-t "
+"használja, ha meg van adva\n"
+"- opaque: (átlátszatlan) átlátszóság kikapcsolása"
#: src/settings_translation_file.cpp
msgid "Left key"
msgstr "Bal gomb"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"A szerver órajelének hossza és az az intervallum, amely alatt az "
"objektumokat általánosan\n"
@@ -5242,18 +5413,25 @@ msgstr ""
"A hullámzó folyadékok engedélyezése szükséges hozzá."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+#, fuzzy
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
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"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
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"
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "Két aktív blokk kezelési fázis között eltelt idő"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5262,7 +5440,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"A debug.txt fájlba írandó naplózási szint:\n"
"-semmi (nincs naplózás)\n"
@@ -5298,12 +5477,17 @@ msgid "Light curve low gradient"
msgstr "A fénygörbe aljának gradiense"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Lágy megvilágítás"
+
+#: 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 ""
-"A térképgenerálás határa, node-okban, mind a 6 irányban a (0, 0, 0) "
+"A térképgenerálás határa, kockákban, 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"
@@ -5329,7 +5513,7 @@ msgstr "Folyadék folyékonysága"
#: src/settings_translation_file.cpp
msgid "Liquid fluidity smoothing"
-msgstr "Folyadék folyásának simítása"
+msgstr "Folyadékok egyenletesebb folyása"
#: src/settings_translation_file.cpp
msgid "Liquid loop max"
@@ -5364,7 +5548,7 @@ 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."
+"Hasznos lehet modfejelsztőknek és szerverüzemeltetőknek."
#: src/settings_translation_file.cpp
msgid "Loading Block Modifiers"
@@ -5748,10 +5932,6 @@ msgid "Maximum users"
msgstr "Maximum felhasználók"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menük"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "Poligonháló cashe"
@@ -5804,6 +5984,20 @@ msgid "Mipmapping"
msgstr "Mipmapping"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "Profiler"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Biztonság"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "Mod csatornák"
@@ -5841,11 +6035,11 @@ msgstr "Hegyek legkisebb szintje"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity"
-msgstr "Egér érzékenység"
+msgstr "Egér érzékenysége"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity multiplier."
-msgstr "Egér érzékenység szorzó."
+msgstr "Egér érzékenységi faktora."
#: src/settings_translation_file.cpp
msgid "Mud noise"
@@ -5901,10 +6095,6 @@ msgid "Near plane"
msgstr "Majdnem mint a repülőgép"
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Hálózat"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
@@ -5913,6 +6103,11 @@ msgstr ""
"Főmenüből való indításkor felülíródik ez az érték."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "Hálózat"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Az új felhasználóknak ezt a jelszót kell megadniuk."
@@ -5925,8 +6120,13 @@ msgid "Noclip key"
msgstr "Noclip mód gomb"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Kockák kiemelése"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
-msgstr "Node kiemelés"
+msgstr "Kockák kiemelése"
#: src/settings_translation_file.cpp
msgid "NodeTimer interval"
@@ -5980,10 +6180,6 @@ msgstr ""
"memóriahasználat között (4096=100MB hüvelykujjszabályként)."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Online tartalomtár"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "Ãtlátszatlan folyadékok"
@@ -6032,7 +6228,7 @@ 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 "
+"Az árnyalókat tartalmazó mappa elérési útvonala. Ha nincs beállítva, az "
"alapértelmezett útvonalat használja."
#: src/settings_translation_file.cpp
@@ -6044,8 +6240,8 @@ 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 ""
-"Az alapértelmezett betűtípus elérési útja. TrueType betűtípusnak kell lenni."
-"\n"
+"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
@@ -6080,15 +6276,15 @@ msgstr "Pályamozgás mód gomb"
#: src/settings_translation_file.cpp
msgid "Pitch move mode"
-msgstr "Pályamozgás mód"
+msgstr "Tekintet irányába mozgás"
#: src/settings_translation_file.cpp
msgid "Place key"
-msgstr "Elhelyezés gomb"
+msgstr "Lehelyezés gomb"
#: src/settings_translation_file.cpp
msgid "Place repetition interval"
-msgstr "Elhelyezés ismétlési időköz"
+msgstr "Lehelyezés-ismétlési időköz"
#: src/settings_translation_file.cpp
msgid ""
@@ -6099,10 +6295,6 @@ msgstr ""
"Szükséges hozzá a repülés jogosultság a szerveren."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Játékos neve"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "Játékosátviteli távolság"
@@ -6128,7 +6320,7 @@ msgid ""
"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"
+"egérgombokat.\n"
"Engedélyezd, ha túl gyakran fordul elő, hogy véletlenül lehelyezel vagy "
"kiásol blokkokat."
@@ -6160,10 +6352,6 @@ msgid "Profiler toggle key"
msgstr "Profiler váltó gomb"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Pfolilozás"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr "Prometheus figyelési cím"
@@ -6175,8 +6363,8 @@ msgid ""
"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"
+"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"
@@ -6190,7 +6378,7 @@ 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"
+"A felhők kiterjedése 64 kockás 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
@@ -6324,7 +6512,7 @@ msgstr "Kerek kistérkép"
#: src/settings_translation_file.cpp
msgid "Safe digging and placing"
-msgstr "Biztonságos ásás és elhelyezés"
+msgstr "Biztonságos ásás és lehelyezés"
#: src/settings_translation_file.cpp
msgid "Sandy beaches occur when np_beach exceeds this value."
@@ -6352,12 +6540,17 @@ msgid ""
msgstr ""
"A felhasználói felület méretezése egy meghatározott értékkel.\n"
"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 "
+"Ez elsimít néhány durva élt, és elhajlítja a pixeleket a méret "
"csökkentésekor,\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
+#, fuzzy
+msgid "Screen"
+msgstr "Képernyő:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Képernyő magasság"
@@ -6388,6 +6581,11 @@ msgstr ""
"Használd a 0-t az alapértelmezett minőséghez."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Képernyőkép"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Folyómeder zaj"
@@ -6403,10 +6601,6 @@ 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
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Lásd: http://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6465,8 +6659,19 @@ msgstr ""
"18 = 4D \"Mandelbulb\" Julia-halmaz."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Szerver / Egyjátékos"
+#, fuzzy
+msgid "Server"
+msgstr "Szerver URL"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Szerver név"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Szerver leírása"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6486,17 +6691,27 @@ msgstr "Szerver név"
#: src/settings_translation_file.cpp
msgid "Server port"
-msgstr "Szerver port"
+msgstr "Szerver portja"
#: src/settings_translation_file.cpp
msgid "Server side occlusion culling"
msgstr "Takarásban lévő térképblokkok szerveroldali kiválogatása"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Szerver portja"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "Szerverlista URL"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "Szerverlista URL"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Szerverlista fájl"
@@ -6509,22 +6724,27 @@ msgstr ""
"A változtatás után a játék újraindítása szükséges."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr "A csevegés maximális szöveghossza amelyet a kliensek küldhetnek."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\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
+#, 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"
+"Minimum value: 1.0; maximum value: 15.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"
@@ -6545,7 +6765,7 @@ 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"
+"Ã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
@@ -6604,7 +6824,7 @@ 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"
+msgstr "Az árnyéktérkép maximális renderelési távolsága kockákban"
#: src/settings_translation_file.cpp
msgid "Shadow map texture in 32 bits"
@@ -6621,7 +6841,8 @@ msgid ""
msgstr "Betűtípus árnyékának eltolása. Ha 0, akkor nem lesz árnyék rajzolva."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+#, fuzzy
+msgid "Shadow strength gamma"
msgstr "Ãrnyék kivehetÅ‘sége"
#: src/settings_translation_file.cpp
@@ -6648,7 +6869,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Show name tag backgrounds by default"
-msgstr "Névcímkék háttere alapértelmezésben látszik"
+msgstr "Névcédulák háttere alapértelmezésben látszik"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6663,7 +6884,7 @@ 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) "
+"A mapgen által generált térképdarabka mérete térképblokkokban (16 kocka) "
"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"
@@ -6716,24 +6937,24 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Smooth lighting"
-msgstr "Simított megvilágítás"
+msgstr "Lágy megvilágítás"
#: src/settings_translation_file.cpp
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 körbenézéskor. Körbenézés és egérsimításnak is "
-"hívják.\n"
+"Kamera mozgásának lágyítása körbenézéskor. Nézet- vagy egérstabilizálá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."
-msgstr "A kamera forgását simítja filmszerű módban. 0 a letiltáshoz."
+msgstr "A kameraforgást lágyítja operatőr módban. 0 a letiltáshoz."
#: src/settings_translation_file.cpp
msgid "Smooths rotation of camera. 0 to disable."
-msgstr "Kamera forgás simítása. 0 = letiltás."
+msgstr "Kameraforgás lágyítása. 0 = letiltás."
#: src/settings_translation_file.cpp
msgid "Sneak key"
@@ -6745,7 +6966,7 @@ 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 kocka/másodpercben."
#: src/settings_translation_file.cpp
msgid "Soft shadow radius"
@@ -6766,8 +6987,8 @@ msgstr ""
"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"
+"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
@@ -6776,7 +6997,7 @@ 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"
+"A kockák, 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."
@@ -6853,15 +7074,15 @@ 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"
+"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ő "
+"Ha endgedélyezve van a vízlehelyezé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"
@@ -6880,6 +7101,11 @@ msgid "Temperature variation for biomes."
msgstr "Hőmérséklet-változékonyság a biomokban."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Beállítások"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "Terep alternatív zaj"
@@ -6947,13 +7173,13 @@ 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"
+"Egy kocka textúráját lehet a kockához 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 "
+"ezzel az opcióval ki lehet kényszeríteni ezt bizonyos kockákra. Meg kell "
"azonban\n"
"jegyezni, hogy ez még KÃSÉRLETI fázisban van és lehet, hogy nem működik "
"helyesen."
@@ -6976,7 +7202,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "The depth of dirt or other biome filler node."
-msgstr "A föld vagy egyéb biom feltöltő blokk mélysége."
+msgstr "A föld vagy egyéb biomkitöltő kockaréteg mélysége."
#: src/settings_translation_file.cpp
msgid ""
@@ -6991,7 +7217,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."
+"Az érintőképernyős interakció aktiválódásához szükséges távolság pixelekben."
#: src/settings_translation_file.cpp
msgid ""
@@ -7002,9 +7228,9 @@ msgid ""
"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"
+"4,0 = A hullámok magasága két kocka.\n"
"0,0 = A hullámok egyáltalán nem mozognak.\n"
-"Az alapértelmezett érték 1,0 (1/2 blokk).\n"
+"Az alapértelmezett érték 1,0 (1/2 kocka).\n"
"A hullámzó folyadék engedélyezése szükséges hozzá."
#: src/settings_translation_file.cpp
@@ -7031,7 +7257,7 @@ msgid ""
"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 blokkok dolgai. Térképblokkban (16 kocka) 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"
@@ -7052,7 +7278,7 @@ msgstr ""
"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) "
+"Az árnyalókat az OpenGL (csak asztali rendszeren) és OGLES2 (kísérleti) "
"támogatja"
#: src/settings_translation_file.cpp
@@ -7060,8 +7286,8 @@ msgid ""
"The sensitivity of the joystick axes for moving the\n"
"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."
+"A jostick tengelyeinek érzékenysége, amely a játékbeli látómező mozgatását "
+"befolyásolja."
#: src/settings_translation_file.cpp
msgid ""
@@ -7070,7 +7296,7 @@ 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 "
+"A körülvett, illetve takarásban lévő kockák á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 "
@@ -7084,8 +7310,8 @@ msgid ""
"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"
+"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
@@ -7101,15 +7327,15 @@ 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 esemény megismétléséhez\n"
-"a joystick gombok nyomva tartásakor."
+"Ennyi másodperc szükséges az esemény megismétléséhez a joystick gombok "
+"nyomva tartásakor."
#: src/settings_translation_file.cpp
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 node elhelyezéshez az elhelyezés gomb\n"
+"Ennyi másodperc szükséges az ismételt kockalehelyezéshez a lehelyezés gomb "
"nyomva tartásakor."
#: src/settings_translation_file.cpp
@@ -7155,7 +7381,8 @@ msgid "Time speed"
msgstr "Idő sebessége"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
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."
@@ -7167,10 +7394,10 @@ msgid ""
"This determines how long they are slowed down after placing or removing a "
"node."
msgstr ""
-"A lag (késés) csökkentéséért a node-ok lerakása le van lassítva, ha a "
-"játékos épít valamit.\n"
-"Ez azt határozza meg, hogy mennyire van lelassítva node-ok elhelyezésekor, "
-"vagy eltávolításakor."
+"A lag (késés) csökkentése érdekében a kockainformációk küldése le van "
+"lassítva, ha a játékos épít valamit.\n"
+"Ez azt határozza meg, hogy mennyire van lelassítva a küldés a kockák "
+"lehelyezése, vagy eltávolítása után."
#: src/settings_translation_file.cpp
msgid "Toggle camera mode key"
@@ -7182,13 +7409,22 @@ msgstr "Eszköztipp késleltetés"
#: src/settings_translation_file.cpp
msgid "Touch screen threshold"
-msgstr "Érintőképernyő küszöbe"
+msgstr "Érintőképernyő érzékenysége"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Érintőképernyő érzékenysége"
#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr "Teljesítménybeli kompromisszumok"
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Fa zaj"
@@ -7204,7 +7440,7 @@ msgid ""
msgstr ""
"True = 256\n"
"False = 128\n"
-"Arra használható, hogy simábbá tegye a minitérképet lassabb gépeken."
+"Arra használható, hogy egyenletesebbé tegye a minitérképet lassabb gépeken."
#: src/settings_translation_file.cpp
msgid "Trusted mods"
@@ -7289,7 +7525,7 @@ msgstr ""
"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"
+"A kockák között látható rések jelennek meg, ha az árnyaló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."
@@ -7298,6 +7534,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "Trilineáris szűrés a textúrák méretezéséhez."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7327,7 +7567,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 "A legnagyobb eltérés a hegyek magasságában (blokkokban)."
+msgstr "A legnagyobb eltérés a hegyek magasságában (hány kocka)."
#: src/settings_translation_file.cpp
msgid "Variation of number of caves."
@@ -7343,7 +7583,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Varies depth of biome surface nodes."
-msgstr "A biomok felületét képező blokkréteg mélységét variálja."
+msgstr "A biomok felületét képező kockaréteg mélységét variálja."
#: src/settings_translation_file.cpp
msgid ""
@@ -7359,7 +7599,7 @@ msgstr "A szirtek meredekségét variálja."
#: src/settings_translation_file.cpp
msgid "Vertical climbing speed, in nodes per second."
-msgstr "Függőleges mászási sebesség node/másodpercben."
+msgstr "Függőleges mászási sebesség kocka/másodpercben."
#: src/settings_translation_file.cpp
msgid "Vertical screen synchronization."
@@ -7375,7 +7615,7 @@ msgstr "Fejbillegési faktor"
#: src/settings_translation_file.cpp
msgid "View distance in nodes."
-msgstr "Látótávolság node-okban megadva."
+msgstr "Látótávolság kockában megadva."
#: src/settings_translation_file.cpp
msgid "View range decrease key"
@@ -7395,7 +7635,7 @@ msgstr "Látóterület"
#: src/settings_translation_file.cpp
msgid "Virtual joystick triggers Aux1 button"
-msgstr "Virtuális joystick gombok Aux1 gomb"
+msgstr "A virtuális joystick működteti az Aux1 gombot"
#: src/settings_translation_file.cpp
msgid "Volume"
@@ -7425,7 +7665,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Walking and flying speed, in nodes per second."
-msgstr "Sétálás, repülés és mászás sebessége gyors módban node/másodpercben."
+msgstr "Sétálás és repülés sebessége kocka/másodpercben."
#: src/settings_translation_file.cpp
msgid "Walking speed"
@@ -7433,7 +7673,7 @@ msgstr "Sétálás sebessége"
#: src/settings_translation_file.cpp
msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
-msgstr "Sétálás, repülés és mászás sebessége gyors módban node/másodpercben."
+msgstr "Sétálás, repülés és mászás sebessége gyors módban kocka/másodpercben."
#: src/settings_translation_file.cpp
msgid "Water level"
@@ -7445,11 +7685,11 @@ msgstr "A világ vízfelszínének szintje."
#: src/settings_translation_file.cpp
msgid "Waving Nodes"
-msgstr "Hullámzó node-ok"
+msgstr "Hullámzó kockák"
#: src/settings_translation_file.cpp
msgid "Waving leaves"
-msgstr "Hullámzó levelek"
+msgstr "Ringatózó levelek"
#: src/settings_translation_file.cpp
msgid "Waving liquids"
@@ -7469,7 +7709,7 @@ msgstr "Hullámzó folyadékok hullámhossza"
#: src/settings_translation_file.cpp
msgid "Waving plants"
-msgstr "Hullámzó növények"
+msgstr "Ringatózó növények"
#: src/settings_translation_file.cpp
msgid "Weblink color"
@@ -7483,7 +7723,7 @@ msgid ""
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)."
+"generálódik (pl. a felszerelésben lévő kockák textúrára renderelése)."
#: src/settings_translation_file.cpp
msgid ""
@@ -7518,7 +7758,7 @@ msgstr ""
"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 "
+"Ez egyben azon kockák alap textúraméreteként is használatos, amelyeknél a "
"világhoz\n"
"igazítva kell méretezni a textúrát."
@@ -7527,13 +7767,13 @@ msgid ""
"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"
+"Látszódjon-e a névcédulá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 "
+"Legyen-e független a kockák textúraanimációinak időzítése az egyes "
"térképblokkokban."
#: src/settings_translation_file.cpp
@@ -7574,6 +7814,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
"A hibakereső információ megjelenítése (ugyanaz a hatás, ha F5-öt nyomunk)."
@@ -7585,7 +7834,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
-msgstr "A kijelölésdoboz vonalainak szélessége a node-ok körül."
+msgstr "A kijelölésdoboz vonalainak szélessége a kockák körül."
#: src/settings_translation_file.cpp
msgid ""
@@ -7618,12 +7867,12 @@ 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"
+"A világhoz igazított textúrák több kockára 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"
+"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!"
@@ -7686,6 +7935,10 @@ msgid "Y-level of seabed."
msgstr "Tengerfenék Y szintje."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL fájlletöltés időkorlát"
@@ -7728,6 +7981,9 @@ msgstr "cURL párhuzamossági korlát"
#~ msgid "Back"
#~ msgstr "Vissza"
+#~ msgid "Basic"
+#~ msgstr "Alap"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Bit/pixel (vagyis színmélység) teljes képernyős módban."
@@ -7759,6 +8015,12 @@ msgstr "cURL párhuzamossági korlát"
#~ msgid "Configure"
#~ msgstr "Beállítás"
+#~ msgid "Connect"
+#~ msgstr "Kapcsolódás"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Folyadékban a süllyedési sebességet szabályozza."
+
#, fuzzy
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
@@ -7805,12 +8067,24 @@ msgstr "cURL párhuzamossági korlát"
#~ "A textúrák mintavételezési lépésközét adja meg.\n"
#~ "Nagyobb érték simább normal map-et eredményez."
+#~ msgid "Del. Favorite"
+#~ msgstr "Kedvenc törlése"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Játék (mint a minetest_game) letöltése a minetest.net címről"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Letöltés a minetest.net címről"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "$1 letöltése és telepítése, kérlek várj…"
#~ msgid "Enable VBO"
#~ msgstr "VBO engedélyez"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Regisztráció megerősítés engedélyezése"
+
#~ msgid "Enables filmic tone mapping"
#~ msgstr "filmes tónus effektek bekapcsolása"
@@ -7821,6 +8095,9 @@ msgstr "cURL párhuzamossági korlát"
#~ "Parallax occlusion mapping bekapcsolása.\n"
#~ "A shaderek engedélyezve kell hogy legyenek."
+#~ msgid "Enter "
+#~ msgstr "Belépés "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7840,6 +8117,9 @@ msgstr "cURL párhuzamossági korlát"
#~ msgid "Fallback font size"
#~ msgstr "Tartalék betűtípus mérete"
+#~ msgid "Filtering"
+#~ msgstr "Szűrés"
+
#, fuzzy
#~ msgid "Floatland base height noise"
#~ msgstr "A lebegő hegyek alapmagassága"
@@ -7857,6 +8137,9 @@ msgstr "cURL párhuzamossági korlát"
#~ msgid "Full screen BPP"
#~ msgstr "Teljes képernyő BPP"
+#~ msgid "Game"
+#~ msgstr "Játék"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7866,15 +8149,30 @@ msgstr "cURL párhuzamossági korlát"
#~ msgid "Generate normalmaps"
#~ msgstr "Normálfelületek generálása"
+#~ msgid "HUD scale factor"
+#~ msgstr "Vezérlőelemek mérete"
+
#~ msgid "High-precision FPU"
#~ msgstr "Nagy pontosságú FPU"
#~ msgid "IPv6 support."
#~ msgstr "IPv6 támogatás."
+#~ msgid "In-Game"
+#~ msgstr "Játékon belül"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Fájl telepítése: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Behangolás"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Billentyűzetkiosztás. (Ha ez a menü összeomlik, távolíts el néhány dolgot "
+#~ "a minetest.conf-ból)"
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "Nagy barlang mélység"
@@ -7894,6 +8192,9 @@ msgstr "cURL párhuzamossági korlát"
#~ "Lehetővé teszi, hogy a DirectX működjön a LuaJIT-tel. Tiltsd le, ha "
#~ "problémákat okoz."
+#~ msgid "Menus"
+#~ msgstr "Menük"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Kistérkép radar módban x2"
@@ -7936,6 +8237,12 @@ msgstr "cURL párhuzamossági korlát"
#~ msgid "Path to save screenshots at."
#~ msgstr "Képernyőmentések mappája."
+#~ msgid "Player name"
+#~ msgstr "Játékos neve"
+
+#~ msgid "Profiling"
+#~ msgstr "Pfolilozás"
+
#~ msgid "PvP enabled"
#~ msgstr "PvP engedélyezve"
@@ -7945,6 +8252,9 @@ msgstr "cURL párhuzamossági korlát"
#~ msgid "Select Package File:"
#~ msgstr "csomag fájl kiválasztása:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Szerver / Egyjátékos"
+
#, fuzzy
#~ msgid "Shadow limit"
#~ msgstr "Térképblokk korlát"
@@ -7999,6 +8309,22 @@ msgstr "cURL párhuzamossági korlát"
#~ msgid "Yes"
#~ msgstr "Igen"
+#, 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 ""
+#~ "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, 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."
+
#~ msgid "You died."
#~ msgstr "Meghaltál."
diff --git a/po/id/minetest.po b/po/id/minetest.po
index 82f1da18f..d3a32b87f 100644
--- a/po/id/minetest.po
+++ b/po/id/minetest.po
@@ -2,10 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Indonesian (Minetest)\n"
"Report-Msgid-Bugs-To: \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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-02-05 02:53+0000\n"
+"Last-Translator: Linerly <linerly@protonmail.com>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/minetest/"
"minetest/id/>\n"
"Language: id\n"
@@ -13,7 +12,7 @@ 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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -115,6 +114,31 @@ msgid "The server has requested a reconnect:"
msgstr "Server ini meminta untuk menyambung ulang:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Pilih Mod"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Versi protokol tidak sesuai. "
@@ -127,6 +151,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Server mendukung protokol antara versi $1 dan versi $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Kami hanya mendukung protokol versi $1."
@@ -134,14 +162,21 @@ msgstr "Kami hanya mendukung protokol versi $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Kami mendukung protokol antara versi $1 dan versi $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Batal"
@@ -280,7 +315,6 @@ msgid "Failed to download $1"
msgstr "Gagal mengunduh $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Permainan"
@@ -301,7 +335,6 @@ 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"
@@ -394,12 +427,9 @@ msgid "Decorations"
msgstr "Dekorasi"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Unduh suatu permainan, misalnya Minetest Game, dari minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Unduh satu dari minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Peringatan: Development Test ditujukan untuk para pengembang."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -417,10 +447,6 @@ msgstr "Tanah mengambang di langit"
msgid "Floatlands (experimental)"
msgstr "Floatland (tahap percobaan)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Permainan"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Buat medan nonfraktal: Samudra dan bawah tanah"
@@ -438,6 +464,15 @@ msgid "Increases humidity around rivers"
msgstr "Tambah kelembapan di sekitar sungai"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Pasang $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Danau"
@@ -539,10 +574,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Gua sangat besar di kedalaman bawah tanah"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Peringatan: Development Test ditujukan untuk para pengembang."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Nama dunia"
@@ -572,6 +603,39 @@ msgstr "pkgmgr: jalur tidak sah \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Hapus dunia \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Konfirmasi kata sandi"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Nama pembuat peta"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Nama"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Kata sandi"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Kata sandi tidak cocok!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Daftar dan Gabung"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Setuju"
@@ -604,6 +668,16 @@ msgstr "< Halaman pengaturan"
msgid "Browse"
msgstr "Jelajahi"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Konten"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Konten"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Dimatikan"
@@ -660,7 +734,7 @@ msgstr "Pilih direktori"
msgid "Select file"
msgstr "Pilih berkas"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Tampilkan nama teknis"
@@ -810,6 +884,11 @@ msgstr "Penyumbang Sebelumnya"
msgid "Previous Core Developers"
msgstr "Pengembang Inti Sebelumnya"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Tampilkan info awakutu"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Jelajahi konten daring"
@@ -878,10 +957,6 @@ msgstr "Host Server"
msgid "Install games from ContentDB"
msgstr "Pasang permainan dari ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Nama"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Baru"
@@ -890,10 +965,6 @@ msgstr "Baru"
msgid "No world created or selected!"
msgstr "Tiada dunia yang dibuat atau dipilih!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Kata sandi"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Mainkan Permainan"
@@ -927,10 +998,6 @@ msgid "Clear"
msgstr "Clear"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Sambung"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Mode kreatif"
@@ -940,10 +1007,6 @@ msgid "Damage / PvP"
msgstr "Kerusakan/PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Hapus favorit"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Favorit"
@@ -956,6 +1019,10 @@ msgid "Join Game"
msgstr "Gabung Permainan"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -968,10 +1035,19 @@ msgid "Refresh"
msgstr "Segarkan"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Port utk Kendali Jarak Jauh"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Keterangan Server"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1016,7 +1092,8 @@ msgid "Dynamic shadows"
msgstr "Bayangan dinamis"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "Bayangan dinamis: "
#: builtin/mainmenu/tab_settings.lua
@@ -1112,7 +1189,8 @@ msgid "Tone Mapping"
msgstr "Pemetaan Nada"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "Batas Sentuhan: (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1120,7 +1198,8 @@ msgid "Trilinear Filter"
msgstr "Filter Trilinear"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+#, fuzzy
+msgid "Very High"
msgstr "Ultratinggi"
#: builtin/mainmenu/tab_settings.lua
@@ -1139,6 +1218,11 @@ msgstr "Air Berombak"
msgid "Waving Plants"
msgstr "Tanaman Berayun"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Galat sambungan (terlalu lama?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Sambungan kehabisan waktu."
@@ -1274,7 +1358,8 @@ msgid "Camera update enabled"
msgstr "Pembaruan kamera dinyalakan"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr "Tidak bisa menampilkan batasan blok (butuh hak 'basic_debug')"
#: src/client/game.cpp
@@ -1404,6 +1489,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Nyalakan jarak pandang tak terbatas"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Membuat klien..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Menu Utama"
@@ -1908,29 +1998,6 @@ msgstr "Gagal membuka laman web"
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!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Daftar dan Gabung"
-
-#: 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 ""
-"Anda akan bergabung ke server dengan nama \"%s\" untuk pertama kalinya.\n"
-"Jika Anda melanjutkan, akun baru yang telah Anda isikan akan dibuat pada "
-"server ini.\n"
-"Silakan ketik ulang kata sandi Anda dan klik \"Daftar dan Gabung\" untuk "
-"mengonfirmasi pembuatan akun atau klik Batal untuk membatalkan."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Lanjut"
@@ -1963,7 +2030,7 @@ msgstr "Batasan blok"
msgid "Change camera"
msgstr "Ubah kamera"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Obrolan"
@@ -2016,10 +2083,8 @@ msgid "Key already in use"
msgstr "Tombol telah terpakai"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Pengaturan tombol. (Jika menu ini kacau, hapus pengaturan kontrol dari "
-"minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2090,10 +2155,6 @@ msgid "Change"
msgstr "Ubah"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Konfirmasi kata sandi"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Kata sandi baru"
@@ -2101,6 +2162,10 @@ msgstr "Kata sandi baru"
msgid "Old Password"
msgstr "Kata sandi lama"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Kata sandi tidak cocok!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Keluar"
@@ -2114,12 +2179,6 @@ msgstr "Dibisukan"
msgid "Sound Volume: %d%%"
msgstr "Volume Suara: %d%%"
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Masuk "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2127,6 +2186,16 @@ msgstr "Masuk "
msgid "LANG_CODE"
msgstr "id"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Tolong pilih sebuah nama!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2289,6 +2358,10 @@ msgstr ""
"Catat bahwa mode interlaced membutuhkan penggunaan shader."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2385,6 +2458,11 @@ msgstr ""
"terlebih dahulu) membuat lapisan floatland padat (penuh)."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Sisipkan nama barang"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Lanjutan"
@@ -2403,7 +2481,8 @@ msgstr ""
"buatan. Ini punya pengaruh kecil kepada cahaya malam alami."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Selalu terbang dan bergerak cepat"
#: src/settings_translation_file.cpp
@@ -2482,6 +2561,10 @@ msgstr ""
"Dalam satuan blok peta (16 nodus)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Tombol maju otomatis"
@@ -2522,10 +2605,6 @@ msgid "Base terrain height."
msgstr "Ketinggian dasar medan."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Dasar"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Hak-hak dasar"
@@ -2546,7 +2625,8 @@ msgid "Bind address"
msgstr "Alamat sambungan"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Parameter noise suhu dan kelembapan Biome API"
#: src/settings_translation_file.cpp
@@ -2558,6 +2638,10 @@ msgid "Block send optimize distance"
msgstr "Jarak optimasi pengiriman blok"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Jalur fon tebal dan miring"
@@ -2582,6 +2666,11 @@ msgid "Builtin"
msgstr "Terpasang bawaan"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Ubah kamera"
+
+#: 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"
@@ -2746,6 +2835,11 @@ msgid "Client side node lookup range restriction"
msgstr "Batas jangkauan pencarian nodus sisi klien"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Mod klien"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Kelajuan memanjat"
@@ -2863,6 +2957,11 @@ msgid "Console height"
msgstr "Tombol konsol"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "Gudang konten daring"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "Daftar Hitam Flag ContentDB"
@@ -2902,8 +3001,10 @@ msgstr ""
"berubah."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Atur kelajuan tenggelam dalam cairan."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2976,12 +3077,12 @@ msgid "Debug log level"
msgstr "Tingkat log awakutu"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Tombol turunkan volume"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Turunkan ini untuk menaikkan ketahanan cairan terhadap gerakan."
+msgid "Dec. volume key"
+msgstr "Tombol turunkan volume"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3137,6 +3238,11 @@ msgid "Desynchronize block animation"
msgstr "Putuskan sinkronasi animasi blok"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Dekorasi"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Tombol gali"
@@ -3157,6 +3263,12 @@ msgid "Display Density Scaling Factor"
msgstr "Faktor Skala Kepadatan Tampilan"
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: 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."
@@ -3237,6 +3349,10 @@ msgid "Enable joysticks"
msgstr "Gunakan joystick"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Nyalakan dukungan saluran mod."
@@ -3253,18 +3369,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Gunakan masukan pengguna acak (hanya digunakan untuk pengujian)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-msgstr "Gunakan konfirmasi pendaftaran"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
-msgstr ""
-"Gunakan konfirmasi pendaftaran saat menyambung ke server.\n"
-"Jika dimatikan, akun baru akan didaftarkan otomatis."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3273,6 +3377,10 @@ msgstr ""
"Jangan gunakan untuk kecepatan atau untuk tampilan lain."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3363,6 +3471,14 @@ 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 ""
+"Mengaktifkan pertukaran yang mengurangi beban CPU atau meningkatkan kinerja "
+"rendering\n"
+"atas biaya gangguan visual kecil yang tidak memengaruhi pemutaran game."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "Profil lembah"
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -3389,6 +3505,10 @@ msgstr ""
"yang rata dan cocok untuk lapisan floatland padat (penuh)."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "FPS (bingkai per detik) saat dijeda atau tidak difokuskan"
@@ -3476,8 +3596,9 @@ msgstr ""
"otomatis jika mipmap dinyalakan."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Pemfilteran"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Antialiasing:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3544,6 +3665,11 @@ msgid "Fog toggle key"
msgstr "Tombol beralih kabut"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Ukuran fon"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Fon tebal bawaan"
@@ -3565,17 +3691,15 @@ msgstr "Ukuran fon"
#: src/settings_translation_file.cpp
msgid "Font size divisible by"
-msgstr ""
+msgstr "Ukuran fon dapat dibagi dengan"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
-msgstr "Ukuran fon bawaan dalam poin (pt)."
+msgstr "Ukuran fon bawaan dalam dimana 1 unit = 1 pixel di 96 DPI"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
-msgstr "Ukuran fon monospace bawaan dalam poin (pt)."
+msgstr "Ukuran fon monospace bawaan dimana 1 unit = 1 pixel di 96 DPI"
#: src/settings_translation_file.cpp
msgid ""
@@ -3595,6 +3719,13 @@ msgid ""
"be\n"
"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
msgstr ""
+"Untuk fon bergaya pixel yang tidak dapat diskalakan dengan baik, ini "
+"memastikan ukuran fon yang digunakan\n"
+"dengan fon ini akan selalu dapat dibagi dengan nilai ini, dalam pixel. "
+"Misalnya,\n"
+"fon pixel setinggi 16 pixel harus diatur ke 16, jadi itu hanya akan "
+"berukuran 16, 32, 48, dll.,\n"
+"jadi sebuah mod yang meminta ukuran 25 akan mendapatkan 32."
#: src/settings_translation_file.cpp
msgid ""
@@ -3706,6 +3837,19 @@ msgid "GUI scaling filter txr2img"
msgstr "Filter txr2img skala GUI"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Permainan"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Callback global"
@@ -3741,6 +3885,16 @@ msgid "Graphics"
msgstr "Grafika"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Grafika"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Grafika"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Gravitasi"
@@ -3757,8 +3911,13 @@ msgid "HTTP mods"
msgstr "Mod HTTP"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "Faktor skala HUD"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "Skala GUI"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -4015,8 +4174,10 @@ msgstr ""
"Membutuhkan air berombak untuk dinyalakan."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"Seberapa lama server akan menunggu sebelum membongkar blok peta yang tidak "
@@ -4024,6 +4185,13 @@ msgstr ""
"Semakin tinggi semakin halus, tetapi menggunakan lebih banyak RAM."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "Turunkan ini untuk menaikkan ketahanan cairan terhadap gerakan."
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "Lebar sungai yang dibuat."
@@ -4096,6 +4264,15 @@ msgstr ""
"tombol \"menyelinap\"."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Gunakan konfirmasi pendaftaran saat menyambung ke server.\n"
+"Jika dimatikan, akun baru akan didaftarkan otomatis."
+
+#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
@@ -4125,7 +4302,10 @@ msgstr ""
"menyelam."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
"Jika dinyalakan, pemain baru tidak dapat bergabung dengan kata sandi kosong."
@@ -4179,10 +4359,6 @@ msgid "Ignore world errors"
msgstr "Abaikan galat pada dunia"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "Dalam permainan"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
"Keburaman konsol obrolan dalam permainan (keopakan, dari 0 sampai 255)."
@@ -4243,15 +4419,12 @@ msgid "Instrument the methods of entities on registration."
msgstr "Melengkapi metode entitas dengan perkakas ketika didaftarkan."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Instrumentasi"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr "Jarak waktu penyimpanan perubahan penting dari dunia dalam detik."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "Jarak pengiriman waktu ke klien."
#: src/settings_translation_file.cpp
@@ -5109,6 +5282,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr "Keluarkan pemain yang mengirim lebih dari X pesan per 10 detik."
@@ -5166,10 +5343,11 @@ msgid "Left key"
msgstr "Tombol kiri"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"Lama detikan server dan selang waktu bagi objek secara umum untuk "
"diperbarui\n"
@@ -5184,18 +5362,25 @@ msgstr ""
"Membutuhkan air berombak untuk dinyalakan."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+#, fuzzy
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr "Jarak waktu antarsiklus pelaksanaan Pengubah Blok Aktif (ABM)"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "Jarak waktu antarsiklus pelaksanaan NodeTimer"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "Jarak waktu antarsiklus pengelola blok aktif"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5204,7 +5389,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Tingkatan log yang ditulis ke debug.txt:\n"
"- <kosong> (tanpa pencatatan)\n"
@@ -5240,6 +5426,11 @@ msgid "Light curve low gradient"
msgstr "Titik rendah gradasi kurva cahaya"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Pencahayaan Halus"
+
+#: 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"
@@ -5684,10 +5875,6 @@ msgid "Maximum users"
msgstr "Jumlah pengguna maksimum"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menu"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "Tembolok mesh"
@@ -5736,6 +5923,20 @@ msgid "Mipmapping"
msgstr "Mipmapping"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "Profiler"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Keamanan"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "Saluran mod"
@@ -5752,9 +5953,8 @@ msgid "Monospace font size"
msgstr "Ukuran fon monospace"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Monospace font size divisible by"
-msgstr "Ukuran fon monospace"
+msgstr "Ukuran fon monospace dapat dibagi dengan"
#: src/settings_translation_file.cpp
msgid "Mountain height noise"
@@ -5833,10 +6033,6 @@ msgid "Near plane"
msgstr "Bidang dekat"
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Jaringan"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
@@ -5845,6 +6041,11 @@ msgstr ""
"Nilai ini akan diubah saat memulai dari menu utama."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "Jaringan"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Pengguna baru butuh memasukkan kata sandi."
@@ -5857,6 +6058,11 @@ msgid "Noclip key"
msgstr "Tombol tembus nodus"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Sorot Nodus"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Penyorotan nodus"
@@ -5909,10 +6115,6 @@ msgstr ""
"penggunaan memori (4096=100MB, kasarannya)."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Gudang konten daring"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "Cairan opak"
@@ -5936,16 +6138,14 @@ 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. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
-"Jalur ke fon cadangan.\n"
-"Jika pengaturan \"freetype\" dinyalakan, harus fon TrueType.\n"
-"Jika pengaturan \"freetype\" dimatikan, harus fon bitmap atau vektor XML.\n"
-"Fon ini akan dipakai dalam bahasa tertentu jika tidak didukung fon bawaan."
+"Jalur ke fon cadangan. Harus sebuah font TrueType.\n"
+"Fon ini akan digunakan untuk beberapa bahasa atau jika fon bawaan tidak "
+"tersedia."
#: src/settings_translation_file.cpp
msgid ""
@@ -5967,26 +6167,20 @@ 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. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
-"Jalur ke fon bawaan.\n"
-"Jika pengaturan \"freetype\" dinyalakan, harus fon TrueType.\n"
-"Jika pengaturan \"freetype\" dimatikan, harus fon bitmap atau vektor XML.\n"
+"Jalur ke fon bawaan. Harus sebuah fon TrueType.\n"
"Fon cadangan akan dipakai jika fon tidak dapat dimuat."
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"Jalur ke fon monospace.\n"
-"Jika pengaturan \"freetype\" dinyalakan, harus fon TrueType.\n"
-"Jika pengaturan \"freetype\" dimatikan, harus fon bitmap atau vektor XML.\n"
-"Fon ini dipakai dalam layar konsol dan profiler."
+"Jalur ke fon monospace. Harus sebuah fon TrueType.\n"
+"Fon ini dipakai dalam layar konsol dan profiler, misalnya."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
@@ -6029,10 +6223,6 @@ msgstr ""
"Hal ini membutuhkan hak \"fly\" pada server."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Nama pemain"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "Jarak pemindahan pemain"
@@ -6087,10 +6277,6 @@ msgid "Profiler toggle key"
msgstr "Tombol profiler"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Profiling"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr "Alamat pendengar Prometheus"
@@ -6284,6 +6470,11 @@ msgstr ""
"bulat."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Layar:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Tinggi layar"
@@ -6314,6 +6505,11 @@ msgstr ""
"Gunakan 0 untuk kualitas bawaan."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Tangkapan layar"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Noise dasar laut"
@@ -6326,10 +6522,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Noise 3D kedua dari dua yang mengatur terowongan."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Keamanan"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Lihat https://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6388,8 +6580,19 @@ msgstr ""
"18 = Julia set 4D \"Mandelbulb\"."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Server/Pemain tunggal"
+#, fuzzy
+msgid "Server"
+msgstr "URL server"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Nama server"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Keterangan Server"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6416,10 +6619,20 @@ msgid "Server side occlusion culling"
msgstr "Occlusion culling sisi server"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Port Server"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "URL daftar server"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "URL daftar server"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Berkas daftar server"
@@ -6432,22 +6645,27 @@ msgstr ""
"Dibutuhkan mulai ulang setelah mengganti ini."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr "Atur jumlah karakter maksimum per pesan obrolan yang dikirim klien."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\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
+#, 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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
"Atur besar jari-jari bayangan halus.\n"
"Nilai rendah berarti bayangan lebih tajam, nilai tinggi berarti lebih "
@@ -6547,7 +6765,8 @@ msgstr ""
"digambar."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+#, fuzzy
+msgid "Shadow strength gamma"
msgstr "Kekuatan bayangan"
#: src/settings_translation_file.cpp
@@ -6790,6 +7009,11 @@ msgid "Temperature variation for biomes."
msgstr "Variasi suhu pada bioma."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Pengaturan"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "Noise medan alternatif"
@@ -7051,7 +7275,8 @@ msgid "Time speed"
msgstr "Kelajuan waktu"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
"Batas waktu bagi klien untuk menghapus data peta yang tidak digunakan dari "
"memori."
@@ -7081,7 +7306,16 @@ msgid "Touch screen threshold"
msgstr "Ambang batas layar sentuh"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Ambang batas layar sentuh"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
+msgstr "Pertukaran untuk kinerja"
+
+#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
msgstr ""
#: src/settings_translation_file.cpp
@@ -7193,6 +7427,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "Gunakan pemfilteran trilinear saat mengubah ukuran tekstur."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7465,6 +7703,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr "Apakah menampilkan informasi awakutu klien (sama dengan menekan F5)."
@@ -7571,6 +7818,10 @@ msgid "Y-level of seabed."
msgstr "Ketinggian Y dari dasar laut."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Batas waktu cURL mengunduh berkas"
@@ -7617,6 +7868,9 @@ msgstr "Batas cURL paralel"
#~ msgid "Back"
#~ msgstr "Kembali"
+#~ msgid "Basic"
+#~ msgstr "Dasar"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Bit per piksel (alias kedalaman warna) dalam mode layar penuh."
@@ -7650,6 +7904,12 @@ msgstr "Batas cURL paralel"
#~ msgid "Configure"
#~ msgstr "Konfigurasi"
+#~ msgid "Connect"
+#~ msgstr "Sambung"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Atur kelajuan tenggelam dalam cairan."
+
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value."
@@ -7694,12 +7954,24 @@ msgstr "Batas cURL paralel"
#~ "Menentukan langkah penyampelan tekstur.\n"
#~ "Nilai lebih tinggi menghasilkan peta lebih halus."
+#~ msgid "Del. Favorite"
+#~ msgstr "Hapus favorit"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Unduh suatu permainan, misalnya Minetest Game, dari minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Unduh satu dari minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Mengunduh dan memasang $1, mohon tunggu..."
#~ msgid "Enable VBO"
#~ msgstr "Gunakan VBO"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Gunakan konfirmasi pendaftaran"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7727,6 +7999,9 @@ msgstr "Batas cURL paralel"
#~ "Gunakan pemetaan parallax occlusion.\n"
#~ "Membutuhkan penggunaan shader."
+#~ msgid "Enter "
+#~ msgstr "Masuk "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7746,6 +8021,9 @@ msgstr "Batas cURL paralel"
#~ msgid "Fallback font size"
#~ msgstr "Ukuran fon cadangan"
+#~ msgid "Filtering"
+#~ msgstr "Pemfilteran"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Noise ketinggian dasar floatland"
@@ -7764,6 +8042,9 @@ msgstr "Batas cURL paralel"
#~ msgid "Full screen BPP"
#~ msgstr "BPP layar penuh"
+#~ msgid "Game"
+#~ msgstr "Permainan"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7773,15 +8054,30 @@ msgstr "Batas cURL paralel"
#~ msgid "Generate normalmaps"
#~ msgstr "Buat normalmap"
+#~ msgid "HUD scale factor"
+#~ msgstr "Faktor skala HUD"
+
#~ msgid "High-precision FPU"
#~ msgstr "FPU (satuan titik mengambang) berketelitian tinggi"
#~ msgid "IPv6 support."
#~ msgstr "Dukungan IPv6."
+#~ msgid "In-Game"
+#~ msgstr "Dalam permainan"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Pemasangan: berkas: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Instrumentasi"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Pengaturan tombol. (Jika menu ini kacau, hapus pengaturan kontrol dari "
+#~ "minetest.conf)"
+
#~ msgid "Lava depth"
#~ msgstr "Kedalaman lava"
@@ -7800,6 +8096,9 @@ msgstr "Batas cURL paralel"
#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
#~ msgstr "Buat DirectX bekerja dengan LuaJIT. Matikan jika bermasalah."
+#~ msgid "Menus"
+#~ msgstr "Menu"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Peta mini mode radar, perbesaran 2x"
@@ -7872,6 +8171,12 @@ msgstr "Batas cURL paralel"
#~ msgid "Path to save screenshots at."
#~ msgstr "Jalur untuk menyimpan tangkapan layar."
+#~ msgid "Player name"
+#~ msgstr "Nama pemain"
+
+#~ msgid "Profiling"
+#~ msgstr "Profiling"
+
#~ msgid "Projecting dungeons"
#~ msgstr "Dungeon yang menonjol"
@@ -7884,6 +8189,9 @@ msgstr "Batas cURL paralel"
#~ msgid "Select Package File:"
#~ msgstr "Pilih berkas paket:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Server/Pemain tunggal"
+
#~ msgid "Shadow limit"
#~ msgstr "Batas bayangan"
@@ -7962,6 +8270,21 @@ msgstr "Batas cURL paralel"
#~ msgid "Yes"
#~ msgstr "Ya"
+#, 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 ""
+#~ "Anda akan bergabung ke server dengan nama \"%s\" untuk pertama kalinya.\n"
+#~ "Jika Anda melanjutkan, akun baru yang telah Anda isikan akan dibuat pada "
+#~ "server ini.\n"
+#~ "Silakan ketik ulang kata sandi Anda dan klik \"Daftar dan Gabung\" untuk "
+#~ "mengonfirmasi pembuatan akun atau klik Batal untuk membatalkan."
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "Anda mati"
diff --git a/po/it/minetest.po b/po/it/minetest.po
index 0a0997f38..b986bfb0a 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: 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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-06-20 09:52+0000\n"
+"Last-Translator: Giov4 <brancacciogiovanni1@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/minetest/"
"minetest/it/>\n"
"Language: it\n"
@@ -12,11 +12,11 @@ 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.10-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
-msgstr "Pulisci la coda esterna della chat"
+msgstr "Pulisci la coda di uscita dei messaggi della chat"
#: builtin/client/chatcommands.lua
msgid "Empty command."
@@ -28,23 +28,23 @@ msgstr "Ritorna al menu principale"
#: builtin/client/chatcommands.lua
msgid "Invalid command: "
-msgstr "Comando Invalido: "
+msgstr "Comando non valido: "
#: builtin/client/chatcommands.lua
msgid "Issued command: "
-msgstr "Comando rilasciato: "
+msgstr "Comando eseguito: "
#: builtin/client/chatcommands.lua
msgid "List online players"
-msgstr "Lista di giocatori online"
+msgstr "Elenca i giocatori connessi"
#: builtin/client/chatcommands.lua
msgid "Online players: "
-msgstr "Giocatori Online: "
+msgstr "Giocatori connessi: "
#: builtin/client/chatcommands.lua
msgid "The out chat queue is now empty."
-msgstr "La coda esterna della chat è vuota adesso."
+msgstr "La coda di uscita dei messaggi della chat ora è vuota."
#: builtin/client/chatcommands.lua
msgid "This command is disabled by server."
@@ -78,16 +78,16 @@ msgstr "Ottieni aiuto per i comandi"
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."
+"Digita '.help <cmd>' per ricevere ulteriori informazioni sul comando, o "
+"digita '.help all' per elencare tutti i comandi."
#: builtin/common/chatcommands.lua
msgid "[all | <cmd>]"
-msgstr ""
+msgstr "[tutto | <cmd>]"
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
-msgstr "Ok"
+msgstr "Conferma"
#: builtin/fstk/ui.lua
msgid "<none available>"
@@ -111,7 +111,32 @@ msgstr "Riconnettiti"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
-msgstr "Il server ha richiesto una riconnessione:"
+msgstr "Il server ha richiesto la riconnessione:"
+
+#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Seleziona i Moduli"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
@@ -126,21 +151,32 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Il server supporta versioni di protocollo comprese tra la $1 e la $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Supportiamo solo la versione $1 del protocollo."
#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
-msgstr "Supportiamo solo le versioni di protocollo comprese tra la $1 e la $2."
+msgstr "Supportiamo versioni di protocollo comprese tra la $1 e la $2."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Annulla"
@@ -155,7 +191,7 @@ msgstr "Disattiva tutto"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "Disattiva il pacchetto mod"
+msgstr "Disattiva la raccolta di mod"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
@@ -163,19 +199,19 @@ msgstr "Attiva tutto"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "Attiva il pacchetto mod"
+msgstr "Attiva la raccolta di mod"
#: 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 ""
-"Impossibile abilitare la mod \"$1\" poiché contiene caratteri non ammessi. "
-"Sono ammessi solo i caratteri [a-z0-9_]."
+"Impossibile abilitare la mod \"$1\" poiché contiene caratteri non "
+"consentiti. Sono ammessi solo caratteri [a-z0-9_]."
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr "Trova più mod"
+msgstr "Trova Più Moduli"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
@@ -191,11 +227,11 @@ msgstr "Non è stata fornita alcuna descrizione del gioco."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr "Nessuna dipendenza"
+msgstr "Nessuna dipendenza necessaria"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "Non è stata fornita alcuna descrizione per il pacchetto mod."
+msgstr "Non è stata fornita alcuna descrizione per la raccolta di mod."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
@@ -220,22 +256,22 @@ msgstr "abilitato"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr "\"$1\" già esiste. Vuoi sovrascriverlo?"
+msgstr "\"$1\" esiste già. Vuoi sovrascriverlo?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr "Le dipendenze $1 e $2 verranno installate."
+msgstr "Le dipendenze $1 e $2 saranno installate."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr "$1 di $2"
+msgstr "$1 con $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
-"$1 in scaricamento,\n"
+"Scaricando $1,\n"
"$2 in coda"
#: builtin/mainmenu/dlg_contentstore.lua
@@ -244,15 +280,15 @@ msgstr "Scaricando $1..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr "Le dipendeze richieste per $1 non sono state trovate."
+msgstr "$1 impossibile trovare le dipendeze necessarie."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr "$1 verrà installato, e $2 dipendenze verranno ignorate."
+msgstr "$1 sarà installato, e $2 dipendenze verranno ignorate."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
-msgstr "Tutti i pacchetti"
+msgstr "Tutti i contenuti"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Already installed"
@@ -264,11 +300,11 @@ msgstr "Torna al Menu Principale"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Base Game:"
-msgstr "Gioco base:"
+msgstr "Gioco di Base:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
-msgstr "ContentDB non è disponibile quando Minetest viene compilato senza cuRL"
+msgstr "ContentDB non è disponibile quando Minetest viene compilato senza cURL"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Downloading..."
@@ -279,7 +315,6 @@ msgid "Failed to download $1"
msgstr "Impossibile scaricare $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Giochi"
@@ -300,13 +335,12 @@ 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"
+msgstr "Moduli"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr "Non è stato possibile recuperare alcun pacchetto"
+msgstr "Non è stato possibile recuperare alcun contenuto"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
@@ -326,7 +360,7 @@ msgstr "Sovrascrivi"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr "Per favore, controlla che il gioco base sia corretto."
+msgstr "Per favore, controlla che il gioco di base sia corretto."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
@@ -334,7 +368,7 @@ msgstr "In coda"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
-msgstr "Pacchetti texture"
+msgstr "Raccolte di texture"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
@@ -346,11 +380,11 @@ msgstr "Aggiorna"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr "Aggiornat tutti [$1]"
+msgstr "Aggiorna Tutto [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr "Visualizza ulteriori informazioni in un browser web"
+msgstr "Visualizza ulteriori informazioni in un browser Web"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -370,7 +404,7 @@ msgstr "Siccità da altitudine"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biome blending"
-msgstr "Miscelatura biomi"
+msgstr "Mescolamento biomi"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biomes"
@@ -393,12 +427,9 @@ msgid "Decorations"
msgstr "Decorazioni"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Scarica un gioco, come Minetest Game, da minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Scaricane uno da minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Avviso: Il Development Test è inteso per gli sviluppatori."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -410,19 +441,15 @@ msgstr "Terreno piatto"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr "Pietre miliari fluttuanti nel cielo"
+msgstr "Regioni di terreno fluttuanti nel cielo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
msgstr "Terre fluttuanti (sperimentale)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Gioco"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr "Generare terreno non-frattale: oceani e sottoterra"
+msgstr "Generare terreno non-frattale: oceani e spazio sotterraneo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
@@ -437,24 +464,33 @@ msgid "Increases humidity around rivers"
msgstr "Aumenta l'umidità attorno ai fiumi"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Installa $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Laghi"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Low humidity and high heat causes shallow or dry rivers"
-msgstr "Bassa umidità e calore elevato producono fiumi bassi o secchi"
+msgstr "Bassa umidità e calore elevato rendono i fiumi bassi o secchi"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
-msgstr "Generatore mappa"
+msgstr "generatore della mappatura del terreno"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen flags"
-msgstr "Valori del generatore mappa"
+msgstr "Valori del generatore della mappatura del terreno"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mapgen-specific flags"
-msgstr "Valori specifici del generatore di mappe"
+msgstr "Valori specifici del generatore della mappatura del terreno"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
@@ -462,7 +498,7 @@ msgstr "Montagne"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
-msgstr "Colata di fango"
+msgstr "Scorrimento fangoso"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
@@ -538,11 +574,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Caverne davvero grandi in profondità sottoterra"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr ""
-"Avvertimento: il Minimal Development Test è inteso per gli sviluppatori."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Nome del mondo"
@@ -558,11 +589,11 @@ msgstr "Siete sicuri di volere cancellare \"$1\"?"
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
#: src/client/keycode.cpp
msgid "Delete"
-msgstr "Cancella"
+msgstr "Rimuovi"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "pkgmgr: non è stato possibile cancellare \"$1\""
+msgstr "pkgmgr: non è stato possibile eliminare \"$1\""
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
@@ -570,27 +601,60 @@ msgstr "pkgmgr: percorso non valido \"$1\""
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr "Cancellare il mondo \"$1\"?"
+msgstr "Eliminare il mondo \"$1\"?"
+
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Conferma la password"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Nome del generatore mappa"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Nome"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Password"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Le password non corrispondono!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Registrati e accedi"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
-msgstr "Accetta"
+msgstr "Conferma"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Rinomina il pacchetto mod:"
+msgstr "Rinomina la raccolta di 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 ""
-"Questo pacchetto mod esplicita un nome in modpack.conf che sovrascriverà "
-"ogni modifica qui effettuata."
+"Questa raccolta di mod esplicita un nome fornito in modpack.conf che "
+"sovrascriverà ogni modifica del nome qui effettuata."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
-msgstr "(Nessuna descrizione o impostazione data)"
+msgstr "(Nessuna descrizione fornita per l'impostazione)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
@@ -598,11 +662,21 @@ msgstr "Rumore 2D"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
-msgstr "< Torna a Impostazioni"
+msgstr "< Torna alla pagina Impostazioni"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
-msgstr "Scorri"
+msgstr "Esplora"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Contenuto"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Contenuto"
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
@@ -642,25 +716,25 @@ msgstr "Per favore inserisci un numero valido."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
-msgstr "Ripristina"
+msgstr "Ripristina predefinito"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
-msgstr "Scala"
+msgstr "Ridimensiona"
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
-msgstr "Cerca"
+msgstr "Ricerca"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
-msgstr "Scegli la cartella"
+msgstr "Scegli l'indirizzo"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select file"
-msgstr "Scegli il file"
+msgstr "Scegli un file"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Mostra i nomi tecnici"
@@ -670,7 +744,7 @@ msgstr "Il valore deve essere almeno $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
-msgstr "Il valore deve essere più piccolo di $1."
+msgstr "Il valore non deve essere più grande di $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
@@ -702,14 +776,14 @@ msgstr "Propagazione Z"
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
-msgstr "'absvalue'"
+msgstr "\"absvalue\""
#. ~ "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 "'defaults'"
+msgstr "\"defaults\""
#. ~ "eased" is a noise parameter flag.
#. It is used to make the map smoother and
@@ -717,37 +791,37 @@ msgstr "'defaults'"
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr "'eased'"
+msgstr "\"eased\""
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
-msgstr "$1 (abilitato)"
+msgstr "$1 (Attivato)"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
-msgstr "$1 mod"
+msgstr "$1 moduli"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "Impossibile installare $1 in $2"
+msgstr "installazione fallita di $1 a $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr "Installa mod: Impossibile trovare il vero nome del mod per: $1"
+msgstr "Installa Modulo: Impossibile trovare il nome vero del mod per: $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
-"Installa mod: Impossibile trovare un nome cartella corretto per il pacchetto "
-"mod $1"
+"Installa Modulo: Impossibile trovare un nome della cartella adeguato per la "
+"raccolta di mod $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr "Impossibile trovare un mod o un pacchetto mod validi"
+msgstr "Impossibile trovare un mod o una raccolta di mod validi"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
-msgstr "Impossibile installare un $1 come un pacchetto texture"
+msgstr "Impossibile installare un $1 come una raccolta di texture"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
@@ -759,7 +833,7 @@ msgstr "Impossibile installare un mod come un $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a modpack as a $1"
-msgstr "Impossibile installare un pacchetto mod come un $1"
+msgstr "Impossibile installare una raccolta di mod come un $1"
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
msgid "Loading..."
@@ -767,41 +841,41 @@ msgstr "Caricamento..."
#: builtin/mainmenu/serverlistmgr.lua
msgid "Public server list is disabled"
-msgstr "La lista dei server pubblici è disabilitata"
+msgstr "L'elenco dei server pubblici è disabilitato"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Prova a riabilitare l'elenco dei server pubblici e controlla la tua "
-"connessione internet."
+"connessione Internet."
#: builtin/mainmenu/tab_about.lua
msgid "About"
-msgstr "Riguardo a"
+msgstr "Informazioni"
#: builtin/mainmenu/tab_about.lua
msgid "Active Contributors"
-msgstr "Contributori attivi"
+msgstr "Contributori Attivi"
#: builtin/mainmenu/tab_about.lua
msgid "Active renderer:"
-msgstr "Rendering Attivo:"
+msgstr "Algoritmo di resa attivo:"
#: builtin/mainmenu/tab_about.lua
msgid "Core Developers"
-msgstr "Sviluppatori principali"
+msgstr "Sviluppatori Principali"
#: builtin/mainmenu/tab_about.lua
msgid "Open User Data Directory"
-msgstr "Apri la cartella dei dati utente"
+msgstr "Apri l'Indirizzo 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."
+"Apre l'indirizzo contenente mondi, giochi, mod e raccolte di\n"
+"textures forniti dall'utente in un gestore / visualizzatore di file ."
#: builtin/mainmenu/tab_about.lua
msgid "Previous Contributors"
@@ -809,19 +883,24 @@ msgstr "Contributori precedenti"
#: builtin/mainmenu/tab_about.lua
msgid "Previous Core Developers"
-msgstr "Sviluppatori principali precedenti"
+msgstr "Sviluppatori Principali Precedenti"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Mostra le informazioni di debug"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr "Mostra contenuti online"
+msgstr "Esplora i contenuti online"
#: builtin/mainmenu/tab_content.lua
msgid "Content"
-msgstr "Contenuti"
+msgstr "Contenuto"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
-msgstr "Disattiva pacchetto texture"
+msgstr "Disattiva la Raccolta di Texture"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
@@ -829,7 +908,7 @@ msgstr "Informazioni:"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
-msgstr "Pacchetti installati:"
+msgstr "Contenuti Installati:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
@@ -837,7 +916,7 @@ msgstr "Nessuna dipendenza."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr "Nessuna descrizione disponibile per la raccolta"
+msgstr "Nessuna descrizione disponibile per il contenuto"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
@@ -845,44 +924,40 @@ msgstr "Rinomina"
#: builtin/mainmenu/tab_content.lua
msgid "Uninstall Package"
-msgstr "Disinstalla pacchetto"
+msgstr "Disinstalla il Contenuto"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
-msgstr "Usa pacchetto texture"
+msgstr "Utilizza la Raccolta di Textures"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr "Annunciare il server"
+msgstr "Annunciare il Server"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr "Legare indirizzo"
+msgstr "Indirizzo Incorporato"
#: builtin/mainmenu/tab_local.lua
msgid "Creative Mode"
-msgstr "Modalità creativa"
+msgstr "Modalità Creativa"
#: builtin/mainmenu/tab_local.lua
msgid "Enable Damage"
-msgstr "Abilita il ferimento"
+msgstr "Abilita il Ferimento"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
-msgstr "Ospita un gioco"
+msgstr "Ospita un Gioco"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
-msgstr "Ospita un server"
+msgstr "Ospita un Server"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
msgstr "Installa giochi da ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Nome"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Nuovo"
@@ -891,10 +966,6 @@ msgstr "Nuovo"
msgid "No world created or selected!"
msgstr "Nessun mondo creato o selezionato!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Password"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Avvia il gioco"
@@ -905,15 +976,15 @@ msgstr "Porta"
#: builtin/mainmenu/tab_local.lua
msgid "Select Mods"
-msgstr "Seleziona mod"
+msgstr "Seleziona i Moduli"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
-msgstr "Seleziona mondo:"
+msgstr "Seleziona il Mondo:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr "Porta del server"
+msgstr "Porta del Server"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
@@ -928,22 +999,13 @@ msgid "Clear"
msgstr "Canc"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Connettiti"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Modalità creativa"
#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Damage / PvP"
-msgstr "Ferimento"
-
-#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Elimina preferito"
+msgstr "Ferimento / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
@@ -955,7 +1017,11 @@ msgstr "Server Incompatibili"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
-msgstr "Gioca online"
+msgstr "Unisciti al Gioco"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
@@ -970,8 +1036,17 @@ msgid "Refresh"
msgstr "Ricarica"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Porta remota"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
-msgstr "Descrizione del server"
+msgstr "Descrizione del Server"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -991,39 +1066,40 @@ msgstr "8x"
#: builtin/mainmenu/tab_settings.lua
msgid "All Settings"
-msgstr "Tutte le impostazioni"
+msgstr "Tutte le Impostazioni"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
-msgstr "Antialiasing:"
+msgstr "Anti-Scalettatura:"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
-msgstr "Ricorda dim. finestra"
+msgstr "Ricorda Dim. Finestra"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
-msgstr "Filtro bilineare"
+msgstr "Filtro Bilineare"
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
msgid "Change Keys"
-msgstr "Cambia i tasti"
+msgstr "Cambia i Tasti"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr "Vetro contiguo"
+msgstr "Vetro Contiguo"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Dynamic shadows"
-msgstr "Ombre dinamiche"
+msgstr "Ombre Dinamiche"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "Ombre dinamiche: "
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
-msgstr "Foglie di qualità"
+msgstr "Foglie di Qualità"
#: builtin/mainmenu/tab_settings.lua
msgid "High"
@@ -1039,27 +1115,27 @@ msgstr "Medio"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr "Mipmap"
+msgstr "MIP map"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr "Mipmap + Filtro aniso."
+msgstr "Mipmap + Filtro Aniso."
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr "Nessun filtro"
+msgstr "Nessun Filtro"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
-msgstr "Nessuna mipmap"
+msgstr "Nessuna Mipmap"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
-msgstr "Evidenzia nodi"
+msgstr "Evidenziatura dei Nodi"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
-msgstr "Profilo nodi"
+msgstr "Profilo dei Nodi"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
@@ -1067,11 +1143,11 @@ msgstr "Nessuno"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
-msgstr "Foglie opache"
+msgstr "Foglie Opache"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Water"
-msgstr "Acqua opaca"
+msgstr "Acqua Opaca"
#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
@@ -1087,11 +1163,11 @@ msgstr "Impostazioni"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
-msgstr "Shaders"
+msgstr "Shader"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (experimental)"
-msgstr "Shader (sperimentali)"
+msgstr "Shaders (sperimentali)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1099,31 +1175,33 @@ msgstr "Shaders (non disponibili)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
-msgstr "Foglie semplici"
+msgstr "Foglie Semplici"
#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
-msgstr "Luce uniforme"
+msgstr "Illuminazione Uniforme"
#: builtin/mainmenu/tab_settings.lua
msgid "Texturing:"
-msgstr "Resa immagini:"
+msgstr "Resa Immagini:"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
-msgstr "Tone Mapping"
+msgstr "Mappatura del Tono"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr "Soglia tocco: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
+msgstr "Soglia del Tocco: (px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
-msgstr "Filtro trilineare"
+msgstr "Filtro Trilineare"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
-msgstr "Molto Alto"
+#, fuzzy
+msgid "Very High"
+msgstr "Ultra"
#: builtin/mainmenu/tab_settings.lua
msgid "Very Low"
@@ -1131,15 +1209,20 @@ msgstr "Molto Basso"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr "Foglie ondeggianti"
+msgstr "Foglie Ondeggianti"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Liquids"
-msgstr "Liquidi ondeggianti"
+msgstr "Liquidi Ondeggianti"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr "Piante ondeggianti"
+msgstr "Piante Ondeggianti"
+
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Errore di connessione (scaduta?)"
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
@@ -1151,19 +1234,19 @@ msgstr "Fatto!"
#: src/client/client.cpp
msgid "Initializing nodes"
-msgstr "Inizializzazione nodi"
+msgstr "Inizializzando i nodi"
#: src/client/client.cpp
msgid "Initializing nodes..."
-msgstr "Inizializzazione nodi..."
+msgstr "Inizializzando i nodi..."
#: src/client/client.cpp
msgid "Loading textures..."
-msgstr "Caricando le texture..."
+msgstr "Caricando le textures..."
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-msgstr "Ricostruzione shader..."
+msgstr "Ricostruendo le shaders..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
@@ -1171,15 +1254,15 @@ msgstr "Errore di connessione (scaduta?)"
#: src/client/clientlauncher.cpp
msgid "Could not find or load game: "
-msgstr "Impossibile trovare o caricare il gioco \" "
+msgstr "Impossibile trovare o caricare il gioco: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
-msgstr "Requisiti gioco non validi."
+msgstr "Requisiti del gioco non validi."
#: src/client/clientlauncher.cpp
msgid "Main Menu"
-msgstr "Menu principale"
+msgstr "Menu Principale"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
@@ -1187,7 +1270,7 @@ msgstr "Nessun mondo selezionato e nessun indirizzo fornito. Nulla da fare."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr "Nome giocatore troppo lungo."
+msgstr "Nome del giocatore troppo lungo."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
@@ -1195,11 +1278,11 @@ msgstr "Per favore scegli un nome!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr "Impossibile aprire il file password fornito: "
+msgstr "Impossibile aprire il file di password fornito: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
-msgstr "Il percorso fornito per il mondo non esiste: "
+msgstr "Il percorso del mondo fornito non esiste: "
#: src/client/game.cpp
msgid ""
@@ -1232,11 +1315,11 @@ msgstr "- PvP: "
#: src/client/game.cpp
msgid "- Server Name: "
-msgstr "- Nome server: "
+msgstr "- Nome del Server: "
#: src/client/game.cpp
msgid "A serialization error occurred:"
-msgstr "Un errore di serializzazione si è verificato:"
+msgstr "Si è verificato un errore di serializzazione:"
#: src/client/game.cpp
#, c-format
@@ -1253,7 +1336,7 @@ msgstr "Avanzamento automatico abilitato"
#: src/client/game.cpp
msgid "Block bounds hidden"
-msgstr "Limiti del blocco nascosto"
+msgstr "Limiti del blocco nascosti"
#: src/client/game.cpp
msgid "Block bounds shown for all blocks"
@@ -1269,29 +1352,30 @@ msgstr "I limiti del blocco sono mostrati per i blocchi vicini"
#: src/client/game.cpp
msgid "Camera update disabled"
-msgstr "Aggiornamento telecamera disabilitato"
+msgstr "Aggiornamento della telecamera disabilitato"
#: src/client/game.cpp
msgid "Camera update enabled"
msgstr "Aggiornamento telecamera abilitato"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
"Impossibile mostrare i limiti del blocco (si ha bisogno del privilegio "
-"'baisc_debug')"
+"'basic_debug')"
#: src/client/game.cpp
msgid "Change Password"
-msgstr "Cambia password"
+msgstr "Cambia la Password"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
-msgstr "Modalità cinematica disabilitata"
+msgstr "Modalità cinematica disattiva"
#: src/client/game.cpp
msgid "Cinematic mode enabled"
-msgstr "Modalità cinematica abilitata"
+msgstr "Modalità cinematica attiva"
#: src/client/game.cpp
msgid "Client disconnected"
@@ -1336,13 +1420,13 @@ msgstr ""
"- %s: arretra\n"
"- %s: sinistra\n"
"- %s: destra\n"
-"- %s: salta/arrampicati\n"
+"- %s: salta/scala su\n"
"- %s: scava/colpisci\n"
-"- %s: piazza/usa\n"
+"- %s: piazza/utilizza\n"
"- %s: furtivo/scendi\n"
-"- %s: lascia oggetto\n"
+"- %s: getta via oggetto\n"
"- %s: inventario\n"
-"- Mouse: gira/guarda\n"
+"- Mouse: girati/guarda\n"
"- Rotella mouse: scegli oggetto\n"
"- %s: chat\n"
@@ -1353,11 +1437,11 @@ msgstr "Impossibile risolvere l'indirizzo: %s"
#: src/client/game.cpp
msgid "Creating client..."
-msgstr "Creazione client..."
+msgstr "Creazione del client..."
#: src/client/game.cpp
msgid "Creating server..."
-msgstr "Creazione server..."
+msgstr "Creazione del server..."
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
@@ -1369,7 +1453,7 @@ msgstr "Info debug mostrate"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
-msgstr "Info debug, grafico profiler, e struttura nascosti"
+msgstr "Info debug, grafico profiler e struttura a fili nascosti"
#: src/client/game.cpp
msgid ""
@@ -1386,18 +1470,18 @@ msgid ""
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
msgstr ""
-"Controlli predefiniti:\n"
+"Controlli Predefiniti:\n"
"Nessun menu visibile:\n"
"- tocco singolo: attiva pulsante\n"
-"- tocco doppio; piazza/usa\n"
-"- trascina: guarda attorno\n"
+"- tocco doppio; piazza/utilizza\n"
+"- trascina il dito: guarda attorno\n"
"Menu/Inventario visibile:\n"
-"- tocco doppio (esterno):\n"
+"- doppio tocco (esterno):\n"
" -->chiudi\n"
"- tocco pila, tocco casella:\n"
" --> sposta pila\n"
-"- tocco e trascina, tocco 2° dito\n"
-" --> piazza singolo oggetto in casella\n"
+"- tocca e trascina, tocco 2° dito\n"
+" --> piazza oggetto singolo nella casella\n"
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
@@ -1408,8 +1492,13 @@ msgid "Enabled unlimited viewing range"
msgstr "Raggio visivo illimitato abilitato"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Creazione del client..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr "Torna al menu"
+msgstr "Menu Principale"
#: src/client/game.cpp
msgid "Exit to OS"
@@ -1425,7 +1514,7 @@ msgstr "Modalità rapida abilitata"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr "Modalità rapida abilitata (nota: niente privilegio 'fast')"
+msgstr "Modalità rapida abilitata (nota: privilegio 'fast' mancante)"
#: src/client/game.cpp
msgid "Fly mode disabled"
@@ -1437,19 +1526,19 @@ msgstr "Modalità volo abilitata"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr "Modalità volo abilitata (nota: niente privilegio 'fly')"
+msgstr "Modalità volo abilitata (nota: privilegio 'fly' mancante)"
#: src/client/game.cpp
msgid "Fog disabled"
-msgstr "Nebbia disabilitata"
+msgstr "Nebbia disattivata"
#: src/client/game.cpp
msgid "Fog enabled"
-msgstr "Nebbia abilitata"
+msgstr "Nebbia attivata"
#: src/client/game.cpp
msgid "Game info:"
-msgstr "Info gioco:"
+msgstr "Informazioni del gioco:"
#: src/client/game.cpp
msgid "Game paused"
@@ -1457,11 +1546,11 @@ msgstr "Gioco in pausa"
#: src/client/game.cpp
msgid "Hosting server"
-msgstr "Server ospite"
+msgstr "Server ospitante"
#: src/client/game.cpp
msgid "Item definitions..."
-msgstr "Definizioni oggetti..."
+msgstr "Definizione degli oggetti..."
#: src/client/game.cpp
msgid "KiB/s"
@@ -1477,11 +1566,11 @@ msgstr "MiB/s"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr "Minimappa attualmente disabilitata dal gioco o da una mod"
+msgstr "Minimappa attualmente disabilitata dal gioco o da un modulo"
#: src/client/game.cpp
msgid "Multiplayer"
-msgstr "Multi giocatore"
+msgstr "Multigiocatore"
#: src/client/game.cpp
msgid "Noclip mode disabled"
@@ -1493,11 +1582,11 @@ msgstr "Modalità incorporea abilitata"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr "Modalità incorporea abilitata (nota: niente privilegio 'noclip')"
+msgstr "Modalità incorporea abilitata (nota: privilegio 'noclip' mancante)"
#: src/client/game.cpp
msgid "Node definitions..."
-msgstr "Definizioni nodi..."
+msgstr "Definizione dei nodi..."
#: src/client/game.cpp
msgid "Off"
@@ -1525,11 +1614,11 @@ msgstr "Server remoto"
#: src/client/game.cpp
msgid "Resolving address..."
-msgstr "Risoluzione indirizzo..."
+msgstr "Risoluzione dell'indirizzo..."
#: src/client/game.cpp
msgid "Shutting down..."
-msgstr "Chiusura..."
+msgstr "Uscita dal gioco..."
#: src/client/game.cpp
msgid "Singleplayer"
@@ -1537,7 +1626,7 @@ msgstr "Gioco locale"
#: src/client/game.cpp
msgid "Sound Volume"
-msgstr "Volume suono"
+msgstr "Volume del Suono"
#: src/client/game.cpp
msgid "Sound muted"
@@ -1549,7 +1638,7 @@ msgstr "Il sistema audio è disabilitato"
#: src/client/game.cpp
msgid "Sound system is not supported on this build"
-msgstr "Il sistema audio non è supportato su questa build"
+msgstr "Il sistema audio non è supportato su questa compilazione"
#: src/client/game.cpp
msgid "Sound unmuted"
@@ -1592,7 +1681,7 @@ msgstr "Volume cambiato a %d%%"
#: src/client/game.cpp
msgid "Wireframe shown"
-msgstr "Struttura visualizzata"
+msgstr "Struttura a fili visualizzata"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
@@ -1608,7 +1697,7 @@ msgstr "Chat nascosta"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr "Chat visualizzata"
+msgstr "Chat mostrata"
#: src/client/gameui.cpp
msgid "HUD hidden"
@@ -1620,28 +1709,28 @@ msgstr "HUD visibile"
#: src/client/gameui.cpp
msgid "Profiler hidden"
-msgstr "Profiler nascosto"
+msgstr "Profilatore nascosto"
#: src/client/gameui.cpp
#, c-format
msgid "Profiler shown (page %d of %d)"
-msgstr "Profiler visualizzato (pagina %d di %d)"
+msgstr "Profilatore visualizzato (pagina %d di %d)"
#: src/client/keycode.cpp
msgid "Apps"
-msgstr "App"
+msgstr "Applicazioni"
#: src/client/keycode.cpp
msgid "Backspace"
-msgstr "Indietro"
+msgstr "Tasto di ritorno"
#: src/client/keycode.cpp
msgid "Caps Lock"
-msgstr "Blocca maiusc."
+msgstr "Blocco Maiusc."
#: src/client/keycode.cpp
msgid "Control"
-msgstr "Ctrl"
+msgstr "Control"
#: src/client/keycode.cpp
msgid "Down"
@@ -1669,27 +1758,27 @@ msgstr "Inizio"
#: src/client/keycode.cpp
msgid "IME Accept"
-msgstr "IME Accept"
+msgstr "Accetta IME"
#: src/client/keycode.cpp
msgid "IME Convert"
-msgstr "IME Convert"
+msgstr "Converti IME"
#: src/client/keycode.cpp
msgid "IME Escape"
-msgstr "Esc"
+msgstr "Ritorno da IME"
#: src/client/keycode.cpp
msgid "IME Mode Change"
-msgstr "IME Mode Change"
+msgstr "Cambia Modalità IME"
#: src/client/keycode.cpp
msgid "IME Nonconvert"
-msgstr "IME Nonconvert"
+msgstr "Non Convertire IME"
#: src/client/keycode.cpp
msgid "Insert"
-msgstr "Ins"
+msgstr "Inserisci"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Left"
@@ -1697,23 +1786,23 @@ msgstr "Sinistra"
#: src/client/keycode.cpp
msgid "Left Button"
-msgstr "Pulsante sinistro"
+msgstr "Pulsante Sinistro"
#: src/client/keycode.cpp
msgid "Left Control"
-msgstr "Ctrl sinistro"
+msgstr "Control Sinistro"
#: src/client/keycode.cpp
msgid "Left Menu"
-msgstr "Alt sinistro"
+msgstr "Menu Sinistro"
#: src/client/keycode.cpp
msgid "Left Shift"
-msgstr "Maiusc sinistro"
+msgstr "Shift Sinistro"
#: src/client/keycode.cpp
msgid "Left Windows"
-msgstr "Windows sinistro"
+msgstr "Windows Sinistro"
#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
@@ -1722,7 +1811,7 @@ msgstr "Menu"
#: src/client/keycode.cpp
msgid "Middle Button"
-msgstr "Pulsante centrale"
+msgstr "Pulsante Centrale"
#: src/client/keycode.cpp
msgid "Num Lock"
@@ -1806,7 +1895,7 @@ msgstr "Pausa"
#: src/client/keycode.cpp
msgid "Play"
-msgstr "Play"
+msgstr "Avvia"
#. ~ "Print screen" key
#: src/client/keycode.cpp
@@ -1912,37 +2001,13 @@ msgstr "Impossibile aprire la pagina web"
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!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Registrati e accedi"
-
-#: 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 ""
-"Stai per accedere a questo server col nome \"%s\" per la prima volta. \n"
-"Se prosegui, su questo server sarà creato un nuovo account usando le tue "
-"credenziali.\n"
-"Per favore reinserisci la tua password e premi Registrati e accedi per "
-"confermare la creazione dell'account, o premi Annulla per interrompere."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Prosegui"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "\"Aux1\" = climb down"
-msgstr "\"Speciale\" = scendi"
+msgstr "\"Speciale\" = discendi"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1954,7 +2019,7 @@ msgstr "Salto automatico"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Aux1"
-msgstr ""
+msgstr "Speciale"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
@@ -1968,7 +2033,7 @@ msgstr "Limiti del blocco nascosto"
msgid "Change camera"
msgstr "Cambia vista"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Chat"
@@ -2021,9 +2086,8 @@ msgid "Key already in use"
msgstr "Tasto già usato"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Associamenti tasti. (Se questo menu si incasina, togli roba da minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2094,10 +2158,6 @@ msgid "Change"
msgstr "Cambia"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Conferma la password"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nuova password"
@@ -2105,6 +2165,10 @@ msgstr "Nuova password"
msgid "Old Password"
msgstr "Vecchia password"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Le password non corrispondono!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Uscita"
@@ -2118,12 +2182,6 @@ msgstr "Silenziato"
msgid "Sound Volume: %d%%"
msgstr "Volume suono: %d%%"
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Inserisci "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2131,6 +2189,16 @@ msgstr "Inserisci "
msgid "LANG_CODE"
msgstr "it"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Per favore scegli un nome!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2140,14 +2208,13 @@ 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 \"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"
-"Se abilitato, inoltre il joystick virtuale premerà il pulsante \"aux\" "
+"(Android) Usa il joystick virtuale per attivare il pulsante \"Speciale\".\n"
+"Se abilitato, inoltre, il joystick virtuale premerà il pulsante \"Speciale\" "
"quando fuori dal cerchio principale."
#: src/settings_translation_file.cpp
@@ -2305,6 +2372,10 @@ msgstr ""
"Si noti che la modalità intrecciata richiede l'abilitazione degli shader."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2377,8 +2448,8 @@ msgid ""
"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
"screens."
msgstr ""
-"Regola la configurazione dpi per il tuo schermo (solo non X11/Android) per "
-"es. per schermi 4K."
+"Regolate la configurazione dpi per il vostro schermo (solo non X11/Android) "
+"per es. per schermi 4K."
#: src/settings_translation_file.cpp
msgid "Adjust the detected display density, used for scaling UI elements."
@@ -2395,15 +2466,20 @@ msgid ""
"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
"to be sure) creates a solid floatland layer."
msgstr ""
-"Aggiusta la densità dello strato della terra fluttuante.\n"
+"Calibra la densità dello strato della terra fluttuante.\n"
"Si aumenti il valore per aumentare la densità. Può essere positivo o "
"negativo.\n"
"Valore = 0.0: 50% del volume è terra fluttuante.\n"
"Value = 2.0 (può essere maggiore dipendentemente da 'mgv7_np_floatland', "
-"provate sempre\n"
+"provare sempre\n"
"per essere sicuri) crea uno strato solido di terre fluttuanti."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Posponi nome oggetto"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avanzate"
@@ -2423,7 +2499,8 @@ msgstr ""
"ha pochissimo effetto sulla luce notturna naturale."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Sempre volo e veloce"
#: src/settings_translation_file.cpp
@@ -2503,6 +2580,10 @@ msgstr ""
"Fissata in blocchi mappa (16 nodi)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Tasto di avanzamento automatico"
@@ -2523,14 +2604,12 @@ msgid "Autoscaling mode"
msgstr "Modalità scalamento automatico"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Aux1 key"
-msgstr "Tasto salta"
+msgstr "Tasto Speciale"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Aux1 key for climbing/descending"
-msgstr "Tasto speciale per arrampicarsi/scendere"
+msgstr "Tasto Speciale per scendere/immergersi"
#: src/settings_translation_file.cpp
msgid "Backward key"
@@ -2545,10 +2624,6 @@ msgid "Base terrain height."
msgstr "Altezza base del terreno."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Base"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Privilegi di base"
@@ -2569,7 +2644,8 @@ msgid "Bind address"
msgstr "Lega indirizzo"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Parametri di rumore dell'API dei biomi per temperatura e umidità"
#: src/settings_translation_file.cpp
@@ -2581,6 +2657,10 @@ msgid "Block send optimize distance"
msgstr "Distanza di ottimizzazione dell'invio dei blocchi"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Percorso dei caratteri in grassetto e corsivo"
@@ -2605,6 +2685,11 @@ msgid "Builtin"
msgstr "Incorporato"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Cambia vista"
+
+#: 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"
@@ -2682,9 +2767,10 @@ 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"
+msgstr ""
+"Limite di tempo per il completamento di un comando, oltre cui mostrare un "
+"messaggio nella chat"
#: src/settings_translation_file.cpp
msgid "Chat commands"
@@ -2723,9 +2809,8 @@ msgid "Chat toggle key"
msgstr "Tasto di (dis)attivazione della chat"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat weblinks"
-msgstr "Chat visualizzata"
+msgstr "Collegamenti a siti Web nella chat"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2741,7 +2826,7 @@ msgstr "Tasto modalità cinematic"
#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
-msgstr "Pulizia delle texture trasparenti"
+msgstr "Pulizia delle textures trasparenti"
#: src/settings_translation_file.cpp
msgid ""
@@ -2772,6 +2857,11 @@ msgid "Client side node lookup range restriction"
msgstr "Restrizione dell'area di ricerca dei nodi su lato client"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Modifica del client"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Velocità di arrampicata"
@@ -2809,7 +2899,7 @@ msgid ""
"These flags are independent from Minetest versions,\n"
"so see a full list at https://content.minetest.net/help/content_flags/"
msgstr ""
-"Elenco di valori separato da virgole che si vuole nascondere dall'archivio "
+"Elenco di valori separato da virgole che si vuole nascondere dal deposito "
"dei contenuti.\n"
"\"nonfree\" può essere usato per nascondere pacchetti che non si "
"qualificano\n"
@@ -2843,36 +2933,30 @@ 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)"
+"Livello di compressione da utilizzare durante il salvataggio dei blocchi-"
+"mappa su disco.\n"
+"-1 - utilizza il livello di compressione predefinito\n"
+"0 - compressione minima, più veloce\n"
+"9 - compressione migliore, più lento"
#: 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)"
+"Livello di compressione da utilizzare per l'invio dei blocchi-mappa al "
+"client.\n"
+"-1 - utilizza il livello di compressione predefinito\n"
+"0 - compressione minima, più veloce\n"
+"9 - compressione migliore, più lento"
#: src/settings_translation_file.cpp
msgid "Connect glass"
@@ -2899,6 +2983,11 @@ msgid "Console height"
msgstr "Altezza della console"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "Deposito dei contenuti in linea"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "Contenuti esclusi da ContentDB"
@@ -2938,8 +3027,10 @@ msgstr ""
"72 = 20min, 360 = 4min, 1 = 24ore, 0 = giorno/notte/ecc. restano invariati."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Controlla la velocità di affondamento nei liquidi."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2974,13 +3065,12 @@ msgid "Crosshair alpha"
msgstr "Trasparenza del mirino"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"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"
+"Lo stesso si applica al mirino dell'oggetto."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -3015,12 +3105,12 @@ msgid "Debug log level"
msgstr "Livello del registro di debug"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Tasto dim. volume"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Decrementalo per aumentare la resistenza al movimento nel liquido."
+msgid "Dec. volume key"
+msgstr "Tasto dim. volume"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3180,6 +3270,11 @@ msgid "Desynchronize block animation"
msgstr "De-sincronizza l'animazione del blocco"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Decorazioni"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Tasto scava"
@@ -3200,6 +3295,12 @@ msgid "Display Density Scaling Factor"
msgstr "Fattore di Scala della densità del display"
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: 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."
@@ -3279,6 +3380,10 @@ msgid "Enable joysticks"
msgstr "Abilitare i joystick"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Abilita il supporto canali mod."
@@ -3297,18 +3402,6 @@ msgstr ""
"i test)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-msgstr "Abilita conferma registrazione"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
-msgstr ""
-"Abilita la conferma della registrazione quando ci si connette al server.\n"
-"Se disabilitata, i nuovi account saranno registrati automaticamente."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3317,6 +3410,10 @@ msgstr ""
"Disattivarla per velocizzare o per un aspetto diverso."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3341,7 +3438,7 @@ msgstr ""
"server).\n"
"I server remoti offrono un sistema significativamente più rapido per "
"scaricare\n"
-"contenuti multimediali (es. texture) quando ci si connette al server."
+"contenuti multimediali (es. textures) quando ci si connette al server."
#: src/settings_translation_file.cpp
msgid ""
@@ -3413,6 +3510,14 @@ 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 ""
+"Consente compromessi che riducono il carico della CPU o aumentano le "
+"prestazioni di rendering\n"
+"a scapito di piccoli difetti visivi che non influiscono sulla giocabilità."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "Profilo valli"
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -3441,6 +3546,10 @@ msgstr ""
"pianure più piatte, adatti a uno strato solido di terre fluttuanti."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "FPS quando il gioco è in pausa o in secondo piano"
@@ -3477,13 +3586,12 @@ msgid "Fast movement"
msgstr "Movimento rapido"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Movimento rapido (tramite il tasto \"speciale\").\n"
-"Richiede il privilegio \"fast\" sul server."
+"Movimento rapido (tramite il tasto \"Speciale\").\n"
+"Richiede il privilegio \"fast\" sul server di gioco."
#: src/settings_translation_file.cpp
msgid "Field of view"
@@ -3499,7 +3607,7 @@ msgid ""
"the\n"
"Multiplayer Tab."
msgstr ""
-"File in client/serverlist/ contenente i tuoi server preferiti mostrati "
+"File in client/serverlist/ contenente i vostri server preferiti mostrati "
"nella\n"
"scheda di gioco in rete."
@@ -3513,26 +3621,28 @@ msgstr "Profondità di rumore dello riempitore"
#: src/settings_translation_file.cpp
msgid "Filmic tone mapping"
-msgstr "Filmic tone mapping"
+msgstr "Mappatura del tono filmica"
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"Le texture a cui si applicano i filtri possono amalgamare i valori RGB con "
-"quelle vicine completamente trasparenti,\n"
-"che normalmente vengono scartati dagli ottimizzatori PNG, risultando a volte "
-"in texture trasparenti scure o\n"
-"dai bordi chiari. Applicare questo filtro aiuta a ripulire tutto ciò\n"
-"al momento del caricamento della texture."
+"Le textures a cui si applicano i filtri possono amalgamare i valori RGB con "
+"quelle vicine\n"
+"completamente trasparenti, che normalmente vengono scartati dagli "
+"ottimizzatori PNG, risultando\n"
+"spesso in bordi chiari o scuri per le textures trasparenti. Applicare un "
+"filtro per ripulire tutto ciò al\n"
+"caricamento delle texture. Viene attivato automaticamente se si abilita il "
+"mipmapping."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtraggio"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Anti-Scalettatura:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3601,6 +3711,11 @@ msgid "Fog toggle key"
msgstr "Tasto (dis)attivazione nebbia"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Dimensione del carattere"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Carattere grassetto per impostazione predefinita"
@@ -3622,17 +3737,19 @@ msgstr "Dimensione del carattere"
#: src/settings_translation_file.cpp
msgid "Font size divisible by"
-msgstr ""
+msgstr "Dimensione carattere divisibile per"
#: src/settings_translation_file.cpp
-#, 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)."
+msgstr ""
+"Dimensione carattere del carattere predefinito, dove 1 unità equivale ad 1 "
+"pixel a DPI 96"
#: src/settings_translation_file.cpp
-#, 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)."
+msgstr ""
+"Dimensione carattere del carattere a spaziatura fissa, dove 1 unità equivale "
+"ad 1 pixel a DPI 96"
#: src/settings_translation_file.cpp
msgid ""
@@ -3653,6 +3770,14 @@ msgid ""
"be\n"
"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
msgstr ""
+"Assicura che le grandezze utilizzate con questo carattere saranno sempre "
+"divisibili per questo\n"
+"valore, in pixel, in caso di caratteri in stile pixel che non vengono "
+"ridimensionati correttamente.\n"
+"Per esempio, un carattere pixelato alto 16 pixels richiederebbe che questo "
+"sia 16, così sarà sempre\n"
+"solo grande 16, 32, 48, etc., e una mod che richiede una grandezza di 25 "
+"otterrà 32."
#: src/settings_translation_file.cpp
msgid ""
@@ -3717,7 +3842,8 @@ msgstr "Tipo di frattale"
#: src/settings_translation_file.cpp
msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr ""
-"Frazione della distanza visibile alla quale si comincia a disegnare la nebbia"
+"Frazione della distanza visibile oltre cui si comincia a renderizzare la "
+"nebbia"
#: src/settings_translation_file.cpp
msgid ""
@@ -3771,21 +3897,33 @@ msgid "GUI scaling filter txr2img"
msgstr "Filtro di scala txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Giochi"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
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 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 "
+"Nel Mapgen v6 il valore 'decorations' controlla tutte le decorazioni eccetto "
"alberi\n"
-"ed erba della giungla, in tutti gli altri questa opzione controlla tutte le "
-"decorazioni."
+"ed erba della giungla, in tutti gli altri Mapgens questa opzione controlla "
+"tutte le decorazioni."
#: src/settings_translation_file.cpp
msgid ""
@@ -3808,6 +3946,16 @@ msgid "Graphics"
msgstr "Grafica"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Grafica"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Grafica"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Gravità"
@@ -3824,8 +3972,13 @@ msgid "HTTP mods"
msgstr "Moduli HTTP"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "Fattore di scala dell'HUD"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "Scala dell'interfaccia grafica"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -4080,19 +4233,28 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"Con quale velocità si muovono le onde dei liquidi. Più alto = più veloce.\n"
-"Se negativo, le onde dei liquidi si sposteranno all'indietro.\n"
-"Richiede l'abilitazione dei liquidi ondulanti."
+"A quale velocità si muovono le onde dei liquidi. Maggiore = più veloce.\n"
+"Se negativa, le onde dei liquidi si sposteranno all'indietro.\n"
+"Richiede l'abilitazione dei liquidi ondeggianti."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"Quanto aspetterà il server prima di scaricare i blocchi mappa inutilizzati.\n"
"Con un valore più alto sarà più fluido, ma userà più RAM."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "Decrementalo per aumentare la resistenza al movimento nel liquido."
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "Quanto fare larghi i fiumi."
@@ -4125,12 +4287,12 @@ msgstr ""
"per non sprecare la potenza della CPU senza alcun beneficio."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"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"
+"Se disabilitata, viene utilizzato il tasto \"Speciale\" per volare "
+"velocemente\n"
"se le modalità volo e corsa sono entrambe attive."
#: src/settings_translation_file.cpp
@@ -4160,15 +4322,23 @@ msgstr ""
"Richiede il privilegio \"noclip\" sul server."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"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 "
-"arrampicarsi e\n"
-"scendere."
+"Se abilitata, viene utilizzato il tasto \"Speciale\" invece di \"Furtivo\" "
+"per\n"
+"scendere e immergersi."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Abilita la conferma della registrazione quando ci si connette al server.\n"
+"Se disabilitata, i nuovi account saranno registrati automaticamente."
#: src/settings_translation_file.cpp
msgid ""
@@ -4200,7 +4370,10 @@ msgstr ""
"giocatore quando vola o nuota."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
"Se abilitata, i nuovi giocatori non possono accedere con una password vuota."
@@ -4255,10 +4428,6 @@ msgid "Ignore world errors"
msgstr "Ignorare gli errori del mondo"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "Nel gioco"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
"Trasparenza dello sfondo della console di chat nel gioco (opacità, tra 0 e "
@@ -4289,7 +4458,6 @@ msgstr ""
"Questo normalmente serve solo ai contributori principali"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Instrument chat commands on registration."
msgstr "Predisporre i comandi della chat alla registrazione."
@@ -4320,17 +4488,14 @@ msgid "Instrument the methods of entities on registration."
msgstr "Predisporre i metodi delle entità alla registrazione."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Predisposizione"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""
"Intervallo di salvataggio dei cambiamenti importanti nel mondo, fissato in "
"secondi."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "Intervallo di invio dell'ora del giorno ai client."
#: src/settings_translation_file.cpp
@@ -4387,9 +4552,8 @@ msgid "Joystick button repetition interval"
msgstr "Intervallo di ripetizione del pulsante del joystick"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick dead zone"
-msgstr "Deadzone joystick"
+msgstr "Punto cieco joystick"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -4451,19 +4615,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Julia w"
-msgstr "Julia w"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Julia x"
-msgstr "Julia x"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Julia y"
-msgstr "Julia y"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Julia z"
-msgstr "Julia z"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Jump key"
@@ -5192,6 +5356,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
"Allontana i giocatori che hanno inviato più di X messaggi in 10 secondi."
@@ -5250,10 +5418,11 @@ msgid "Left key"
msgstr "Tasto sin."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"Durata di uno scatto del server e intervallo con cui gli oggetti\n"
"sono aggiornati in generale sulla rete."
@@ -5267,20 +5436,27 @@ msgstr ""
"Richiede l'attivazione dei liquidi ondeggianti."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+#, fuzzy
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
"Durata di tempo tra i cicli di esecuzione dei modificatori dei blocchi "
"attivi (ABM)"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "Intervallo di tempo tra l'esecuzione dei cicli del NodeTimer"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "Durata di tempo tra cicli di gestione del blocco attivo"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5289,7 +5465,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Livello di registro da scriversi su debug.txt:\n"
"- <niente> (nessun registro)\n"
@@ -5325,6 +5502,11 @@ msgid "Light curve low gradient"
msgstr "Gradiente basso della curva di luce"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Illuminazione Uniforme"
+
+#: 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"
@@ -5431,7 +5613,7 @@ msgstr "Livello di compressione della mappa per il trasferimento in rete"
#: src/settings_translation_file.cpp
msgid "Map directory"
-msgstr "Cartella della mappa"
+msgstr "Indirizzo della mappa"
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen Carpathian."
@@ -5785,10 +5967,6 @@ msgid "Maximum users"
msgstr "Utenti massimi"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menu"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "Cache mesh"
@@ -5835,16 +6013,29 @@ msgstr "Dimensione minima della texture"
#: src/settings_translation_file.cpp
msgid "Mipmapping"
-msgstr "Mipmapping"
+msgstr "MIP mapping"
+
+#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "Generatore di profili"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Sicurezza"
#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "Canali mod"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Modifies the size of the HUD elements."
-msgstr "Modifica la dimensione degli elementi della barra dell'HUD."
+msgstr "Modifica la dimensione degli elementi dello HUD."
#: src/settings_translation_file.cpp
msgid "Monospace font path"
@@ -5855,9 +6046,8 @@ 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"
+msgstr "Dimensione del carattere a spaziatura fissa divisibile per"
#: src/settings_translation_file.cpp
msgid "Mountain height noise"
@@ -5938,10 +6128,6 @@ msgid "Near plane"
msgstr "Piano vicino"
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Rete"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
@@ -5950,6 +6136,11 @@ msgstr ""
"Questo valore verrà scavalcato quando si avvia dal menu principale."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "Rete"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "I nuovi utenti devono immettere questa password."
@@ -5962,6 +6153,11 @@ msgid "Noclip key"
msgstr "Tasto incorporeo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Evidenziatura dei Nodi"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Evidenziamento nodo"
@@ -6017,10 +6213,6 @@ msgstr ""
"consumo di memoria (4096 = 100MB, come regola generale)."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Deposito dei contenuti in linea"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "Liquidi opachi"
@@ -6044,17 +6236,12 @@ 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. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
-"Percorso del carattere di riserva.\n"
-"Se l'impostazione \"freetype\" è abilitata: deve essere un carattere "
-"TrueType.\n"
-"Se l'impostazione \"freetype\" è disabilitata: deve essere un carattere "
-"bitmap o XML vettoriale.\n"
+"Percorso del carattere di riserva. Deve essere un carattere TrueType.\n"
"Questo carattere verrà utilizzato per alcune lingue o se il carattere "
"predefinito non è disponibile."
@@ -6072,40 +6259,31 @@ msgid ""
"Path to shader directory. If no path is defined, default location will be "
"used."
msgstr ""
-"Percorso della cartella degli shader. Se non se ne stabilisce nessuno, verrà "
+"Percorso dell'indirizzo degli shader. Se non se ne stabilisce nessuno, verrà "
"usato quello predefinito."
#: src/settings_translation_file.cpp
msgid "Path to texture directory. All textures are first searched from here."
msgstr ""
-"Percorso della cartella contenente le texture. Tutte le texture vengono "
+"Percorso dell'indirizzo contenente le textures. Tutte le textures vengono "
"cercate a partire da qui."
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"Percorso del carattere predefinito.\n"
-"Se l'impostazione \"freetype\" è abilitata: deve essere un carattere "
-"TrueType.\n"
-"Se l'impostazione \"freetype\" è disabilitata: deve essere un carattere "
-"bitmap o XML vettoriale.\n"
+"Percorso del carattere predefinito. Deve essere un carattere TrueType.\n"
"Il carattere di riserva verrà utilizzato se il carattere non può essere "
"caricato."
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"Percorso del carattere a spaziatura fissa.\n"
-"Se l'impostazione \"freetype\" è abilitata: deve essere un carattere "
+"Percorso del carattere a spaziatura fissa. Deve essere un carattere "
"TrueType.\n"
-"Se l'impostazione \"freetype\" è disabilitata: deve essere un carattere "
-"bitmap o XML vettoriale.\n"
"Questo carattere viene utilizzato ad es. per la console e lo schermo del "
"profilatore."
@@ -6150,10 +6328,6 @@ msgstr ""
"Ciò richiede il privilegio \"fly\" sul server."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Nome del giocatore"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "Distanza di trasferimento del giocatore"
@@ -6211,15 +6385,10 @@ msgid "Profiler toggle key"
msgstr "Tasto di (dis)attivazione del generatore di profili"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Generazione di profili"
-
-#: src/settings_translation_file.cpp
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"
@@ -6227,7 +6396,7 @@ msgid ""
"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"
+"Se Minetest viene compilato con l'opzione ENABLE_PROMETHEUS attivata,\n"
"abilita il listener delle statistiche per Prometheus su quell'indirizzo.\n"
"Le statistiche possono essere recuperate su http://127.0.0.1:30000/metrics"
@@ -6414,6 +6583,11 @@ msgstr ""
"quando le immagini sono ridimensionate per valori frazionari."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Schermo:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Altezza dello schermo"
@@ -6444,6 +6618,11 @@ msgstr ""
"Usa 0 per la qualità predefinita."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Screenshot"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Rumore del fondale marino"
@@ -6458,10 +6637,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Secondo di due rumori 3D che assieme definiscono le gallerie."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Sicurezza"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Si veda http://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6520,8 +6695,19 @@ msgstr ""
"18 = 4D Serie Julia \"Mandelbulb\"."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Server / Gioco locale"
+#, fuzzy
+msgid "Server"
+msgstr "URL del server"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Nome del server"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Descrizione del Server"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6548,10 +6734,20 @@ msgid "Server side occlusion culling"
msgstr "Occlusion culling su lato server"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Porta del Server"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "URL dell'elenco dei server"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "URL dell'elenco dei server"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "File dell'elenco dei server"
@@ -6564,14 +6760,18 @@ msgstr ""
"Dopo avere modificato questa impostazione è necessario il riavvio."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
"Imposta la lunghezza massima di caratteri di un messaggio di chat inviato "
"dai client."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
"Imposta l'intensità dell'ombra.\n"
@@ -6579,10 +6779,11 @@ msgstr ""
"ombre scure."
#: 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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
"Imposta la dimensione del raggio delle ombre morbide.\n"
"Valori bassi significano ombre nitide, valori alti significano ombre "
@@ -6684,7 +6885,8 @@ msgstr ""
"allora l'ombra non sarà disegnata."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+#, fuzzy
+msgid "Shadow strength gamma"
msgstr "Intensità dell'ombra"
#: src/settings_translation_file.cpp
@@ -6708,9 +6910,8 @@ msgstr ""
"È necessario riavviare dopo aver cambiato questo."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Show name tag backgrounds by default"
-msgstr "Mostra lo sfondo del nome per impostazione predefinita"
+msgstr "Mostra lo sfondo dell'etichetta del nome per impostazione predefinita"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6745,7 +6946,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Sky Body Orbit Tilt"
-msgstr ""
+msgstr "Inclinazione dell'orbita di un corpo celeste"
#: src/settings_translation_file.cpp
msgid "Slice w"
@@ -6939,6 +7140,11 @@ msgid "Temperature variation for biomes."
msgstr "Variazione di temperatura per i biomi."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Impostazioni"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "Rumore alternativo del terreno"
@@ -7005,7 +7211,7 @@ msgid ""
"this option allows enforcing it for certain node types. Note though that\n"
"that is considered EXPERIMENTAL and may not work properly."
msgstr ""
-"Le texture su un nodo possono essere allineate sia al nodo che al mondo.\n"
+"Le textures su un nodo possono essere allineate sia al nodo che al mondo.\n"
"Il primo modo si addice meglio a cose come macchine, arredamento, ecc.,\n"
"mentre il secondo fa sì che scale e microblocchi si adattino meglio ai "
"dintorni.\n"
@@ -7019,9 +7225,8 @@ msgid "The URL for the content repository"
msgstr "L'URL per il deposito dei contenuti"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The dead zone of the joystick"
-msgstr "La deadzone del joystick"
+msgstr "Il punto cieco del joystick"
#: src/settings_translation_file.cpp
msgid ""
@@ -7066,7 +7271,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
-msgstr "L'interfaccia di rete sulla quale il server ascolta."
+msgstr "Su quale interfaccia di rete sarà in ascolto il server."
#: src/settings_translation_file.cpp
msgid ""
@@ -7113,13 +7318,12 @@ msgstr ""
"(sperimentale)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
"in-game view frustum around."
msgstr ""
"La sensibilità degli assi del joystick per spostare\n"
-"il campo visivo durante il gioco."
+"il campo visivo nel gioco."
#: src/settings_translation_file.cpp
msgid ""
@@ -7183,10 +7387,10 @@ msgid ""
"enabled. Also the vertical distance over which humidity drops by 10 if\n"
"'altitude_dry' is enabled."
msgstr ""
-"La distanza verticale alla quale il calore crolla di 20 se \"altitude_chill"
-"\"\n"
-"è abilitata. È anche la distanza verticale su cui l'umidità crolla di 10\n"
-"se \"altitude_dry\" è abilitata."
+"La distanza verticale oltre la quale il calore diminuisce di 20 se "
+"\"altitude_chill\"\n"
+"è abilitata. Rappresenta anche la distanza verticale oltre cui l'umidità\n"
+"diminuisce di 10 se \"altitude_dry\" è abilitata."
#: src/settings_translation_file.cpp
msgid "Third of 4 2D noises that together define hill/mountain range height."
@@ -7217,7 +7421,8 @@ msgid "Time speed"
msgstr "Velocità del tempo"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
"Scadenza per il client per rimuovere dalla memoria dati mappa inutilizzati."
@@ -7246,7 +7451,16 @@ msgid "Touch screen threshold"
msgstr "Soglia del touch screen"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Soglia del touch screen"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
+msgstr "Compromessi per migliorare le prestazioni"
+
+#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
msgstr ""
#: src/settings_translation_file.cpp
@@ -7322,24 +7536,24 @@ msgstr "Usare un'animazione con le nuvole per lo sfondo del menu principale."
#: src/settings_translation_file.cpp
msgid "Use anisotropic filtering when viewing at textures from an angle."
msgstr ""
-"Usare il filtraggio anisotropico quando si guardano le texture da "
+"Usare il filtraggio anisotropico quando si guardano le textures da "
"un'angolazione."
#: src/settings_translation_file.cpp
msgid "Use bilinear filtering when scaling textures."
-msgstr "Usare il filtraggio bilineare quando si ridimensionano le texture."
+msgstr "Usare il filtraggio bilineare quando si ridimensionano le textures."
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"Usare il mip mapping per ridimensionare le texture. Potrebbe aumentare "
+"Usare il mipmapping per ridimensionare le textures. Potrebbe aumentare "
"leggermente le prestazioni,\n"
-"specialmente quando si usa un pacchetto texture ad alta risoluzione.\n"
-"La correzione gamma del downscaling non è supportata."
+"specialmente quando si utilizza un pacchetto di texture ad alta "
+"risoluzione.\n"
+"Il ridimensionamento mediante downscaling gamma-corretto non è supportato."
#: src/settings_translation_file.cpp
msgid ""
@@ -7355,7 +7569,7 @@ msgstr ""
"blocco.\n"
"Questo algoritmo uniforma la visualizzazione 3D mantenendo l'immagine "
"nitida,\n"
-"ma non influenza l'interno delle texture\n"
+"ma non influenza l'interno delle textures\n"
"(che è particolarmente evidente con trame trasparenti).\n"
"Gli spazi visibili appaiono tra i nodi quando gli shader sono disabilitati.\n"
"Se impostato a 0, MSAA è disabilitato.\n"
@@ -7363,7 +7577,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
-msgstr "Usare il filtraggio trilineare quando si ridimensionano le texture."
+msgstr "Usare il filtraggio trilineare quando si ridimensionano le textures."
+
+#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "VBO"
@@ -7463,9 +7681,8 @@ msgid "Viewing range"
msgstr "Raggio visivo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Virtual joystick triggers Aux1 button"
-msgstr "Il joystick virtuale attiva il pulsante aux"
+msgstr "Il joystick virtuale aziona il pulsante \"Speciale\""
#: src/settings_translation_file.cpp
msgid "Volume"
@@ -7568,7 +7785,7 @@ msgstr ""
"Quando gui_scaling_filter_txr2img è Vero, copia quelle immagini\n"
"dall'hardware al software per il ridimensionamento. Quando è Falso,\n"
"ripiega sul vecchio metodo di ridimensionamento, per i driver video che\n"
-"non supportano correttamente lo scaricamento delle texture dall'hardware."
+"non supportano correttamente lo scaricamento delle textures dall'hardware."
#: src/settings_translation_file.cpp
msgid ""
@@ -7581,29 +7798,29 @@ msgid ""
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
-"Quando si usano i filtri bilineare/trilineare/anisotropico, le texture a "
-"bassa risoluzione\n"
-"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 "
-"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. 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."
+"Quando si usano i filtri bilineare/trilineare/anisotropico, le textures a "
+"bassa risoluzione possono\n"
+"essere sfocate, così viene eseguito l'ingrandimento automatico con "
+"l'interpolazione\n"
+"nearest-neighbor per conservare la chiarezza dei pixels. Questa opzione "
+"imposta la dimensione\n"
+"minima per le textures ingrandite; valori superiori permettono un aspetto "
+"più nitido, ma richiedono\n"
+"più memoria. Sono raccomandate le potenze di 2. Questa impostazione si "
+"attiva SOLO SE il filtraggio\n"
+"bilineare/trilineare/anisotropico è abilitato.\n"
+"Viene anche utilizzata come dimensione di base delle texturesdei nodi per "
+"l'auto-ridimensionamento\n"
+"delle textures con allineamento relativo al mondo."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"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"
-"I moderatori possono comunque impostare uno sfondo."
+"Se lo sfondo dell'etichetta del nome debba essere mostrato per impostazione "
+"predefinita.\n"
+"Le mod possono comunque impostare uno sfondo."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -7629,7 +7846,7 @@ msgid ""
"Set this to true if your server is set up to restart automatically."
msgstr ""
"Se chiedere ai client di riconnettersi dopo un crash (Lua).\n"
-"Impostala su Vero se il tuo server è impostato per riavviarsi "
+"Impostatela su Vero se il vostro server è configurato per riavviarsi "
"automaticamente."
#: src/settings_translation_file.cpp
@@ -7651,6 +7868,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
"Se mostrare le informazioni di debug del client (ha lo stesso effetto di "
@@ -7681,7 +7907,7 @@ msgid ""
"World directory (everything in the world is stored here).\n"
"Not needed if starting from the main menu."
msgstr ""
-"Cartella del mondo (ogni cosa nel mondo viene immagazzinata qui).\n"
+"Indirizzo del mondo (ogni cosa nel mondo viene immagazzinata qui).\n"
"Non necessaria se si avvia dal menu principale."
#: src/settings_translation_file.cpp
@@ -7697,19 +7923,19 @@ msgid ""
"See also texture_min_size.\n"
"Warning: This option is EXPERIMENTAL!"
msgstr ""
-"Le texture allineate al mondo possono essere ridimensionate per estendersi "
+"Le textures allineate al mondo possono essere ridimensionate per estendersi "
"su diversi nodi.\n"
-"Comunque, il server potrebbe non inviare la scala che vuoi, specialmente se "
-"usi un pacchetto texture\n"
-"progettato specificamente; con questa opzione, il client prova a stabilire "
-"automaticamente la scala\n"
-"basandosi sulla dimensione della texture.\n"
+"Tuttavia, il server potrebbe non inviare le dimensioni desiderate, "
+"specialmente se è in uso un\n"
+"pacchetto texture progettato in modo specifico; con questa opzione, il "
+"client prova a stabilire\n"
+"automaticamente le dimensioni basandosi sulla grandezza della texture.\n"
"Si veda anche texture_min_size.\n"
"Avviso: questa opzione è SPERIMENTALE!"
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
-msgstr "Modalità texture allineate al mondo"
+msgstr "Modalità delle textures allineate al mondo"
#: src/settings_translation_file.cpp
msgid "Y of flat ground."
@@ -7766,13 +7992,16 @@ msgid "Y-level of seabed."
msgstr "Livello Y del fondale marino."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: 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"
+msgstr "Scadenza interattiva cURL"
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
@@ -7815,6 +8044,9 @@ msgstr "Limite parallelo cURL"
#~ msgid "Back"
#~ msgstr "Indietro"
+#~ msgid "Basic"
+#~ msgstr "Base"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Bit per pixel (o profondità di colore) in modalità schermo intero."
@@ -7848,6 +8080,12 @@ msgstr "Limite parallelo cURL"
#~ msgid "Configure"
#~ msgstr "Configura"
+#~ msgid "Connect"
+#~ msgstr "Connettiti"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Controlla la velocità di affondamento nei liquidi."
+
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value."
@@ -7894,6 +8132,9 @@ msgstr "Limite parallelo cURL"
#~ "Stabilisce il passo di campionamento della texture.\n"
#~ "Un valore maggiore dà normalmap più uniformi."
+#~ msgid "Del. Favorite"
+#~ msgstr "Elimina il Preferito"
+
#~ msgid ""
#~ "Deprecated, define and locate cave liquids using biome definitions "
#~ "instead.\n"
@@ -7903,12 +8144,21 @@ msgstr "Limite parallelo cURL"
#~ "posizionare le caverne di liquido.\n"
#~ "Limite verticale della lava nelle caverne grandi."
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Scarica un gioco, come Minetest Game, da minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Scaricane uno da minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Scaricamento e installazione di $1, attendere prego..."
#~ msgid "Enable VBO"
#~ msgstr "Abilitare i VBO"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Abilita conferma registrazione"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7936,6 +8186,9 @@ msgstr "Limite parallelo cURL"
#~ "Attiva la parallax occlusion mapping.\n"
#~ "Necessita l'attivazione degli shader."
+#~ msgid "Enter "
+#~ msgstr "Inserisci "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7955,6 +8208,9 @@ msgstr "Limite parallelo cURL"
#~ msgid "Fallback font size"
#~ msgstr "Dimensione del carattere di ripiego"
+#~ msgid "Filtering"
+#~ msgstr "Filtraggio"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Rumore base dell'altezza delle terre fluttuanti"
@@ -7973,6 +8229,9 @@ msgstr "Limite parallelo cURL"
#~ msgid "Full screen BPP"
#~ msgstr "BPP dello schermo intero"
+#~ msgid "Game"
+#~ msgstr "Gioco"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7982,15 +8241,30 @@ msgstr "Limite parallelo cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Generare le normalmap"
+#~ msgid "HUD scale factor"
+#~ msgstr "Fattore di scala dell'HUD"
+
#~ msgid "High-precision FPU"
#~ msgstr "FPU ad alta precisione"
#~ msgid "IPv6 support."
#~ msgstr "Supporto IPv6."
+#~ msgid "In-Game"
+#~ msgstr "Nel gioco"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Install: File: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Predisposizione"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Associamenti tasti. (Se questo menu si incasina, togli roba da minetest."
+#~ "conf)"
+
#~ msgid "Lava depth"
#~ msgstr "Profondità della lava"
@@ -8009,6 +8283,9 @@ msgstr "Limite parallelo cURL"
#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
#~ msgstr "Fa lavorare DirectX con LuaJIT. Disabilitare se provoca problemi."
+#~ msgid "Menus"
+#~ msgstr "Menu"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Minimappa in modalità radar, ingrandimento x2"
@@ -8083,6 +8360,12 @@ msgstr "Limite parallelo cURL"
#~ msgid "Path to save screenshots at."
#~ msgstr "Percorso dove salvare le schermate."
+#~ msgid "Player name"
+#~ msgstr "Nome del giocatore"
+
+#~ msgid "Profiling"
+#~ msgstr "Generazione di profili"
+
#~ msgid "Projecting dungeons"
#~ msgstr "Sotterranei protundenti"
@@ -8095,6 +8378,9 @@ msgstr "Limite parallelo cURL"
#~ msgid "Select Package File:"
#~ msgstr "Seleziona pacchetto file:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Server / Gioco locale"
+
#~ msgid "Shadow limit"
#~ msgstr "Limite dell'ombra"
@@ -8175,6 +8461,21 @@ msgstr "Limite parallelo cURL"
#~ msgid "Yes"
#~ msgstr "Sì"
+#, 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 ""
+#~ "Stai per accedere a questo server col nome \"%s\" per la prima volta. \n"
+#~ "Se prosegui, su questo server sarà creato un nuovo account usando le tue "
+#~ "credenziali.\n"
+#~ "Per favore reinserisci la tua password e premi Registrati e accedi per "
+#~ "confermare la creazione dell'account, o premi Annulla per interrompere."
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "Sei morto"
diff --git a/po/ja/minetest.po b/po/ja/minetest.po
index 722f8a728..bb80f775a 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: 2022-01-25 23:19+0100\n"
-"PO-Revision-Date: 2022-01-29 21:28+0000\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-31 17: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,7 @@ 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.11-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -114,6 +114,34 @@ msgid "The server has requested a reconnect:"
msgstr "サーãƒãƒ¼ãŒå†æŽ¥ç¶šã‚’è¦æ±‚ã—ã¾ã—ãŸï¼š"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr "æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ $1 ãŒåˆ©ç”¨å¯èƒ½"
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr "クライアントMOD"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+"インストール済ã¿ãƒãƒ¼ã‚¸ãƒ§ãƒ³: $1\n"
+"æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³: $2\n"
+"$3 ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã€æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’入手ã—ã€æ©Ÿèƒ½ã¨ãƒã‚°ä¿®æ­£ã‚’最新ã®çŠ¶æ…‹ã«ä¿ã¤æ–¹"
+"法を確èªã—ã¦ãã ã•ã„。"
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr "ã‚ã¨ã§"
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr "ã—ãªã„"
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "プロトコルã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒä¸€è‡´ã—ã¦ã„ã¾ã›ã‚“。 "
@@ -126,6 +154,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "サーãƒãƒ¼ã¯$1ã‹ã‚‰$2ã¾ã§ã®ãƒ—ロトコルã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚ "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr "ウェブサイトを見る"
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "プロトコルã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³$1ã®ã¿ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚"
@@ -133,21 +165,28 @@ msgstr "プロトコルã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³$1ã®ã¿ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã
msgid "We support protocol versions between version $1 and $2."
msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³$1ã‹ã‚‰$2ã¾ã§ã®ãƒ—ロトコルをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr "(有効ã€ã‚¨ãƒ©ãƒ¼ã‚り)"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: 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 "ä¾å­˜Mod:"
+msgstr "ä¾å­˜MOD:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
@@ -155,7 +194,7 @@ msgstr "ã™ã¹ã¦ç„¡åŠ¹åŒ–"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "Modパック無効化"
+msgstr "MODパック無効化"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
@@ -163,27 +202,26 @@ msgstr "ã™ã¹ã¦æœ‰åŠ¹åŒ–"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "Modパック有効化"
+msgstr "MODパック有効化"
#: 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 ""
-"許å¯ã•れã¦ã„ãªã„文字ãŒå«ã¾ã‚Œã¦ã„ã‚‹ãŸã‚ã€Mod \"$1\" を有効ã«ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+msgstr "許å¯ã•れã¦ã„ãªã„文字ãŒå«ã¾ã‚Œã¦ã„ã‚‹ãŸã‚ã€MOD \"$1\" を有効ã«ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
"許å¯ã•れる文字㯠[a-z0-9_] ã®ã¿ã§ã™ã€‚"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr "ä»–ã®Modを探ã™"
+msgstr "ä»–ã®MODを探ã™"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
-msgstr "Mod:"
+msgstr "MOD:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr "(任æ„)ä¾å­˜Modãªã—"
+msgstr "(ä»»æ„) ä¾å­˜MODãªã—"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
@@ -191,19 +229,19 @@ msgstr "ゲームã®èª¬æ˜ŽãŒã‚りã¾ã›ã‚“。"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr "å¿…é ˆä¾å­˜Modãªã—"
+msgstr "å¿…é ˆä¾å­˜MODãªã—"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "Modパックã®èª¬æ˜ŽãŒã‚りã¾ã›ã‚“。"
+msgstr "MODパックã®èª¬æ˜ŽãŒã‚りã¾ã›ã‚“。"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
-msgstr "ä»»æ„ä¾å­˜Modãªã—"
+msgstr "ä»»æ„ä¾å­˜MODãªã—"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
-msgstr "ä»»æ„ä¾å­˜Mod:"
+msgstr "ä»»æ„ä¾å­˜MOD:"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
@@ -224,7 +262,7 @@ msgstr "「$1ã€ã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™ã€‚上書ãã—ã¾ã™ã‹ï¼Ÿ"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr "$1 ã¨ä¾å­˜Mod $2 ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚"
+msgstr "$1 ã¨ä¾å­˜MOD $2 ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
@@ -244,11 +282,11 @@ msgstr "$1 ダウンロード中..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr "$1 ã¤ã®å¿…è¦ãªä¾å­˜ModãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
+msgstr "$1 ã¤ã®å¿…è¦ãªä¾å­˜MODãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr "$1 ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã€ä¾å­˜Mod $2 ã¯ã‚¹ã‚­ãƒƒãƒ—ã•れã¾ã™ã€‚"
+msgstr "$1 ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã€ä¾å­˜MOD $2 ã¯ã‚¹ã‚­ãƒƒãƒ—ã•れã¾ã™ã€‚"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
@@ -279,7 +317,6 @@ msgid "Failed to download $1"
msgstr "$1ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã«å¤±æ•—"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "ゲーム"
@@ -293,16 +330,15 @@ msgstr "$1 ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install missing dependencies"
-msgstr "ä¸è¶³ä¾å­˜Modインストール"
+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"
+msgstr "MOD"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
@@ -393,12 +429,8 @@ msgid "Decorations"
msgstr "デコレーション"
#: builtin/mainmenu/dlg_create_world.lua
-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ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦ãã ã•ã„"
+msgid "Development Test is meant for developers."
+msgstr "Development Testã¯é–‹ç™ºè€…用ã§ã™ã€‚"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -414,11 +446,7 @@ 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 "ゲーム"
+msgstr "æµ®éŠå¤§é™¸ (実験的)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
@@ -437,6 +465,14 @@ msgid "Increases humidity around rivers"
msgstr "å·å‘¨è¾ºã®æ¹¿åº¦ã‚’上ã’ã‚‹"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr "ゲームをインストール"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr "ã»ã‹ã®ã‚²ãƒ¼ãƒ ã‚’インストール"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "æ¹–"
@@ -501,8 +537,7 @@ msgstr "ãƒã‚¤ã‚ªãƒ¼ãƒ é–“ã®å††æ»‘ãªç§»è¡Œ"
msgid ""
"Structures appearing on the terrain (no effect on trees and jungle grass "
"created by v6)"
-msgstr ""
-"地形上ã«ç¾ã‚Œã‚‹æ§‹é€ ç‰©ï¼ˆv6ã«ã‚ˆã£ã¦ç”Ÿæˆã•ã‚ŒãŸæœ¨ã‚„ジャングルã®è‰ã«å½±éŸ¿ãªã—)"
+msgstr "地形上ã«ç¾ã‚Œã‚‹æ§‹é€ ç‰© (v6ã«ã‚ˆã£ã¦ç”Ÿæˆã•ã‚ŒãŸæœ¨ã‚„ジャングルã®è‰ã«å½±éŸ¿ãªã—)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Structures appearing on the terrain, typically trees and plants"
@@ -537,10 +572,6 @@ 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 "警告: The Development Testã¯é–‹ç™ºè€…用ã§ã™ã€‚"
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "ワールドå"
@@ -570,21 +601,50 @@ msgstr "pkgmgr: パス\"$1\"ã¯ç„¡åй"
msgid "Delete World \"$1\"?"
msgstr "ワールド「$1ã€ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "パスワードã®ç¢ºèª"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr "$1 ã«å‚加ã™ã‚‹"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr "åå‰ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "åå‰"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "パスワード"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr "パスワードãŒä¸€è‡´ã—ãªã„"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr "登録"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "決定"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Modパックåを変更:"
+msgstr "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パックã¯ã€modpack.conf ã«æ˜Žç¤ºçš„ãªåå‰ãŒä»˜ã‘られã¦ãŠã‚Šã€ã“ã“ã§ã®åå‰å¤‰"
-"æ›´ã‚’ã™ã¹ã¦ä¸Šæ›¸ãã—ã¾ã™ã€‚"
+msgstr "ã“ã®MODパックã¯ã€modpack.conf "
+"ã«æ˜Žç¤ºçš„ãªåå‰ãŒä»˜ã‘られã¦ãŠã‚Šã€ã“ã“ã§ã®åå‰å¤‰æ›´ã‚’ã™ã¹ã¦ä¸Šæ›¸ãã—ã¾ã™ã€‚"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
@@ -602,6 +662,14 @@ msgstr "< è¨­å®šãƒšãƒ¼ã‚¸ã«æˆ»ã‚‹"
msgid "Browse"
msgstr "å‚ç…§"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr "コンテンツ: ゲーム"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr "コンテンツ: MOD"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "無効"
@@ -658,7 +726,7 @@ msgstr "ディレクトリã®é¸æŠž"
msgid "Select file"
msgstr "ファイルã®é¸æŠž"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "技術å称を表示"
@@ -723,7 +791,7 @@ msgstr "$1 (有効)"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
-msgstr "$1 Mod"
+msgstr "$1 MOD"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
@@ -731,15 +799,15 @@ msgstr "$2ã¸$1をインストールã§ãã¾ã›ã‚“ã§ã—ãŸ"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr "Modインストール: 実際ã®ModåãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: $1"
+msgstr "MODインストール: 実際ã®MODåãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
-msgstr "Modインストール: Modパック $1 ã«é©ã—ãŸãƒ•ォルダåãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
+msgstr "MODインストール: MODパック $1 ã«é©ã—ãŸãƒ•ォルダåãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr "有効ãªModã¾ãŸã¯ModパックãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
+msgstr "有効ãªMODã¾ãŸã¯MODパックãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
@@ -751,11 +819,11 @@ msgstr "ゲームを$1ã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a mod as a $1"
-msgstr "Modã‚’$1ã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
+msgstr "MODã‚’$1ã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a modpack as a $1"
-msgstr "Modパックを$1ã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
+msgstr "MODパックを$1ã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
msgid "Loading..."
@@ -794,7 +862,7 @@ msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
-"ファイルマãƒãƒ¼ã‚¸ãƒ£ãƒ¼/エクスプローラーã§ã€ãƒ¯ãƒ¼ãƒ«ãƒ‰ã€ã‚²ãƒ¼ãƒ ã€Modã€\n"
+"ファイルマãƒãƒ¼ã‚¸ãƒ£ãƒ¼/エクスプローラーã§ã€ãƒ¯ãƒ¼ãƒ«ãƒ‰ã€ã‚²ãƒ¼ãƒ ã€MODã€\n"
"ãŠã‚ˆã³ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ‘ックをå«ã‚€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’é–‹ãã¾ã™ã€‚"
#: builtin/mainmenu/tab_about.lua
@@ -805,6 +873,10 @@ msgstr "以å‰ã®è²¢çŒ®è€…"
msgid "Previous Core Developers"
msgstr "以å‰ã®é–‹ç™ºè€…"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr "デãƒãƒƒã‚°ãƒ­ã‚°ã‚’共有"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "オンラインコンテンツå‚ç…§"
@@ -827,7 +899,7 @@ msgstr "インストール済ã¿ã®ãƒ‘ッケージ:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
-msgstr "ä¾å­˜Modãªã—。"
+msgstr "ä¾å­˜MODãªã—。"
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
@@ -873,10 +945,6 @@ msgstr "ホストサーãƒãƒ¼"
msgid "Install games from ContentDB"
msgstr "コンテンツDBã‹ã‚‰ã‚²ãƒ¼ãƒ ã‚’インストール"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "åå‰"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "æ–°è¦ä½œæˆ"
@@ -885,10 +953,6 @@ msgstr "æ–°è¦ä½œæˆ"
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 "ゲームプレイ"
@@ -899,7 +963,7 @@ msgstr "ãƒãƒ¼ãƒˆ"
#: builtin/mainmenu/tab_local.lua
msgid "Select Mods"
-msgstr "Modã‚’é¸æŠž"
+msgstr "MODã‚’é¸æŠž"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -922,10 +986,6 @@ msgid "Clear"
msgstr "Clear"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "接続"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "クリエイティブモード"
@@ -935,10 +995,6 @@ msgid "Damage / PvP"
msgstr "ダメージ / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "ãŠæ°—ã«å…¥ã‚Šå‰Šé™¤"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "ãŠæ°—ã«å…¥ã‚Š"
@@ -951,6 +1007,10 @@ msgid "Join Game"
msgstr "ゲームã«å‚加"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr "ログイン"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "応答速度"
@@ -963,10 +1023,18 @@ msgid "Refresh"
msgstr "å†èª­è¾¼"
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’削除"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "サーãƒãƒ¼ã®èª¬æ˜Ž"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr "(ゲームサãƒãƒ¼ãƒˆå¿…é ˆ)"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2å€"
@@ -1011,8 +1079,8 @@ msgid "Dynamic shadows"
msgstr "å‹•çš„ãªå½±"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr "å‹•çš„ãªå½±ï¼š "
+msgid "Dynamic shadows:"
+msgstr "å‹•çš„ãªå½±:"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1084,7 +1152,7 @@ msgstr "シェーダー"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (experimental)"
-msgstr "シェーダー(実験的)"
+msgstr "シェーダー (実験的)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1107,16 +1175,16 @@ msgid "Tone Mapping"
msgstr "トーンマッピング"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr "タッãƒã®ã—ãã„値: (px)"
+msgid "Touch threshold (px):"
+msgstr "タッãƒã®ã—ãã„値 (px):"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
msgstr "トライリニアフィルタ"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
-msgstr "è¶…å¼·ã"
+msgid "Very High"
+msgstr "ã¨ã¦ã‚‚å¼·ã"
#: builtin/mainmenu/tab_settings.lua
msgid "Very Low"
@@ -1134,6 +1202,10 @@ msgstr "æºã‚Œã‚‹æ¶²ä½“"
msgid "Waving Plants"
msgstr "æºã‚Œã‚‹è‰èб"
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr "接続ãŒä¸­æ–­ã•れã¾ã—㟠(プロトコル エラー?)。"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "接続ãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸã€‚"
@@ -1269,8 +1341,8 @@ msgid "Camera update enabled"
msgstr "カメラ更新 有効"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
-msgstr "ブロック境界線を表示ã§ãã¾ã›ã‚“ ('basic_debug' 特権ãŒå¿…è¦ã§ã™)"
+msgid "Can't show block bounds (disabled by mod or game)"
+msgstr "ブロック境界を表示ã§ããªã„ (MODやゲームã§ç„¡åŠ¹åŒ–ã•れã¦ã„ã‚‹)"
#: src/client/game.cpp
msgid "Change Password"
@@ -1399,6 +1471,11 @@ msgid "Enabled unlimited viewing range"
msgstr "è¦–é‡Žç„¡åˆ¶é™ æœ‰åŠ¹"
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr "クライアント作æˆä¸­ã«ã‚¨ãƒ©ãƒ¼: %s"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "メインメニュー"
@@ -1468,7 +1545,7 @@ msgstr "MiB/ç§’"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr "ミニマップã¯ç¾åœ¨ã‚²ãƒ¼ãƒ ã¾ãŸã¯Modã«ã‚ˆã‚Šç„¡åй"
+msgstr "ミニマップã¯ç¾åœ¨ã‚²ãƒ¼ãƒ ã¾ãŸã¯MODã«ã‚ˆã‚Šç„¡åй"
#: src/client/game.cpp
msgid "Multiplayer"
@@ -1587,7 +1664,7 @@ msgstr "ワイヤーフレーム 表示"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr "ズームã¯ç¾åœ¨ã‚²ãƒ¼ãƒ ã¾ãŸã¯Modã«ã‚ˆã‚Šç„¡åй"
+msgstr "ズームã¯ç¾åœ¨ã‚²ãƒ¼ãƒ ã¾ãŸã¯MODã«ã‚ˆã‚Šç„¡åй"
#: src/client/game.cpp
msgid "ok"
@@ -1652,7 +1729,7 @@ msgstr "Execute"
#: src/client/keycode.cpp
msgid "Help"
-msgstr "Help"
+msgstr "ヘルプ"
#: src/client/keycode.cpp
msgid "Home"
@@ -1672,7 +1749,7 @@ msgstr "Esc"
#: src/client/keycode.cpp
msgid "IME Mode Change"
-msgstr "IME Mode Change"
+msgstr "IMEモード変更"
#: src/client/keycode.cpp
msgid "IME Nonconvert"
@@ -1903,30 +1980,6 @@ msgstr "ウェブページを開ã‘ã¾ã›ã‚“ã§ã—ãŸ"
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 ""
-"ã‚ãªãŸã¯ã“ã®ã‚µãƒ¼ãƒ ーã«åå‰ \"%s\" ã§ã¯ã˜ã‚ã¦å‚加ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚\n"
-"続行ã™ã‚‹å ´åˆã€ã‚ãªãŸã®æƒ…å ±ãŒæ–°ã—ã„アカウントã¨ã—ã¦ã“ã®ã‚µãƒ¼ãƒãƒ¼ã«ä½œæˆã•れã¾"
-"ã™ã€‚\n"
-"ã‚ãªãŸã®ãƒ‘スワードをå†å…¥åŠ›ã—ã¦ã‹ã‚‰ 'å‚加登録' をクリックã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆä½œæˆã™"
-"ã‚‹ã‹ã€\n"
-"キャンセルをクリックã—ã¦ä¸­æ–­ã—ã¦ãã ã•ã„。"
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "決定"
@@ -1959,7 +2012,7 @@ msgstr "ブロック境界線表示切替"
msgid "Change camera"
msgstr "視点変更"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "ãƒãƒ£ãƒƒãƒˆ"
@@ -2012,10 +2065,8 @@ msgid "Key already in use"
msgstr "キーãŒé‡è¤‡ã—ã¦ã„ã¾ã™"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"キー設定ã§ã™ã€‚ (ã“ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§å¤±æ•—ã™ã‚‹å ´åˆã¯ minetest.conf ã‹ã‚‰è©²å½“ã™ã‚‹è¨­å®šã‚’"
-"削除ã—ã¦ãã ã•ã„)"
+msgid "Keybindings."
+msgstr "キーãƒã‚¤ãƒ³ãƒ‰ã€‚"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2086,10 +2137,6 @@ msgid "Change"
msgstr "変更"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "パスワードã®ç¢ºèª"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "æ–°ã—ã„パスワード"
@@ -2097,6 +2144,10 @@ msgstr "æ–°ã—ã„パスワード"
msgid "Old Password"
msgstr "å¤ã„パスワード"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“ï¼"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "é–‰ã˜ã‚‹"
@@ -2110,12 +2161,6 @@ msgstr "消音"
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 "エンター "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2123,6 +2168,16 @@ msgstr "エンター "
msgid "LANG_CODE"
msgstr "ja"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr "åå‰ãŒç™»éŒ²ã•れã¦ã„ã¾ã›ã‚“。ã“ã®ã‚µãƒ¼ãƒãƒ¼ã«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’作æˆã™ã‚‹ã«ã¯ã€Œç™»éŒ²ã€ã‚’ク"
+"リック。"
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr "åå‰ã¯ä½¿ã‚れã¦ã„ã¾ã™ã€‚ä»–ã®åå‰ã«å¤‰ãˆã¦ãã ã•ã„"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2152,8 +2207,8 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-"(X,Y,Z)ワールドã®ä¸­å¿ƒã‹ã‚‰ã®ãƒ•ラクタルã®ã€Œã‚¹ã‚±ãƒ¼ãƒ«ã€å˜ä½ã®ã‚ªãƒ•セット。\n"
-"目的ã®ãƒã‚¤ãƒ³ãƒˆã‚’(0,0)ã«ç§»å‹•ã—ã¦é©åˆ‡ãªã‚¹ãƒãƒ¼ãƒ³ãƒã‚¤ãƒ³ãƒˆã‚’作æˆã—ãŸã‚Šã€\n"
+"(X,Y,Z) ワールドã®ä¸­å¿ƒã‹ã‚‰ã®ãƒ•ラクタルã®ã€Œã‚¹ã‚±ãƒ¼ãƒ«ã€å˜ä½ã®ã‚ªãƒ•セット。\n"
+"目的ã®ãƒã‚¤ãƒ³ãƒˆã‚’ (0,0) ã«ç§»å‹•ã—ã¦é©åˆ‡ãªã‚¹ãƒãƒ¼ãƒ³ãƒã‚¤ãƒ³ãƒˆã‚’作æˆã—ãŸã‚Šã€\n"
"「スケールã€ã‚’増やã—ã¦ç›®çš„ã®ãƒã‚¤ãƒ³ãƒˆã«ã€Œã‚ºãƒ¼ãƒ ã‚¤ãƒ³ã€ã—ãŸã‚Šã™ã‚‹ãŸã‚ã«\n"
"使用ã§ãã¾ã™ã€‚\n"
"既定ã®ãƒ‘ラメータを使用ã—ã¦ãƒžãƒ³ãƒ‡ãƒ«ãƒ–ロ集åˆã®é©åˆ‡ãªã‚¹ãƒãƒ¼ãƒ³ãƒã‚¤ãƒ³ãƒˆã«\n"
@@ -2238,7 +2293,7 @@ msgid ""
"a value range of approximately -2.0 to 2.0."
msgstr ""
"æµ®éŠå¤§é™¸ã®æ§‹é€ ã‚’定義ã™ã‚‹3Dノイズ。\n"
-"既定ã‹ã‚‰å¤‰æ›´ã™ã‚‹ã¨ã€ãƒŽã‚¤ã‚ºã®ã€Œã‚¹ã‚±ãƒ¼ãƒ«ã€ï¼ˆè¦å®šã§ã¯ 0.7)ã®èª¿æ•´ãŒ\n"
+"既定ã‹ã‚‰å¤‰æ›´ã™ã‚‹ã¨ã€ãƒŽã‚¤ã‚ºã®ã€Œã‚¹ã‚±ãƒ¼ãƒ«ã€ (è¦å®šã§ã¯ 0.7) ã®èª¿æ•´ãŒ\n"
"å¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã€ã“ã®ãƒŽã‚¤ã‚ºã®å€¤ã®ç¯„囲ã¯ç´„ -2.0 ~ 2.0 ã§\n"
"æµ®éŠå¤§é™¸ã®å…ˆç´°ã‚ŠãŒæœ€ã‚‚è‰¯ãæ©Ÿèƒ½ã—ã¾ã™ã€‚"
@@ -2283,6 +2338,10 @@ msgstr ""
"interlacedã¯ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãŒæœ‰åйã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。"
#: src/settings_translation_file.cpp
+msgid "3d"
+msgstr "3D"
+
+#: 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."
@@ -2320,7 +2379,7 @@ msgstr "é‡åŠ›åŠ é€Ÿåº¦ã€1ç§’ã‚ãŸã‚Šã®ãƒŽãƒ¼ãƒ‰æ•°/ç§’ã§ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
-msgstr "アクティブブロックモディファイヤー(ABM)"
+msgstr "アクティブブロックモディファイヤー (ABM)"
#: src/settings_translation_file.cpp
msgid "Active block management interval"
@@ -2372,8 +2431,12 @@ msgstr ""
"æµ®éŠå¤§é™¸å±¤ã®å¯†åº¦ã‚’調整ã—ã¾ã™ã€‚\n"
"密度を高ã‚ã‚‹ãŸã‚ã«å€¤ã‚’増やã—ã¾ã™ã€‚æ­£ã¾ãŸã¯è² ã®å€¤ã‚’指定ã§ãã¾ã™ã€‚\n"
"値 = 0.0: 50% ãŒæµ®éŠå¤§é™¸ã§ã™ã€‚\n"
-"値 = 2.0('mgv7_np_floatland' ã«ã‚ˆã£ã¦é«˜ããªã‚‹å ´åˆãŒã‚りã¾ã™ã€å¸¸ã«\n"
-"念ã®ãŸã‚テスト)浮éŠå¤§é™¸å±¤ã‚’密ã«ä½œæˆã—ã¾ã™ã€‚"
+"値 = 2.0 ('mgv7_np_floatland' ã«ã‚ˆã£ã¦é«˜ããªã‚‹å ´åˆãŒã‚りã¾ã™ã€å¸¸ã«\n"
+"念ã®ãŸã‚テスト) æµ®éŠå¤§é™¸å±¤ã‚’密ã«ä½œæˆã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr "管ç†è€…å"
#: src/settings_translation_file.cpp
msgid "Advanced"
@@ -2394,8 +2457,8 @@ msgstr ""
"自然ãªå¤œã®å…‰ã«ã¯ã»ã¨ã‚“ã©å½±éŸ¿ã‚’与ãˆã¾ã›ã‚“。"
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
-msgstr "飛行時ã«åŠ é€Ÿã™ã‚‹"
+msgid "Always fly fast"
+msgstr "常ã«é«˜é€Ÿã§é£›è¡Œ"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
@@ -2473,6 +2536,10 @@ msgstr ""
"マップブロック(16ノード)ã§è¡¨è¨˜ã€‚"
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr "オーディオ"
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "自動å‰é€²ã‚­ãƒ¼"
@@ -2513,10 +2580,6 @@ msgid "Base terrain height."
msgstr "基準地形ã®é«˜ã•。"
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "基本"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "基本的ãªç‰¹æ¨©"
@@ -2537,8 +2600,8 @@ msgid "Bind address"
msgstr "ãƒã‚¤ãƒ³ãƒ‰ã‚¢ãƒ‰ãƒ¬ã‚¹"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
-msgstr "ãƒã‚¤ã‚ªãƒ¼ãƒ APIã®æ¸©åº¦ã¨æ¹¿åº¦ã®ãƒŽã‚¤ã‚ºãƒ‘ラメータ"
+msgid "Biome API noise parameters"
+msgstr "ãƒã‚¤ã‚ªãƒ¼ãƒ APIã®ãƒŽã‚¤ã‚ºãƒ‘ラメータ"
#: src/settings_translation_file.cpp
msgid "Biome noise"
@@ -2549,6 +2612,10 @@ msgid "Block send optimize distance"
msgstr "ブロックé€ä¿¡æœ€é©åŒ–è·é›¢"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr "ä¸Šä¸‹ã®æºã‚Œ"
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "å¤ªå­—ã¨æ–œä½“ã®ãƒ•ォントã®ãƒ‘ス"
@@ -2573,6 +2640,10 @@ msgid "Builtin"
msgstr "ビルトイン"
#: src/settings_translation_file.cpp
+msgid "Camera"
+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"
@@ -2713,9 +2784,8 @@ msgstr "テクスãƒãƒ£ã®é€éŽã‚’削除"
msgid ""
"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
"output."
-msgstr ""
-"ãƒãƒ£ãƒƒãƒˆã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã®å‡ºåŠ›ã§ã€ã‚¯ãƒªãƒƒã‚¯å¯èƒ½ãªã‚¦ã‚§ãƒ–リンク(中クリックã¾ãŸã¯Ctrl"
-"+左クリック)を有効ã«ãªã‚Šã¾ã™ã€‚"
+msgstr "ãƒãƒ£ãƒƒãƒˆã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã®å‡ºåŠ›ã§ã€ã‚¯ãƒªãƒƒã‚¯å¯èƒ½ãªã‚¦ã‚§ãƒ–リンク "
+"(中クリックã¾ãŸã¯Ctrl+左クリック) を有効ã«ãªã‚Šã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Client"
@@ -2738,6 +2808,10 @@ msgid "Client side node lookup range restriction"
msgstr "クライアントå´ã®ãƒŽãƒ¼ãƒ‰å‚照範囲ã®åˆ¶é™"
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr "クライアントå´ã®æ”¹é€ "
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "上る速度"
@@ -2796,9 +2870,9 @@ 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 ""
-"Modã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãŒæœ‰åйã®å ´åˆã§ã‚‚ (request_insecure_environment() \n"
+"MODã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãŒæœ‰åйã®å ´åˆã§ã‚‚ (request_insecure_environment() \n"
"を介ã—ã¦) 安全ã§ãªã„機能ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒè¨±å¯ã•れã¦ã„ã‚‹ä¿¡é ¼ã§ãã‚‹\n"
-"Modã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒªã‚¹ãƒˆã€‚"
+"MODã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒªã‚¹ãƒˆã€‚"
#: src/settings_translation_file.cpp
msgid "Command key"
@@ -2853,6 +2927,10 @@ msgid "Console height"
msgstr "コンソールã®é«˜ã•"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr "コンテンツリãƒã‚¸ãƒˆãƒª"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "コンテンツDBフラグã®ãƒ–ラックリスト"
@@ -2891,8 +2969,12 @@ msgstr ""
"72 = 20分ã€360 = 4分ã€1 = 24時間ã€0 = 昼/夜/変更ã•れã¾ã›ã‚“。"
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "æ¶²ä½“ä¸­ã®æ²ˆé™é€Ÿåº¦ã‚’制御ã—ã¾ã™ã€‚"
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
+"ã‚¢ã‚¤ãƒ‰ãƒªãƒ³ã‚°æ™‚ã®æ¶²ä½“中沈下速度を制御ã—ã¾ã™ã€‚è² ã®å€¤ã¯\n"
+"代ã‚ã‚Šã«æµ®ä¸Šã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2929,7 +3011,7 @@ msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"This also applies to the object crosshair."
msgstr ""
-"å字カーソルã®é€éŽåº¦ï¼ˆä¸é€æ˜Žã€0~255ã®é–“)。\n"
+"å字カーソルã®é€éŽåº¦ (ä¸é€æ˜Žã€0~255ã®é–“)。\n"
"ã“れã¯ã‚ªãƒ–ジェクトã®å字カーソルã«ã‚‚é©ç”¨ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -2941,7 +3023,7 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
-"å字カーソルã®è‰²ï¼ˆR,G,B)。\n"
+"å字カーソルã®è‰² (R,G,B)。\n"
"オブジェクトå字カーソルã®è‰²ã‚‚制御"
#: src/settings_translation_file.cpp
@@ -2965,12 +3047,12 @@ msgid "Debug log level"
msgstr "デãƒãƒƒã‚°ãƒ­ã‚°ã®ãƒ¬ãƒ™ãƒ«"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "音é‡ã‚’下ã’るキー"
+msgid "Debugging"
+msgstr "デãƒãƒƒã‚°"
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "ã“ã®å€¤ã‚’å°ã•ãã™ã‚‹ã¨ã€ç§»å‹•æ™‚ã®æ¶²ä½“抵抗ãŒå¢—加ã—ã¾ã™ã€‚"
+msgid "Dec. volume key"
+msgstr "音é‡ã‚’下ã’るキー"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3076,7 +3158,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 ""
-"クライアント上ã®ãƒ¡ãƒƒã‚·ãƒ¥æ›´æ–°é–“ã®é…延(ミリ秒)。ã“れを大ããã™ã‚‹ã¨\n"
+"クライアント上ã®ãƒ¡ãƒƒã‚·ãƒ¥æ›´æ–°é–“ã®é…å»¶ (ミリ秒)。ã“れを大ããã™ã‚‹ã¨\n"
"ãƒ¡ãƒƒã‚·ãƒ¥ã®æ›´æ–°é€Ÿåº¦ãŒé…ããªã‚Šã€ä½Žé€Ÿã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚¸ãƒƒã‚¿ãŒæ¸›å°‘ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -3122,6 +3204,10 @@ msgid "Desynchronize block animation"
msgstr "ブロックã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã®éžåŒæœŸåŒ–"
#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr "開発者å‘ã‘オプション"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "掘削キー"
@@ -3142,6 +3228,14 @@ msgid "Display Density Scaling Factor"
msgstr "ディスプレイ密度スケーリング係数"
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+"逿˜Žåº¦ã®æ·±ã•ã®ä¸¦ã¹æ›¿ãˆãŒæœ‰åйã«ãªã£ã¦ã„るノードã®è·é›¢\n"
+"ã“れを使用ã—ã¦ã€é€æ˜Žåº¦ã®æ·±ã•ã®ä¸¦ã¹æ›¿ãˆã«ã‚ˆã‚‹ãƒ‘フォーマンスã¸ã®å½±éŸ¿ã‚’制é™"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "サーãƒãƒ¼ä¸€è¦§ã«è¡¨ç¤ºã•れるサーãƒãƒ¼ã®ãƒ‰ãƒ¡ã‚¤ãƒ³å。"
@@ -3178,7 +3272,7 @@ msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
-"IPv6サãƒãƒ¼ãƒˆã‚’有効ã«ã—ã¾ã™ï¼ˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨ã‚µãƒ¼ãƒãƒ¼ã®ä¸¡æ–¹ã«å¯¾ã—ã¦ï¼‰ã€‚\n"
+"IPv6サãƒãƒ¼ãƒˆã‚’有効ã«ã—ã¾ã™ (クライアントã¨ã‚µãƒ¼ãƒãƒ¼ã®ä¸¡æ–¹ã«å¯¾ã—ã¦)。\n"
"機能ã™ã‚‹ãŸã‚ã«ã¯IPv6接続ãŒå¿…è¦ã§ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -3220,12 +3314,16 @@ msgid "Enable joysticks"
msgstr "ジョイスティック作動"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr "ジョイスティックを有効ã«ã—ã¾ã™ã€‚変更ã«ã¯å†èµ·å‹•ãŒå¿…è¦"
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
-msgstr "Modãƒãƒ£ãƒ³ãƒãƒ«ã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã—ã¾ã™ã€‚"
+msgstr "MODãƒãƒ£ãƒ³ãƒãƒ«ã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Enable mod security"
-msgstr "Modã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚’有効化"
+msgstr "MODã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚’有効化"
#: src/settings_translation_file.cpp
msgid "Enable players getting damage and dying."
@@ -3236,18 +3334,6 @@ 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 ""
-"サーãƒãƒ¼ã¸ã®æŽ¥ç¶šæ™‚ã«ç™»éŒ²ç¢ºèªã‚’有効ã«ã—ã¾ã™ã€‚\n"
-"無効ã«ã™ã‚‹ã¨ã€æ–°ã—ã„アカウントãŒè‡ªå‹•çš„ã«ç™»éŒ²ã•れã¾ã™ã€‚"
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3256,6 +3342,10 @@ msgstr ""
"速度や異ãªã‚‹è¦‹ãŸç›®ã®ãŸã‚ã«ç„¡åйã«ã—ã¦ãã ã•ã„。"
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3348,7 +3438,12 @@ msgid ""
"at the expense of minor visual glitches that do not impact game playability."
msgstr ""
"ゲームã®ãƒ—レイアビリティã«å½±éŸ¿ã‚’与ãˆãªã„å°ã•ãªè¦–覚的ãªä¸å…·åˆã‚’犠牲ã«ã—ã¦\n"
-"CPUè² è·ã‚’軽減ã™ã‚‹ã‹ã€ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ãƒ‘フォーマンスをå‘上ã•ã›ã‚‹ãƒˆãƒ¬ãƒ¼ãƒ‰ã‚ªãƒ•を有効ã«ã—ã¾ã™ã€‚"
+"CPUè² è·ã‚’軽減ã™ã‚‹ã‹ã€ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ãƒ‘フォーマンスをå‘上ã•ã›ã‚‹ãƒˆãƒ¬ãƒ¼ãƒ‰ã‚ªãƒ•を有効"
+"ã«ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr "エンジンã®è¦³æ¸¬è¨˜éŒ²"
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -3371,10 +3466,14 @@ msgstr ""
"値 = 1.0ã¯ã€å‡ä¸€ã§ç·šå½¢ãªå…ˆç´°ã‚Šã‚’作æˆã—ã¾ã™ã€‚\n"
"値 > 1.0ã¯ã€è¦å®šã®åˆ†é›¢ã•ã‚ŒãŸæµ®éŠå¤§é™¸ã«é©ã—ãŸæ»‘らã‹ãªå…ˆç´°ã‚Šã‚’\n"
"作æˆã—ã¾ã™ã€‚\n"
-"値 < 1.0(例 0.25)ã¯ã€ã‚ˆã‚Šæ˜Žç¢ºãªè¡¨é¢ãƒ¬ãƒ™ãƒ«ã§å¹³å¦ãªä½Žåœ°ã‚’\n"
+"値 < 1.0 (例 0.25) ã¯ã€ã‚ˆã‚Šæ˜Žç¢ºãªè¡¨é¢ãƒ¬ãƒ™ãƒ«ã§å¹³å¦ãªä½Žåœ°ã‚’\n"
"作æˆã—ã€å¯†ãªæµ®éŠå¤§é™¸å±¤ã«é©ã—ã¦ã„ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr "FPS"
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã¾ãŸã¯ãƒãƒ¼ã‚ºãƒ¡ãƒ‹ãƒ¥ãƒ¼è¡¨ç¤ºä¸­ã®FPS"
@@ -3461,8 +3560,8 @@ msgstr ""
"ã“れã¯ãƒŸãƒƒãƒ—ãƒžãƒƒãƒ”ãƒ³ã‚°ãŒæœ‰åйãªå ´åˆã«è‡ªå‹•çš„ã«æœ‰åйã«ãªã‚Šã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "フィルタリング"
+msgid "Filtering and Antialiasing"
+msgstr "フィルタリングã¨ã‚¢ãƒ³ãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3529,6 +3628,10 @@ msgid "Fog toggle key"
msgstr "霧表示切り替ãˆã‚­ãƒ¼"
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr "フォント"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "既定ã§å¤ªå­—ã®ãƒ•ォント"
@@ -3565,7 +3668,7 @@ msgid ""
"Font size of the recent chat text and chat prompt in point (pt).\n"
"Value 0 will use the default font size."
msgstr ""
-"最近ã®ãƒãƒ£ãƒƒãƒˆãƒ†ã‚­ã‚¹ãƒˆã¨ãƒãƒ£ãƒƒãƒˆãƒ—ロンプトã®ãƒ•ォントサイズ(ãƒã‚¤ãƒ³ãƒˆï¼‰ã€‚\n"
+"最近ã®ãƒãƒ£ãƒƒãƒˆãƒ†ã‚­ã‚¹ãƒˆã¨ãƒãƒ£ãƒƒãƒˆãƒ—ロンプトã®ãƒ•ォントサイズ (pt)。\n"
"値 0 ã¯è¦å®šã®ãƒ•ォントサイズを使用ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -3579,8 +3682,10 @@ msgid ""
"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"
+"使用ã•れるフォントサイズã¯ã€å¸¸ã«ã“ã®å€¤ã§å‰²ã‚Šåˆ‡ã‚Œã¾ã™ã€‚例ãˆã°é«˜ã•16ピクセル"
+"ã®\n"
+"ピクセルフォントã®å ´åˆã€ã“ã®å€¤ã‚’16ã«è¨­å®šã™ã‚‹ã¨ã€16ã€32ã€48ãªã©ã®ã‚µã‚¤ã‚ºã«ã—"
+"ã‹\n"
"ãªã‚Šã¾ã›ã‚“ã®ã§ã€25ã®ã‚µã‚¤ã‚ºã‚’è¦æ±‚ã—ãŸMODã¯32ã‚’å–å¾—ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -3669,12 +3774,12 @@ msgid ""
"player is looking. (This can avoid mobs suddenly disappearing from view)"
msgstr ""
"クライアントãŒã©ã‚Œãらã„ã®è·é›¢ã®ã‚ªãƒ–ジェクトを知ã£ã¦ã„ã‚‹ã‹ã€\n"
-"マップブロック(16ノード)ã§å®šã‚ã¾ã™ã€‚\n"
+"マップブロック (16ノード) ã§å®šã‚ã¾ã™ã€‚\n"
"\n"
"ã“れを active_block_range よりも大ãã設定ã™ã‚‹ã¨ã€ã‚µãƒ¼ãƒãƒ¼ã¯\n"
"ã“ã®è·é›¢ã¾ã§ãƒ—レーヤーãŒè¦‹ã¦ã„ã‚‹æ–¹å‘ã«\n"
-"アクティブãªã‚ªãƒ–ジェクトを維æŒã—ã¾ã™ã€‚(ã“れã«ã‚ˆã‚Šãƒ¢ãƒ–ãŒçªç„¶\n"
-"視野ã‹ã‚‰æ¶ˆãˆã‚‹ã®ã‚’é¿ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼‰"
+"アクティブãªã‚ªãƒ–ジェクトを維æŒã—ã¾ã™ã€‚(ã“れã«ã‚ˆã‚Šãƒ¢ãƒ–ãŒçªç„¶\n"
+"視野ã‹ã‚‰æ¶ˆãˆã‚‹ã®ã‚’é¿ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™)"
#: src/settings_translation_file.cpp
msgid "Full screen"
@@ -3697,6 +3802,18 @@ msgid "GUI scaling filter txr2img"
msgstr "GUI拡大縮å°ãƒ•ィルタ txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr "GUI"
+
+#: src/settings_translation_file.cpp
+msgid "Gamepads"
+msgstr "ゲームパッド"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "一般"
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "グローãƒãƒ«ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯"
@@ -3732,6 +3849,14 @@ msgid "Graphics"
msgstr "グラフィック"
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr "グラフィック効果"
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr "グラフィックã¨ã‚ªãƒ¼ãƒ‡ã‚£ã‚ª"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "é‡åŠ›"
@@ -3745,11 +3870,15 @@ msgstr "地上ノイズ"
#: src/settings_translation_file.cpp
msgid "HTTP mods"
-msgstr "HTTP Mod"
+msgstr "HTTP MOD"
+
+#: src/settings_translation_file.cpp
+msgid "HUD"
+msgstr "HUD"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "HUDã®å€çއ"
+msgid "HUD scaling"
+msgstr "HUDã®ã‚µã‚¤ã‚º"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -3764,8 +3893,8 @@ msgid ""
msgstr ""
"éžæŽ¨å¥¨ã® Lua API 呼ã³å‡ºã—ã®å‡¦ç†ï¼š\n"
"- none: éžæŽ¨å¥¨ã®å‘¼ã³å‡ºã—を記録ã—ãªã„\n"
-"- log: éžæŽ¨å¥¨ã®å‘¼ã³å‡ºã—ã®ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’模倣ã—ã¦è¨˜éŒ²ã—ã¾ã™ï¼ˆæ—¢å®šå€¤ï¼‰ã€‚\n"
-"- error: éžæŽ¨å¥¨ã®å‘¼ã³å‡ºã—ã®ä½¿ç”¨ã‚’中止ã—ã¾ã™ï¼ˆModé–‹ç™ºè€…ã«æŽ¨å¥¨ï¼‰ã€‚"
+"- log: éžæŽ¨å¥¨ã®å‘¼ã³å‡ºã—ã®ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’模倣ã—ã¦è¨˜éŒ²ã—ã¾ã™ (既定値)。\n"
+"- error: éžæŽ¨å¥¨ã®å‘¼ã³å‡ºã—ã®ä½¿ç”¨ã‚’中止ã—ã¾ã™ (MODé–‹ç™ºè€…ã«æŽ¨å¥¨)。"
#: src/settings_translation_file.cpp
msgid ""
@@ -4006,13 +4135,23 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
-"未使用ã®ãƒžãƒƒãƒ—ブロックを破棄ã™ã‚‹ã¾ã§ã«ã‚µãƒ¼ãƒãƒ¼ãŒå¾…機ã™ã‚‹é‡ã€‚\n"
+"未使用ã®ãƒžãƒƒãƒ—ブロックをアンロードã™ã‚‹ã¾ã§ã«ã‚µãƒ¼ãƒãƒ¼ãŒå¾…機ã™ã‚‹æ™‚é–“ã‚’ç§’å˜ä½ã§"
+"定ã‚ã¾ã™ã€‚\n"
"値ãŒå¤§ãã„ã»ã©æ»‘らã‹ã«ãªã‚Šã¾ã™ãŒã€ã‚ˆã‚Šå¤šãã®RAMãŒä½¿ç”¨ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+"液体ã®ä¸­ã‚’移動ã™ã‚‹ã¨ãã«ã€ã©ã‚Œãらã„速度を低下ã•ã›ã‚‹ã‹ã§ã™ã€‚\n"
+"ã“れをå°ã•ãã™ã‚‹ã¨ã€æ¶²ä½“ã®å‹•ãã«å¯¾ã™ã‚‹æŠµæŠ—ãŒå¤§ãããªã‚Šã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "å·ã‚’作る幅。"
@@ -4086,6 +4225,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"有効ã«ã—ãŸå ´åˆã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆç™»éŒ²ã¯ãƒ­ã‚°ã‚¤ãƒ³ã¨ã¯åˆ¥ã«ãªã‚Šã¾ã™ã€‚\n"
+"無効ã«ã—ãŸå ´åˆã€æ–°ã—ã„アカウントã¯ãƒ­ã‚°ã‚¤ãƒ³æ™‚ã«è‡ªå‹•çš„ã«ç™»éŒ²ã•れã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -4112,10 +4259,11 @@ msgid ""
msgstr "有効ã«ã™ã‚‹ã¨ã€é£›è¡Œä¸­ã¾ãŸã¯æ°´æ³³ä¸­ã«ãƒ—レーヤーã®ãƒ”ãƒƒãƒæ–¹å‘ã«ç§»å‹•ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
-msgstr ""
-"有効ã«ã—ãŸå ´åˆã€æ–°ã—ã„プレイヤーã¯ç©ºã®ãƒ‘スワードã§ã‚²ãƒ¼ãƒ ã«å‚加ã™ã‚‹\n"
-"ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
+msgstr "有効ã«ã™ã‚‹ã¨ã€ãƒ—レーヤーã¯ãƒ‘スワードãªã—ã§å‚加ã—ãŸã‚Šã€ç©ºã®ãƒ‘スワードã«å¤‰æ›´ã™"
+"ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
#: src/settings_translation_file.cpp
msgid ""
@@ -4141,8 +4289,8 @@ 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"
-"ãƒãƒ£ãƒƒãƒˆã‚³ãƒžãƒ³ãƒ‰ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«æ™‚é–“ã®æƒ…報を追加ã—ã¾ã™ã€‚"
+"ãƒãƒ£ãƒƒãƒˆã‚³ãƒžãƒ³ãƒ‰ã®å®Ÿè¡ŒãŒã€ã“ã®æŒ‡å®šã•ã‚ŒãŸæ™‚é–“ (ç§’) よりも長ãã‹ã‹ã‚‹å ´åˆã¯\n"
+"ãƒãƒ£ãƒƒãƒˆã‚³ãƒžãƒ³ãƒ‰ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«æ™‚é–“ã®æƒ…報を追加"
#: src/settings_translation_file.cpp
msgid ""
@@ -4165,10 +4313,6 @@ 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 "ゲーム内ãƒãƒ£ãƒƒãƒˆã‚³ãƒ³ã‚½ãƒ¼ãƒ«èƒŒæ™¯ã®é€éŽ (ä¸é€æ˜Žã€0~255ã®é–“)。"
@@ -4212,14 +4356,14 @@ msgstr ""
msgid ""
"Instrument the action function of Active Block Modifiers on registration."
msgstr ""
-"アクティブブロックモディファイヤー(ABM)ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³é–¢æ•°ãŒ\n"
+"アクティブブロックモディファイヤー (ABM) ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³é–¢æ•°ãŒ\n"
"登録ã•れるã¨ã™ãã«è¨ˆæ¸¬ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
"Instrument the action function of Loading Block Modifiers on registration."
msgstr ""
-"ローディングブロックモディファイヤー(LBM)ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³é–¢æ•°ãŒ\n"
+"ローディングブロックモディファイヤー (LBM) ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³é–¢æ•°ãŒ\n"
"登録ã•れるã¨ã™ãã«è¨ˆæ¸¬ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -4227,16 +4371,12 @@ 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 "ワールドã§é‡è¦ãªå¤‰åŒ–ã‚’ä¿å­˜ã™ã‚‹ç§’å˜ä½ã®é–“隔。"
+msgstr "ワールドã§é‡è¦ãªå¤‰åŒ–ã‚’ä¿å­˜ã™ã‚‹é–“隔を秒å˜ä½ã§å®šã‚ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
-msgstr "ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«æ™‚刻をé€ä¿¡ã™ã‚‹é–“隔。"
+msgid "Interval of sending time of day to clients, stated in seconds."
+msgstr "ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«æ™‚刻をé€ä¿¡ã™ã‚‹é–“隔を秒å˜ä½ã§å®šã‚ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
@@ -5093,6 +5233,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr "キーボードã¨ãƒžã‚¦ã‚¹"
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr "10ç§’ã‚ãŸã‚Šã«Xメッセージ以上é€ä¿¡ã—ãŸãƒ—レイヤーをキックã—ã¾ã™ã€‚"
@@ -5152,9 +5296,10 @@ msgstr "左キー"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
-"サーãƒãƒ¼ãŒæ™‚を刻む間隔ã¨ã‚ªãƒ–ジェクトãŒé€šå¸¸ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã§æ›´æ–°ã•れる間隔。"
+"サーãƒãƒ¼ãŒæ™‚を刻む間隔ã¨ã‚ªãƒ–ジェクトãŒé€šå¸¸ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã§æ›´æ–°ã•れる間隔を\n"
+"ç§’å˜ä½ã§å®šã‚ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -5165,16 +5310,20 @@ msgstr ""
"æºã‚Œã‚‹æ¶²ä½“ を有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
-msgstr "アクティブブロックモディファイヤー(ABMï¼‰å®Ÿè¡Œã‚µã‚¤ã‚¯ãƒ«é–“ã®æ™‚é–“ã®é•·ã•"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
+msgstr "アクティブブロックモディファイヤー (ABM) "
+"å®Ÿè¡Œã‚µã‚¤ã‚¯ãƒ«é–“ã®æ™‚é–“ã®é•·ã•ã‚’ç§’å˜ä½ã§å®šã‚ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
-msgstr "ãƒŽãƒ¼ãƒ‰ã‚¿ã‚¤ãƒžãƒ¼å®Ÿè¡Œã‚µã‚¤ã‚¯ãƒ«é–“ã®æ™‚é–“ã®é•·ã•"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
+msgstr "ãƒŽãƒ¼ãƒ‰ã‚¿ã‚¤ãƒžãƒ¼å®Ÿè¡Œã‚µã‚¤ã‚¯ãƒ«é–“ã®æ™‚é–“ã®é•·ã•ã‚’ç§’å˜ä½ã§å®šã‚ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
-msgstr "アクティブãªãƒ–ロックã®ç®¡ç†ã‚µã‚¤ã‚¯ãƒ«é–“ã®æ™‚é–“ã®é•·ã•"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
+msgstr "アクティブãªãƒ–ロック管ç†ã‚µã‚¤ã‚¯ãƒ«é–“ã®æ™‚é–“ã®é•·ã•ã‚’ç§’å˜ä½ã§å®šã‚ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -5185,16 +5334,18 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
-"debug.txt ã«æ›¸ãè¾¼ã¾ã‚Œã‚‹ãƒ­ã‚°è¨˜éŒ²ã®ãƒ¬ãƒ™ãƒ«:\n"
-"- <nothing> (ログ記録ãªã—)\n"
+"debug.txt ã«æ›¸ãè¾¼ã¾ã‚Œã‚‹ãƒ­ã‚°ã®ãƒ¬ãƒ™ãƒ«:\n"
+"- <nothing> (ログãªã—)\n"
"- none (レベルãŒãªã„メッセージ)\n"
"- error\n"
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
#: src/settings_translation_file.cpp
msgid "Light curve boost"
@@ -5221,6 +5372,10 @@ msgid "Light curve low gradient"
msgstr "光度曲線ã®ä½Žå‹¾é…"
#: src/settings_translation_file.cpp
+msgid "Lighting"
+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"
@@ -5241,7 +5396,7 @@ msgstr ""
"並列HTTPãƒªã‚¯ã‚¨ã‚¹ãƒˆã®æ•°ã‚’制é™ã—ã¾ã™ã€‚影響:\n"
"- サーãƒãƒ¼ãŒ remote_media 設定を使用ã—ã¦ã„ã‚‹å ´åˆã¯ãƒ¡ãƒ‡ã‚£ã‚¢ã®å–得。\n"
"- サーãƒãƒ¼ä¸€è¦§ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã¨ã‚µãƒ¼ãƒã®å…¬é–‹ã€‚\n"
-"- メインメニューã§å®Ÿè¡Œã•れãŸãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ï¼ˆä¾‹ãˆã°ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„)。\n"
+"- メインメニューã§å®Ÿè¡Œã•れãŸãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ (例ãˆã°ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„)。\n"
"cURLã§ã‚³ãƒ³ãƒ‘イルã•れãŸå ´åˆã«ã®ã¿åŠ¹æžœãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -5284,11 +5439,11 @@ msgid ""
msgstr ""
"ゲームã®è¦³æ¸¬è¨˜éŒ²ã‚’読ã¿è¾¼ã‚“ã§ã€ã‚²ãƒ¼ãƒ ã®è¦³æ¸¬ãƒ‡ãƒ¼ã‚¿ã‚’åŽé›†ã—ã¾ã™ã€‚\n"
"集ã‚られãŸè¦³æ¸¬è¨˜éŒ²ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã® /profiler コマンドをæä¾›ã—ã¾ã™ã€‚\n"
-"Mod開発者やサーãƒãƒ¼ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ãƒ¼ã«å½¹ç«‹ã¡ã¾ã™ã€‚"
+"MOD開発者やサーãƒãƒ¼ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ãƒ¼ã«å½¹ç«‹ã¡ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Loading Block Modifiers"
-msgstr "ローディングブロックモディファイヤー(LBM)"
+msgstr "ローディングブロックモディファイヤー (LBM)"
#: src/settings_translation_file.cpp
msgid "Lower Y limit of dungeons."
@@ -5643,27 +5798,21 @@ msgstr ""
msgid ""
"Maximum time a file download (e.g. a mod download) may take, stated in "
"milliseconds."
-msgstr ""
-"ファイルダウンロード(Modã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ãªã©ï¼‰ã«ã‹ã‹ã‚‹æœ€å¤§æ™‚間をミリ秒å˜ä½ã§æŒ‡"
-"定ã—ã¾ã™ã€‚"
+msgstr "ファイルダウンロード (MODã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ãªã©) "
+"ã«ã‹ã‹ã‚‹æœ€å¤§æ™‚間をミリ秒å˜ä½ã§å®šã‚ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
"Maximum time an interactive request (e.g. server list fetch) may take, "
"stated in milliseconds."
-msgstr ""
-"インタラクティブリクエスト(サーãƒãƒ¼ä¸€è¦§ã®å–å¾—ãªã©ï¼‰ã«ã‹ã‹ã‚‹æœ€å¤§æ™‚間をミリ秒"
-"å˜ä½ã§æŒ‡å®šã—ã¾ã™ã€‚"
+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 "メッシュキャッシュ"
@@ -5712,8 +5861,20 @@ msgid "Mipmapping"
msgstr "ミップマッピング"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr "ãã®ä»–"
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr "MODã®è¦³æ¸¬è¨˜éŒ²"
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr "MODã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
-msgstr "Modãƒãƒ£ãƒ³ãƒãƒ«"
+msgstr "MODã®ãƒãƒ£ãƒ³ãƒãƒ«"
#: src/settings_translation_file.cpp
msgid "Modifies the size of the HUD elements."
@@ -5808,10 +5969,6 @@ 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."
@@ -5820,6 +5977,10 @@ msgstr ""
"メインメニューã‹ã‚‰èµ·å‹•ã™ã‚‹ã¨ã€ã“ã®å€¤ã¯ä¸Šæ›¸ãã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid "Networking"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "æ–°ã—ã„ユーザーã¯ã“ã®ãƒ‘スワードを入力ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
@@ -5832,6 +5993,10 @@ msgid "Noclip key"
msgstr "ã™ã‚ŠæŠœã‘モード切替キー"
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr "ノードã¨ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ã®ãƒã‚¤ãƒ©ã‚¤ãƒˆ"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "ノードをãƒã‚¤ãƒ©ã‚¤ãƒˆ"
@@ -5883,17 +6048,13 @@ msgstr ""
"トレードオフã§ã™ (大体 4096 = 100MB)。"
#: 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 "既定ã®ãƒ•ォントã®å½±ã®ä¸é€æ˜Žåº¦ï¼ˆé€éŽï¼‰ã¯0ã‹ã‚‰255ã®é–“ã§ã™ã€‚"
+msgstr "既定ã®ãƒ•ォントã®å½±ã®ä¸é€æ˜Žåº¦ (é€éŽ) ã¯0ã‹ã‚‰255ã®é–“ã§ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -5996,10 +6157,6 @@ msgstr ""
"ã“れã«ã¯ã‚µãƒ¼ãƒãƒ¼ä¸Šã« \"fly\" 特権ãŒå¿…è¦ã§ã™ã€‚"
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "プレイヤーå"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "プレイヤー転é€è·é›¢"
@@ -6029,7 +6186,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Prevent mods from doing insecure things like running shell commands."
-msgstr "ModãŒã‚·ã‚§ãƒ«ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã‚ˆã†ãªå®‰å…¨ã§ãªã„ã“ã¨ã‚’ã™ã‚‹ã®ã‚’防ãŽã¾ã™ã€‚"
+msgstr "MODãŒã‚·ã‚§ãƒ«ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã‚ˆã†ãªå®‰å…¨ã§ãªã„ã“ã¨ã‚’ã™ã‚‹ã®ã‚’防ãŽã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -6052,10 +6209,6 @@ msgid "Profiler toggle key"
msgstr "観測記録表示切替キー"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "プロファイリング"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr "プロメテウスリスナーã®ã‚¢ãƒ‰ãƒ¬ã‚¹"
@@ -6146,7 +6299,7 @@ msgstr ""
"サーãƒãƒ¼ã§ç‰¹å®šã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå´æ©Ÿèƒ½ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’制é™ã—ã¾ã™ã€‚\n"
"以下㮠byteflags ã‚’åˆã‚ã›ã¦ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå´ã®æ©Ÿèƒ½ã‚’制é™ã™ã‚‹ã‹ã€åˆ¶é™ãªã—ã®\n"
"å ´åˆã¯ 0 ã«è¨­å®šã—ã¾ã™ã€‚\n"
-"LOAD_CLIENT_MODS: 1 (クライアントæä¾›ã®Modã®èª­ã¿è¾¼ã¿ã‚’無効)\n"
+"LOAD_CLIENT_MODS: 1 (クライアントæä¾›ã®MODã®èª­ã¿è¾¼ã¿ã‚’無効)\n"
"CHAT_MESSAGES: 2 (クライアントå´ã§ã® send_chat_message 呼ã³å‡ºã—を無効)\n"
"READ_ITEMDEFS: 4 (クライアントå´ã§ã® get_item_def 呼ã³å‡ºã—を無効)\n"
"READ_NODEDEFS: 8 (クライアントå´ã§ã® get_node_def 呼ã³å‡ºã—を無効)\n"
@@ -6249,6 +6402,10 @@ msgstr ""
"縮å°ã™ã‚‹ã¨ãã«ãƒ”クセルを混åˆã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr "ç”»é¢"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "ç”»é¢ã®é«˜ã•"
@@ -6279,6 +6436,10 @@ msgstr ""
"既定ã®å“質ã«ã¯ 0 を使用ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid "Screenshots"
+msgstr "スクリーンショット"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "海底ノイズ"
@@ -6291,10 +6452,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "トンãƒãƒ«ã‚’定義ã™ã‚‹2ã¤ã®3Dノイズã®ã†ã¡ã®2番目。"
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "セキュリティ"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "å‚ç…§ https://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6353,8 +6510,16 @@ msgstr ""
"18 = 4D \"Mandelbulb\" ジュリア集åˆã€‚"
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "サーãƒãƒ¼ / シングルプレイヤー"
+msgid "Server"
+msgstr "サーãƒãƒ¼"
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr "サーãƒãƒ¼ã®ã‚²ãƒ¼ãƒ ãƒ—レイ"
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
+msgstr "サーãƒãƒ¼ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6381,10 +6546,18 @@ msgid "Server side occlusion culling"
msgstr "サーãƒãƒ¼å´ã®ã‚ªã‚¯ãƒ«ãƒ¼ã‚¸ãƒ§ãƒ³ã‚«ãƒªãƒ³ã‚°"
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr "サーãƒãƒ¼/環境ã®ãƒ‘フォーマンス"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "サーãƒãƒ¼ä¸€è¦§URL"
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr "サーãƒãƒ¼ä¸€è¦§ã¨ãã®æ—¥ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "サーãƒãƒ¼ä¸€è¦§ãƒ•ァイル"
@@ -6397,26 +6570,29 @@ msgstr ""
"変更後ã¯å†èµ·å‹•ãŒå¿…è¦ã§ã™ã€‚"
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
-msgstr "クライアントã‹ã‚‰é€ä¿¡ã•れるãƒãƒ£ãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æœ€å¤§æ–‡å­—数を設定ã—ã¾ã™ã€‚"
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
+msgstr "クライアントã‹ã‚‰é€ä¿¡ã•れるãƒãƒ£ãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æœ€å¤§é•· (文字数) を設定ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
-"å½±ã®å¼·ã•を設定ã—ã¾ã™ã€‚\n"
-"値ãŒå°ã•ã„ã»ã©å½±ãŒè–„ãã€å€¤ãŒå¤§ãã„ã»ã©å½±ãŒæ¿ƒããªã‚Šã¾ã™ã€‚"
+"å½±ã®å¼·ã•ã®ã‚¬ãƒ³ãƒžã‚’設定ã—ã¾ã™ã€‚\n"
+"ゲーム内ã®å‹•çš„ãªå½±ã®å¼·åº¦ã‚’調整ã—ã¾ã™ã€‚\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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
-"ã‚„ã‚らãªã„å½±ã®åŠå¾„サイズを設定ã—ã¾ã™ã€‚\n"
+"ã‚„ã‚らã‹ã„å½±ã®åŠå¾„サイズを設定ã—ã¾ã™ã€‚\n"
"値ãŒå°ã•ã„ã»ã©ã‚·ãƒ£ãƒ¼ãƒ—ãªå½±ã€å¤§ãã„ã»ã©ã‚„ã‚らãªã„å½±ã«ãªã‚Šã¾ã™ã€‚\n"
-"最å°å€¤: 1.0ã€æœ€å¤§å€¤: 10.0"
+"最å°å€¤: 1.0ã€æœ€å¤§å€¤: 15.0"
#: src/settings_translation_file.cpp
msgid ""
@@ -6449,7 +6625,7 @@ msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
-"有効ã«ã™ã‚‹ã¨æ¶²ä½“ãŒæºã‚Œã¾ã™ï¼ˆæ°´ã®ã‚ˆã†ãªï¼‰ã€‚\n"
+"有効ã«ã™ã‚‹ã¨æ¶²ä½“ãŒæºã‚Œã¾ã™ (æ°´ã®ã‚ˆã†ãª)。\n"
"ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãŒæœ‰åйã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -6505,13 +6681,11 @@ msgstr "影投影テクスãƒãƒ£ã‚µã‚¤ã‚º"
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
-msgstr ""
-"既定ã®ãƒ•ォントã®å½±ã®ã‚ªãƒ•セット(ピクセルå˜ä½ï¼‰ã€‚ 0ã®å ´åˆã€å½±ã¯æç”»ã•れã¾ã›"
-"ん。"
+msgstr "既定ã®ãƒ•ォントã®å½±ã®ã‚ªãƒ•セット (ピクセルå˜ä½)。 0ã®å ´åˆã€å½±ã¯æç”»ã•れã¾ã›ã‚“。"
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
-msgstr "å½±ã®å¼·ã•"
+msgid "Shadow strength gamma"
+msgstr "å½±ã®å¼·ã•ã®ã‚¬ãƒ³ãƒž"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6551,7 +6725,7 @@ msgid ""
"recommended."
msgstr ""
"マップジェãƒãƒ¬ãƒ¼ã‚¿ã«ã‚ˆã£ã¦ç”Ÿæˆã•れãŸãƒžãƒƒãƒ—ãƒãƒ£ãƒ³ã‚¯ã®ã‚µã‚¤ã‚ºã§ã€\n"
-"マップブロック(16ノード)ã§è¡¨ã•れã¾ã™ã€‚\n"
+"マップブロック (16ノード) ã§è¡¨ã•れã¾ã™ã€‚\n"
"警告ï¼: ã“ã®å€¤ã‚’5より大ããã™ã‚‹ã“ã¨ã«ã¯åˆ©ç‚¹ãŒãªãã€ã„ãã¤ã‹ã®å±é™ºãŒ\n"
"ã‚りã¾ã™ã€‚ã“ã®å€¤ã‚’減らã™ã¨æ´žçªŸã¨ãƒ€ãƒ³ã‚¸ãƒ§ãƒ³ã®å¯†åº¦ãŒä¸ŠãŒã‚Šã¾ã™ã€‚\n"
"ã“ã®å€¤ã‚’変更ã™ã‚‹ã®ã¯ç‰¹åˆ¥ãªç”¨é€”ã®ãŸã‚ã§ã™ã€‚変更ã—ãªã„ã§ãŠãã“ã¨ã‚’\n"
@@ -6655,7 +6829,7 @@ msgid ""
"items."
msgstr ""
"既定ã®ãƒŽãƒ¼ãƒ‰ã€ã‚¢ã‚¤ãƒ†ãƒ ã€ãƒ„ールã®ã‚¹ã‚¿ãƒƒã‚¯æ•°ã‚’指定ã—ã¾ã™ã€‚\n"
-"Mod ã¾ãŸã¯ã‚²ãƒ¼ãƒ ã¯ã€ç‰¹å®šã®ï¼ˆã¾ãŸã¯ã™ã¹ã¦ã®ï¼‰ã‚¢ã‚¤ãƒ†ãƒ ã®ã‚¹ã‚¿ãƒƒã‚¯æ•°ã‚’\n"
+"MOD ã¾ãŸã¯ã‚²ãƒ¼ãƒ ã¯ã€ç‰¹å®šã® (ã¾ãŸã¯ã™ã¹ã¦ã®) アイテムã®ã‚¹ã‚¿ãƒƒã‚¯æ•°ã‚’\n"
"明示的ã«è¨­å®šã™ã‚‹å ´åˆãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。"
#: src/settings_translation_file.cpp
@@ -6737,8 +6911,8 @@ msgstr ""
"(上部ã®å…ˆç´°ã‚Šé–‹å§‹ç‚¹ï¼‰ã‚ˆã‚Šä¸Šã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆã«ã®ã¿é…ç½®ã•れã¾ã™ã€‚\n"
"***警告ã€ã‚µãƒ¼ãƒãƒ¼ã®ãƒ‘フォーマンスã¸ã®æ½œåœ¨çš„ãªå±é™ºæ€§***:\n"
"æ°´ã®é…置を有効ã«ã™ã‚‹å ´åˆã€æµ®éŠå¤§é™¸ã‚’密ãªå±¤ã«ã™ã‚‹ãŸã‚ã«\n"
-"'mgv7_floatland_density' ã‚’2.0(ã¾ãŸã¯ 'mgv7_np_floatland' ã«å¿œã˜ã¦ä»–ã®å¿…è¦ãª"
-"値)ã«\n"
+"'mgv7_floatland_density' ã‚’2.0 (ã¾ãŸã¯ 'mgv7_np_floatland' "
+"ã«å¿œã˜ã¦ä»–ã®å¿…è¦ãªå€¤) ã«\n"
"設定ã—ã¦ã€ã‚µãƒ¼ãƒãƒ¼ã«é›†ä¸­ã™ã‚‹æ¥µç«¯ãªæ°´ã®æµã‚Œã‚’é¿ã‘ã€ä¸‹ã®ä¸–界表é¢ã¸ã®å¤§è¦æ¨¡ãª\n"
"洪水をé¿ã‘るよã†ã«ãƒ†ã‚¹ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
@@ -6751,6 +6925,10 @@ msgid "Temperature variation for biomes."
msgstr "ãƒã‚¤ã‚ªãƒ¼ãƒ ã®æ¸©åº¦å¤‰å‹•。"
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr "一時的ãªè¨­å®š"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "地形別ノイズ"
@@ -6869,7 +7047,7 @@ msgstr ""
"æºã‚Œã‚‹æ¶²ä½“ã®è¡¨é¢ã®æœ€å¤§é«˜ã•。\n"
"4.0 =波高ã¯2ノードã§ã™ã€‚\n"
"0.0 =æ³¢ã¯ã¾ã£ãŸãå‹•ãã¾ã›ã‚“。\n"
-"既定ã¯1.0(1/2ノード)ã§ã™ã€‚\n"
+"既定ã¯1.0 (1/2ノード) ã§ã™ã€‚\n"
"æºã‚Œã‚‹æ¶²ä½“ を有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -6882,7 +7060,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
@@ -6896,9 +7074,9 @@ msgid ""
"This should be configured together with active_object_send_range_blocks."
msgstr ""
"アクティブブロックã®å¯¾è±¡ã¨ãªã‚‹å„プレイヤーã®å‘¨å›²ã®ãƒ–ロックã®é‡ã®åŠå¾„ã€\n"
-"マップブロック(16ノード)ã§å®šã‚ã¾ã™ã€‚\n"
+"マップブロック (16ノード) ã§å®šã‚ã¾ã™ã€‚\n"
"アクティブブロックã®ã‚ªãƒ–ジェクトã¯ãƒ­ãƒ¼ãƒ‰ã•れã€ABMãŒå®Ÿè¡Œã•れã¾ã™ã€‚\n"
-"ã“れã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–オブジェクト(モブ)ãŒç¶­æŒã•れる最å°ç¯„囲ã§ã‚‚ã‚りã¾ã™ã€‚\n"
+"ã“れã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–オブジェクト (モブ) ãŒç¶­æŒã•れる最å°ç¯„囲ã§ã‚‚ã‚りã¾ã™ã€‚\n"
"ã“れ㯠active_object_send_range_blocks ã¨ä¸€ç·’ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -6915,8 +7093,8 @@ msgstr ""
"注:Androidã§ã¯ã€ä¸æ˜Žãªå ´åˆã¯OGRES1を使用ã—ã¦ãã ã•ã„ï¼ãã†ã—ãªã„ã¨ã‚¢ãƒ—リã®èµ·"
"å‹•ã«å¤±æ•—ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚\n"
"ãã®ä»–ã®ãƒ—ラットフォームã§ã¯ã€OpenGLを推奨ã—ã¾ã™ã€‚\n"
-"シェーダーã¯ã€OpenGL(デスクトップã®ã¿ï¼‰ã¨OGRES2(実験的)ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„"
-"ã¾ã™ã€‚"
+"シェーダーã¯ã€OpenGL (デスクトップã®ã¿) ã¨OGRES2 (実験的) "
+"ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -6931,7 +7109,7 @@ 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 ""
-"ノードã®ã‚¢ãƒ³ãƒ“エントオクルージョンシェーディングã®å¼·åº¦ï¼ˆæš—ã•)。\n"
+"ノードã®ã‚¢ãƒ³ãƒ“エントオクルージョンシェーディングã®å¼·åº¦ (æš—ã•)。\n"
"低ã„ã»ã©æš—ãã€é«˜ã„ã»ã©æ˜Žã‚‹ããªã‚Šã¾ã™ã€‚è¨­å®šã®æœ‰åŠ¹ç¯„å›²ã¯ 0.25~4.0 ã§ã™ã€‚\n"
"値ãŒç¯„囲外ã®å ´åˆã¯ã€æœ€ã‚‚è¿‘ã„æœ‰åйãªå€¤ã«è¨­å®šã•れã¾ã™ã€‚"
@@ -6950,7 +7128,7 @@ msgid ""
"(as a fraction of the ABM Interval)"
msgstr ""
"ABM ãŒå„ステップã§å®Ÿè¡Œã§ãる時間予算\n"
-"(ABMé–“éš”ã®ä¸€éƒ¨ã¨ã—ã¦ï¼‰"
+"(ABMé–“éš”ã®ä¸€éƒ¨ã¨ã—ã¦)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6993,7 +7171,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Time of day when a new world is started, in millihours (0-23999)."
-msgstr "æ–°ã—ã„ワールドãŒé–‹å§‹ã•れる時刻。ミリ時間å˜ä½ï¼ˆ0〜23999)。"
+msgstr "æ–°ã—ã„ワールドãŒé–‹å§‹ã•れる時刻。ミリ時間å˜ä½ (0〜23999)。"
#: src/settings_translation_file.cpp
msgid "Time send interval"
@@ -7004,10 +7182,9 @@ msgid "Time speed"
msgstr "時間ã®é€Ÿã•"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
-msgstr ""
-"クライアントãŒãƒ¡ãƒ¢ãƒªã‹ã‚‰æœªä½¿ç”¨ã®ãƒžãƒƒãƒ—データを削除ã™ã‚‹ãŸã‚ã®\n"
-"タイムアウト。"
+msgid "Timeout for client to remove unused map data from memory, in seconds."
+msgstr "クライアントãŒãƒ¡ãƒ¢ãƒªã‹ã‚‰æœªä½¿ç”¨ã®ãƒžãƒƒãƒ—データを削除ã™ã‚‹ãŸã‚ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ "
+"(ç§’å˜ä½)。"
#: src/settings_translation_file.cpp
msgid ""
@@ -7033,10 +7210,18 @@ msgid "Touch screen threshold"
msgstr "タッãƒã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã®ã—ãã„値"
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr "タッãƒã‚¹ã‚¯ãƒªãƒ¼ãƒ³"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr "パフォーマンスã®ãŸã‚ã®ãƒˆãƒ¬ãƒ¼ãƒ‰ã‚ªãƒ•"
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr "逿˜Žåº¦ã®ä¸¦ã¹æ›¿ãˆè·é›¢"
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "木ã®ãƒŽã‚¤ã‚º"
@@ -7056,7 +7241,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Trusted mods"
-msgstr "ä¿¡é ¼ã™ã‚‹Mod"
+msgstr "ä¿¡é ¼ã™ã‚‹MOD"
#: src/settings_translation_file.cpp
msgid "URL to the server list displayed in the Multiplayer Tab."
@@ -7131,11 +7316,11 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
-"マルãƒã‚µãƒ³ãƒ—ルアンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ï¼ˆMSAA)を使用ã—ã¦ã€ãƒ–ロックエッジを滑らã‹ã«ã—"
-"ã¾ã™ã€‚\n"
+"マルãƒã‚µãƒ³ãƒ—ルアンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ (MSAA) "
+"を使用ã—ã¦ã€ãƒ–ロックエッジを滑らã‹ã«ã—ã¾ã™ã€‚\n"
"ã“ã®ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã¯ã€ç”»åƒã‚’鮮明ã«ä¿ã¡ãªãŒã‚‰3Dビューãƒãƒ¼ãƒˆã‚’滑らã‹ã«ã—ã¾ã™ã€‚\n"
"ã—ã‹ã—ã€ãれã¯ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®å†…部ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“\n"
-"(ã“れã¯ã€é€æ˜Žãªãƒ†ã‚¯ã‚¹ãƒãƒ£ã§ç‰¹ã«ç›®ç«‹ã¡ã¾ã™ï¼‰ã€‚\n"
+"(ã“れã¯ã€é€æ˜Žãªãƒ†ã‚¯ã‚¹ãƒãƒ£ã§ç‰¹ã«ç›®ç«‹ã¡ã¾ã™)。\n"
"シェーダーを無効ã«ã™ã‚‹ã¨ã€ãƒŽãƒ¼ãƒ‰é–“ã«å¯è¦–スペースãŒè¡¨ç¤ºã•れã¾ã™ã€‚\n"
"0 ã«è¨­å®šã™ã‚‹ã¨ã€MSAAã¯ç„¡åйã«ãªã‚Šã¾ã™ã€‚\n"
"ã“ã®ã‚ªãƒ—ションを変更ã—ãŸå ´åˆã€å†èµ·å‹•ãŒå¿…è¦ã§ã™ã€‚"
@@ -7145,6 +7330,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "テクスãƒãƒ£ã‚’拡大縮å°ã™ã‚‹å ´åˆã¯ãƒˆãƒ©ã‚¤ãƒªãƒ‹ã‚¢ãƒ•ィルタリングを使用ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr "ユーザーインターフェース"
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7374,7 +7563,7 @@ msgid ""
"Mods may still set a background."
msgstr ""
"ãƒãƒ¼ãƒ ã‚¿ã‚°ã®èƒŒæ™¯ã‚’既定ã§è¡¨ç¤ºã™ã‚‹ã‹ã©ã†ã‹ã§ã™ã€‚\n"
-"Modã§èƒŒæ™¯ã‚’設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚"
+"MODã§èƒŒæ™¯ã‚’設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -7416,12 +7605,25 @@ msgid ""
"pause menu."
msgstr ""
"音をミュートã™ã‚‹ã‹ã©ã†ã‹ã€‚サウンドシステムãŒç„¡åйã«ãªã£ã¦ã„ãªã„é™ã‚Š\n"
-"(enable_sound = false)ã€ã„ã¤ã§ã‚‚ミュートを解除ã§ãã¾ã™ã€‚\n"
+"(enable_sound = false)ã€ã„ã¤ã§ã‚‚ミュートを解除ã§ãã¾ã™ã€‚\n"
"ゲーム内ã§ã¯ãƒŸãƒ¥ãƒ¼ãƒˆã‚­ãƒ¼ã‚’使用ã™ã‚‹ã‹ãƒãƒ¼ã‚ºãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’使用ã—ã¦ã€\n"
"ミュート状態を切り替ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+"技術åを表示ã™ã‚‹ã‹ã©ã†ã‹ã€‚\n"
+"コンテンツã¨MODé¸æŠžãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®MODã¨ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ‘ックã€ãŠã‚ˆã³\n"
+"ã™ã¹ã¦ã®è¨­å®šã®è¨­å®šåã«å½±éŸ¿ã—ã¾ã™ã€‚\n"
+"「ã™ã¹ã¦ã®è¨­å®šã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã§åˆ¶å¾¡ã•れã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
"クライアントã®ãƒ‡ãƒãƒƒã‚°æƒ…報を表示ã™ã‚‹ã‹ã©ã†ã‹ã®è¨­å®šã§ã™\n"
@@ -7531,6 +7733,10 @@ msgid "Y-level of seabed."
msgstr "海底ã®Yレベル。"
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr "cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURLファイルダウンロードタイムアウト"
@@ -7575,6 +7781,9 @@ msgstr "cURL並行処ç†åˆ¶é™"
#~ msgid "Back"
#~ msgstr "戻る"
+#~ msgid "Basic"
+#~ msgstr "基本"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "フルスクリーンモードã§ã®ãƒ“ット数(色深度)。"
@@ -7607,6 +7816,12 @@ msgstr "cURL並行処ç†åˆ¶é™"
#~ msgid "Configure"
#~ msgstr "設定"
+#~ msgid "Connect"
+#~ msgstr "接続"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "æ¶²ä½“ä¸­ã®æ²ˆé™é€Ÿåº¦ã‚’制御ã—ã¾ã™ã€‚"
+
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value."
@@ -7650,6 +7865,9 @@ msgstr "cURL並行処ç†åˆ¶é™"
#~ "テクスãƒãƒ£ã®ã‚µãƒ³ãƒ—リング手順を定義ã—ã¾ã™ã€‚\n"
#~ "値ãŒå¤§ãã„ã»ã©ã€æ³•ç·šãƒžãƒƒãƒ—ãŒæ»‘らã‹ã«ãªã‚Šã¾ã™ã€‚"
+#~ msgid "Del. Favorite"
+#~ msgstr "ãŠæ°—ã«å…¥ã‚Šå‰Šé™¤"
+
#~ msgid ""
#~ "Deprecated, define and locate cave liquids using biome definitions "
#~ "instead.\n"
@@ -7659,12 +7877,22 @@ msgstr "cURL並行処ç†åˆ¶é™"
#~ "ã™ã€‚\n"
#~ "大ããªæ´žçªŸå†…ã®æº¶å²©ã®Y高ã•上é™ã€‚"
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr ""
+#~ "Minetest Game ãªã©ã®ã‚²ãƒ¼ãƒ ã‚’ minetest.net ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦ãã ã•ã„"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "minetest.netã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦ãã ã•ã„"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "$1をインストールã—ã¦ã„ã¾ã™ã€ãŠå¾…ã¡ãã ã•ã„..."
#~ msgid "Enable VBO"
#~ msgstr "VBOを有効化"
+#~ msgid "Enable register confirmation"
+#~ msgstr "登録確èªã‚’有効化"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7692,6 +7920,9 @@ msgstr "cURL並行処ç†åˆ¶é™"
#~ "視差é®è”½ãƒžãƒƒãƒ”ングを有効ã«ã—ã¾ã™ã€‚\n"
#~ "ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãŒæœ‰åйã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
+#~ msgid "Enter "
+#~ msgstr "エンター "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7711,6 +7942,9 @@ msgstr "cURL並行処ç†åˆ¶é™"
#~ msgid "Fallback font size"
#~ msgstr "フォールãƒãƒƒã‚¯ãƒ•ォントã®å¤§ãã•"
+#~ msgid "Filtering"
+#~ msgstr "フィルタリング"
+
#~ msgid "Floatland base height noise"
#~ msgstr "æµ®éŠå¤§é™¸ã®åŸºæº–高ã•ノイズ"
@@ -7729,6 +7963,9 @@ msgstr "cURL並行処ç†åˆ¶é™"
#~ msgid "Full screen BPP"
#~ msgstr "フルスクリーンã®BPP"
+#~ msgid "Game"
+#~ msgstr "ゲーム"
+
#~ msgid "Gamma"
#~ msgstr "ガンマ"
@@ -7738,15 +7975,30 @@ msgstr "cURL並行処ç†åˆ¶é™"
#~ msgid "Generate normalmaps"
#~ msgstr "法線マップã®ç”Ÿæˆ"
+#~ msgid "HUD scale factor"
+#~ msgstr "HUDã®å€çއ"
+
#~ msgid "High-precision FPU"
#~ msgstr "高精度FPU"
#~ msgid "IPv6 support."
#~ msgstr "IPv6 サãƒãƒ¼ãƒˆã€‚"
+#~ msgid "In-Game"
+#~ msgstr "ゲーム"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "インストール: ファイル: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "計測器"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "キー設定ã§ã™ã€‚ (ã“ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§å¤±æ•—ã™ã‚‹å ´åˆã¯ minetest.conf ã‹ã‚‰è©²å½“ã™ã‚‹è¨­"
+#~ "定を削除ã—ã¦ãã ã•ã„)"
+
#~ msgid "Lava depth"
#~ msgstr "æº¶å²©ã®æ·±ã•"
@@ -7766,6 +8018,9 @@ msgstr "cURL並行処ç†åˆ¶é™"
#~ msgstr ""
#~ "DirectX ã‚’ LuaJIT ã¨é€£æºã•ã›ã¾ã™ã€‚å•題ãŒã‚ã‚‹å ´åˆã¯ç„¡åйã«ã—ã¦ãã ã•ã„。"
+#~ msgid "Menus"
+#~ msgstr "メニュー"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "ミニマップ レーダーモードã€ã‚ºãƒ¼ãƒ  x2"
@@ -7837,6 +8092,12 @@ msgstr "cURL並行処ç†åˆ¶é™"
#~ msgid "Path to save screenshots at."
#~ msgstr "スクリーンショットをä¿å­˜ã™ã‚‹ãƒ‘ス。"
+#~ msgid "Player name"
+#~ msgstr "プレイヤーå"
+
+#~ msgid "Profiling"
+#~ msgstr "プロファイリング"
+
#~ msgid "Projecting dungeons"
#~ msgstr "çªå‡ºã™ã‚‹ãƒ€ãƒ³ã‚¸ãƒ§ãƒ³"
@@ -7849,6 +8110,9 @@ msgstr "cURL並行処ç†åˆ¶é™"
#~ msgid "Select Package File:"
#~ msgstr "ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "サーãƒãƒ¼ / シングルプレイヤー"
+
#~ msgid ""
#~ "Set the shadow update time.\n"
#~ "Lower value means shadows and map updates faster, but it consume more "
@@ -7936,6 +8200,22 @@ msgstr "cURL並行処ç†åˆ¶é™"
#~ msgid "Yes"
#~ msgstr "ã¯ã„"
+#, 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 ""
+#~ "ã‚ãªãŸã¯ã“ã®ã‚µãƒ¼ãƒ ーã«åå‰ \"%s\" ã§ã¯ã˜ã‚ã¦å‚加ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚\n"
+#~ "続行ã™ã‚‹å ´åˆã€ã‚ãªãŸã®æƒ…å ±ãŒæ–°ã—ã„アカウントã¨ã—ã¦ã“ã®ã‚µãƒ¼ãƒãƒ¼ã«ä½œæˆã•れã¾"
+#~ "ã™ã€‚\n"
+#~ "ã‚ãªãŸã®ãƒ‘スワードをå†å…¥åŠ›ã—ã¦ã‹ã‚‰ 'å‚加登録' をクリックã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆä½œæˆ"
+#~ "ã™ã‚‹ã‹ã€\n"
+#~ "キャンセルをクリックã—ã¦ä¸­æ–­ã—ã¦ãã ã•ã„。"
+
#~ msgid "You died."
#~ msgstr "ã‚ãªãŸã¯æ­»ã«ã¾ã—ãŸã€‚"
diff --git a/po/jbo/minetest.po b/po/jbo/minetest.po
index b9e52297e..1f5f4e500 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: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -122,6 +122,31 @@ msgid "The server has requested a reconnect:"
msgstr ".i le samtcise'u cu cpedu pa nu za'u re'u co'a samjo'e"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr ".i ko cuxna fi lu'i le munje"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
#, fuzzy
msgid "Protocol version mismatch. "
msgstr "le ve judrnporte favatcini na mapti "
@@ -136,6 +161,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr ""
@@ -143,14 +172,21 @@ msgstr ""
msgid "We support protocol versions between version $1 and $2."
msgstr ""
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "fitytoltu'i"
@@ -291,7 +327,6 @@ msgid "Failed to download $1"
msgstr ".i da nabmi fi le nu kibycpa la'o zoi. $1 .zoi"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "se kelci"
@@ -314,7 +349,6 @@ 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"
@@ -409,14 +443,9 @@ msgid "Decorations"
msgstr "datni"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr ""
-".i ko kibycpa pa se kelci to mupli fa la .maintest. se kelci toi la'o zoi. "
-"minetest.net .zoi"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr ".i ko kibycpa pa se kelci la'o zoi. minetest.net .zoi"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr ".i la'o zoi. Minimal development test .zoi na'o selpli lo favgau .o'i"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -435,10 +464,6 @@ msgstr "lo tumla cu fulta lo tsani"
msgid "Floatlands (experimental)"
msgstr "fulta tumla"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "se kelci"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr ""
@@ -456,6 +481,15 @@ msgid "Increases humidity around rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "samtcise'a"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr ""
@@ -556,11 +590,6 @@ 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 ".i la'o zoi. Minimal development test .zoi na'o selpli lo favgau .o'i"
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "cmene le munje"
@@ -590,6 +619,38 @@ msgstr ""
msgid "Delete World \"$1\"?"
msgstr ".i xu do djica le nu vimcu la'o zoi. $1 .zoi noi munje"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+#, fuzzy
+msgid "Confirm Password"
+msgstr "le rapli lerpoijaspu"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "lo lerpoijaspu"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr ".i lu'i le re lerpoijaspu na simxu le ka mintu"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "mulno"
@@ -620,6 +681,16 @@ msgstr ""
msgid "Browse"
msgstr ""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "kakne le ka se samtcise'a"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "kakne le ka se samtcise'a"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "ganda"
@@ -676,7 +747,7 @@ msgstr "cuxna fi lu'i le datnyveimei"
msgid "Select file"
msgstr "cuxna fi lu'i le datnyvei"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr ""
@@ -826,6 +897,10 @@ msgstr "liste lu'i ro pu je nai ca gunka"
msgid "Previous Core Developers"
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -898,10 +973,6 @@ msgstr "co'a samtcise'u"
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 "cnino"
@@ -910,10 +981,6 @@ 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_online.lua
-msgid "Password"
-msgstr "lo lerpoijaspu"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "co'a kelci"
@@ -949,10 +1016,6 @@ msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "co'a samjo'e"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "finti se kelci"
@@ -962,10 +1025,6 @@ msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "co'u cmima lu'i ro nelci se tcita"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "nelci se tcita"
@@ -979,6 +1038,10 @@ msgid "Join Game"
msgstr "co'a kansa fi le ka kelci"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ".pin. temci"
@@ -992,10 +1055,19 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "co'u cmima lu'i ro nelci se tcita"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "ve skicu le samtcise'u"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr ""
@@ -1041,7 +1113,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1146,7 +1218,7 @@ msgid "Tone Mapping"
msgstr "lo puvrmipmepi"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1154,7 +1226,7 @@ msgid "Trilinear Filter"
msgstr "puvycibli'iju'e"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1176,6 +1248,13 @@ msgstr ".i ca'o samymo'i lo me la'o gy.node.gy."
msgid "Waving Plants"
msgstr "lo melbi pezli"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr ""
+".i da nabmi fi le nu co'a jorne to la'a cu'i le temci cu dukse le ka clani "
+"toi"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1323,7 +1402,7 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1430,6 +1509,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr ".i ca'o cupra le samtciselse'u"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "sisti tu'a le se kelci"
@@ -1949,24 +2033,6 @@ msgstr ".i da nabmi fi le nu kibycpa la'o zoi. $1 .zoi"
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"
-
-#: 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 ""
@@ -2001,7 +2067,7 @@ msgstr ""
msgid "Change camera"
msgstr "gafygau lo lerpoijaspu"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "tavla"
@@ -2054,7 +2120,7 @@ msgid "Key already in use"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -2136,11 +2202,6 @@ msgstr "basti"
#: src/gui/guiPasswordChange.cpp
#, fuzzy
-msgid "Confirm Password"
-msgstr "le rapli lerpoijaspu"
-
-#: src/gui/guiPasswordChange.cpp
-#, fuzzy
msgid "New Password"
msgstr "lo cnino lerpoijaspu"
@@ -2149,6 +2210,10 @@ msgstr "lo cnino lerpoijaspu"
msgid "Old Password"
msgstr "lo slabu lerpoijaspu"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr ".i lu'i le re lerpoijaspu na simxu le ka mintu"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "sisti"
@@ -2163,12 +2228,6 @@ msgstr "ko da'ergau le batke"
msgid "Sound Volume: %d%%"
msgstr "lo ni sance "
-#. ~ 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).
@@ -2176,6 +2235,16 @@ msgstr ""
msgid "LANG_CODE"
msgstr "jbo"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr ".i ko ckaji le ka da zo'u jdice le du'u da cmene"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2301,6 +2370,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2383,6 +2456,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "cmene le munje"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2396,7 +2474,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2465,6 +2543,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Automatic forward key"
msgstr "za'i ca'u muvdu"
@@ -2508,10 +2590,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "jicmu"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "jicmu se curmi"
@@ -2533,7 +2611,7 @@ msgid "Bind address"
msgstr ".i ca'o troci lo nu facki lo samjudri"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2545,6 +2623,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2569,6 +2651,11 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "gafygau lo lerpoijaspu"
+
+#: 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"
@@ -2732,6 +2819,11 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "lo samtciselse'u"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2832,6 +2924,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2866,7 +2962,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2933,11 +3031,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3081,6 +3179,11 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Developer Options"
+msgstr "datni"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Dig key"
msgstr "za'i ri'u muvdu"
@@ -3102,6 +3205,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3171,6 +3280,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3187,19 +3300,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3273,6 +3380,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3291,6 +3402,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3369,7 +3484,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
+msgid "Filtering and Antialiasing"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3437,6 +3552,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3586,6 +3705,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "se kelci"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3613,6 +3745,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3629,10 +3769,15 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr ".i ca viska le crakemsazycimde"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr ""
@@ -3869,11 +4014,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3934,6 +4086,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3955,7 +4113,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3995,10 +4155,6 @@ 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 ""
@@ -4049,15 +4205,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4680,6 +4832,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4736,7 +4892,7 @@ msgstr "za'i zu'e muvdu"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4746,15 +4902,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4766,7 +4925,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4794,6 +4954,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "lo xutla se gusni"
+
+#: 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"
@@ -5179,10 +5344,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5231,6 +5392,18 @@ msgid "Mipmapping"
msgstr "lo puvrmipmepi"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5318,16 +5491,17 @@ msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "te samjo'e"
-
-#: 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
+#, fuzzy
+msgid "Networking"
+msgstr "te samjo'e"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5340,6 +5514,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "lo xutla se gusni"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5377,10 +5556,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5476,10 +5651,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "plicme"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5527,10 +5698,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5701,6 +5868,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "vidnyxra"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5728,6 +5900,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "vidnyxra"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5740,10 +5917,6 @@ 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 ""
@@ -5784,8 +5957,18 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Server / Singleplayer"
-msgstr "pa kelci"
+msgid "Server"
+msgstr "veirjudri le samtcise'u"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "cmene le samtcise'u"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "ve skicu le samtcise'u"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5813,10 +5996,20 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Server/Env Performance"
+msgstr "judrnporte le samtcise'u"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Serverlist URL"
msgstr "lo samtcise'u"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "lo samtcise'u"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5827,12 +6020,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5840,7 +6035,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5916,7 +6111,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6119,6 +6314,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "te tcimi'e"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6321,7 +6521,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6345,10 +6545,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6440,6 +6648,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6679,6 +6891,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6769,6 +6990,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6792,6 +7017,9 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "xruti"
+#~ msgid "Basic"
+#~ msgstr "jicmu"
+
#, fuzzy
#~ msgid "Bump Mapping"
#~ msgstr "lo puvrmipmepi"
@@ -6799,9 +7027,20 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "tcimi'e"
+#~ msgid "Connect"
+#~ msgstr "co'a samjo'e"
+
#~ msgid "Credits"
#~ msgstr "liste lu'i ro gunka"
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr ""
+#~ ".i ko kibycpa pa se kelci to mupli fa la .maintest. se kelci toi la'o "
+#~ "zoi. minetest.net .zoi"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr ".i ko kibycpa pa se kelci la'o zoi. minetest.net .zoi"
+
#~ 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"
@@ -6809,6 +7048,9 @@ msgstr ""
#~ msgid "Enable VBO"
#~ msgstr "selpli"
+#~ msgid "Game"
+#~ msgstr "se kelci"
+
#~ msgid "Main"
#~ msgstr "ralju"
@@ -6828,10 +7070,17 @@ msgstr ""
#~ msgid "Ok"
#~ msgstr "je'e"
+#~ msgid "Player name"
+#~ msgstr "plicme"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "xruti le nonselkansa munje"
#, fuzzy
+#~ msgid "Server / Singleplayer"
+#~ msgstr "pa kelci"
+
+#, fuzzy
#~ msgid "Special key"
#~ msgstr "za'i masno cadzu"
diff --git a/po/kk/minetest.po b/po/kk/minetest.po
index 679dc4078..7e97de7bd 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: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -115,6 +115,30 @@ msgid "The server has requested a reconnect:"
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr ""
@@ -127,6 +151,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr ""
@@ -134,14 +162,21 @@ msgstr ""
msgid "We support protocol versions between version $1 and $2."
msgstr ""
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Болдырмау"
@@ -277,7 +312,6 @@ msgid "Failed to download $1"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Ойындар"
@@ -299,7 +333,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Модтар"
@@ -393,11 +426,7 @@ 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"
+msgid "Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -416,10 +445,6 @@ msgstr ""
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 ""
@@ -437,6 +462,15 @@ msgid "Increases humidity around rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Жою"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Көлдер"
@@ -536,10 +570,6 @@ 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 ""
@@ -569,6 +599,37 @@ msgstr ""
msgid "Delete World \"$1\"?"
msgstr ""
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Password"
+msgstr "ÒšÒ±Ð¿Ð¸Ñ Ñөзді өзгерту"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr ""
@@ -599,6 +660,14 @@ msgstr ""
msgid "Browse"
msgstr ""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr ""
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
@@ -655,7 +724,7 @@ msgstr ""
msgid "Select file"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr ""
@@ -800,6 +869,10 @@ msgstr ""
msgid "Previous Core Developers"
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -868,10 +941,6 @@ msgstr ""
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 "Жаңа"
@@ -880,11 +949,6 @@ msgstr "Жаңа"
msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "ÒšÒ±Ð¿Ð¸Ñ Ñөзді өзгерту"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr ""
@@ -918,10 +982,6 @@ msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr ""
@@ -931,10 +991,6 @@ msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr ""
@@ -947,6 +1003,10 @@ msgid "Join Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
@@ -959,10 +1019,18 @@ msgid "Refresh"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr ""
@@ -1007,7 +1075,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1103,7 +1171,7 @@ msgid "Tone Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1111,7 +1179,7 @@ msgid "Trilinear Filter"
msgstr "ҮшÑызықты фильтрациÑ"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1130,6 +1198,10 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr ""
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1264,7 +1336,7 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1368,6 +1440,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Мәзірге шығу"
@@ -1873,24 +1950,6 @@ msgstr ""
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 ""
@@ -1923,7 +1982,7 @@ msgstr ""
msgid "Change camera"
msgstr ""
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr ""
@@ -1976,7 +2035,7 @@ msgid "Key already in use"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -2048,15 +2107,15 @@ msgid "Change"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
+msgid "New Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "New Password"
+msgid "Old Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Old Password"
+msgid "Passwords do not match!"
msgstr ""
#: src/gui/guiVolumeChange.cpp
@@ -2072,12 +2131,6 @@ msgstr ""
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).
@@ -2085,6 +2138,15 @@ msgstr ""
msgid "LANG_CODE"
msgstr "kk"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr ""
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2210,6 +2272,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2291,6 +2357,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2304,7 +2374,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2373,6 +2443,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2413,10 +2487,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2437,7 +2507,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2449,6 +2519,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2473,6 +2547,10 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Camera"
+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"
@@ -2631,6 +2709,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2726,6 +2808,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2759,7 +2845,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2826,11 +2914,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2973,6 +3061,10 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -2993,6 +3085,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3062,6 +3160,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3078,19 +3180,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3164,6 +3260,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3182,6 +3282,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3259,7 +3363,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
+msgid "Filtering and Antialiasing"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3327,6 +3431,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3475,6 +3583,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Ойындар"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3502,6 +3623,16 @@ msgid "Graphics"
msgstr "Графика"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Графика"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Графика"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "ГравитациÑ"
@@ -3518,10 +3649,15 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "HUD көрÑетілді"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr ""
@@ -3758,11 +3894,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3823,6 +3966,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3844,7 +3993,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3884,10 +4035,6 @@ 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 ""
@@ -3938,15 +4085,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4567,6 +4710,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4622,7 +4769,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4632,15 +4779,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4652,7 +4802,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4680,6 +4831,10 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lighting"
+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"
@@ -5064,10 +5219,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5116,6 +5267,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5202,16 +5365,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5224,6 +5387,10 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5261,10 +5428,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5358,10 +5521,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5408,10 +5567,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5580,6 +5735,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5607,19 +5766,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Seabed noise"
+msgid "Screenshots"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgid "Seabed noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of two 3D noises that together define tunnels."
+msgid "Second of 4 2D noises that together define hill/mountain range height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Security"
+msgid "Second of two 3D noises that together define tunnels."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5662,7 +5821,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
+msgid "Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5690,10 +5857,18 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5704,12 +5879,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5717,7 +5894,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5793,7 +5970,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5993,6 +6170,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Баптаулар"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6195,7 +6377,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6219,10 +6401,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6313,6 +6503,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6546,6 +6740,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6635,6 +6838,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6649,6 +6856,9 @@ msgstr ""
#~ msgid "FreeType fonts"
#~ msgstr "FreeType қаріптері"
+#~ msgid "Game"
+#~ msgstr "Ойын"
+
#~ msgid "Main"
#~ msgstr "БаÑты мәзір"
diff --git a/po/kn/minetest.po b/po/kn/minetest.po
index 1bba13a11..7d640cccf 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: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -113,6 +113,30 @@ msgid "The server has requested a reconnect:"
msgstr "ಸರà³à²µà²°à³ ಮರà³à²¸à²‚ಪರà³à²• ಮಾಡಲೠಕೇಳಿದೆ:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "ಪà³à²°à³‹à²Ÿà³‹à²•ಾಲೠಆವೃತà³à²¤à²¿ ಹೊಂದಿಕೆಯಾಗಿಲà³à²². "
@@ -125,6 +149,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "ಸರà³à²µà²°à³ $1 ಮತà³à²¤à³ $2 ನಡà³à²µà³†à²¯ ಪà³à²°à³‹à²Ÿà³‹à²•ಾಲೠಅವೃತà³à²¤à²¿à²—ಳನà³à²¨à³ ಬೆಂಬಲಿಸà³à²¤à³à²¤à²¦à³†. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "ನಾವೠ$ 1 ಪà³à²°à³‹à²Ÿà³‹à²•ಾಲೠಆವೃತà³à²¤à²¿à²¯à²¨à³à²¨à³ ಮಾತà³à²° ಬೆಂಬಲಿಸà³à²¤à³à²¤à³‡à²µà³†."
@@ -132,14 +160,21 @@ msgstr "ನಾವೠ$ 1 ಪà³à²°à³‹à²Ÿà³‹à²•ಾಲೠಆವೃತà³à²¤à²¿à²¯
msgid "We support protocol versions between version $1 and $2."
msgstr "ಆವೃತà³à²¤à²¿ $1 ಮತà³à²¤à³ $2 ನಡà³à²µà²¿à²¨ ಪà³à²°à³‹à²Ÿà³‹à²•ಾಲೠಆವೃತà³à²¤à²¿à²¯à²¨à³à²¨à³ ನಾವೠಬೆಂಬಲಿಸà³à²¤à³à²¤à³‡à²µà³†."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "ರದà³à²¦à³à²®à²¾à²¡à²¿"
@@ -277,7 +312,6 @@ msgid "Failed to download $1"
msgstr "$1 ಡೌನà³à²²à³‹à²¡à³ ಮಾಡಲೠಆಗಿಲà³à²²"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "ಆಟಗಳà³"
@@ -300,7 +334,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "ಮಾಡà³â€à²—ಳà³"
@@ -399,12 +432,8 @@ msgid "Decorations"
msgstr "ಅಲಂಕಾರಗಳà³"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "minetest.net ನಿಂದ ಮೈನà³à²Ÿà³†à²¸à³à²Ÿà³ ಗೇಮೠನಂತಹ ಆಟವನà³à²¨à³ ಡೌನೠಲೋಡೠಮಾಡಿ"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "minetest.net ಇಂದ ಒಂದನà³à²¨à³ ಡೌನೠಲೋಡೠಮಾಡಿ"
+msgid "Development Test is meant for developers."
+msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
@@ -424,10 +453,6 @@ msgstr "ಆಕಾಶದಲà³à²²à²¿ ತೇಲà³à²¤à³à²¤à²¿à²°à³à²µ ಭೂಭà
msgid "Floatlands (experimental)"
msgstr "ತೇಲà³à²µ ಭೂಮಿಗಳೠ(ಪà³à²°à²¾à²¯à³‹à²—ಿಕ)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "ಆಟ"
-
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "Generate non-fractal terrain: Oceans and underground"
@@ -447,6 +472,15 @@ msgid "Increases humidity around rivers"
msgstr "ನದಿಗಳ ಸà³à²¤à³à²¤ ತೇವಾಂಶ ವನà³à²¨à³ ಹೆಚà³à²šà²¿à²¸à³à²¤à³à²¤à²¦à³†"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "ಇನà³à²¸à³à²Ÿà²¾à²²à³"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "ಕೆರೆ"
@@ -553,10 +587,6 @@ 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 ""
@@ -586,6 +616,36 @@ msgstr ""
msgid "Delete World \"$1\"?"
msgstr ""
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr ""
@@ -616,6 +676,14 @@ msgstr ""
msgid "Browse"
msgstr ""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr ""
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
@@ -672,7 +740,7 @@ msgstr ""
msgid "Select file"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr ""
@@ -817,6 +885,10 @@ msgstr ""
msgid "Previous Core Developers"
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -885,10 +957,6 @@ msgstr ""
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 ""
@@ -897,10 +965,6 @@ msgstr ""
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 ""
@@ -934,10 +998,6 @@ msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr ""
@@ -947,10 +1007,6 @@ msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr ""
@@ -963,6 +1019,10 @@ msgid "Join Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
@@ -976,10 +1036,18 @@ msgid "Refresh"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr ""
@@ -1024,7 +1092,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1121,7 +1189,7 @@ msgid "Tone Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1129,7 +1197,7 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1148,6 +1216,10 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr ""
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1282,7 +1354,7 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1386,6 +1458,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr ""
@@ -1891,24 +1968,6 @@ msgstr "$1 ಡೌನà³à²²à³‹à²¡à³ ಮಾಡಲೠಆಗಿಲà³à²²"
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 ""
@@ -1941,7 +2000,7 @@ msgstr ""
msgid "Change camera"
msgstr ""
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr ""
@@ -1994,7 +2053,7 @@ msgid "Key already in use"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -2066,15 +2125,15 @@ msgid "Change"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
+msgid "New Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "New Password"
+msgid "Old Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Old Password"
+msgid "Passwords do not match!"
msgstr ""
#: src/gui/guiVolumeChange.cpp
@@ -2090,12 +2149,6 @@ msgstr ""
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).
@@ -2103,6 +2156,15 @@ msgstr ""
msgid "LANG_CODE"
msgstr "kn"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr ""
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2228,6 +2290,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2309,6 +2375,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2322,7 +2392,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2391,6 +2461,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2431,10 +2505,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2455,7 +2525,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2467,6 +2537,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2491,6 +2565,10 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Camera"
+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"
@@ -2647,6 +2725,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2742,6 +2824,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2775,7 +2861,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2842,11 +2930,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2989,6 +3077,11 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "ಅಲಂಕಾರಗಳà³"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -3009,6 +3102,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3078,6 +3177,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3094,19 +3197,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3180,6 +3277,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3198,6 +3299,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3275,7 +3380,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
+msgid "Filtering and Antialiasing"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3343,6 +3448,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3491,6 +3600,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "ಆಟಗಳà³"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3518,6 +3640,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3534,7 +3664,11 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3774,11 +3908,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3839,6 +3980,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3860,7 +4007,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3900,10 +4049,6 @@ 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 ""
@@ -3954,15 +4099,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4583,6 +4724,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4638,7 +4783,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4648,15 +4793,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4668,7 +4816,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4696,6 +4845,10 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lighting"
+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"
@@ -5080,10 +5233,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5132,6 +5281,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5218,16 +5379,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5240,6 +5401,10 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5277,10 +5442,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5374,10 +5535,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5424,10 +5581,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5596,6 +5749,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5623,19 +5780,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Seabed noise"
+msgid "Screenshots"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgid "Seabed noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of two 3D noises that together define tunnels."
+msgid "Second of 4 2D noises that together define hill/mountain range height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Security"
+msgid "Second of two 3D noises that together define tunnels."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5678,7 +5835,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
+#, fuzzy
+msgid "Server"
+msgstr "ಆರà³à²¦à³à²° ನದಿಗಳà³"
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5706,10 +5872,18 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5720,12 +5894,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5733,7 +5909,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5809,7 +5985,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6009,6 +6185,10 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6211,7 +6391,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6235,10 +6415,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6329,6 +6517,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6562,6 +6754,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6651,6 +6852,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6665,9 +6870,18 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "ಹಿಂದೆ"
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "minetest.net ನಿಂದ ಮೈನà³à²Ÿà³†à²¸à³à²Ÿà³ ಗೇಮೠನಂತಹ ಆಟವನà³à²¨à³ ಡೌನೠಲೋಡೠಮಾಡಿ"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "minetest.net ಇಂದ ಒಂದನà³à²¨à³ ಡೌನೠಲೋಡೠಮಾಡಿ"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "$1 ಡೌನà³à²²à³‹à²¡à³ ಮತà³à²¤à³ ಇನà³à²¸à³à²Ÿà²¾à²²à³ ಮಾಡಲಾಗà³à²¤à³à²¤à²¿à²¦à³†, ದಯವಿಟà³à²Ÿà³ ನಿರೀಕà³à²·à²¿à²¸à²¿..."
+#~ msgid "Game"
+#~ msgstr "ಆಟ"
+
#~ msgid "Ok"
#~ msgstr "ಸರಿ"
diff --git a/po/ko/minetest.po b/po/ko/minetest.po
index 2db18a179..f30943348 100644
--- a/po/ko/minetest.po
+++ b/po/ko/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Korean (Minetest)\n"
"Report-Msgid-Bugs-To: \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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-05-08 00:22+0000\n"
+"Last-Translator: Han So Ri <2_0_2_0_@naver.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/minetest/minetest/"
"ko/>\n"
"Language: ko\n"
@@ -12,7 +12,7 @@ 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-dev\n"
+"X-Generator: Weblate 4.12.1\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -24,28 +24,24 @@ msgid "Empty command."
msgstr "채팅 명ë ì–´"
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Exit to main menu"
-msgstr "메뉴로 나가기"
+msgstr "ë©”ì¸ ë©”ë‰´ë¡œ 나가기"
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Invalid command: "
-msgstr "지역 명령어"
+msgstr "유효하지 ì•Šì€ ëª…ë ¹ì–´: "
#: builtin/client/chatcommands.lua
msgid "Issued command: "
msgstr ""
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "List online players"
-msgstr "싱글 플레ì´ì–´"
+msgstr "온ë¼ì¸ 플레ì´ì–´ 목ë¡"
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Online players: "
-msgstr "싱글 플레ì´ì–´"
+msgstr "온ë¼ì¸ 플레ì´ì–´: "
#: builtin/client/chatcommands.lua
msgid "The out chat queue is now empty."
@@ -53,7 +49,7 @@ msgstr ""
#: builtin/client/chatcommands.lua
msgid "This command is disabled by server."
-msgstr ""
+msgstr "서버ì—서 사용 í•  수 없는 명령어입니다."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -108,17 +104,42 @@ 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 "ì„œë²„ì— ìž¬ì ‘ì† í•˜ì„¸ìš”:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "월드 ì„ íƒ:"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "프로토콜 ë²„ì „ì´ ì•Œë§žì§€ 않습니다. "
@@ -131,6 +152,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "서버가 프로토콜 버전 $1와(ê³¼) $2 ë‘ ê°€ì§€ë¥¼ 제공합니다. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "프로토콜 버전 $1만 제공합니다."
@@ -138,14 +163,21 @@ msgstr "프로토콜 버전 $1만 제공합니다."
msgid "We support protocol versions between version $1 and $2."
msgstr "프로토콜 버전 $1와(ê³¼) $2 사ì´ì˜ ë²„ì „ì„ ì œê³µí•©ë‹ˆë‹¤."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "취소"
@@ -259,9 +291,8 @@ 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"
@@ -285,7 +316,6 @@ msgid "Failed to download $1"
msgstr "$1ì„ ë‹¤ìš´ë¡œë“œí•˜ëŠ” ë°ì— 실패했습니다"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "게임"
@@ -311,7 +341,6 @@ msgstr ""
"다"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "모드"
@@ -324,13 +353,12 @@ 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"
@@ -366,7 +394,7 @@ 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"
@@ -405,12 +433,9 @@ 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ì—서 다운로드 하세요"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "경고: Development Test는 개발ìžë¥¼ 위한 모드입니다."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -428,10 +453,6 @@ msgstr "í•˜ëŠ˜ì— ë– ìžˆëŠ” 광대한 대지"
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 "ì¶”ìƒì ì´ì§€ ì•Šì€ ì§€í˜• ìƒì„±: 바다와 지하"
@@ -449,6 +470,15 @@ msgid "Increases humidity around rivers"
msgstr "ê°• ì£¼ë³€ì˜ ìŠµë„ ì¦ê°€"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "설치"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "호수"
@@ -549,10 +579,6 @@ 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 "세계 ì´ë¦„"
@@ -582,6 +608,40 @@ msgstr "pkgmgr: ìž˜ëª»ëœ ê²½ë¡œ\"$1\""
msgid "Delete World \"$1\"?"
msgstr "\"$1\"ì„(를) 삭제하시겠습니까?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "비밀번호 확ì¸"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Mapgen ì´ë¦„"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Password"
+msgstr "새로운 비밀번호"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "비밀번호가 맞지 않습니다!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "등ë¡í•˜ê³  참여"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "수ë½"
@@ -614,6 +674,16 @@ msgstr "< 설정 페ì´ì§€ë¡œ ëŒì•„가기"
msgid "Browse"
msgstr "열기"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "컨í…츠"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "컨í…츠"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "비활성화ë¨"
@@ -671,7 +741,7 @@ msgstr "경로를 ì„ íƒí•˜ì„¸ìš”"
msgid "Select file"
msgstr "íŒŒì¼ ì„ íƒ"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "ê¸°ìˆ ì  ì´ë¦„ 보기"
@@ -819,6 +889,11 @@ msgstr "ì´ì „ 공헌ìžë“¤"
msgid "Previous Core Developers"
msgstr "ì´ì „ 코어 개발ìžë“¤"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "디버그 정보 보기"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "온ë¼ì¸ 컨í…츠 검색"
@@ -887,10 +962,6 @@ msgstr "호스트 서버"
msgid "Install games from ContentDB"
msgstr "ContentDBì—서 게임 설치"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "새로 만들기"
@@ -899,11 +970,6 @@ msgstr "새로 만들기"
msgid "No world created or selected!"
msgstr "월드를 만들거나 ì„ íƒí•˜ì§€ 않았습니다!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "새로운 비밀번호"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "게임하기"
@@ -939,10 +1005,6 @@ msgid "Clear"
msgstr "지우기"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "ì—°ê²°"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "í¬ë¦¬ì—ì´í‹°ë¸Œ 모드"
@@ -953,10 +1015,6 @@ msgid "Damage / PvP"
msgstr "ë°ë¯¸ì§€"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "ì¦ê²¨ì°¾ê¸° ì‚­ì œ"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "ì¦ê²¨ì°¾ê¸°"
@@ -970,6 +1028,10 @@ msgid "Join Game"
msgstr "게임 참가"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "í•‘"
@@ -984,10 +1046,19 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "ì›ê²© í¬íЏ"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "서버 설명"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2 x"
@@ -1033,8 +1104,9 @@ msgid "Dynamic shadows"
msgstr "글꼴 그림ìž"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr ""
+#, fuzzy
+msgid "Dynamic shadows:"
+msgstr "글꼴 그림ìž"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1130,7 +1202,8 @@ msgid "Tone Mapping"
msgstr "톤 매핑"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "터치 임계값: (픽셀)"
#: builtin/mainmenu/tab_settings.lua
@@ -1138,7 +1211,7 @@ msgid "Trilinear Filter"
msgstr "선형 필터"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1157,6 +1230,11 @@ msgstr "물 ë“±ì˜ ë¬¼ê²°íš¨ê³¼"
msgid "Waving Plants"
msgstr "움ì§ì´ëŠ” ì‹ë¬¼ 효과"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "연결 오류 (시간초과)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "ì—°ê²° ì‹œê°„ì´ ì´ˆê³¼í–ˆìŠµë‹ˆë‹¤."
@@ -1294,7 +1372,7 @@ msgid "Camera update enabled"
msgstr "ì¹´ë©”ë¼ ì—…ë°ì´íЏ 활성화"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1425,6 +1503,11 @@ msgid "Enabled unlimited viewing range"
msgstr "제한없는 시야 범위 활성화"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "í´ë¼ì´ì–¸íЏ 만드는 중..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "메뉴로 나가기"
@@ -1932,28 +2015,6 @@ msgstr "$1ì„ ë‹¤ìš´ë¡œë“œí•˜ëŠ” ë°ì— 실패했습니다"
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 ""
-"ë‹¹ì‹ ì€ ì²˜ìŒ \"%s\"ë¼ëŠ” ì´ë¦„으로 ì´ ì„œë²„ì— ì°¸ì—¬í•˜ë ¤ê³  합니다. \n"
-"계ì†í•œë‹¤ë©´, ìžê²©ì´ ê°–ì¶°ì§„ 새 ê³„ì •ì´ ì´ ì„œë²„ì— ìƒì„±ë©ë‹ˆë‹¤. \n"
-"비밀번호를 다시 입력하고 'ë“±ë¡ í•˜ê³  참여'를 누르거나 '취소'를 눌러 중단하십시"
-"오."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "계ì†í•˜ê¸°"
@@ -1987,7 +2048,7 @@ msgstr ""
msgid "Change camera"
msgstr "ì¹´ë©”ë¼ ë³€ê²½"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "채팅"
@@ -2040,9 +2101,8 @@ msgid "Key already in use"
msgstr "ì´ë¯¸ 사용하고 있는 키입니다"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Keybindings. (ì´ ë©”ë‰´ë¥¼ 고정하려면 minetest.cofì—서 stuff를 제거해야합니다.)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2113,10 +2173,6 @@ msgid "Change"
msgstr "변경"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "비밀번호 확ì¸"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "새로운 비밀번호"
@@ -2124,6 +2180,10 @@ msgstr "새로운 비밀번호"
msgid "Old Password"
msgstr "현재 비밀번호"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "비밀번호가 맞지 않습니다!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "나가기"
@@ -2137,12 +2197,6 @@ msgstr "ìŒì†Œê±°"
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).
@@ -2150,6 +2204,16 @@ msgstr "들어가기 "
msgid "LANG_CODE"
msgstr "ko"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "ì´ë¦„ì„ ì„ íƒí•˜ì„¸ìš”!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2313,6 +2377,10 @@ msgstr ""
"- pageflip: quadbuffer based 3d."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2405,6 +2473,11 @@ msgstr ""
"í•­ìƒ í™•ì‹¤í•˜ê²Œ 테스트 후 사용)는 단단한 플롯랜드 ë ˆì´ì–´ë¥¼ 만듭니다."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "ì•„ì´í…œ ì´ë¦„ 추가"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "고급"
@@ -2423,7 +2496,8 @@ msgstr ""
"ë¹›ì€, ìžì—°ì ì¸ 야간 ì¡°ëª…ì— ê±°ì˜ ì˜í–¥ì„ 미치지 않습니다."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "í•­ìƒ ë¹„í–‰ ë° ê³ ì† ëª¨ë“œ"
#: src/settings_translation_file.cpp
@@ -2502,6 +2576,10 @@ msgstr ""
"ë§µ ë¸”ë¡ (16 ê°œ 노드)ì— ëª…ì‹œë˜ì–´ 있습니다."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "ìžë™ ì „ì§„ 키"
@@ -2544,10 +2622,6 @@ msgid "Base terrain height."
msgstr "기본 지형 높ì´."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "기본"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "기본 권한"
@@ -2568,7 +2642,8 @@ msgid "Bind address"
msgstr "ë°”ì¸ë”© 주소"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Biome API ì˜¨ë„ ë° ìŠµë„ ì†ŒìŒ ë§¤ê°œ 변수"
#: src/settings_translation_file.cpp
@@ -2580,6 +2655,10 @@ msgid "Block send optimize distance"
msgstr "ë¸”ë¡ ì „ì†¡ 최ì í™” 거리"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "êµµì€ ê¸°ìš¸ìž„ ê¼´ 글꼴 경로"
@@ -2604,6 +2683,11 @@ msgid "Builtin"
msgstr "기본 제공"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+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"
@@ -2770,6 +2854,11 @@ msgid "Client side node lookup range restriction"
msgstr "í´ë¼ì´ì–¸íЏ 측 노드 조회 범위 제한"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "í´ë¼ì´ì–¸íЏ 모딩"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "오르는 ì†ë„"
@@ -2878,6 +2967,10 @@ msgid "Console height"
msgstr "콘솔 높ì´"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "콘í…츠DB 블랙리스트 플래그"
@@ -2916,8 +3009,10 @@ msgstr ""
"72 = 20 분, 360 = 4 분, 1 = 24 시간, 0 = 낮/밤/바뀌지 않고 그대로."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "ì•¡ì²´ì˜ í•˜ê°• ì†ë„ 제어."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2987,12 +3082,12 @@ msgid "Debug log level"
msgstr "디버그 로그 수준"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "볼륨 낮추기 키"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "움ì§ìž„ì— ëŒ€í•œ ì•¡ì²´ ì €í•­ì„ ë†’ì´ë ¤ë©´ ì´ ê°’ì„ ì¤„ìž…ë‹ˆë‹¤."
+msgid "Dec. volume key"
+msgstr "볼륨 낮추기 키"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3137,6 +3232,11 @@ msgstr "ë¸”ë¡ ì• ë‹ˆë©”ì´ì…˜ 비ë™ê¸°í™”"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Developer Options"
+msgstr "장ì‹"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Dig key"
msgstr "오른쪽 키"
@@ -3157,6 +3257,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "ë„ë©”ì¸ ì„œë²„ì˜ ì´ë¦„ì€ ì„œë²„ë¦¬ìŠ¤íŠ¸ì— í‘œì‹œ ë©ë‹ˆë‹¤."
@@ -3227,6 +3333,10 @@ msgid "Enable joysticks"
msgstr "ì¡°ì´ìŠ¤í‹± 활성화"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "모드 ì±„ë„ ì§€ì› í™œì„±í™”."
@@ -3243,19 +3353,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3341,6 +3445,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "계곡 측면"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "엔진 프로 파ì¼ë§ ë°ì´í„° 출력 간격"
@@ -3359,6 +3468,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "FPS when unfocused or paused"
msgstr "ê²Œìž„ì´ ì¼ì‹œì •ì§€ë ë•Œì˜ 최대 FPS."
@@ -3442,8 +3555,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "í•„í„°ë§"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "매ë„럽게 표현하기:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3510,6 +3624,11 @@ msgid "Fog toggle key"
msgstr "안개 스위치"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "글꼴 í¬ê¸°"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3658,6 +3777,19 @@ msgid "GUI scaling filter txr2img"
msgstr "GUI í¬ê¸° ì¡°ì • í•„í„° txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "게임"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "글로벌 콜백"
@@ -3685,6 +3817,16 @@ msgid "Graphics"
msgstr "그래픽"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "그래픽"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "그래픽"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "중력"
@@ -3701,10 +3843,15 @@ msgid "HTTP mods"
msgstr "HTTP 모드"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "GUI í¬ê¸° ì¡°ì •"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr "HUD 토글 키"
@@ -3942,11 +4089,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "움ì§ìž„ì— ëŒ€í•œ ì•¡ì²´ ì €í•­ì„ ë†’ì´ë ¤ë©´ ì´ ê°’ì„ ì¤„ìž…ë‹ˆë‹¤."
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "제작할 ê°•ì˜ ë„ˆë¹„."
@@ -4010,6 +4165,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -4031,7 +4192,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr "ì ìš©í•  경우, 새로운 플레ì´ì–´ëŠ” 빈 암호로 가입 í•  수 없습니다."
#: src/settings_translation_file.cpp
@@ -4073,10 +4237,6 @@ 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 "게임 ë‚´ì—서 채팅 콘솔 ë°°ê²½ 알파 (불투명 함, 0와 255 사ì´)."
@@ -4127,16 +4287,13 @@ 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 ""
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
+msgstr "ë„구 설명 표시 지연, 1000ë¶„ì˜ 1ì´ˆ."
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
@@ -4971,6 +5128,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3 참조"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -5030,7 +5191,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5042,15 +5203,18 @@ msgstr ""
"ì‰ì´ë”를 활성화 해야 합니다."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5062,7 +5226,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5090,6 +5255,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+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"
@@ -5483,10 +5653,6 @@ msgid "Maximum users"
msgstr "최대 사용ìž"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "메뉴"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "메쉬 ìºì‹œ"
@@ -5535,6 +5701,20 @@ msgid "Mipmapping"
msgstr "밉매핑(Mipmapping)"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "프로파ì¼ëŸ¬"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "보안"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5627,16 +5807,17 @@ 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
+#, fuzzy
+msgid "Networking"
+msgstr "네트워í¬"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "ì‹ ê·œ 사용ìžëŠ” ì´ ë¹„ë°€ë²ˆí˜¸ë¥¼ 입력해야 합니다."
@@ -5649,6 +5830,11 @@ msgid "Noclip key"
msgstr "ë…¸í´ë¦½ 키"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Node ê°•ì¡°"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Node ê°•ì¡°"
@@ -5686,10 +5872,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "불투명한 액체"
@@ -5788,10 +5970,6 @@ msgstr ""
"서버ì—서는 \"fly\" ê¶Œí•œì„ í•„ìš”ë¡œ 합니다."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "플레ì´ì–´ ì´ë¦„"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "플레ì´ì–´ 전송 거리"
@@ -5843,10 +6021,6 @@ msgid "Profiler toggle key"
msgstr "프로파ì¼ëŸ¬ 토글 키"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "프로 파ì¼ë§"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -6017,6 +6191,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "화면:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "화면 높ì´"
@@ -6047,6 +6226,11 @@ msgstr ""
"기본 í’ˆì§ˆì„ ì‚¬ìš©í•˜ë ¤ë©´ 0ì„ ì‚¬ìš© 합니다."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "스í¬ë¦°ìƒ·"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "í•´ì € ë…¸ì´ì¦ˆ"
@@ -6059,10 +6243,6 @@ 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 "Http://www.sqlite.org/pragma.html#pragma_synchronous 참조"
@@ -6121,8 +6301,19 @@ msgstr ""
"18 = 4 D \"ë§Œë¸ë²Œë¸Œ\" 줄리아 ì§‘í•©."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "서버 / 싱글 플레ì´ì–´"
+#, fuzzy
+msgid "Server"
+msgstr "서버 URL"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "서버 ì´ë¦„"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "서버 설명"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6149,10 +6340,20 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "서버 í¬íЏ"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "서버리스트 URL"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "서버리스트 URL"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "서버리스트 파ì¼"
@@ -6165,12 +6366,14 @@ msgstr ""
"설정 ì ìš© 후 ìž¬ì‹œìž‘ì´ í•„ìš”í•©ë‹ˆë‹¤."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -6178,7 +6381,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6269,7 +6472,7 @@ msgid ""
msgstr "글꼴 ê·¸ë¦¼ìž ì˜¤í”„ì…‹, 만약 0 ì´ë©´ 그림ìžëŠ” 나타나지 ì•Šì„ ê²ƒìž…ë‹ˆë‹¤."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6478,6 +6681,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "설정"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "지형 높ì´"
@@ -6685,7 +6893,8 @@ msgid "Time speed"
msgstr "시간 ì†ë„"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
"메모리ì—서 사용 하지 않는 ë§µ ë°ì´í„°ë¥¼ 제거하기 위해 í´ë¼ì´ì–¸íŠ¸ì— ëŒ€í•œ 시간 ì œ"
"한입니다."
@@ -6713,10 +6922,19 @@ msgid "Touch screen threshold"
msgstr "터치임계값 (픽셀)"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "터치임계값 (픽셀)"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6810,6 +7028,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "삼중 선형 í•„í„°ë§ì€ ì§ˆê° ìŠ¤ì¼€ì¼ë§ì„ í•  때 사용 합니다."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -7061,6 +7283,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -7155,6 +7386,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -7188,6 +7423,9 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "뒤로"
+#~ msgid "Basic"
+#~ msgstr "기본"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "ì „ì²´ 화면 모드ì—서 (ì¼ëª… 색 ë†ë„) 픽셀 당 비트."
@@ -7216,6 +7454,12 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "환경설정"
+#~ msgid "Connect"
+#~ msgstr "ì—°ê²°"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "ì•¡ì²´ì˜ í•˜ê°• ì†ë„ 제어."
+
#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels."
#~ msgstr "í„°ë„ ë„ˆë¹„ë¥¼ ì¡°ì ˆ, ìž‘ì€ ìˆ˜ì¹˜ëŠ” ë„“ì€ í„°ë„ì„ ë§Œë“­ë‹ˆë‹¤."
@@ -7242,6 +7486,15 @@ msgstr ""
#~ "í…ìŠ¤ì²˜ì˜ ìƒ˜í”Œë§ ë‹¨ê³„ë¥¼ ì •ì˜í•©ë‹ˆë‹¤.\n"
#~ "ì¼ë°˜ ë§µì— ë¶€ë“œëŸ½ê²Œ ë†’ì€ ê°’ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤."
+#~ msgid "Del. Favorite"
+#~ msgstr "ì¦ê²¨ì°¾ê¸° ì‚­ì œ"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "minetest.netì—서 Minetest Game ê°™ì€ ì„œë¸Œ ê²Œìž„ì„ ë‹¤ìš´ë¡œë“œí•˜ì„¸ìš”"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "minetest.netì—서 다운로드 하세요"
+
#, fuzzy
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "$1 를(ì„) 다운로드중입니다. 기다려주세요..."
@@ -7273,6 +7526,9 @@ msgstr ""
#~ "시차 êµí•© 맵핑 ì ìš©.\n"
#~ "ì‰ì´ë”를 활성화 해야 합니다."
+#~ msgid "Enter "
+#~ msgstr "들어가기 "
+
#~ msgid "FPS in pause menu"
#~ msgstr "ì¼ì‹œì •ì§€ 메뉴ì—서 FPS"
@@ -7285,6 +7541,9 @@ msgstr ""
#~ msgid "Fallback font size"
#~ msgstr "대체 글꼴 í¬ê¸°"
+#~ msgid "Filtering"
+#~ msgstr "í•„í„°ë§"
+
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "글꼴 ê·¸ë¦¼ìž íˆ¬ëª…ë„ (불투명 함, 0ê³¼ 255 사ì´)."
@@ -7294,6 +7553,9 @@ msgstr ""
#~ msgid "Full screen BPP"
#~ msgstr "전체 화면 BPP"
+#~ msgid "Game"
+#~ msgstr "게임"
+
#~ msgid "Gamma"
#~ msgstr "ê°ë§ˆ"
@@ -7303,9 +7565,18 @@ msgstr ""
#~ msgid "Generate normalmaps"
#~ msgstr "Normalmaps ìƒì„±"
+#~ msgid "In-Game"
+#~ msgstr "ì¸ê²Œìž„"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "모드 설치: 파ì¼: \"$1\""
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Keybindings. (ì´ ë©”ë‰´ë¥¼ 고정하려면 minetest.cofì—서 stuff를 제거해야합니"
+#~ "다.)"
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "í° ë™êµ´ 깊ì´"
@@ -7316,6 +7587,9 @@ msgstr ""
#~ msgid "Main menu style"
#~ msgstr "주 메뉴 스í¬ë¦½íЏ"
+#~ msgid "Menus"
+#~ msgstr "메뉴"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "ë ˆì´ë” ëª¨ë“œì˜ ë¯¸ë‹ˆë§µ, 2ë°° 확대"
@@ -7383,6 +7657,12 @@ msgstr ""
#~ msgid "Path to save screenshots at."
#~ msgstr "스í¬ë¦°ìƒ· 저장 경로입니다."
+#~ msgid "Player name"
+#~ msgstr "플레ì´ì–´ ì´ë¦„"
+
+#~ msgid "Profiling"
+#~ msgstr "프로 파ì¼ë§"
+
#~ msgid "PvP enabled"
#~ msgstr "PvP 가능"
@@ -7393,6 +7673,9 @@ msgstr ""
#~ msgid "Select Package File:"
#~ msgstr "ì„ íƒí•œ 모드 파ì¼:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "서버 / 싱글 플레ì´ì–´"
+
#~ msgid "Shadow limit"
#~ msgstr "ê·¸ë¦¼ìž ì œí•œ"
@@ -7434,6 +7717,20 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "예"
+#, 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 ""
+#~ "ë‹¹ì‹ ì€ ì²˜ìŒ \"%s\"ë¼ëŠ” ì´ë¦„으로 ì´ ì„œë²„ì— ì°¸ì—¬í•˜ë ¤ê³  합니다. \n"
+#~ "계ì†í•œë‹¤ë©´, ìžê²©ì´ ê°–ì¶°ì§„ 새 ê³„ì •ì´ ì´ ì„œë²„ì— ìƒì„±ë©ë‹ˆë‹¤. \n"
+#~ "비밀번호를 다시 입력하고 'ë“±ë¡ í•˜ê³  참여'를 누르거나 '취소'를 눌러 중단하"
+#~ "십시오."
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "사ë§í–ˆìŠµë‹ˆë‹¤"
diff --git a/po/ky/minetest.po b/po/ky/minetest.po
index ca0910781..5de3ad5f7 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: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -122,6 +122,31 @@ msgid "The server has requested a reconnect:"
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Дүйнөнү тандаңыз:"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr ""
@@ -134,6 +159,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr ""
@@ -141,14 +170,21 @@ msgstr ""
msgid "We support protocol versions between version $1 and $2."
msgstr ""
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Жокко чыгаруу"
@@ -295,7 +331,6 @@ msgid "Failed to download $1"
msgstr "Дүйнөнү инициалдаштыруу катаÑÑ‹"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
msgid "Games"
msgstr "Оюн"
@@ -317,7 +352,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr ""
@@ -410,11 +444,7 @@ 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"
+msgid "Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -433,10 +463,6 @@ msgstr ""
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 ""
@@ -454,6 +480,14 @@ msgid "Increases humidity around rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr ""
@@ -554,10 +588,6 @@ 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 "Дүйнө аты"
@@ -588,6 +618,38 @@ msgstr ""
msgid "Delete World \"$1\"?"
msgstr "Дүйнөнү өчүрүү"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "СырÑөздү аныктоо"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Password"
+msgstr "Жаңы ÑырÑөз"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "СырÑөздөр дал келген жок!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Кабыл алуу"
@@ -618,6 +680,16 @@ msgstr ""
msgid "Browse"
msgstr ""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Улантуу"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Улантуу"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Disabled"
@@ -678,7 +750,7 @@ msgstr "Дүйнөнү тандаңыз:"
msgid "Select file"
msgstr "Дүйнөнү тандаңыз:"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr ""
@@ -831,6 +903,10 @@ msgstr ""
msgid "Previous Core Developers"
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -902,10 +978,6 @@ msgstr ""
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 "Жаңы"
@@ -914,11 +986,6 @@ msgstr "Жаңы"
msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "Жаңы ÑырÑөз"
-
#: builtin/mainmenu/tab_local.lua
#, fuzzy
msgid "Play Game"
@@ -956,10 +1023,6 @@ msgid "Clear"
msgstr "Тазалоо"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Туташуу"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Creative mode"
msgstr "Жаратуу режими"
@@ -972,11 +1035,6 @@ msgstr "Убалды күйгүзүү"
#: builtin/mainmenu/tab_online.lua
#, fuzzy
-msgid "Del. Favorite"
-msgstr "Тандалмалар:"
-
-#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Favorites"
msgstr "Тандалмалар:"
@@ -990,6 +1048,10 @@ msgid "Join Game"
msgstr "Оюн"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
@@ -1002,10 +1064,19 @@ msgid "Refresh"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Тандалмалар:"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr ""
@@ -1055,7 +1126,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1164,7 +1235,7 @@ msgid "Tone Mapping"
msgstr "Mip-текÑтуралоо"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1173,7 +1244,7 @@ msgid "Trilinear Filter"
msgstr "ҮчÑызык чыпкалооÑу"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1195,6 +1266,11 @@ msgstr "Кооз бактар"
msgid "Waving Plants"
msgstr "Кооз бактар"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Туташтыруу катаÑÑ‹ (убактыңыз өтүп кеттиби?)"
+
#: src/client/client.cpp src/client/game.cpp
#, fuzzy
msgid "Connection timed out."
@@ -1339,7 +1415,7 @@ msgid "Camera update enabled"
msgstr "күйгүзүлгөн"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1457,6 +1533,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Клиент жаратылууда..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Менюга чыгуу"
@@ -1982,24 +2063,6 @@ msgstr "Дүйнөнү инициалдаштыруу катаÑÑ‹"
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 "Улантуу"
@@ -2034,7 +2097,7 @@ msgstr ""
msgid "Change camera"
msgstr "БаÑкычтарды өзгөртүү"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Маек"
@@ -2088,7 +2151,7 @@ msgid "Key already in use"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -2168,10 +2231,6 @@ msgid "Change"
msgstr "Өзгөртүү"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "СырÑөздү аныктоо"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Жаңы ÑырÑөз"
@@ -2179,6 +2238,10 @@ msgstr "Жаңы ÑырÑөз"
msgid "Old Password"
msgstr "ЭÑки ÑырÑөз"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "СырÑөздөр дал келген жок!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Чыгуу"
@@ -2193,12 +2256,6 @@ msgstr "баÑкычты баÑыңыз"
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).
@@ -2206,6 +2263,15 @@ msgstr ""
msgid "LANG_CODE"
msgstr "ky"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr ""
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2332,6 +2398,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2413,6 +2483,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Дүйнө аты"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Кошумча"
@@ -2426,7 +2501,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2496,6 +2571,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Automatic forward key"
msgstr "Ðлга"
@@ -2539,10 +2618,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2565,7 +2640,7 @@ msgid "Bind address"
msgstr "Дареги чечилүүдө..."
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2577,6 +2652,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2602,6 +2681,11 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+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"
@@ -2764,6 +2848,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2867,6 +2955,10 @@ msgid "Console height"
msgstr "КонÑоль"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2902,7 +2994,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2971,11 +3065,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3119,6 +3213,10 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Dig key"
msgstr "Оң меню"
@@ -3142,6 +3240,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3211,6 +3315,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3227,19 +3335,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3314,6 +3416,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3332,6 +3438,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3409,9 +3519,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Filtering"
-msgstr "ÐÐ½Ð¸Ð·Ð°Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ Ñ‡Ñ‹Ð¿ÐºÐ°Ð»Ð¾Ð¾Ñу"
+msgid "Filtering and Antialiasing"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3478,6 +3587,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3627,6 +3740,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Оюн"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3654,6 +3780,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3670,7 +3804,11 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3911,11 +4049,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3976,6 +4121,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3997,7 +4148,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4037,11 +4190,6 @@ msgid "Ignore world errors"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "In-Game"
-msgstr "Оюн"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
@@ -4093,15 +4241,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4724,6 +4868,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4781,7 +4929,7 @@ msgstr "Сол меню"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4791,15 +4939,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4811,7 +4962,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4839,6 +4991,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+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"
@@ -5224,11 +5381,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Menus"
-msgstr "Меню"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5278,6 +5430,18 @@ msgid "Mipmapping"
msgstr "Mip-текÑтуралоо"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5365,16 +5529,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5387,6 +5551,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Тегиз жарык"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5424,10 +5593,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5523,10 +5688,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5574,10 +5735,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5750,6 +5907,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Тез Ñүрөт"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5779,6 +5941,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Тез Ñүрөт"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5791,10 +5958,6 @@ 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 ""
@@ -5835,10 +5998,19 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Server / Singleplayer"
+msgid "Server"
+msgstr "Жалпылык Ñерверлердин тизмеÑи:"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
msgstr "Бир кишилик"
#: src/settings_translation_file.cpp
+msgid "Server Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Server URL"
msgstr ""
@@ -5863,12 +6035,21 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Serverlist URL"
msgstr "Жалпылык Ñерверлердин тизмеÑи:"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "Жалпылык Ñерверлердин тизмеÑи:"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Serverlist file"
msgstr "Жалпылык Ñерверлердин тизмеÑи:"
@@ -5879,12 +6060,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5892,7 +6075,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5970,7 +6153,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6173,6 +6356,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "ЫраÑтоолор"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6375,7 +6563,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6399,10 +6587,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6494,6 +6690,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6733,6 +6933,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6823,6 +7032,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6868,6 +7081,9 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "ЫраÑтоо"
+#~ msgid "Connect"
+#~ msgstr "Туташуу"
+
#~ msgid "Credits"
#~ msgstr "Ðлкыштар"
@@ -6884,6 +7100,17 @@ msgstr ""
#~ msgstr "Убалды күйгүзүү"
#, fuzzy
+#~ msgid "Filtering"
+#~ msgstr "ÐÐ½Ð¸Ð·Ð°Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ Ñ‡Ñ‹Ð¿ÐºÐ°Ð»Ð¾Ð¾Ñу"
+
+#~ msgid "Game"
+#~ msgstr "Оюн"
+
+#, fuzzy
+#~ msgid "In-Game"
+#~ msgstr "Оюн"
+
+#, fuzzy
#~ msgid "Main"
#~ msgstr "Башкы меню"
@@ -6892,6 +7119,10 @@ msgstr ""
#~ msgstr "Башкы меню"
#, fuzzy
+#~ msgid "Menus"
+#~ msgstr "Меню"
+
+#, fuzzy
#~ msgid "Name / Password"
#~ msgstr "Ðты/ÑырÑөзү"
diff --git a/po/lt/minetest.po b/po/lt/minetest.po
index 20c24fd0b..041611ede 100644
--- a/po/lt/minetest.po
+++ b/po/lt/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Lithuanian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -11,8 +11,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
-"%100<10 || n%100>=20) ? 1 : 2);\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.6-dev\n"
#: builtin/client/chatcommands.lua
@@ -120,6 +120,31 @@ msgid "The server has requested a reconnect:"
msgstr "Serveris paprašė prisijungti iš naujo:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Pasirinkite pasaulį:"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Neatitinka protokolo versija. "
@@ -132,6 +157,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Serveris palaiko protokolo versijas nuo $1 iki $2 "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Mes palaikome tik $1 protokolo versijÄ…."
@@ -139,14 +168,21 @@ msgstr "Mes palaikome tik $1 protokolo versijÄ…."
msgid "We support protocol versions between version $1 and $2."
msgstr "Mes palaikome protokolo versijas tarp $1 ir $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Atšaukti"
@@ -283,7 +319,6 @@ msgid "Failed to download $1"
msgstr "Nepavyko parsiųsti $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Žaidimai"
@@ -308,7 +343,6 @@ 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"
@@ -405,12 +439,8 @@ msgstr "Dekoracijos"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Atsisiųskite sub žaidimą, tokį kaip minetest_game, iš minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Atsisiųsti vieną iš minetest.net"
+msgid "Development Test is meant for developers."
+msgstr "Dėmesio: Minimalus kūrimo bandymas yra skirtas vystytojams."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -428,10 +458,6 @@ msgstr ""
msgid "Floatlands (experimental)"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Žaidimas"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr ""
@@ -449,6 +475,15 @@ msgid "Increases humidity around rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Įdiegti"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr ""
@@ -551,11 +586,6 @@ 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 "Dėmesio: Minimalus kūrimo bandymas yra skirtas vystytojams."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Pasaulio pavadinimas"
@@ -588,6 +618,38 @@ msgstr "Papildtvrk: netinkamas papildinio kelias „$1“"
msgid "Delete World \"$1\"?"
msgstr "Ištrinti pasaulį „$1“?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Patvirtinti slaptažodį"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Password"
+msgstr "Naujas slaptažodis"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Slaptažodžiai nesutampa!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Priimti"
@@ -618,6 +680,16 @@ msgstr "< Atgal į Nustatymus"
msgid "Browse"
msgstr "Naršyti"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Tęsti"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Tęsti"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Disabled"
@@ -676,7 +748,7 @@ msgstr "Pasirinkite aplankÄ…"
msgid "Select file"
msgstr "Pasirinkite failÄ…"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr ""
@@ -838,6 +910,10 @@ msgstr "Ankstesni bendradarbiai"
msgid "Previous Core Developers"
msgstr "Ankstesni pagrindiniai kūrėjai"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -914,10 +990,6 @@ msgstr "Serveris"
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 "Naujas"
@@ -926,11 +998,6 @@ msgstr "Naujas"
msgid "No world created or selected!"
msgstr "Nesukurtas ar pasirinktas joks pasaulis!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "Naujas slaptažodis"
-
#: builtin/mainmenu/tab_local.lua
#, fuzzy
msgid "Play Game"
@@ -968,10 +1035,6 @@ msgid "Clear"
msgstr "Išvalyti"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Jungtis"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Kūrybinė veiksena"
@@ -982,10 +1045,6 @@ msgid "Damage / PvP"
msgstr "Leisti sužeidimus"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Pašalinti iš mėgiamų"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "MÄ—giami:"
@@ -1000,6 +1059,10 @@ msgid "Join Game"
msgstr "SlÄ—pti vidinius"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
@@ -1014,10 +1077,19 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "Pašalinti iš mėgiamų"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "Serverio prievadas"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1064,7 +1136,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1166,7 +1238,7 @@ msgid "Tone Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1174,7 +1246,7 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1195,6 +1267,11 @@ msgstr "Nepermatomi lapai"
msgid "Waving Plants"
msgstr ""
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Ryšio klaida (baigėsi prijungimo laikas?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "BaigÄ—si prijungimo laikas."
@@ -1336,7 +1413,7 @@ msgid "Camera update enabled"
msgstr "Žalojimas įjungtas"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1469,6 +1546,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Kuriamas klientas..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Grįžti į meniu"
@@ -1993,24 +2075,6 @@ msgstr "Nepavyko parsiųsti $1"
msgid "Opening webpage"
msgstr ""
-#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
-msgid "Passwords do not match!"
-msgstr "Slaptažodžiai nesutampa!"
-
-#: 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 "Vykdyti"
@@ -2046,7 +2110,7 @@ msgstr ""
msgid "Change camera"
msgstr "Nustatyti klavišus"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Susirašinėti"
@@ -2100,8 +2164,8 @@ msgid "Key already in use"
msgstr "Klavišas jau naudojamas"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "Klavišai. (Jei šis meniu sugenda, pašalinkite įrašus iš minetest.conf)"
+msgid "Keybindings."
+msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
@@ -2179,10 +2243,6 @@ msgid "Change"
msgstr "Pakeisti"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Patvirtinti slaptažodį"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Naujas slaptažodis"
@@ -2190,6 +2250,10 @@ msgstr "Naujas slaptažodis"
msgid "Old Password"
msgstr "Senas slaptažodis"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Slaptažodžiai nesutampa!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Išeiti"
@@ -2204,12 +2268,6 @@ msgstr "paspauskite klavišą"
msgid "Sound Volume: %d%%"
msgstr "Garso lygis: "
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Įvesti "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2217,6 +2275,15 @@ msgstr "Įvesti "
msgid "LANG_CODE"
msgstr "lt"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr ""
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2343,6 +2410,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2424,6 +2495,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Pasaulio pavadinimas"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2437,7 +2513,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2506,6 +2582,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Automatic forward key"
msgstr "Pirmyn"
@@ -2549,10 +2629,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2574,7 +2650,7 @@ msgid "Bind address"
msgstr "Ieškoma adreso..."
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2586,6 +2662,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2610,6 +2690,11 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Nustatyti klavišus"
+
+#: 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"
@@ -2774,6 +2859,11 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Žaisti tinkle(klientas)"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2874,6 +2964,10 @@ msgid "Console height"
msgstr "Nustatyti klavišus"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2909,7 +3003,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2978,11 +3074,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3129,6 +3225,11 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Developer Options"
+msgstr "Dekoracijos"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Dig key"
msgstr "Dešinėn"
@@ -3150,6 +3251,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3219,6 +3326,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Įjungti papildinių kanalų palaikymą."
@@ -3236,19 +3347,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3322,6 +3427,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3340,6 +3449,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3417,7 +3530,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
+msgid "Filtering and Antialiasing"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3485,6 +3598,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3634,6 +3751,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Žaidimai"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3661,6 +3791,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3678,7 +3816,11 @@ msgid "HTTP mods"
msgstr "Papildiniai"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3919,11 +4061,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3984,6 +4133,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -4005,7 +4160,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4045,11 +4202,6 @@ msgid "Ignore world errors"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "In-Game"
-msgstr "Žaidimas"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
@@ -4101,15 +4253,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4732,6 +4880,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4789,7 +4941,7 @@ msgstr "KairÄ—n"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4799,15 +4951,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4819,7 +4974,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4847,6 +5003,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Apšvietimo efektai"
+
+#: 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"
@@ -5241,11 +5402,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Menus"
-msgstr "Meniu"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5294,6 +5450,19 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Papildiniai internete"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5381,16 +5550,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5403,6 +5572,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Apšvietimo efektai"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5440,10 +5614,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5539,10 +5709,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5589,10 +5755,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5763,6 +5925,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5790,6 +5956,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Užlaikymas"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5802,10 +5973,6 @@ 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 ""
@@ -5846,8 +6013,18 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Server / Singleplayer"
-msgstr "Žaisti vienam"
+msgid "Server"
+msgstr "Serveris"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Serveris"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Serverio prievadas"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5880,11 +6057,21 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Serverio prievadas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Serverlist URL"
msgstr "Viešų serverių sąrašas"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "Viešų serverių sąrašas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Serverlist file"
msgstr "Viešų serverių sąrašas"
@@ -5895,12 +6082,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5908,7 +6097,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5985,7 +6174,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6188,6 +6377,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Nustatymai"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6390,7 +6584,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6414,10 +6608,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6508,6 +6710,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6745,6 +6951,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6835,6 +7050,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6867,6 +7086,9 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Konfigūruoti"
+#~ msgid "Connect"
+#~ msgstr "Jungtis"
+
#~ msgid "Credits"
#~ msgstr "PadÄ—kos"
@@ -6874,6 +7096,13 @@ msgstr ""
#~ msgstr "Žalojimas įjungtas"
#, fuzzy
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Atsisiųskite sub žaidimą, tokį kaip minetest_game, iš minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Atsisiųsti vieną iš minetest.net"
+
+#, fuzzy
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "AtsiunÄiama $1, praÅ¡ome palaukti..."
@@ -6885,10 +7114,25 @@ msgstr ""
#~ msgid "Enables filmic tone mapping"
#~ msgstr "Leisti sužeidimus"
+#~ msgid "Enter "
+#~ msgstr "Įvesti "
+
+#~ msgid "Game"
+#~ msgstr "Žaidimas"
+
+#, fuzzy
+#~ msgid "In-Game"
+#~ msgstr "Žaidimas"
+
#, fuzzy
#~ msgid "Install: file: \"$1\""
#~ msgstr "Įdiegti papildinį: failas: „$1“"
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Klavišai. (Jei šis meniu sugenda, pašalinkite įrašus iš minetest.conf)"
+
#~ msgid "Main"
#~ msgstr "Pagrindinis"
@@ -6896,6 +7140,10 @@ msgstr ""
#~ msgid "Main menu style"
#~ msgstr "Pagrindinis meniu"
+#, fuzzy
+#~ msgid "Menus"
+#~ msgstr "Meniu"
+
#~ msgid "Name / Password"
#~ msgstr "Vardas / Slaptažodis"
@@ -6927,6 +7175,10 @@ msgstr ""
#~ msgstr "Pasirinkite papildinio failÄ…:"
#, fuzzy
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Žaisti vienam"
+
+#, fuzzy
#~ msgid "Special key"
#~ msgstr "Nustatyti klavišus"
diff --git a/po/lv/minetest.po b/po/lv/minetest.po
index 24fc8faeb..b5aabb6d2 100644
--- a/po/lv/minetest.po
+++ b/po/lv/minetest.po
@@ -7,9 +7,9 @@ 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-02 10:26+0000\n"
-"Last-Translator: Dainis <dainis.skuja@gmail.com>\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-14 11:16+0000\n"
+"Last-Translator: Cow Boy <cowboylv@tutanota.com>\n"
"Language-Team: Latvian <https://hosted.weblate.org/projects/minetest/"
"minetest/lv/>\n"
"Language: lv\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= "
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
-"X-Generator: Weblate 4.6-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -124,6 +124,31 @@ msgid "The server has requested a reconnect:"
msgstr "Serveris ir pieprasījis savienojuma atjaunošanu:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Izvēlieties pasauli:"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Protokola versiju neatbilstība. "
@@ -136,6 +161,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Serveris atbalsta protokola versijas starp $1 un $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Mēs atbalstam tikai protokola versiju $1."
@@ -143,14 +172,21 @@ msgstr "Mēs atbalstam tikai protokola versiju $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Mēs atbalstam protokola versijas starp $1 un $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Atcelt"
@@ -291,7 +327,6 @@ msgid "Failed to download $1"
msgstr "NeizdevÄs lejuplÄdÄ“t $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Spēles"
@@ -315,7 +350,6 @@ 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"
@@ -357,6 +391,7 @@ msgid "Uninstall"
msgstr "Atinstalēt"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
msgid "Update"
msgstr "AtjauninÄt"
@@ -410,12 +445,10 @@ msgid "Decorations"
msgstr "DekorÄcijas"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "LejuplÄdÄ“jiet spÄ“les, kÄ piemÄ“ram, “Minetest Gameâ€, no minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Varat tÄs lejuplÄdÄ“t no minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr ""
+"UzmanÄ«bu: “Minimal development test†ir domÄts priekÅ¡ spÄ“les izstrÄdÄtÄjiem."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -433,10 +466,6 @@ msgstr ""
msgid "Floatlands (experimental)"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Spēle"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr ""
@@ -454,6 +483,15 @@ msgid "Increases humidity around rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Instalēt"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr ""
@@ -553,12 +591,6 @@ 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 ""
-"UzmanÄ«bu: “Minimal development test†ir domÄts priekÅ¡ spÄ“les izstrÄdÄtÄjiem."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Pasaules nosaukums"
@@ -588,6 +620,38 @@ msgstr "pkgmgr: nepieejama atraÅ¡anÄs vieta “$1â€"
msgid "Delete World \"$1\"?"
msgstr "Vai izdzēst pasauli “$1�"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "ApstiprinÄt paroli"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "VÄrds"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Parole"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Paroles nesakrīt!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Reģistrēties un pievienoties"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Piekrist"
@@ -620,6 +684,16 @@ msgstr "< Atpakaļ uz Iestatījumu lapu"
msgid "Browse"
msgstr "PÄrlÅ«kot"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Saturs"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Saturs"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Atspējots"
@@ -667,7 +741,7 @@ msgstr "Mērogs"
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
-msgstr "Meklēt"
+msgstr "Meklēšana"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
@@ -677,7 +751,7 @@ msgstr "Izvēlēties mapi"
msgid "Select file"
msgstr "Izvēlēties failu"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "RÄdÄ«t tehniskos nosaukumus"
@@ -828,6 +902,10 @@ msgstr "Bijušie dalībnieki"
msgid "Previous Core Developers"
msgstr "BijuÅ¡ie pamata izstrÄdÄtÄji"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "PÄrlÅ«kot tieÅ¡saistes saturu"
@@ -896,10 +974,6 @@ msgstr "Palaist serveri"
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 "Jauns"
@@ -908,11 +982,6 @@ 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_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "JaunÄ parole"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Spēlēt"
@@ -948,10 +1017,6 @@ msgid "Clear"
msgstr "Notīrīt"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Pieslēgties"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Radošais režīms"
@@ -962,10 +1027,6 @@ msgid "Damage / PvP"
msgstr "- BojÄjumi: "
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Izdzēst no izlases"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "Pievienot izlasei"
@@ -979,6 +1040,10 @@ msgid "Join Game"
msgstr "Pievienoties spēlei"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Pings"
@@ -993,10 +1058,19 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "Izdzēst no izlases"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "Servera ports"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1041,7 +1115,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1106,7 +1180,7 @@ msgstr "EkrÄns:"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
-msgstr "Iestatījumi"
+msgstr "UzstÄdÄ«jumi"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
@@ -1138,7 +1212,8 @@ msgid "Tone Mapping"
msgstr "Toņu atbilstība"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "PieskÄrienslieksnis: (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1146,7 +1221,7 @@ msgid "Trilinear Filter"
msgstr "TrilineÄrais filtrs"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1165,6 +1240,11 @@ msgstr "Viļņojoši šķidrumi"
msgid "Waving Plants"
msgstr "Viļņojoši augi"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Savienojuma kļūme (noildze?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Savienojuma noildze."
@@ -1302,7 +1382,7 @@ msgid "Camera update enabled"
msgstr "Kameras atjaunošana iespējota"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1433,6 +1513,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Iespējots neierobežots redzamības diapazons"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Izveido klientu..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Iziet uz izvēlni"
@@ -1687,7 +1772,7 @@ msgstr "Execute"
#: src/client/keycode.cpp
msgid "Help"
-msgstr "Help"
+msgstr "Palīdzība"
#: src/client/keycode.cpp
msgid "Home"
@@ -1940,30 +2025,6 @@ msgstr "NeizdevÄs lejuplÄdÄ“t $1"
msgid "Opening webpage"
msgstr ""
-#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
-msgid "Passwords do not match!"
-msgstr "Paroles nesakrīt!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Reģistrēties un pievienoties"
-
-#: 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 ""
-"JÅ«s tÅ«lÄ«t pievienosieties Å¡im serverim ar vÄrdu \"%s\" pirmo reizi.\n"
-"Ja JÅ«s turpinÄsiet, Å¡ajÄ serverÄ« tiks izveidots jauns lietotÄjs ar jÅ«su "
-"pierakstīšanÄs informÄciju.\n"
-"Lūdzu ievadiet savu paroli vēlreiz un nospiediet “Reģistrēties un "
-"pievienotiesâ€, lai apstiprinÄtu lietotÄja izveidi, vai arÄ« nospiediet "
-"“Atceltâ€, lai pÄrtrauktu Å¡o darbÄ«bu."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "TurpinÄt"
@@ -1997,7 +2058,7 @@ msgstr ""
msgid "Change camera"
msgstr "Mainīt kameru"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "ÄŒats"
@@ -2050,10 +2111,8 @@ msgid "Key already in use"
msgstr "Šis taustiņš jau tiek izmantots"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Taustiņu iestatījumi. (Ja šī izvēlne salūzt, izdzēsiet iestatījumus no "
-"minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2124,10 +2183,6 @@ msgid "Change"
msgstr "Nomainīt"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "ApstiprinÄt paroli"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "JaunÄ parole"
@@ -2135,6 +2190,10 @@ msgstr "JaunÄ parole"
msgid "Old Password"
msgstr "VecÄ parole"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Paroles nesakrīt!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Iziet"
@@ -2148,12 +2207,6 @@ msgstr "ApklusinÄts"
msgid "Sound Volume: %d%%"
msgstr "Skaņas skaļums: "
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Ievadiet "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2161,6 +2214,16 @@ msgstr "Ievadiet "
msgid "LANG_CODE"
msgstr "lv"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "LÅ«dzu, izvÄ“lieties vÄrdu!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2286,6 +2349,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2367,6 +2434,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Pasaules nosaukums"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2380,7 +2452,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2449,6 +2521,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2489,10 +2565,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2513,7 +2585,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2525,6 +2597,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2549,6 +2625,11 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Mainīt kameru"
+
+#: 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"
@@ -2707,6 +2788,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2802,6 +2887,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2835,7 +2924,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2902,11 +2993,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3049,6 +3140,11 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "DekorÄcijas"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -3069,6 +3165,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3138,6 +3240,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3154,19 +3260,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3240,6 +3340,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3258,6 +3362,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3338,8 +3446,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr ""
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "GludinÄÅ¡ana:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3406,6 +3515,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3554,6 +3667,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Spēles"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3581,6 +3707,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3597,10 +3731,15 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "SpÄ“les saskarne parÄdÄ«ta"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr ""
@@ -3837,11 +3976,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3902,6 +4048,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3925,7 +4077,9 @@ msgstr ""
"spÄ“lÄ“tÄja skatīšanÄs virziena."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3967,10 +4121,6 @@ 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 ""
@@ -4021,15 +4171,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4650,6 +4796,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4705,7 +4855,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4715,15 +4865,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4735,7 +4888,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4763,6 +4917,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Gluds apgaismojums"
+
+#: 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"
@@ -5147,10 +5306,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5199,6 +5354,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5285,16 +5452,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5307,6 +5474,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Bloku izcelšana"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5344,10 +5516,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5443,10 +5611,6 @@ msgstr ""
"Šim ir vajadzīga “fly†privilēģija servera pusē."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5493,10 +5657,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5665,6 +5825,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "EkrÄns:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5692,6 +5857,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "EkrÄnÅ¡Äviņš"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5704,10 +5874,6 @@ 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 ""
@@ -5747,8 +5913,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr ""
+#, fuzzy
+msgid "Server"
+msgstr "Palaist serveri"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "- Severa nosaukums: "
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Servera ports"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5775,10 +5952,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Servera ports"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5789,12 +5975,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5802,7 +5990,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5878,7 +6066,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6078,6 +6266,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "UzstÄdÄ«jumi"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6280,7 +6473,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6304,10 +6497,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6398,6 +6599,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6631,6 +6836,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6720,6 +6934,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6757,21 +6975,42 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Iestatīt"
+#~ msgid "Connect"
+#~ msgstr "Pieslēgties"
+
#~ msgid "Credits"
#~ msgstr "Pateicības"
#~ msgid "Damage enabled"
#~ msgstr "BojÄjumi iespÄ“joti"
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "LejuplÄdÄ“jiet spÄ“les, kÄ piemÄ“ram, “Minetest Gameâ€, no minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Varat tÄs lejuplÄdÄ“t no minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "LejuplÄdÄ“jas un instalÄ“jas $1, lÅ«dzu uzgaidiet..."
+#~ msgid "Enter "
+#~ msgstr "Ievadiet "
+
+#~ msgid "Game"
+#~ msgstr "Spēle"
+
#~ msgid "Generate Normal Maps"
#~ msgstr "Izveidot normÄl-kartes"
#~ msgid "Install: file: \"$1\""
#~ msgstr "InstalÄcija: fails: “$1â€"
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Taustiņu iestatījumi. (Ja šī izvēlne salūzt, izdzēsiet iestatījumus no "
+#~ "minetest.conf)"
+
#~ msgid "Main"
#~ msgstr "GalvenÄ izvÄ“lne"
@@ -6820,6 +7059,22 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "JÄ"
+#, 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 ""
+#~ "JÅ«s tÅ«lÄ«t pievienosieties Å¡im serverim ar vÄrdu \"%s\" pirmo reizi.\n"
+#~ "Ja JÅ«s turpinÄsiet, Å¡ajÄ serverÄ« tiks izveidots jauns lietotÄjs ar jÅ«su "
+#~ "pierakstīšanÄs informÄciju.\n"
+#~ "Lūdzu ievadiet savu paroli vēlreiz un nospiediet “Reģistrēties un "
+#~ "pievienotiesâ€, lai apstiprinÄtu lietotÄja izveidi, vai arÄ« nospiediet "
+#~ "“Atceltâ€, lai pÄrtrauktu Å¡o darbÄ«bu."
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "JÅ«s nomirÄt"
diff --git a/po/lzh/minetest.po b/po/lzh/minetest.po
index 0b3030538..eae0e2009 100644
--- a/po/lzh/minetest.po
+++ b/po/lzh/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -117,6 +117,30 @@ msgid "The server has requested a reconnect:"
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr ""
@@ -129,6 +153,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr ""
@@ -136,14 +164,21 @@ msgstr ""
msgid "We support protocol versions between version $1 and $2."
msgstr ""
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr ""
@@ -278,7 +313,6 @@ msgid "Failed to download $1"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr ""
@@ -299,7 +333,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr ""
@@ -392,11 +425,7 @@ 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"
+msgid "Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -415,10 +444,6 @@ msgstr ""
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 ""
@@ -436,6 +461,14 @@ msgid "Increases humidity around rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr ""
@@ -535,10 +568,6 @@ 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 ""
@@ -568,6 +597,36 @@ msgstr ""
msgid "Delete World \"$1\"?"
msgstr ""
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr ""
@@ -598,6 +657,14 @@ msgstr ""
msgid "Browse"
msgstr ""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr ""
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
@@ -654,7 +721,7 @@ msgstr ""
msgid "Select file"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr ""
@@ -799,6 +866,10 @@ msgstr ""
msgid "Previous Core Developers"
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -867,10 +938,6 @@ msgstr ""
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 ""
@@ -879,10 +946,6 @@ msgstr ""
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 ""
@@ -916,10 +979,6 @@ msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr ""
@@ -929,10 +988,6 @@ msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr ""
@@ -945,6 +1000,10 @@ msgid "Join Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
@@ -957,10 +1016,18 @@ msgid "Refresh"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr ""
@@ -1005,7 +1072,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1101,7 +1168,7 @@ msgid "Tone Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1109,7 +1176,7 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1128,6 +1195,10 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr ""
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1261,7 +1332,7 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1365,6 +1436,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr ""
@@ -1869,24 +1945,6 @@ msgstr ""
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 ""
@@ -1919,7 +1977,7 @@ msgstr ""
msgid "Change camera"
msgstr ""
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr ""
@@ -1972,7 +2030,7 @@ msgid "Key already in use"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -2044,15 +2102,15 @@ msgid "Change"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
+msgid "New Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "New Password"
+msgid "Old Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Old Password"
+msgid "Passwords do not match!"
msgstr ""
#: src/gui/guiVolumeChange.cpp
@@ -2068,12 +2126,6 @@ msgstr ""
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).
@@ -2081,6 +2133,15 @@ msgstr ""
msgid "LANG_CODE"
msgstr ""
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr ""
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2206,6 +2267,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2287,6 +2352,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2300,7 +2369,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2369,6 +2438,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2409,10 +2482,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2433,7 +2502,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2445,6 +2514,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2469,6 +2542,10 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Camera"
+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"
@@ -2625,6 +2702,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2720,6 +2801,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2753,7 +2838,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2820,11 +2907,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2967,6 +3054,10 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -2987,6 +3078,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3056,6 +3153,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3072,19 +3173,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3158,6 +3253,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3176,6 +3275,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3253,7 +3356,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
+msgid "Filtering and Antialiasing"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3321,6 +3424,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3469,6 +3576,18 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamepads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3496,6 +3615,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3512,7 +3639,11 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3752,11 +3883,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3817,6 +3955,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3838,7 +3982,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3878,10 +4024,6 @@ 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 ""
@@ -3932,15 +4074,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4561,6 +4699,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4616,7 +4758,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4626,15 +4768,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4646,7 +4791,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4674,6 +4820,10 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lighting"
+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"
@@ -5058,10 +5208,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5110,6 +5256,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5196,16 +5354,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5218,6 +5376,10 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5255,10 +5417,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5352,10 +5510,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5402,10 +5556,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5574,6 +5724,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5601,19 +5755,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Seabed noise"
+msgid "Screenshots"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgid "Seabed noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of two 3D noises that together define tunnels."
+msgid "Second of 4 2D noises that together define hill/mountain range height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Security"
+msgid "Second of two 3D noises that together define tunnels."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5656,7 +5810,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
+msgid "Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5684,10 +5846,18 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5698,12 +5868,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5711,7 +5883,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5787,7 +5959,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5987,6 +6159,10 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6189,7 +6365,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6213,10 +6389,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6307,6 +6491,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6540,6 +6728,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6629,6 +6826,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
diff --git a/po/minetest.pot b/po/minetest.pot
index 0cddb4abf..084a5ff30 100644
--- a/po/minetest.pot
+++ b/po/minetest.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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"
@@ -134,6 +134,34 @@ msgstr ""
msgid "Protocol version mismatch. "
msgstr ""
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
#: builtin/mainmenu/dlg_config_world.lua
msgid "World:"
msgstr ""
@@ -147,6 +175,14 @@ msgid "No game description provided."
msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr ""
@@ -179,11 +215,10 @@ 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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr ""
@@ -226,12 +261,10 @@ msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr ""
@@ -458,7 +491,7 @@ msgid "You have no games installed."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
+msgid "Install a game"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -508,14 +541,6 @@ msgid "Mapgen-specific flags"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-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 "World name"
msgstr ""
@@ -528,8 +553,12 @@ msgstr ""
msgid "Mapgen"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Development Test is meant for developers."
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -566,6 +595,36 @@ msgstr ""
msgid "Delete World \"$1\"?"
msgstr ""
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr ""
@@ -580,6 +639,14 @@ msgstr ""
msgid "Rename Modpack:"
msgstr ""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr ""
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
@@ -707,7 +774,7 @@ msgstr ""
msgid "Restore Default"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr ""
@@ -788,6 +855,10 @@ msgid "Active renderer:"
msgstr ""
#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+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."
@@ -873,14 +944,6 @@ msgstr ""
msgid "Announce Server"
msgstr ""
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr ""
-
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
msgstr ""
@@ -922,11 +985,11 @@ msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
+msgid "Login"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
+msgid "Remove favorite"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -1035,7 +1098,7 @@ msgid "High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1066,14 +1129,6 @@ msgstr ""
msgid "Antialiasing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua
-msgid "Screen:"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua
-msgid "Autosave Screen Size"
-msgstr ""
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr ""
@@ -1095,7 +1150,15 @@ msgid "All Settings"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Screen:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Autosave Screen Size"
msgstr ""
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
@@ -1115,7 +1178,11 @@ msgid "Waving Plants"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
msgstr ""
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
@@ -1131,6 +1198,10 @@ msgid "Connection timed out."
msgstr ""
#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr ""
+
+#: src/client/client.cpp
msgid "Loading textures..."
msgstr ""
@@ -1231,6 +1302,11 @@ msgstr ""
#: src/client/game.cpp
#, c-format
+msgid "Error creating client: %s"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Access denied. Reason: %s"
msgstr ""
@@ -1344,6 +1420,10 @@ msgid "Cinematic mode disabled"
msgstr ""
#: src/client/game.cpp
+msgid "Can't show block bounds (disabled by mod or game)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Block bounds hidden"
msgstr ""
@@ -1360,10 +1440,6 @@ 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 ""
@@ -1867,30 +1943,12 @@ msgstr ""
msgid "Failed to open webpage"
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/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr ""
-
-#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
-msgid "Passwords do not match!"
-msgstr ""
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1989,7 +2047,7 @@ msgstr ""
msgid "Autoforward"
msgstr ""
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr ""
@@ -2046,11 +2104,11 @@ msgid "New Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
+msgid "Change"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Change"
+msgid "Passwords do not match!"
msgstr ""
#: src/gui/guiVolumeChange.cpp
@@ -2066,10 +2124,13 @@ msgstr ""
msgid "Muted"
msgstr ""
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
msgstr ""
#. ~ DO NOT TRANSLATE THIS LITERALLY!
@@ -2084,6 +2145,10 @@ msgid "Controls"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Build inside player"
msgstr ""
@@ -2095,47 +2160,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Flying"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Player is able to fly without being affected by gravity.\n"
-"This requires the \"fly\" privilege on the server."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Pitch move mode"
-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 "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 "Noclip"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"If enabled together with fly mode, player is able to fly through solid "
-"nodes.\n"
-"This requires the \"noclip\" privilege on the server."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Cinematic mode"
msgstr ""
@@ -2162,22 +2186,6 @@ msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Invert mouse"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Invert vertical mouse movement."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Mouse sensitivity"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Mouse sensitivity multiplier."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Aux1 key for climbing/descending"
msgstr ""
@@ -2197,7 +2205,7 @@ msgid "Double-tapping the jump key toggles fly mode."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2231,21 +2239,27 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Random input"
+msgid "Keyboard and Mouse"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable random user input (only used for testing)."
+msgid "Invert mouse"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Continuous forward"
+msgid "Invert vertical mouse movement."
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."
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Touchscreen"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2278,839 +2292,838 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable joysticks"
+msgid "Graphics and Audio"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick ID"
+msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The identifier of the joystick to use"
+msgid "Screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick type"
+msgid "Screen width"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The type of joystick"
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick button repetition interval"
+msgid "Screen height"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The time in seconds it takes between repeated events\n"
-"when holding down a joystick button combination."
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick dead zone"
+msgid "Autosave screen size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The dead zone of the joystick"
+msgid "Save window size automatically when modified."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick frustum sensitivity"
+msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"The sensitivity of the joystick axes for moving the\n"
-"in-game view frustum around."
+msgid "Fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Forward key"
+msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for moving the player forward.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Backward key"
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
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"
+"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 "Left key"
+msgid "VSync"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for moving the player left.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Vertical screen synchronization."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Right key"
+msgid "FPS when unfocused or paused"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for moving the player right.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Jump key"
+msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for jumping.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "View distance in nodes."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sneak key"
+msgid "Undersampling"
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"
+"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 "Dig key"
+msgid "Graphics Effects"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for digging.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Opaque liquids"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Place key"
+msgid "Makes all liquids opaque"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for placing.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Inventory key"
+msgid "Connect glass"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for opening the inventory.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Connects glass if supported by node."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Aux1 key"
+msgid "Smooth lighting"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for moving fast in fast mode.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chat key"
+msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for opening the chat window.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Command key"
+msgid "Digging particles"
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"
+msgid "Adds particles when digging a node."
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"
+msgid "3d"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Range select key"
+msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for toggling unlimited view range.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Fly key"
+msgid "3D mode parallax strength"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for toggling flying.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Strength of 3D mode parallax."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Pitch move key"
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Arm inertia"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for toggling pitch move mode.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"Arm inertia, gives a more realistic movement of\n"
+"the arm when the camera moves."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Fast key"
+msgid "View bobbing factor"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for toggling fast mode.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Noclip key"
+msgid "Fall bobbing factor"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for toggling noclip mode.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Hotbar next key"
+msgid "Camera"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Near plane"
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"
+"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 "Hotbar previous key"
+msgid "Field of view"
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"
+msgid "Field of view in degrees."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mute key"
+msgid "Light curve gamma"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for muting the game.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Inc. volume key"
+msgid "Ambient occlusion gamma"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for increasing the volume.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Dec. volume key"
+msgid "Screenshots"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for decreasing the volume.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Automatic forward key"
+msgid "Screenshot format"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for toggling autoforward.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Format of screenshots."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Cinematic mode key"
+msgid "Screenshot quality"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for toggling cinematic mode.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Minimap key"
+msgid "Node and Entity Highlighting"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for toggling display of minimap.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Node highlighting"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for taking screenshots.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Drop item key"
+msgid "Show entity selection boxes"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for dropping the currently selected item.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"Show entity selection boxes\n"
+"A restart is required after changing this."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "View zoom key"
+msgid "Selection box color"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key to use view zoom when possible.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Selection box border color (R,G,B)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 1 key"
+msgid "Selection box width"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for selecting the first hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Width of the selection box lines around nodes."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 2 key"
+msgid "Crosshair color"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the second hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"Crosshair color (R,G,B).\n"
+"Also controls the object crosshair color"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 3 key"
+msgid "Crosshair alpha"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the third hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"Crosshair alpha (opaqueness, between 0 and 255).\n"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 4 key"
+msgid "Fog"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for selecting the fourth hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Whether to fog out the end of the visible area."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 5 key"
+msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the fifth hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 6 key"
+msgid "Fog start"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for selecting the sixth hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 7 key"
+msgid "Clouds"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for selecting the seventh hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Clouds are a client side effect."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 8 key"
+msgid "3D clouds"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for selecting the eighth hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Use 3D cloud look instead of flat."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 9 key"
+msgid "Filtering and Antialiasing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the ninth hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Hotbar slot 10 key"
+msgid "Anisotropic filtering"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for selecting the tenth hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Use anisotropic filtering when viewing at textures from an angle."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 11 key"
+msgid "Bilinear filtering"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for selecting the 11th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Use bilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 12 key"
+msgid "Trilinear filtering"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for selecting the 12th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 13 key"
+msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 13th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Hotbar slot 14 key"
+msgid "Minimum texture size"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 14th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Hotbar slot 15 key"
+msgid "FSAA"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 15th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Hotbar slot 16 key"
+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 "Filmic tone mapping"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 16th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Hotbar slot 17 key"
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 17th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"Set to true to enable waving leaves.\n"
+"Requires shaders to be enabled."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 18 key"
+msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 18th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"Set to true to enable waving plants.\n"
+"Requires shaders to be enabled."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 19 key"
+msgid "Waving liquids"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 19th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"Set to true to enable waving liquids (like water).\n"
+"Requires shaders to be enabled."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 20 key"
+msgid "Waving liquids wave height"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 20th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Hotbar slot 21 key"
+msgid "Waving liquids wavelength"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 21st hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"Length of liquid waves.\n"
+"Requires waving liquids to be enabled."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 22 key"
+msgid "Waving liquids wave speed"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 22nd hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Hotbar slot 23 key"
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 23rd hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 24 key"
+msgid "Shadow map max distance in nodes to render shadows"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for selecting the 24th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Maximum distance to render shadows."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 25 key"
+msgid "Shadow map texture size"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 25th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Hotbar slot 26 key"
+msgid "Shadow map texture in 32 bits"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 26th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Hotbar slot 27 key"
+msgid "Poisson filtering"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 27th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Hotbar slot 28 key"
+msgid "Shadow filter quality"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 28th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Hotbar slot 29 key"
+msgid "Colored shadows"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 29th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 30 key"
+msgid "Map shadows update frames"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 30th hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Hotbar slot 31 key"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 31st hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hotbar slot 32 key"
+msgid "Sky Body Orbit Tilt"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for selecting the 32nd hotbar slot.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "HUD toggle key"
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
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"
+"Volume of all sounds.\n"
+"Requires the sound system to be enabled."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chat toggle key"
+msgid "Mute sound"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for toggling the display of chat.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Large chat console key"
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
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"
+"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 "Fog toggle key"
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for toggling the display of fog.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "Camera update toggle key"
+msgid "Inventory items animations"
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"
+msgid "Enables animation of inventory items."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Debug info toggle key"
+msgid "Formspec Full-Screen Background Opacity"
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"
+msgid "Formspec full-screen background opacity (between 0 and 255)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiler toggle key"
+msgid "Formspec Full-Screen Background Color"
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"
+msgid "Formspec full-screen background color (R,G,B)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Toggle camera mode key"
+msgid "GUI scaling filter"
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"
+"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 "View range increase key"
+msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Key for increasing the viewing range.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+"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 "View range decrease key"
+msgid "Tooltip delay"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Key for decreasing the viewing range.\n"
-"See http://irrlicht.sourceforge.net/docu/namespaceirr."
-"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgid "Delay showing tooltips, stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Graphics"
+msgid "Append item name"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "In-Game"
+msgid "Append item name to tooltip."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
+msgid "Clouds in menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3124,3516 +3137,3704 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "VBO"
+msgid "Recent Chat Messages"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable vertex buffer objects.\n"
-"This should greatly improve graphics performance."
+msgid "Maximum number of recent chat messages to show"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Fog"
+msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Whether to fog out the end of the visible area."
+msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Leaves style"
+msgid "Console color"
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"
+msgid "In-game chat console background color (R,G,B)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Connect glass"
+msgid "Console alpha"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Connects glass if supported by node."
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Smooth lighting"
+msgid "Maximum hotbar width"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+"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 "Tradeoffs for performance"
+msgid "Chat weblinks"
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."
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Clouds"
+msgid "Weblink color"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Clouds are a client side effect."
+msgid "Optional override for chat weblink color."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "3D clouds"
+msgid "Chat font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Use 3D cloud look instead of flat."
+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 "Node highlighting"
+msgid "Content Repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Method used to highlight selected object."
+msgid "ContentDB URL"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Digging particles"
+msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Adds particles when digging a node."
+msgid "ContentDB Flag Blacklist"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
+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 "Mipmapping"
+msgid "ContentDB Max Concurrent Downloads"
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."
+"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 "Anisotropic filtering"
+msgid "Client and Server"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgid "Client"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bilinear filtering"
+msgid "Saving map received from server"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Use bilinear filtering when scaling textures."
+msgid "Save the map received by the client on disk."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Trilinear filtering"
+msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Use trilinear filtering when scaling textures."
+msgid "URL to the server list displayed in the Multiplayer Tab."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Clean transparent textures"
+msgid "Enable split login/register"
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."
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Minimum texture size"
+msgid "Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Admin name"
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."
+"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 "FSAA"
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
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."
+"Name of the server, to be displayed when players join and in the serverlist."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Undersampling"
+msgid "Server description"
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."
+"Description of server, to be displayed when players join and in the "
+"serverlist."
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."
+msgid "Server address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shader path"
+msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Path to shader directory. If no path is defined, default location will be "
-"used."
+msgid "Server URL"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filmic tone mapping"
+msgid "Homepage of server, to be displayed in the serverlist."
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."
+msgid "Announce server"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Waving Nodes"
+msgid "Automatically report to the serverlist."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Waving liquids"
+msgid "Announce to this serverlist."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Set to true to enable waving liquids (like water).\n"
-"Requires shaders to be enabled."
+msgid "Message of the day"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Waving liquids wave height"
+msgid "Message of the day displayed to players connecting."
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."
+msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Waving liquids wavelength"
+msgid "Maximum number of players that can be connected simultaneously."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Length of liquid waves.\n"
-"Requires waving liquids to be enabled."
+msgid "Static spawnpoint"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Waving liquids wave speed"
+msgid "If this is set, players will always (re)spawn at the given position."
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."
+msgid "Networking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Waving leaves"
+msgid "Server port"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set to true to enable waving leaves.\n"
-"Requires shaders to be enabled."
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Waving plants"
+msgid "Bind address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set to true to enable waving plants.\n"
-"Requires shaders to be enabled."
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set to true to enable Shadow Mapping.\n"
-"Requires shaders to be enabled."
+"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 "Shadow strength"
+msgid "IPv6 server"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
-"Lower value means lighter shadows, higher value means darker shadows."
+"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 "Shadow map max distance in nodes to render shadows"
+msgid "Server Security"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum distance to render shadows."
+msgid "Default password"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow map texture size"
+msgid "New users need to input this password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
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."
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow map texture in 32 bits"
+msgid "Default privileges"
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."
+"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 "Poisson filtering"
+msgid "Basic privileges"
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."
+msgid "Privileges that players with basic_privs can grant"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow filter quality"
+msgid "Disable anticheat"
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."
+msgid "If enabled, disable cheat prevention in multiplayer."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Colored shadows"
+msgid "Rollback recording"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Enable colored shadows.\n"
-"On true translucent nodes cast colored shadows. This is expensive."
+"If enabled, actions are recorded for rollback.\n"
+"This option is only read when server starts."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Map shadows update frames"
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side modding restrictions"
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"
+"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 "Soft shadow radius"
+msgid "Client side node lookup range restriction"
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"
+"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 "Sky Body Orbit Tilt"
+msgid "Strip color codes"
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"
+"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 "Advanced"
+msgid "Chat message max length"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Arm inertia"
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Arm inertia, gives a more realistic movement of\n"
-"the arm when the camera moves."
+msgid "Chat message count limit"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum FPS"
+msgid "Amount of messages a player may send per 10 seconds."
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."
+msgid "Chat message kick threshold"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "FPS when unfocused or paused"
+msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum FPS when the window is not focused, or when the game is paused."
+msgid "Server Gameplay"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Pause on lost window focus"
+msgid "Time speed"
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."
+"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 "Viewing range"
+msgid "World start time"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "View distance in nodes."
+msgid "Time of day when a new world is started, in millihours (0-23999)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near plane"
+msgid "Item entity TTL"
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."
+"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 "Screen width"
+msgid "Default stack size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size. Ignored in fullscreen mode."
+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 "Screen height"
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Height component of the initial window size. Ignored in fullscreen mode."
+"Horizontal and vertical acceleration on ground or when climbing,\n"
+"in nodes per second per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Autosave screen size"
+msgid "Acceleration in air"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Save window size automatically when modified."
+msgid ""
+"Horizontal acceleration in air when jumping or falling,\n"
+"in nodes per second per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen"
+msgid "Fast mode acceleration"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Fullscreen mode."
+msgid ""
+"Horizontal and vertical acceleration in fast mode,\n"
+"in nodes per second per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "VSync"
+msgid "Walking speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Vertical screen synchronization."
+msgid "Walking and flying speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Field of view"
+msgid "Sneaking speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Field of view in degrees."
+msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Light curve gamma"
+msgid "Fast mode speed"
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."
+msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Light curve low gradient"
+msgid "Climbing speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Gradient of light curve at minimum light level.\n"
-"Controls the contrast of the lowest light levels."
+msgid "Vertical climbing speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Light curve high gradient"
+msgid "Jumping speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Gradient of light curve at maximum light level.\n"
-"Controls the contrast of the highest light levels."
+msgid "Initial vertical speed when jumping, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Light curve boost"
+msgid "Liquid fluidity"
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."
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Light curve boost center"
+msgid "Liquid fluidity smoothing"
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."
+"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
+"high speed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Light curve boost spread"
+msgid "Liquid sinking"
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."
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Texture path"
+msgid "Gravity"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to texture directory. All textures are first searched from here."
+msgid "Acceleration of gravity, in nodes per second per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Video driver"
+msgid "Fixed map seed"
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)"
+"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 "Cloud radius"
+msgid "Mapgen name"
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."
+"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 "View bobbing factor"
+msgid "Water level"
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."
+msgid "Water surface level of the world."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Fall bobbing factor"
+msgid "Max block generate distance"
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."
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "3D mode"
+msgid "Map generation limit"
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."
+"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 "3D mode parallax strength"
+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 "Strength of 3D mode parallax."
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Console height"
+msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
+msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Console color"
+msgid "Heat blend noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "In-game chat console background color (R,G,B)."
+msgid "Small-scale temperature variation for blending biomes on borders."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Console alpha"
+msgid "Humidity noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgid "Humidity variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Formspec Full-Screen Background Opacity"
+msgid "Humidity blend noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Formspec full-screen background opacity (between 0 and 255)."
+msgid "Small-scale humidity variation for blending biomes on borders."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Formspec Full-Screen Background Color"
+msgid "Mapgen V5"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Formspec full-screen background color (R,G,B)."
+msgid "Mapgen V5 specific flags"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Formspec Default Background Opacity"
+msgid "Map generation attributes specific to Mapgen v5."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Formspec default background opacity (between 0 and 255)."
+msgid "Cave width"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Formspec Default Background Color"
+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 "Formspec default background color (R,G,B)."
+msgid "Large cave depth"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Selection box color"
+msgid "Y of upper limit of large caves."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Selection box border color (R,G,B)."
+msgid "Small cave minimum number"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Selection box width"
+msgid "Minimum limit of random number of small caves per mapchunk."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width of the selection box lines around nodes."
+msgid "Small cave maximum number"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Crosshair color"
+msgid "Maximum limit of random number of small caves per mapchunk."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Crosshair color (R,G,B).\n"
-"Also controls the object crosshair color"
+msgid "Large cave minimum number"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Crosshair alpha"
+msgid "Minimum limit of random number of large caves per mapchunk."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"This also applies to the object crosshair."
+msgid "Large cave maximum number"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Recent Chat Messages"
+msgid "Maximum limit of random number of large caves per mapchunk."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum number of recent chat messages to show"
+msgid "Large cave proportion flooded"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Desynchronize block animation"
+msgid "Proportion of large caves that contain liquid."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Whether node texture animations should be desynchronized per mapblock."
+msgid "Cavern limit"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum hotbar width"
+msgid "Y-level of cavern upper limit."
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."
+msgid "Cavern taper"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the HUD elements."
+msgid "Cavern threshold"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mesh cache"
+msgid "Defines full size of caverns, smaller values create larger caverns."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enables caching of facedir rotated meshes."
+msgid "Dungeon minimum Y"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapblock mesh generation delay"
+msgid "Lower Y limit of dungeons."
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."
+msgid "Dungeon maximum Y"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapblock mesh generator's MapBlock cache size in MB"
+msgid "Upper Y limit of dungeons."
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."
+msgid "Noises"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Minimap"
+msgid "Filler depth noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enables minimap."
+msgid "Variation of biome filler depth."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Round minimap"
+msgid "Factor noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgid ""
+"Variation of terrain vertical scale.\n"
+"When noise is < -0.55 terrain is near-flat."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Minimap scan height"
+msgid "Height noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"True = 256\n"
-"False = 128\n"
-"Usable to make minimap smoother on slower machines."
+msgid "Y-level of average terrain surface."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Colored fog"
+msgid "Cave1 noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgid "First of two 3D noises that together define tunnels."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Ambient occlusion gamma"
+msgid "Cave2 noise"
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."
+msgid "Second of two 3D noises that together define tunnels."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Inventory items animations"
+msgid "Cavern noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enables animation of inventory items."
+msgid "3D noise defining giant caverns."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Fog start"
+msgid "Ground noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Fraction of the visible distance at which fog starts to be rendered"
+msgid "3D noise defining terrain."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Opaque liquids"
+msgid "Dungeon noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes all liquids opaque"
+msgid "3D noise that determines number of dungeons per mapchunk."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "World-aligned textures mode"
+msgid "Mapgen V6"
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."
+msgid "Mapgen V6 specific flags"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Autoscaling mode"
+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 ""
-"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!"
+msgid "Desert noise threshold"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show entity selection boxes"
+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 ""
-"Show entity selection boxes\n"
-"A restart is required after changing this."
+msgid "Beach noise threshold"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
+msgid "Sandy beaches occur when np_beach exceeds this value."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Clouds in menu"
+msgid "Terrain base noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Use a cloud animation for the main menu background."
+msgid "Y-level of lower terrain and seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "GUI scaling"
+msgid "Terrain higher noise"
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."
+msgid "Y-level of higher terrain that creates cliffs."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "GUI scaling filter"
+msgid "Steepness noise"
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)."
+msgid "Varies steepness of cliffs."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "GUI scaling filter txr2img"
+msgid "Height select noise"
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."
+msgid "Defines distribution of higher terrain."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Tooltip delay"
+msgid "Mud noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Delay showing tooltips, stated in milliseconds."
+msgid "Varies depth of biome surface nodes."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Append item name"
+msgid "Beach noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Append item name to tooltip."
+msgid "Defines areas with sandy beaches."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font bold by default"
+msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font italic by default"
+msgid "Cave noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font shadow"
+msgid "Variation of number of caves."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
-"drawn."
+msgid "Trees noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font shadow alpha"
+msgid "Defines tree areas and tree density."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
+msgid "Apple trees noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size"
+msgid "Defines areas where trees have apples."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgid "Mapgen V7"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size divisible by"
+msgid "Mapgen V7 specific flags"
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."
+"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 "Regular font path"
+msgid "Mountain zero level"
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."
+"Y of mountain density gradient zero level. Used to shift mountains "
+"vertically."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bold font path"
+msgid "Floatland minimum Y"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Italic font path"
+msgid "Lower Y limit of floatlands."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bold and italic font path"
+msgid "Floatland maximum Y"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Monospace font size"
+msgid "Upper Y limit of floatlands."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgid "Floatland tapering distance"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Monospace font size divisible by"
+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 "Monospace font path"
+msgid "Floatland taper exponent"
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."
+"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 "Bold monospace font path"
+msgid "Floatland density"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Italic monospace font path"
+#, 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 "Bold and italic monospace font path"
+msgid "Floatland water level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Fallback font path"
+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 ""
-"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."
+msgid "Terrain alternative noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chat font size"
+msgid "Terrain persistence noise"
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."
+"Varies roughness of terrain.\n"
+"Defines the 'persistence' value for terrain_base and terrain_alt noises."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Screenshot folder"
+msgid "Defines distribution of higher terrain and steepness of cliffs."
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."
+msgid "Mountain height noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Screenshot format"
+msgid "Variation of maximum mountain height (in nodes)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Format of screenshots."
+msgid "Ridge underwater noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Screenshot quality"
+msgid "Defines large-scale river channel structure."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain noise"
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."
+"3D noise defining mountain structure and height.\n"
+"Also defines structure of floatland mountain terrain."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "DPI"
+msgid "Ridge noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
-"screens."
+msgid "3D noise defining structure of river canyon walls."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Display Density Scaling Factor"
+msgid "Floatland noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Adjust the detected display density, used for scaling UI elements."
+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 "Enable console window"
+msgid "Mapgen Carpathian"
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)."
+msgid "Mapgen Carpathian specific flags"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
+msgid "Map generation attributes specific to Mapgen Carpathian."
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."
+msgid "Base ground level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Volume"
+msgid "Defines the base ground level."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Volume of all sounds.\n"
-"Requires the sound system to be enabled."
+msgid "River channel width"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mute sound"
+msgid "Defines the width of the river channel."
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."
+msgid "River channel depth"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Client"
+msgid "Defines the depth of the river channel."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chat weblinks"
+msgid "River valley width"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
-"output."
+msgid "Defines the width of the river valley."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Weblink color"
+msgid "Hilliness1 noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Optional override for chat weblink color."
+msgid "First of 4 2D noises that together define hill/mountain range height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Network"
+msgid "Hilliness2 noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server address"
+msgid "Second of 4 2D noises that together define hill/mountain range height."
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."
+msgid "Hilliness3 noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Remote port"
+msgid "Third of 4 2D noises that together define hill/mountain range height."
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."
+msgid "Hilliness4 noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Prometheus listener address"
+msgid "Fourth of 4 2D noises that together define hill/mountain range height."
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"
+msgid "Rolling hills spread noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Saving map received from server"
+msgid "2D noise that controls the size/occurrence of rolling hills."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Save the map received by the client on disk."
+msgid "Ridge mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Connect to external media server"
+msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
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."
+msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Client modding"
+msgid "2D noise that controls the size/occurrence of step mountain ranges."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable Lua modding support on client.\n"
-"This support is experimental and API can change."
+msgid "Rolling hill size noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Serverlist URL"
+msgid "2D noise that controls the shape/size of rolling hills."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "URL to the server list displayed in the Multiplayer Tab."
+msgid "Ridged mountain size noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Serverlist file"
+msgid "2D noise that controls the shape/size of ridged mountains."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"File in client/serverlist/ that contains your favorite servers displayed in "
-"the\n"
-"Multiplayer Tab."
+msgid "Step mountain size noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum size of the out chat queue"
+msgid "2D noise that controls the shape/size of step mountains."
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."
+msgid "River noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
+msgid "2D noise that locates the river valleys and channels."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
+msgid "Mountain variation noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapblock unload timeout"
+msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Mapgen Flat"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapblock limit"
+msgid "Mapgen Flat specific flags"
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."
+"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 "Show debug info"
+msgid "Ground level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Whether to show the client debug info (has the same effect as hitting F5)."
+msgid "Y of flat ground."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
+msgid "Lake threshold"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server name"
+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 ""
-"Name of the server, to be displayed when players join and in the serverlist."
+msgid "Lake steepness"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server description"
+msgid "Controls steepness/depth of lake depressions."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Description of server, to be displayed when players join and in the "
-"serverlist."
+msgid "Hill threshold"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Domain name of server, to be displayed in the serverlist."
+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 "Server URL"
+msgid "Hill steepness"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Homepage of server, to be displayed in the serverlist."
+msgid "Controls steepness/height of hills."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Announce server"
+msgid "Terrain noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Automatically report to the serverlist."
+msgid "Defines location and terrain of optional hills and lakes."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Announce to this serverlist."
+msgid "Mapgen Fractal"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid "Mapgen Fractal specific flags"
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"
+"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 "Server port"
+msgid "Fractal type"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Network port to listen (UDP).\n"
-"This value will be overridden when starting from the main menu."
+"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 "Bind address"
+msgid "Iterations"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The network interface that the server listens on."
+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 "Strict protocol checking"
+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 ""
-"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."
+"(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 "Remote media"
+msgid "Slice w"
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."
+"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 "IPv6 server"
+msgid "Julia x"
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."
+"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 "Maximum simultaneous block sends per client"
+msgid "Julia y"
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)"
+"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 "Delay in sending blocks after building"
+msgid "Julia z"
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."
+"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 "Max. packets per iteration"
+msgid "Julia w"
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."
+"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 "Map Compression Level for Network Transfer"
+msgid "Seabed noise"
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"
+msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Default game"
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys specific flags"
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."
+"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 "Message of the day"
+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 "Message of the day displayed to players connecting."
+msgid "Depth below which you'll find large caves."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum users"
+msgid "Cavern upper limit"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum number of players that can be connected simultaneously."
+msgid "Depth below which you'll find giant caverns."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Map directory"
+msgid "River depth"
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."
+msgid "How deep to make rivers."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Item entity TTL"
+msgid "River size"
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."
+msgid "How wide to make rivers."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Default stack size"
+msgid "Cave noise #1"
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."
+msgid "Cave noise #2"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Damage"
+msgid "Filler depth"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable players getting damage and dying."
+msgid "The depth of dirt or other biome filler node."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Creative"
+msgid "Terrain height"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for all players"
+msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Fixed map seed"
+msgid "Valley depth"
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."
+msgid "Raises terrain to make valleys around the rivers."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Default password"
+msgid "Valley fill"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "New users need to input this password."
+msgid "Slope and fill work together to modify the heights."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Default privileges"
+msgid "Valley profile"
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."
+msgid "Amplifies the valleys."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic privileges"
+msgid "Valley slope"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Privileges that players with basic_privs can grant"
+msgid "Advanced"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Unlimited player transfer distance"
+msgid "Developer Options"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client modding"
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."
+"Enable Lua modding support on client.\n"
+"This support is experimental and API can change."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player transfer distance"
+msgid "Main menu script"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgid "Replaces the default main menu with a custom one."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player versus player"
+msgid "Mod Security"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Whether to allow players to damage and kill each other."
+msgid "Enable mod security"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mod channels"
+msgid "Prevent mods from doing insecure things like running shell commands."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable mod channels support."
+msgid "Trusted mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Static spawnpoint"
+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 "If this is set, players will always (re)spawn at the given position."
+msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Disallow empty passwords"
+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 "If enabled, new players cannot join with an empty password."
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Disable anticheat"
+msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, disable cheat prevention in multiplayer."
+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\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Rollback recording"
+msgid "Debug log file size threshold"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, actions are recorded for rollback.\n"
-"This option is only read when server starts."
+"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 "Chat message format"
+msgid "Chat log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Format of player chat messages. The following strings are valid "
-"placeholders:\n"
-"@name, @message, @timestamp (optional)"
+msgid "Minimal level of logging to be written to chat."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chat command time message threshold"
+msgid "Deprecated Lua API handling"
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"
+"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 "Shutdown message"
+msgid "Random input"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "A message to be displayed to all clients when the server shuts down."
+msgid "Enable random user input (only used for testing)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Crash message"
+msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "A message to be displayed to all clients when the server crashes."
+msgid "Enable mod channels support."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Ask to reconnect after crash"
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Load the game profiler"
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."
+"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 "Active object send range"
+msgid "Default report format"
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)"
+"The default format in which profiles are being saved,\n"
+"when calling `/profiler save [format]` without format."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Active block range"
+msgid "Report path"
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."
+"The file path relative to your worldpath in which profiles will be saved to."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Max block send distance"
+msgid "Entity methods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument the methods of entities on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifiers"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+"Instrument the action function of Active Block Modifiers on registration."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum forceloaded blocks"
+msgid "Loading Block Modifiers"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum number of forceloaded mapblocks."
+msgid ""
+"Instrument the action function of Loading Block Modifiers on registration."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Time send interval"
+msgid "Chat commands"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Time speed"
+msgid "Global callbacks"
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."
+"Instrument global callback functions on registration.\n"
+"(anything you pass to a minetest.register_*() function)"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "World start time"
+msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Time of day when a new world is started, in millihours (0-23999)."
+msgid ""
+"Instrument builtin.\n"
+"This is usually only needed by core/builtin contributors"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Map save interval"
+msgid "Profiler"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Interval of saving important changes in the world, stated in seconds."
+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 "Chat message max length"
+msgid "Engine profiler"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid "Engine profiling data print interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chat message count limit"
+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 "Amount of messages a player may send per 10 seconds."
+msgid "IPv6"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chat message kick threshold"
+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 "Kick players who sent more than X messages per 10 seconds."
+msgid "Ignore world errors"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Physics"
+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 "Default acceleration"
+msgid "Shader path"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Horizontal and vertical acceleration on ground or when climbing,\n"
-"in nodes per second per second."
+"Path to shader directory. If no path is defined, default location will be "
+"used."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Acceleration in air"
+msgid "Video driver"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Horizontal acceleration in air when jumping or falling,\n"
-"in nodes per second per second."
+"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 "Fast mode acceleration"
+msgid "Transparency Sorting Distance"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Horizontal and vertical acceleration in fast mode,\n"
-"in nodes per second per second."
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Walking speed"
+msgid "VBO"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Walking and flying speed, in nodes per second."
+msgid ""
+"Enable vertex buffer objects.\n"
+"This should greatly improve graphics performance."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sneaking speed"
+msgid "Cloud radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sneaking speed, in nodes per second."
+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 "Fast mode speed"
+msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
+msgid "Whether node texture animations should be desynchronized per mapblock."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Climbing speed"
+msgid "Mesh cache"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Vertical climbing speed, in nodes per second."
+msgid "Enables caching of facedir rotated meshes."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Jumping speed"
+msgid "Mapblock mesh generation delay"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Initial vertical speed when jumping, in nodes per second."
+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 "Liquid fluidity"
+msgid "Mapblock mesh generator's MapBlock cache size in MB"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+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 "Liquid fluidity smoothing"
+msgid "Minimap scan height"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
-"high speed."
+"True = 256\n"
+"False = 128\n"
+"Usable to make minimap smoother on slower machines."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Liquid sinking"
+msgid "World-aligned textures mode"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+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 "Gravity"
+msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Acceleration of gravity, in nodes per second per second."
+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 "Deprecated Lua API handling"
+msgid "Font"
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)."
+msgid "Font bold by default"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Max. clearobjects extra blocks"
+msgid "Font italic by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
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)."
+"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
+"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Unload unused server data"
+msgid "Font shadow alpha"
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."
+"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum objects per block"
+msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum number of statically stored objects in a block."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Synchronous SQLite"
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
+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 "Map Compression Level for Disk Storage"
+msgid "Regular font path"
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"
+"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 "Dedicated server step"
+msgid "Bold font path"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Length of a server tick and the interval at which objects are generally "
-"updated over\n"
-"network."
+msgid "Italic font path"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Active block management interval"
+msgid "Bold and italic font path"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "ABM interval"
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid "Monospace font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "ABM time budget"
+msgid "Monospace font path"
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)"
+"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 "NodeTimer interval"
+msgid "Bold monospace font path"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Italic monospace font path"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Ignore world errors"
+msgid "Bold and italic monospace font path"
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."
+msgid "Fallback font path"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Liquid loop max"
+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 "Max liquids processed per step."
+msgid "Lighting"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Liquid queue purge time"
+msgid "Light curve low gradient"
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."
+"Gradient of light curve at minimum light level.\n"
+"Controls the contrast of the lowest light levels."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Liquid update tick"
+msgid "Light curve high gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Liquid update interval in seconds."
+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 "Block send optimize distance"
+msgid "Light curve boost"
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)."
+"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 "Server side occlusion culling"
+msgid "Light curve boost center"
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."
+"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 "Client side modding restrictions"
+msgid "Light curve boost spread"
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)"
+"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 "Client side node lookup range restriction"
+msgid "Prometheus listener address"
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."
+"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 "Security"
+msgid "Maximum size of the out chat queue"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable mod security"
+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 "Prevent mods from doing insecure things like running shell commands."
+msgid "Mapblock unload timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Trusted mods"
+msgid "Timeout for client to remove unused map data from memory, in seconds."
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())."
+msgid "Mapblock limit"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HTTP mods"
+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 ""
-"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."
+msgid "Show debug info"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Load the game profiler"
+msgid "Maximum simultaneous block sends per client"
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."
+"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 "Default report format"
+msgid "Delay in sending blocks after building"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The default format in which profiles are being saved,\n"
-"when calling `/profiler save [format]` without format."
+"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 "Report path"
+msgid "Max. packets per iteration"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The file path relative to your worldpath in which profiles will be saved to."
+"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 "Instrumentation"
+msgid "Map Compression Level for Network Transfer"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Entity methods"
+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 "Instrument the methods of entities on registration."
+msgid "Chat message format"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Active Block Modifiers"
+msgid ""
+"Format of player chat messages. The following strings are valid "
+"placeholders:\n"
+"@name, @message, @timestamp (optional)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Instrument the action function of Active Block Modifiers on registration."
+"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 "Loading Block Modifiers"
+msgid "Shutdown message"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Instrument the action function of Loading Block Modifiers on registration."
+msgid "A message to be displayed to all clients when the server shuts down."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chat commands"
+msgid "Crash message"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chat commands on registration."
+msgid "A message to be displayed to all clients when the server crashes."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Global callbacks"
+msgid "Ask to reconnect after crash"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Instrument global callback functions on registration.\n"
-"(anything you pass to a minetest.register_*() function)"
+"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 "Builtin"
+msgid "Server/Env Performance"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Instrument builtin.\n"
-"This is usually only needed by core/builtin contributors"
+msgid "Dedicated server step"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiler"
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over\n"
+"network, stated in seconds."
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."
+msgid "Unlimited player transfer distance"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Client and Server"
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
+msgid "Player transfer distance"
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."
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Language"
+msgid "Active object send range"
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."
+"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 "Debug log level"
+msgid "Active block range"
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"
+"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 "Debug log file size threshold"
+msgid "Max block send distance"
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."
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chat log level"
+msgid "Maximum forceloaded blocks"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Minimal level of logging to be written to chat."
+msgid "Maximum number of forceloaded mapblocks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "IPv6"
+msgid "Time send interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable IPv6 support (for both client and server).\n"
-"Required for IPv6 connections to work at all."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL interactive timeout"
+msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Maximum time an interactive request (e.g. server list fetch) may take, "
-"stated in milliseconds."
+msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL parallel limit"
+msgid "Unload unused server data"
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."
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
+"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "Maximum objects per block"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Maximum time a file download (e.g. a mod download) may take, stated in "
-"milliseconds."
+msgid "Maximum number of statically stored objects in a block."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Main menu script"
+msgid "Active block management interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Replaces the default main menu with a custom one."
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Engine profiling data print interval"
+msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Print the engine's profiling data in regular intervals (in seconds).\n"
-"0 = disable. Useful for developers."
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen name"
+msgid "ABM time budget"
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)."
+"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 "Water level"
+msgid "NodeTimer interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Water surface level of the world."
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Max block generate distance"
+msgid "Liquid loop max"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"From how far blocks are generated for clients, stated in mapblocks (16 "
-"nodes)."
+msgid "Max liquids processed per step."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Map generation limit"
+msgid "Liquid queue purge time"
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."
+"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 ""
-"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."
+msgid "Liquid update tick"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Liquid update interval in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Heat noise"
+msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Temperature variation for biomes."
+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 "Heat blend noise"
+msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Small-scale temperature variation for blending biomes on borders."
+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 "Humidity noise"
+msgid "Chunk size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Humidity variation for biomes."
+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 "Humidity blend noise"
+msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Small-scale humidity variation for blending biomes on borders."
+msgid "Dump the mapgen debug information."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen V5"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen V5 specific flags"
+msgid "Maximum number of blocks that can be queued for loading."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Map generation attributes specific to Mapgen v5."
+msgid "Per-player limit of queued blocks load from disk"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Cave width"
+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 ""
-"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."
+msgid "Per-player limit of queued blocks to generate"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Large cave depth"
+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 "Y of upper limit of large caves."
+msgid "Number of emerge threads"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Small cave minimum number"
+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 "Minimum limit of random number of small caves per mapchunk."
+msgid "cURL"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Small cave maximum number"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum limit of random number of small caves per mapchunk."
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Large cave minimum number"
+msgid "cURL parallel limit"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Minimum limit of random number of large caves per mapchunk."
+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 "Large cave maximum number"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum limit of random number of large caves per mapchunk."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Large cave proportion flooded"
+msgid "Misc"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Proportion of large caves that contain liquid."
+msgid "DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Cavern limit"
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Y-level of cavern upper limit."
+msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Cavern taper"
+msgid "Adjust the detected display density, used for scaling UI elements."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Y-distance over which caverns expand to full size."
+msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Cavern threshold"
+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 "Defines full size of caverns, smaller values create larger caverns."
+msgid "Max. clearobjects extra blocks"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dungeon minimum Y"
+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 "Lower Y limit of dungeons."
+msgid "Map directory"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dungeon maximum Y"
+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 "Upper Y limit of dungeons."
+msgid "Synchronous SQLite"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Noises"
+msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filler depth noise"
+msgid "Map Compression Level for Disk Storage"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Variation of biome filler depth."
+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 "Factor noise"
+msgid "Connect to external media server"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Variation of terrain vertical scale.\n"
-"When noise is < -0.55 terrain is near-flat."
+"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 "Height noise"
+msgid "Serverlist file"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Y-level of average terrain surface."
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the\n"
+"Multiplayer Tab."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Cave1 noise"
+msgid "Gamepads"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "First of two 3D noises that together define tunnels."
+msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Cave2 noise"
+msgid "Enable joysticks. Requires a restart to take effect"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of two 3D noises that together define tunnels."
+msgid "Joystick ID"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Cavern noise"
+msgid "The identifier of the joystick to use"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "3D noise defining giant caverns."
+msgid "Joystick type"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Ground noise"
+msgid "The type of joystick"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "3D noise defining terrain."
+msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dungeon noise"
+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 "3D noise that determines number of dungeons per mapchunk."
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen V6"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen V6 specific flags"
+msgid "Joystick frustum sensitivity"
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."
+"The sensitivity of the joystick axes for moving the\n"
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Desert noise threshold"
+msgid "Temporary Settings"
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."
+msgid "Texture path"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Beach noise threshold"
+msgid "Path to texture directory. All textures are first searched from here."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sandy beaches occur when np_beach exceeds this value."
+msgid "Minimap"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Terrain base noise"
+msgid "Enables minimap."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Y-level of lower terrain and seabed."
+msgid "Round minimap"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Terrain higher noise"
+msgid "Shape of the minimap. Enabled = round, disabled = square."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Y-level of higher terrain that creates cliffs."
+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 "Steepness noise"
+msgid "Remote port"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Varies steepness of cliffs."
+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 "Height select noise"
+msgid "Default game"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Defines distribution of higher terrain."
+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 "Mud noise"
+msgid "Damage"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Varies depth of biome surface nodes."
+msgid "Enable players getting damage and dying."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Beach noise"
+msgid "Creative"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Defines areas with sandy beaches."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome noise"
+msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Cave noise"
+msgid "Whether to allow players to damage and kill each other."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Variation of number of caves."
+msgid "Flying"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Trees noise"
+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 "Defines tree areas and tree density."
+msgid "Pitch move mode"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Apple trees noise"
+msgid ""
+"If enabled, makes move directions relative to the player's pitch when flying "
+"or swimming."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Defines areas where trees have apples."
+msgid "Fast movement"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen V7"
+msgid ""
+"Fast movement (via the \"Aux1\" key).\n"
+"This requires the \"fast\" privilege on the server."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen V7 specific flags"
+msgid "Noclip"
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."
+"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 "Mountain zero level"
+msgid "Continuous forward"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Y of mountain density gradient zero level. Used to shift mountains "
-"vertically."
+"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 "Floatland minimum Y"
+msgid "Formspec Default Background Opacity"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Lower Y limit of floatlands."
+msgid "Formspec default background opacity (between 0 and 255)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Floatland maximum Y"
+msgid "Formspec Default Background Color"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Upper Y limit of floatlands."
+msgid "Formspec default background color (R,G,B)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Floatland tapering distance"
+msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
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."
+"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 "Floatland taper exponent"
+msgid "Forward key"
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."
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Floatland density"
+msgid "Backward key"
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."
+"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 "Floatland water level"
+msgid "Left key"
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."
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Terrain alternative noise"
+msgid "Right key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Terrain persistence noise"
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Varies roughness of terrain.\n"
-"Defines the 'persistence' value for terrain_base and terrain_alt noises."
+msgid "Jump key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Defines distribution of higher terrain and steepness of cliffs."
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mountain height noise"
+msgid "Sneak key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Variation of maximum mountain height (in nodes)."
+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 "Ridge underwater noise"
+msgid "Dig key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Defines large-scale river channel structure."
+msgid ""
+"Key for digging.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mountain noise"
+msgid "Place key"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"3D noise defining mountain structure and height.\n"
-"Also defines structure of floatland mountain terrain."
+"Key for placing.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Ridge noise"
+msgid "Inventory key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "3D noise defining structure of river canyon walls."
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Floatland noise"
+msgid "Aux1 key"
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."
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen Carpathian"
+msgid "Chat key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen Carpathian specific flags"
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Map generation attributes specific to Mapgen Carpathian."
+msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Base ground level"
+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 "Defines the base ground level."
+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 "River channel width"
+msgid "Range select key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Defines the width of the river channel."
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "River channel depth"
+msgid "Fly key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Defines the depth of the river channel."
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "River valley width"
+msgid "Pitch move key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Defines the width of the river valley."
+msgid ""
+"Key for toggling pitch move mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hilliness1 noise"
+msgid "Fast key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "First of 4 2D noises that together define hill/mountain range height."
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hilliness2 noise"
+msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hilliness3 noise"
+msgid "Hotbar next key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Third of 4 2D noises that together define hill/mountain range height."
+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 "Hilliness4 noise"
+msgid "Hotbar previous key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Fourth of 4 2D noises that together define hill/mountain range height."
+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 "Rolling hills spread noise"
+msgid "Mute key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "2D noise that controls the size/occurrence of rolling hills."
+msgid ""
+"Key for muting the game.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Ridge mountain spread noise"
+msgid "Inc. volume key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
+msgid ""
+"Key for increasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Step mountain spread noise"
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "2D noise that controls the size/occurrence of step mountain ranges."
+msgid ""
+"Key for decreasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Rolling hill size noise"
+msgid "Automatic forward key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "2D noise that controls the shape/size of rolling hills."
+msgid ""
+"Key for toggling autoforward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Ridged mountain size noise"
+msgid "Cinematic mode key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "2D noise that controls the shape/size of ridged mountains."
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Step mountain size noise"
+msgid "Minimap key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "2D noise that controls the shape/size of step mountains."
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "River noise"
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "2D noise that locates the river valleys and channels."
+msgid "Drop item key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mountain variation noise"
+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 "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
+msgid "View zoom key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen Flat"
+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 "Mapgen Flat specific flags"
+msgid "Hotbar slot 1 key"
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."
+"Key for selecting the first hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Ground level"
+msgid "Hotbar slot 2 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Y of flat ground."
+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 "Lake threshold"
+msgid "Hotbar slot 3 key"
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."
+"Key for selecting the third hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Lake steepness"
+msgid "Hotbar slot 4 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls steepness/depth of lake depressions."
+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 "Hill threshold"
+msgid "Hotbar slot 5 key"
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."
+"Key for selecting the fifth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Hill steepness"
+msgid "Hotbar slot 6 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls steepness/height of hills."
+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 "Terrain noise"
+msgid "Hotbar slot 7 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Defines location and terrain of optional hills and lakes."
+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 "Mapgen Fractal"
+msgid "Hotbar slot 8 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen Fractal specific flags"
+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 "Hotbar slot 9 key"
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."
+"Key for selecting the ninth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Fractal type"
+msgid "Hotbar slot 10 key"
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."
+"Key for selecting the tenth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Iterations"
+msgid "Hotbar slot 11 key"
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."
+"Key for selecting the 11th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 12 key"
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."
+"Key for selecting the 12th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 13 key"
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."
+"Key for selecting the 13th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Slice w"
+msgid "Hotbar slot 14 key"
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."
+"Key for selecting the 14th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Julia x"
+msgid "Hotbar slot 15 key"
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."
+"Key for selecting the 15th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Julia y"
+msgid "Hotbar slot 16 key"
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."
+"Key for selecting the 16th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Julia z"
+msgid "Hotbar slot 17 key"
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."
+"Key for selecting the 17th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Julia w"
+msgid "Hotbar slot 18 key"
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."
+"Key for selecting the 18th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Seabed noise"
+msgid "Hotbar slot 19 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Y-level of seabed."
+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 "Mapgen Valleys"
+msgid "Hotbar slot 20 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen Valleys specific flags"
+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 "Hotbar slot 21 key"
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."
+"Key for selecting the 21st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 22 key"
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."
+"Key for selecting the 22nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Depth below which you'll find large caves."
+msgid "Hotbar slot 23 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Cavern upper limit"
+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 "Depth below which you'll find giant caverns."
+msgid "Hotbar slot 24 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "River depth"
+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 "How deep to make rivers."
+msgid "Hotbar slot 25 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "River size"
+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 "How wide to make rivers."
+msgid "Hotbar slot 26 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Cave noise #1"
+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 "Cave noise #2"
+msgid "Hotbar slot 27 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filler depth"
+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 "The depth of dirt or other biome filler node."
+msgid "Hotbar slot 28 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Terrain height"
+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 "Base terrain height."
+msgid "Hotbar slot 29 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Valley depth"
+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 "Raises terrain to make valleys around the rivers."
+msgid "Hotbar slot 30 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Valley fill"
+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 "Slope and fill work together to modify the heights."
+msgid "Hotbar slot 31 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Valley profile"
+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 "Amplifies the valleys."
+msgid "Hotbar slot 32 key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Valley slope"
+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 "Chunk size"
+msgid "HUD toggle key"
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."
+"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 "Mapgen debug"
+msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dump the mapgen debug information."
+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 "Absolute limit of queued blocks to emerge"
+msgid "Large chat console key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum number of blocks that can be queued for loading."
+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 "Per-player limit of queued blocks load from disk"
+msgid "Fog toggle key"
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."
+"Key for toggling the display of fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Per-player limit of queued blocks to generate"
+msgid "Camera update toggle key"
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."
+"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 "Number of emerge threads"
+msgid "Debug info toggle key"
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'."
+"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 "Online Content Repository"
+msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "ContentDB URL"
+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 "The URL for the content repository"
+msgid "Toggle camera mode key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "ContentDB Flag Blacklist"
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"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/"
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "ContentDB Max Concurrent Downloads"
+msgid "View range decrease key"
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."
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
diff --git a/po/mr/minetest.po b/po/mr/minetest.po
index d1a4e213e..1c081085d 100644
--- a/po/mr/minetest.po
+++ b/po/mr/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -118,6 +118,30 @@ msgid "The server has requested a reconnect:"
msgstr "पà¥à¤¨à¥à¤¹à¤¾ सामील होणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ विनंती करीत आहे:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "सरà¥à¤µà¥à¤¹à¤°à¤šà¥€ आवृतà¥à¤¤à¥€ जà¥à¤³à¤¤ नाही "
@@ -130,6 +154,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "सरà¥à¤µà¥à¤¹à¤° $1 आणि $2 दरमà¥à¤¯à¤¾à¤¨ पà¥à¤°à¥‹à¤Ÿà¥‹à¤•ॉल आवृतà¥à¤¤à¥€à¤šà¥‡ समरà¥à¤¥à¤¨ करतो. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "आमà¥à¤¹à¥€ केवळ आवृतà¥à¤¤à¥€ $1 चे समरà¥à¤¥à¤¨ करतो."
@@ -137,14 +165,21 @@ msgstr "आमà¥à¤¹à¥€ केवळ आवृतà¥à¤¤à¥€ $1 चे समरà¥
msgid "We support protocol versions between version $1 and $2."
msgstr "आमà¥à¤¹à¥€ केवळ आवृतà¥à¤¤à¥€ $1 आणि आवृतà¥à¤¤à¥€ $2 चे समरà¥à¤¥à¤¨ करतो."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "रदà¥à¤¦ करा"
@@ -279,7 +314,6 @@ msgid "Failed to download $1"
msgstr "$१ डाउनलोड करू नाही शकत"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "खेळ"
@@ -300,7 +334,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "मॉड"
@@ -393,12 +426,9 @@ 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 वरà¥à¤¨ डाउनलोड करा"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "चेतावणी: Development Test विकासकांसाठी आहे."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -416,10 +446,6 @@ msgstr "हवेत उडणारे जमीन"
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 "समà¥à¤¦à¥à¤° आणि भूमिगत भूभाग"
@@ -437,6 +463,15 @@ msgid "Increases humidity around rivers"
msgstr "नदà¥à¤¯à¤¾à¤‚चà¥à¤¯à¤¾ आसपास अधिक आरà¥à¤¦à¥à¤°à¤¤à¤¾"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "डाउनलोड $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "तलाव"
@@ -536,10 +571,6 @@ 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 "जगाचे नाव"
@@ -569,6 +600,36 @@ msgstr "pkgmgr: अवैध मारà¥à¤— \"$1\""
msgid "Delete World \"$1\"?"
msgstr "जग \"$1\" काढा?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "सà¥à¤µà¥€à¤•ारा"
@@ -599,6 +660,14 @@ msgstr ""
msgid "Browse"
msgstr "बà¥à¤°à¤¾à¤‰à¤ करा"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr ""
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "थंबवा"
@@ -655,7 +724,7 @@ msgstr ""
msgid "Select file"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr ""
@@ -800,6 +869,10 @@ msgstr ""
msgid "Previous Core Developers"
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -868,10 +941,6 @@ msgstr ""
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 ""
@@ -880,10 +949,6 @@ msgstr ""
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 ""
@@ -917,10 +982,6 @@ msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr ""
@@ -930,10 +991,6 @@ msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr ""
@@ -946,6 +1003,10 @@ msgid "Join Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
@@ -959,10 +1020,18 @@ msgid "Refresh"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr ""
@@ -1007,7 +1076,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1103,7 +1172,7 @@ msgid "Tone Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1111,7 +1180,7 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1130,6 +1199,10 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr ""
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1264,7 +1337,7 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1368,6 +1441,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr ""
@@ -1873,24 +1951,6 @@ msgstr "$१ डाउनलोड करू नाही शकत"
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 ""
@@ -1923,7 +1983,7 @@ msgstr ""
msgid "Change camera"
msgstr ""
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr ""
@@ -1976,7 +2036,7 @@ msgid "Key already in use"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -2048,15 +2108,15 @@ msgid "Change"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
+msgid "New Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "New Password"
+msgid "Old Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Old Password"
+msgid "Passwords do not match!"
msgstr ""
#: src/gui/guiVolumeChange.cpp
@@ -2072,12 +2132,6 @@ msgstr ""
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).
@@ -2085,6 +2139,15 @@ msgstr ""
msgid "LANG_CODE"
msgstr ""
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr ""
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2210,6 +2273,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2291,6 +2358,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "जगाचे नाव"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2304,7 +2376,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2373,6 +2445,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2413,10 +2489,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2437,7 +2509,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2449,6 +2521,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2473,6 +2549,10 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Camera"
+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"
@@ -2629,6 +2709,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2724,6 +2808,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2757,7 +2845,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2824,11 +2914,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2971,6 +3061,11 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "सजावट"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -2991,6 +3086,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3060,6 +3161,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3076,19 +3181,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3162,6 +3261,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3180,6 +3283,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3257,7 +3364,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
+msgid "Filtering and Antialiasing"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3325,6 +3432,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3473,6 +3584,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "खेळ"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3500,6 +3624,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3516,7 +3648,11 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3756,11 +3892,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3821,6 +3964,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3842,7 +3991,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3882,10 +4033,6 @@ 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 ""
@@ -3936,15 +4083,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4565,6 +4708,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4620,7 +4767,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4630,15 +4777,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4650,7 +4800,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4678,6 +4829,10 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lighting"
+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"
@@ -5062,10 +5217,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5114,6 +5265,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5200,16 +5363,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5222,6 +5385,10 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5259,10 +5426,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5356,10 +5519,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5406,10 +5565,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5578,6 +5733,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5605,19 +5764,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Seabed noise"
+msgid "Screenshots"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgid "Seabed noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of two 3D noises that together define tunnels."
+msgid "Second of 4 2D noises that together define hill/mountain range height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Security"
+msgid "Second of two 3D noises that together define tunnels."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5660,7 +5819,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
+#, fuzzy
+msgid "Server"
+msgstr "दमट नदà¥à¤¯à¤¾"
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5688,10 +5856,18 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5702,12 +5878,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5715,7 +5893,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5791,7 +5969,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5991,6 +6169,10 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6193,7 +6375,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6217,10 +6399,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6311,6 +6501,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6544,6 +6738,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6633,6 +6836,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6644,6 +6851,15 @@ msgstr ""
msgid "cURL parallel limit"
msgstr ""
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "minetest.net वरून Minetest Game डाउनलोड करा"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "minetest.net वरà¥à¤¨ डाउनलोड करा"
+
+#~ msgid "Game"
+#~ msgstr "खेळ"
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "तू मेलास"
diff --git a/po/ms/minetest.po b/po/ms/minetest.po
index e1d067e79..54529e0f6 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: 2022-01-25 23:19+0100\n"
-"PO-Revision-Date: 2022-01-30 18:51+0000\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-24 09:25+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,7 +13,7 @@ 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.11-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -115,6 +115,34 @@ msgid "The server has requested a reconnect:"
msgstr "Pelayan meminta anda untuk menyambung semula:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr "Versi $1 baharu kini tersedia"
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr "Mods Klien"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+"Versi terpasang: $1\n"
+"Versi baharu: $2\n"
+"Lawati $3 untuk ketahui cara untuk mendapatkan versi terbaru dan kekal "
+"dikemas kini dengan sifat dan pembaikan pepijat."
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr "Kemudian"
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr "Tidak Selamanya"
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Versi protokol tidak serasi. "
@@ -127,6 +155,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Pelayan menyokong protokol versi $1 hingga $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr "Lawati laman sesawang"
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Kami hanya menyokong protokol versi $1."
@@ -134,14 +166,21 @@ msgstr "Kami hanya menyokong protokol versi $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Kami menyokong protokol versi $1 hingga $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr "(Dibolehkan, ada ralat)"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+msgstr "(Tidak dipenuhi)"
+
#: 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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Batal"
@@ -280,7 +319,6 @@ msgid "Failed to download $1"
msgstr "Gagal memuat turun $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Permainan"
@@ -301,7 +339,6 @@ 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"
@@ -394,12 +431,8 @@ msgid "Decorations"
msgstr "Hiasan"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Muat turun permainan, contohnya Minetest Game, dari minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Muat turun satu dari minetest.net"
+msgid "Development Test is meant for developers."
+msgstr "Development Test hanyalah untuk kegunaan pembangun."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -415,11 +448,7 @@ msgstr "Jisim bumi terapung atas langit"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-msgstr "Tanah terapung (dalam ujikaji)"
-
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Permainan"
+msgstr "Tanah terapung (dalam uji kaji)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
@@ -438,6 +467,14 @@ msgid "Increases humidity around rivers"
msgstr "Tingkatkan kelembapan sekitar sungai"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr "Pasang suatu permainan"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr "Pasang permainan lain"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Tasik"
@@ -539,10 +576,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Gua gergasi yang sangat mendalam bawah tanah"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Amaran: The Development Test hanyalah untuk kegunaan pembangun."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Nama dunia"
@@ -572,6 +605,36 @@ msgstr "pkgmgr: laluan tidak sah \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Padam Dunia \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Sahkan Kata Laluan"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr "Menyertai $1"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr "Nama tidak ditulis"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Nama"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Kata laluan"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr "Kata laluan tidak padan"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr "Daftar"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Terima"
@@ -604,6 +667,14 @@ msgstr "< Kembali ke halaman Tetapan"
msgid "Browse"
msgstr "Layar"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr "Kandungan: Permainan"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr "Kandungan: Mods"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Dilumpuhkan"
@@ -660,7 +731,7 @@ msgstr "Pilih direktori"
msgid "Select file"
msgstr "Pilih fail"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Tunjukkan nama teknikal"
@@ -809,6 +880,10 @@ msgstr "Penyumbang Terdahulu"
msgid "Previous Core Developers"
msgstr "Pembangun Teras Terdahulu"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr "Kongsikan log nyahpepijat"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Layari kandungan dalam talian"
@@ -877,10 +952,6 @@ msgstr "Hos Pelayan"
msgid "Install games from ContentDB"
msgstr "Pasangkan permainan daripada ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Nama"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Buat Baru"
@@ -889,10 +960,6 @@ msgstr "Buat Baru"
msgid "No world created or selected!"
msgstr "Tiada dunia dicipta atau dipilih!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Kata laluan"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Mula Main"
@@ -926,10 +993,6 @@ msgid "Clear"
msgstr "Padam"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Sambung"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Mod Kreatif"
@@ -939,10 +1002,6 @@ msgid "Damage / PvP"
msgstr "Boleh cedera / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Padam Kegemaran"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Kegemaran"
@@ -955,6 +1014,10 @@ msgid "Join Game"
msgstr "Sertai Permainan"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr "Log Masuk"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -967,10 +1030,18 @@ msgid "Refresh"
msgstr "Segarkan semula"
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr "Buang kegemaran"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Keterangan Pelayan"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr "(sokongan permainan diperlukan)"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1015,8 +1086,8 @@ msgid "Dynamic shadows"
msgstr "Bayang dinamik"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr "Bayang dinamik: "
+msgid "Dynamic shadows:"
+msgstr "Bayang dinamik:"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1088,7 +1159,7 @@ msgstr "Pembayang"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (experimental)"
-msgstr "Pembayang (dalam ujikaji)"
+msgstr "Pembayang (dalam uji kaji)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1111,16 +1182,16 @@ msgid "Tone Mapping"
msgstr "Pemetaan Tona"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr "Nilai Ambang Sentuhan: (px)"
+msgid "Touch threshold (px):"
+msgstr "Nilai ambang sentuhan (px):"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
msgstr "Penapisan Trilinear"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
-msgstr "Ultra Tinggi"
+msgid "Very High"
+msgstr "Sangat Tinggi"
#: builtin/mainmenu/tab_settings.lua
msgid "Very Low"
@@ -1138,6 +1209,10 @@ msgstr "Cecair Bergelora"
msgid "Waving Plants"
msgstr "Tumbuhan Bergoyang"
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr "Sambungan digugurkan (ralat protokol?)."
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Sambungan tamat tempoh."
@@ -1274,8 +1349,8 @@ 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')"
+msgid "Can't show block bounds (disabled by mod or game)"
+msgstr "Tidak boleh tunjuk batas blok (dilumpuhkan oleh mods atau permainan)"
#: src/client/game.cpp
msgid "Change Password"
@@ -1404,6 +1479,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Jarak pandang tanpa had dibolehkan"
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr "Ralat dalam mencipta klien: %s"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Keluar ke Menu"
@@ -1910,29 +1990,6 @@ msgstr "Gagal buka laman sesawang"
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!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Daftar dan Sertai"
-
-#: 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 ""
-"Anda akan sertai pelayan dengan nama \"%s\" untuk kali pertama.\n"
-"Jika anda teruskan, akaun baru dengan maklumat anda akan dicipta di pelayan "
-"ini.\n"
-"Sila taip semula kata laluan anda dan klik 'Daftar dan Sertai' untuk sahkan "
-"penciptaan akaun, atau klik 'Batal' untuk membatalkan."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Teruskan"
@@ -1965,7 +2022,7 @@ msgstr "Batas blok"
msgid "Change camera"
msgstr "Tukar kamera"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Sembang"
@@ -2018,10 +2075,8 @@ msgid "Key already in use"
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, buang sesetengah benda dari fail "
-"minetest.conf)"
+msgid "Keybindings."
+msgstr "Ikatan kekunci."
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2092,10 +2147,6 @@ msgid "Change"
msgstr "Tukar"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Sahkan Kata Laluan"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Kata Laluan Baru"
@@ -2103,6 +2154,10 @@ msgstr "Kata Laluan Baru"
msgid "Old Password"
msgstr "Kata Laluan Lama"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Kata laluan tidak padan!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Keluar"
@@ -2116,12 +2171,6 @@ msgstr "Dibisukan"
msgid "Sound Volume: %d%%"
msgstr "Kekuatan Bunyi: %d%%"
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Masukkan "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2129,6 +2178,16 @@ msgstr "Masukkan "
msgid "LANG_CODE"
msgstr "ms"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+"Nama belum berdaftar. Untuk mencipta akaun di pelayan ini, klik 'Daftar'"
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr "Nama sudah diambil. Sila pilih nama yang lain"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2293,6 +2352,10 @@ msgstr ""
"Ambil perhatian bahawa mod selang-seli memerlukan pembayang."
#: src/settings_translation_file.cpp
+msgid "3d"
+msgstr "3d"
+
+#: 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."
@@ -2389,6 +2452,10 @@ msgstr ""
"bergantung kepada tetapan 'mgv7_np_floatland', sentiasa cuba untuk pastikan)."
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr "Nama pentadbir"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Tetapan mendalam"
@@ -2407,8 +2474,8 @@ msgstr ""
"dan cahaya buatan, kesannya pada cahaya malam amat rendah."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
-msgstr "Sentiasa terbang dan bergerak pantas"
+msgid "Always fly fast"
+msgstr "Sentiasa terbang pantas"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
@@ -2488,6 +2555,10 @@ msgstr ""
"Nyatakan dalam unit blokpeta (16 nod)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr "Audio"
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Kekunci autopergerakan"
@@ -2528,10 +2599,6 @@ msgid "Base terrain height."
msgstr "Ketinggian rupa bumi asas."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Asas"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Keistimewaan asas"
@@ -2552,8 +2619,8 @@ msgid "Bind address"
msgstr "Alamat ikatan"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
-msgstr "Parameter suhu API biom dan hingar kelembapan"
+msgid "Biome API noise parameters"
+msgstr "Parameter hingar API biom"
#: src/settings_translation_file.cpp
msgid "Biome noise"
@@ -2564,6 +2631,10 @@ msgid "Block send optimize distance"
msgstr "Jarak optimum penghantaran blok"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr "Apungan"
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Laluan fon tebal dan italik"
@@ -2588,6 +2659,10 @@ msgid "Builtin"
msgstr "Terbina dalam"
#: src/settings_translation_file.cpp
+msgid "Camera"
+msgstr "Kamera"
+
+#: 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"
@@ -2753,6 +2828,10 @@ msgid "Client side node lookup range restriction"
msgstr "Sekatan jarak carian nod pihak klien"
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr "Mods Pihak Klien"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Kelajuan memanjat"
@@ -2871,6 +2950,10 @@ msgid "Console height"
msgstr "Ketinggian konsol"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr "Repositori Kandungan"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "Senarai Hitam Bendera ContentDB"
@@ -2911,8 +2994,12 @@ msgstr ""
"tidak berubah."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Mengawal kelajuan tenggelam dalam cecair."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
+"Mengawal kelajuan tenggelam dalam cecair ketika tidak berbuat apa-apa.\n"
+"Nilai negatif akan menyebabkan anda timbul."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2985,13 +3072,12 @@ msgid "Debug log level"
msgstr "Tahap log nyahpepijat"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Kekunci perlahankan bunyi"
+msgid "Debugging"
+msgstr "Nyahpepijat"
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
-"Kurangkan nilai untuk meningkatkan rintangan cecair terhadap pergerakan."
+msgid "Dec. volume key"
+msgstr "Kekunci perlahankan bunyi"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3149,6 +3235,10 @@ msgid "Desynchronize block animation"
msgstr "Menyahsegerakkan animasi blok"
#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr "Pilihan Pembangun"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Kekunci gali"
@@ -3169,6 +3259,15 @@ msgid "Display Density Scaling Factor"
msgstr "Faktor Skala Ketumpatan Paparan"
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+"Jarak dalam nod ketika mana pengisihan kedalaman lut sinar dibolehkan\n"
+"Gunakan ini untuk mengehadkan hentaman prestasi akibat pengisihan kedalaman "
+"lut sinar"
+
+#: 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."
@@ -3215,7 +3314,7 @@ msgid ""
"This support is experimental and API can change."
msgstr ""
"Membolehkan sokongan pembuatan mods Lua dekat klien.\n"
-"Sokongan ini dalam ujikaji dan API boleh berubah."
+"Sokongan ini dalam uji kaji dan API boleh berubah."
#: src/settings_translation_file.cpp
msgid ""
@@ -3249,6 +3348,10 @@ msgid "Enable joysticks"
msgstr "Membolehkan kayu bedik"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr "Membolehkan kayu bedik. Perlu dimulakan semula untuk mengambil kesan"
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Membolehkan sokongan saluran mods."
@@ -3265,18 +3368,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Membolehkan input pengguna secara rawak (hanya untuk percubaan)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-msgstr "Bolehkan pengesahan pendaftaran"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
-msgstr ""
-"Membolehkan pengesahan pendaftaran apabila menyambung kepada pelayan.\n"
-"Jika dilumpuhkan, akaun baru akan didaftarkan secara automatik."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3285,6 +3376,10 @@ msgstr ""
"Lumpuhkannya untuk kelajuan atau untuk kelihatan berlainan."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+msgstr "Membolehkan pemisahan log masuk/daftar"
+
+#: 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 "
@@ -3384,6 +3479,10 @@ msgstr ""
"kebolehan bermain permainan."
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr "Pembukah enjin"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Selang masa cetak data pemprofilan enjin"
@@ -3408,6 +3507,10 @@ msgstr ""
"bahagian tanah yang lebih rata, sesuai untuk lapisan tanah terapung pejal."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr "FPS"
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "Bingkai per saat (FPS) apabila permainan hilang fokus atau dijedakan"
@@ -3497,8 +3600,8 @@ msgstr ""
"mip dibolehkan."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Penapisan"
+msgid "Filtering and Antialiasing"
+msgstr "Tapisan dan Antialias"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3566,6 +3669,10 @@ msgid "Fog toggle key"
msgstr "Kekunci togol kabut"
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr "Fon"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Fon tebal secara lalainya"
@@ -3743,6 +3850,18 @@ msgid "GUI scaling filter txr2img"
msgstr "Penapis skala GUI txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr "GUI"
+
+#: src/settings_translation_file.cpp
+msgid "Gamepads"
+msgstr "Pad permainan"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "Umum"
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Panggil balik sejagat"
@@ -3778,6 +3897,14 @@ msgid "Graphics"
msgstr "Grafik"
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr "Kesan Grafik"
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr "Grafik dan Audio"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Graviti"
@@ -3794,8 +3921,12 @@ msgid "HTTP mods"
msgstr "Mods HTTP"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "Faktor skala papar pandu (HUD)"
+msgid "HUD"
+msgstr "Papar Pandu (HUD)"
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
+msgstr "Skala papar pandu (HUD)"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -4054,14 +4185,23 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"Berapa lama pelayan akan tunggu sebelum menyahmuat blokpeta yang tidak "
-"digunakan.\n"
+"digunakan, dinyatakan dalam saat.\n"
"Nilai lebih tinggi lebih lembut, tetapi akan menggunakan lebih banyak RAM."
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+"Berapa banyak anda diperlahankan ketika bergerak di dalam cecair.\n"
+"Kurangkan nilai untuk meningkatkan rintangan cecair terhadap pergerakan."
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "Keluasan pembuatan sungai."
@@ -4136,6 +4276,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Jika dibolehkan, pendaftaran akaun dipisahkan dari log masuk dalam UI.\n"
+"Jika dilumpuhkan, akaun baharu akan didaftarkan secara automatik ketika log "
+"masuk."
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -4165,10 +4314,12 @@ msgstr ""
"apabila terbang atau berenang."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
-"Jika dibolehkan, pemain-pemain baru tidak boleh masuk dengan kata laluan "
-"yang kosong."
+"Jika dibolehkan, pemain tidak boleh sertai tanpa kata laluan atau tukar "
+"kepada kata laluan yang kosong."
#: src/settings_translation_file.cpp
msgid ""
@@ -4222,10 +4373,6 @@ msgid "Ignore world errors"
msgstr "Abaikan ralat dunia"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "Dalam Permainan"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
"Nilai alfa latar belakang konsol sembang dalam permainan (kelegapan, antara "
@@ -4284,18 +4431,16 @@ msgid "Instrument the methods of entities on registration."
msgstr "Memasang kaedah entiti ketika pendaftaran."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Instrumentasi"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""
"Selang masa di antara penyimpanan perubahan penting dalam dunia, dinyatakan "
"dalam unit saat."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
-msgstr "Selang di antara penghantaran maklumat masa pelayan kepada klien."
+msgid "Interval of sending time of day to clients, stated in seconds."
+msgstr ""
+"Selang di antara penghantaran maklumat waktu dalam hari kepada klien, "
+"dinyatakan dalam saat."
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
@@ -4369,8 +4514,8 @@ msgid ""
"Has no effect on 3D fractals.\n"
"Range roughly -2 to 2."
msgstr ""
-"Set julia sahaja.\n"
-"Komponen W tetapan hiperkompleks.\n"
+"Set Julia sahaja.\n"
+"Komponen W buat pemalar hiperkompleks.\n"
"Mengubah bentuk fraktal.\n"
"Tiada kesan terhadap fraktal 3D.\n"
"Julat kasarnya -2 hingga 2."
@@ -4382,8 +4527,8 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
-"Set julia sahaja.\n"
-"Komponen X tetapan hiperkompleks.\n"
+"Set Julia sahaja.\n"
+"Komponen X buat pemalar hiperkompleks.\n"
"Mengubah bentuk fraktal.\n"
"Julat kasarnya -2 hingga 2."
@@ -4394,8 +4539,8 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
-"Set julia sahaja.\n"
-"Komponen Y tetapan hiperkompleks.\n"
+"Set Julia sahaja.\n"
+"Komponen Y buat pemalar hiperkompleks.\n"
"Mengubah bentuk fraktal.\n"
"Julat kasarnya -2 hingga 2."
@@ -4406,26 +4551,26 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
-"Set julia sahaja.\n"
-"Komponen Z tetapan hiperkompleks.\n"
+"Set Julia sahaja.\n"
+"Komponen Z buat pemalar hiperkompleks.\n"
"Mengubah bentuk fraktal.\n"
"Julat kasarnya -2 hingga 2."
#: src/settings_translation_file.cpp
msgid "Julia w"
-msgstr "W julia"
+msgstr "W Julia"
#: src/settings_translation_file.cpp
msgid "Julia x"
-msgstr "X julia"
+msgstr "X Julia"
#: src/settings_translation_file.cpp
msgid "Julia y"
-msgstr "Y julia"
+msgstr "Y Julia"
#: src/settings_translation_file.cpp
msgid "Julia z"
-msgstr "Z julia"
+msgstr "Z Julia"
#: src/settings_translation_file.cpp
msgid "Jump key"
@@ -5153,6 +5298,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr "Papan Kekunci dan Tetikus"
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr "Tendang pemain yang menghantar mesej lebih daripada X setiap 10 saat."
@@ -5213,11 +5362,11 @@ msgstr "Kekunci ke kiri"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"Panjang setiap detik pelayan dan selang masa ketika mana objek-objek "
"selalunya\n"
-"dikemaskini menerusi rangkaian."
+"dikemaskini menerusi rangkaian, dinyatakan dalam saat."
#: src/settings_translation_file.cpp
msgid ""
@@ -5228,16 +5377,23 @@ msgstr ""
"Memerlukan tetapan cecair bergelora dibolehkan."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
-msgstr "Panjang masa di antara kitaran pelaksanaan Pengubah Blok Aktif (ABM)"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
+msgstr ""
+"Panjang masa di antara kitaran pelaksanaan Pengubah Blok Aktif (ABM), "
+"dinyatakan dalam saat."
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
-msgstr "Jumlah masa selangan di antara kitaran pelaksanaan NodeTimer"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
+msgstr ""
+"Panjang masa di antara kitaran pelaksanaan PemasaNod, dinyatakan dalam saat."
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
-msgstr "Panjang masa di antara setiap kitaran pengurusan blok aktif"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
+msgstr ""
+"Panjang masa di antara kitaran pengurusan blok aktif, dinyatakan dalam saat."
#: src/settings_translation_file.cpp
msgid ""
@@ -5248,16 +5404,18 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
-"Tahap pengelogan untuk ditulis kepada fail debug.txt:\n"
+"Tahap pengelogan untuk ditulis ke fail debug.txt:\n"
"- <tidak ada apa-apa> (tidak mengelog)\n"
-"- tiada (mesej tanpa tahap)\n"
-"- ralat\n"
-"- amaran\n"
-"- perbuatan\n"
-"- maklumat\n"
-"- berjela-jela"
+"- none: tiada (mesej tanpa tahap)\n"
+"- error: ralat\n"
+"- warning: amaran\n"
+"- action: perbuatan\n"
+"- info: maklumat\n"
+"- verbose: berjela-jela\n"
+"- trace: jejak"
#: src/settings_translation_file.cpp
msgid "Light curve boost"
@@ -5284,6 +5442,10 @@ msgid "Light curve low gradient"
msgstr "Kecerunan rendah lengkung cahaya"
#: src/settings_translation_file.cpp
+msgid "Lighting"
+msgstr "Pencahayaan"
+
+#: 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"
@@ -5730,10 +5892,6 @@ msgid "Maximum users"
msgstr "Had jumlah pengguna"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menu"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "Cache jejaring"
@@ -5782,6 +5940,18 @@ msgid "Mipmapping"
msgstr "Pemetaan Mip"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr "Lain-lain"
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr "Pembukah Mods"
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr "Keselamatan Mods"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "Saluran mods"
@@ -5881,10 +6051,6 @@ msgid "Near plane"
msgstr "Dekat satah"
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Rangkaian"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
@@ -5893,6 +6059,10 @@ msgstr ""
"Nilai ini akan diatasi apabila memulakan pelayan dari menu utama."
#: src/settings_translation_file.cpp
+msgid "Networking"
+msgstr "Rangkaian"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Pengguna baru mesti memasukkan kata laluan ini."
@@ -5905,6 +6075,10 @@ msgid "Noclip key"
msgstr "Kekunci tembus blok"
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr "Tonjolan Nod dan Entiti"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Tonjolan nod"
@@ -5960,10 +6134,6 @@ msgstr ""
"dan penggunaan ingatan (4096=100MB, mengikut kebiasaan)."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Repositori Kandungan Dalam Talian"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "Cecair legap"
@@ -6072,10 +6242,6 @@ msgstr ""
"Ini memerlukan keistimewaan \"terbang\" dalam pelayan tersebut."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Nama pemain"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "Jarak pemindahan pemain"
@@ -6134,10 +6300,6 @@ msgid "Profiler toggle key"
msgstr "Kekunci togol pembukah"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Pemprofilan"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr "Alamat pendengar Prometheus"
@@ -6332,6 +6494,10 @@ msgstr ""
"di sisi apabila imej disesuaikan dengan saiz bukan integer."
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr "Skrin"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Tinggi skrin"
@@ -6362,6 +6528,10 @@ msgstr ""
"Gunakan 0 untuk kualiti lalai."
#: src/settings_translation_file.cpp
+msgid "Screenshots"
+msgstr "Tangkap layar"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Hingar dasar laut"
@@ -6376,10 +6546,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Hingar 3D kedua daripada dua yang mentakrifkan terowong."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Keselamatan"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Lihat http://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6438,8 +6604,16 @@ msgstr ""
"18 = Set Julia \"Mandelbulb\" 4D."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Pelayan / Pemain perseorangan"
+msgid "Server"
+msgstr "Pelayan"
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr "Gaya Main Pelayan"
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
+msgstr "Keselamatan Pelayan"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6466,10 +6640,18 @@ msgid "Server side occlusion culling"
msgstr "Penakaian oklusi pihak pelayan"
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr "Prestasi Pelayan/Persekitaran"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "URL senarai pelayan"
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr "Senarai Pelayan dan Mesej Harian"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Fail senarai pelayan"
@@ -6482,15 +6664,20 @@ msgstr ""
"Sebuah mula semula diperlukan selepas menukar tetapan ini."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
-msgstr "Tetapkan panjang aksara maksimum mesej sembang dihantar oleh klien."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
+msgstr ""
+"Menetapkan panjang maksimum mesej sembang (dalam jumlah aksara) yang "
+"dihantar oleh klien."
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
-"Menetapkan kekuatan bayang.\n"
+"Menetapkan gama kekuatan bayang.\n"
+"Melaraskan keamatan bayang dinamik dalam permainan.\n"
"Nilai lebih rendah untuk bayang lebih terang, nilai lebih tinggi untuk "
"bayang lebih gelap."
@@ -6498,12 +6685,12 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.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"
+"Nilai minimum: 1.0; nilai maksimum: 15.0"
#: src/settings_translation_file.cpp
msgid ""
@@ -6598,8 +6785,8 @@ msgstr ""
"dilukis."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
-msgstr "Kekuatan bayang"
+msgid "Shadow strength gamma"
+msgstr "Gama kekuatan bayang"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6849,6 +7036,10 @@ msgid "Temperature variation for biomes."
msgstr "Variasi suhu untuk biom."
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr "Tetapan Sementara"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "Hingar rupa bumi alternatif"
@@ -6886,7 +7077,7 @@ msgid ""
msgstr ""
"Nilai ambang hingar rupa bumi untuk tasik.\n"
"Mengawal perkadaran untuk kawasan dunia dilitupi laut.\n"
-"Laras menjadi 0.0 untuk perkadaran yang lebih besar."
+"Laraskan kepada 0.0 untuk perkadaran yang lebih besar."
#: src/settings_translation_file.cpp
msgid "Terrain persistence noise"
@@ -6923,7 +7114,7 @@ msgstr ""
"pelayan lama,\n"
"pilihan ini membolehkan pemaksaan ia untuk jenis nod tertentu. Ambil "
"perhatian\n"
-"bahawa ia dianggap DALAM UJIKAJI dan mungkin tidak berfungsi dengan betul."
+"bahawa ia dianggap DALAM UJI KAJI dan mungkin tidak berfungsi dengan betul."
#: src/settings_translation_file.cpp
msgid "The URL for the content repository"
@@ -7017,7 +7208,7 @@ msgstr ""
"Nota: Di Android, kekalkan dengan OGLES1 jika tidak pasti! Apl mungkin gagal "
"dimulakan jika ditukar.\n"
"Di platform lain, OpenGL digalakkan.\n"
-"Pembayang disokong oleh OpenGL (komputer sahaja) dan OGLES2 (dalam ujikaji)"
+"Pembayang disokong oleh OpenGL (komputer sahaja) dan OGLES2 (dalam uji kaji)"
#: src/settings_translation_file.cpp
msgid ""
@@ -7117,8 +7308,10 @@ msgid "Time speed"
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 ingatan."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
+msgstr ""
+"Had masa untuk klien membuang data peta yang tidak digunakan dari ingatan, "
+"dalam saat."
#: src/settings_translation_file.cpp
msgid ""
@@ -7145,10 +7338,18 @@ msgid "Touch screen threshold"
msgstr "Nilai ambang skrin sentuh"
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr "Skrin Sentuh"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr "Keseimbangan untuk prestasi"
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr "Jarak Pengisihan Lut Sinar"
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Hingar pokok"
@@ -7259,6 +7460,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "Gunakan penapisan trilinear apabila menyesuaikan tekstur."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr "Antara Muka Pengguna"
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7532,7 +7737,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Whether to fog out the end of the visible area."
-msgstr "Sama ada hendak mengkabutkan penghujung kawasan yang kelihatan."
+msgstr "Sama ada ingin papar kabut di penghujung kawasan yang kelihatan."
#: src/settings_translation_file.cpp
msgid ""
@@ -7548,10 +7753,24 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+"Sama ada ingin tunjukkan nama teknikal.\n"
+"Memberi kesan kepada mods dan pek tekstur dalam menu Kandungan dan Pilih "
+"Mods,\n"
+"dan juga nama tetapan dalam Semua Tetapan.\n"
+"Dikawal oleh kotak pilihan dalam menu \"Semua tetapan\"."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
-"Tetapkan sama ada hendak menunjukkan maklumat nyahpepijat (kesannya sama "
-"seperti menekan butang F5)."
+"Sama ada ingin menunjukkan maklumat nyahpepijat (kesannya sama seperti "
+"menekan butang F5)."
#: src/settings_translation_file.cpp
msgid "Width component of the initial window size. Ignored in fullscreen mode."
@@ -7597,7 +7816,7 @@ msgstr ""
"inginkan, terutamanya jika anda gunakan pek tekstur yang direka secara\n"
"khusus; dengan pilihan ini, klien akan cuba untuk menentukan skala secara\n"
"automatik berdasarkan saiz tekstur. Juga lihat texture_min_size.\n"
-"Amaran: Pilihan ini DALAM UJIKAJI!"
+"Amaran: Pilihan ini DALAM UJI KAJI!"
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
@@ -7658,6 +7877,10 @@ msgid "Y-level of seabed."
msgstr "Aras Y untuk dasar laut."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr "cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Had masa muat turun fail cURL"
@@ -7705,6 +7928,9 @@ msgstr "Had cURL selari"
#~ msgid "Back"
#~ msgstr "Backspace"
+#~ msgid "Basic"
+#~ msgstr "Asas"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Bit per piksel (atau kedalaman warna) dalam mod skrin penuh."
@@ -7738,6 +7964,12 @@ msgstr "Had cURL selari"
#~ msgid "Configure"
#~ msgstr "Konfigurasi"
+#~ msgid "Connect"
+#~ msgstr "Sambung"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Mengawal kelajuan tenggelam dalam cecair."
+
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value."
@@ -7782,6 +8014,9 @@ msgstr "Had cURL selari"
#~ "Mentakrifkan tahap persampelan tekstur.\n"
#~ "Nilai lebih tinggi menghasilkan peta normal lebih lembut."
+#~ msgid "Del. Favorite"
+#~ msgstr "Padam Kegemaran"
+
#~ msgid ""
#~ "Deprecated, define and locate cave liquids using biome definitions "
#~ "instead.\n"
@@ -7791,12 +8026,21 @@ msgstr "Had cURL selari"
#~ "pentakrifan biom menggantikan cara asal.\n"
#~ "Had Y atasan lava di gua-gua besar."
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Muat turun permainan, contohnya Minetest Game, dari minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Muat turun satu dari minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Sedang muat turun dan memasang $1, sila tunggu..."
#~ msgid "Enable VBO"
#~ msgstr "Membolehkan VBO"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Bolehkan pengesahan pendaftaran"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7825,6 +8069,9 @@ msgstr "Had cURL selari"
#~ "Membolehkan pemetaan oklusi paralaks.\n"
#~ "Memerlukan pembayang untuk dibolehkan."
+#~ msgid "Enter "
+#~ msgstr "Masukkan "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7844,6 +8091,9 @@ msgstr "Had cURL selari"
#~ msgid "Fallback font size"
#~ msgstr "Saiz fon berbalik"
+#~ msgid "Filtering"
+#~ msgstr "Penapisan"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Hingar ketinggian asas tanah terapung"
@@ -7862,6 +8112,9 @@ msgstr "Had cURL selari"
#~ msgid "Full screen BPP"
#~ msgstr "BPP skrin penuh"
+#~ msgid "Game"
+#~ msgstr "Permainan"
+
#~ msgid "Gamma"
#~ msgstr "Gama"
@@ -7871,15 +8124,30 @@ msgstr "Had cURL selari"
#~ msgid "Generate normalmaps"
#~ msgstr "Jana peta normal"
+#~ msgid "HUD scale factor"
+#~ msgstr "Faktor skala papar pandu (HUD)"
+
#~ msgid "High-precision FPU"
#~ msgstr "Unit titik terapung (FPU) ketepatan tinggi"
#~ msgid "IPv6 support."
#~ msgstr "Sokongan IPv6."
+#~ msgid "In-Game"
+#~ msgstr "Dalam Permainan"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Pasang: fail: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Instrumentasi"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Ikatan kekunci. (Jika menu ini berselerak, buang sesetengah benda dari "
+#~ "fail minetest.conf)"
+
#~ msgid "Lava depth"
#~ msgstr "Kedalaman lava"
@@ -7900,6 +8168,9 @@ msgstr "Had cURL selari"
#~ "Membuatkan DirectX bekerja dengan LuaJIT. Lumpuhkan tetapan jika "
#~ "bermasalah."
+#~ msgid "Menus"
+#~ msgstr "Menu"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Peta mini dalam mod radar, Zum 2x"
@@ -7973,6 +8244,12 @@ msgstr "Had cURL selari"
#~ msgid "Path to save screenshots at."
#~ msgstr "Laluan untuk simpan tangkap layar."
+#~ msgid "Player name"
+#~ msgstr "Nama pemain"
+
+#~ msgid "Profiling"
+#~ msgstr "Pemprofilan"
+
#~ msgid "Projecting dungeons"
#~ msgstr "Kurungan bawah tanah melunjur"
@@ -7985,6 +8262,9 @@ msgstr "Had cURL selari"
#~ msgid "Select Package File:"
#~ msgstr "Pilih Fail Pakej:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Pelayan / Pemain perseorangan"
+
#~ msgid ""
#~ "Set the shadow update time.\n"
#~ "Lower value means shadows and map updates faster, but it consume more "
@@ -8075,6 +8355,21 @@ msgstr "Had cURL selari"
#~ msgid "Yes"
#~ msgstr "Ya"
+#, 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 ""
+#~ "Anda akan sertai pelayan dengan nama \"%s\" untuk kali pertama.\n"
+#~ "Jika anda teruskan, akaun baru dengan maklumat anda akan dicipta di "
+#~ "pelayan ini.\n"
+#~ "Sila taip semula kata laluan anda dan klik 'Daftar dan Sertai' untuk "
+#~ "sahkan penciptaan akaun, atau klik 'Batal' untuk membatalkan."
+
#~ msgid "You died."
#~ msgstr "Anda telah meninggal."
diff --git a/po/ms_Arab/minetest.po b/po/ms_Arab/minetest.po
index 4924cf7b4..39cbfc81b 100644
--- a/po/ms_Arab/minetest.po
+++ b/po/ms_Arab/minetest.po
@@ -7,10 +7,9 @@ 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-10 23:53+0000\n"
-"Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat "
-"Yasuyoshi <translation@mnh48.moe>\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-05-19 18:13+0000\n"
+"Last-Translator: Niskala Airaha <niskala5570@gmail.com>\n"
"Language-Team: Malay (Jawi) <https://hosted.weblate.org/projects/minetest/"
"minetest/ms_Arab/>\n"
"Language: ms_Arab\n"
@@ -18,7 +17,7 @@ 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.10.1\n"
+"X-Generator: Weblate 4.13-dev\n"
#: builtin/client/chatcommands.lua
#, fuzzy
@@ -125,6 +124,31 @@ msgid "The server has requested a reconnect:"
msgstr "ڤلاين ڤرماٴينن ممينت اندا اونتوق مڽمبوڠ سمولا:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "ڤيليه دنيا:"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "ÛØ±Ø³ÙŠ Ú¤Ø±ÙˆØªÙˆÚ©ÙˆÙ„ تيدق سراسي. "
@@ -137,6 +161,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "ڤلاين ڤرماٴينن Ù…Ú½ÙˆÚ©ÙˆÚ  ڤروتوکول ÛØ±Ø³ÙŠ $1 هيڠݢ $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "کامي هاڽ Ù…Ú½ÙˆÚ©ÙˆÚ  ڤروتوکول ÛØ±Ø³ÙŠ $1."
@@ -144,16 +172,23 @@ msgstr "کامي هاڽ Ù…Ú½ÙˆÚ©ÙˆÚ  ڤروتوکول ÛØ±Ø³ÙŠ $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "کامي Ù…Ú½ÙˆÚ©ÙˆÚ  ڤروتوکول ÛØ±Ø³ÙŠ $1 هيڠݢ $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
-msgstr "باتل"
+msgstr "بطل"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/tab_content.lua
@@ -291,7 +326,6 @@ msgid "Failed to download $1"
msgstr "ݢاݢل مموات تورون $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "ڤرماٴينن"
@@ -315,7 +349,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr "ڤاسڠ: جنيس ÙØ§ÙŠÙ„ \"$1\" تيدق دسوکوڠ اتاو ارکيب روسق"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "مودس"
@@ -410,12 +443,9 @@ msgid "Decorations"
msgstr "هياسن"
#: builtin/mainmenu/dlg_create_world.lua
-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"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "امرن: The Development Test هاڽله اونتوق کݢوناٴن ڤمباڠون."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -433,10 +463,6 @@ msgstr "جيسيم بومي تراڤوڠ اتس لاڠيت"
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 "جان روڤ بومي بوکن-ÙØ±Ø§Ú©ØªÙ„: لاٴوتن دان باواه تانه"
@@ -454,6 +480,15 @@ msgid "Increases humidity around rivers"
msgstr "تيڠکتکن کلمبڤن سکيتر سوڠاي"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "ڤاسڠ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "تاسيق"
@@ -555,10 +590,6 @@ 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 "امرن: The Development Test هاڽله اونتوق کݢوناٴن ڤمباڠون."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "نام دنيا"
@@ -588,6 +619,39 @@ msgstr "pkgmgr: لالوان تيدق صح \"$1\""
msgid "Delete World \"$1\"?"
msgstr "ڤادم دنيا \"$1\"؟"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "صحکن کات لالوان"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Password"
+msgstr "کات لالوان لام"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "کات لالوان تيدق ڤادن!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Ø¯ÙØªØ± دان سرتاٴي"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "تريما"
@@ -620,6 +684,16 @@ msgstr "< کمبالي کهلامن تتڤن"
msgid "Browse"
msgstr "لاير"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "کندوڠن"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "کندوڠن"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "دلومڤوهکن"
@@ -677,7 +751,7 @@ msgstr "ڤيليه ديريکتوري"
msgid "Select file"
msgstr "ڤيليه ÙØ§ÙŠÙ„"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "تونجوقکن نام تيکنيکل"
@@ -825,6 +899,11 @@ msgstr "ڤڽومبڠ تردهولو"
msgid "Previous Core Developers"
msgstr "ڤمباڠون تراس تردهولو"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "تونجوقکن معلومت ڽهڤڤيجت"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "لايري کندوڠن دالم تالين"
@@ -893,10 +972,6 @@ msgstr "هوس ڤلاين"
msgid "Install games from ContentDB"
msgstr "ڤاسڠکن ڤرماٴينن درڤد ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "بوات بارو"
@@ -905,11 +980,6 @@ msgstr "بوات بارو"
msgid "No world created or selected!"
msgstr "تيادا دنيا دچيڤت اتاو دڤيليه!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "کات لالوان لام"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "مولا ماٴين"
@@ -945,10 +1015,6 @@ msgid "Clear"
msgstr "ڤادم"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "سمبوڠ"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "مود کرياتيÙ"
@@ -959,10 +1025,6 @@ msgid "Damage / PvP"
msgstr "بوليه چدرا"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "ڤادم کݢمرن"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "کݢمرن"
@@ -976,6 +1038,10 @@ msgid "Join Game"
msgstr "سرتاٴي ڤرماٴينن"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ú¤ÙŠÚ "
@@ -990,10 +1056,19 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "ڤورت جارق جاٴوه"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "ڤريهل ڤلاين ڤرماٴينن"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1039,8 +1114,9 @@ msgid "Dynamic shadows"
msgstr "بايڠ Ùون"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr ""
+#, fuzzy
+msgid "Dynamic shadows:"
+msgstr "بايڠ Ùون"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1136,7 +1212,8 @@ msgid "Tone Mapping"
msgstr "ڤمتاٴن تونا"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "نيلاي امبڠ سنتوهن: (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1144,7 +1221,7 @@ msgid "Trilinear Filter"
msgstr "ڤناڤيسن تريلينيار"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1163,6 +1240,11 @@ msgstr "چچاٴير برݢلورا"
msgid "Waving Plants"
msgstr "تومبوهن برݢويڠ"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "رالت دالم ڤڽمبوڠن (تامت تيمڤوه؟)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "سمبوڠن تامت تيمڤوه."
@@ -1300,7 +1382,7 @@ msgid "Camera update enabled"
msgstr "کمس کيني کاميرا دبوليهکن"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1431,6 +1513,11 @@ msgid "Enabled unlimited viewing range"
msgstr "جارق ڤندڠ تنڤ حد دبوليهکن"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "سدڠ منچيڤت کليئن..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "کلوار کمينو"
@@ -1938,28 +2025,6 @@ msgstr "ݢاݢل مموات تورون $1"
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 ""
-"اندا اکن سرتاٴي ڤلاين دڠن نام \"%s\" اونتوق کالي ڤرتام.\n"
-"جيک اندا تروسکن⹠اکاٴون بهارو دڠن معلومت اندا اکن دچيڤت دڤلاين اين.\n"
-"سيلا تايڤ سمولا کات لالوان اندا دان کليک 'Ø¯ÙØªØ± دان سرتاٴي' اونتوق صحکن "
-"ڤنچيڤتاٴن اکاٴون⹠اتاو کليک 'باتل' اونتوق ممباتلکن."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "تروسکن"
@@ -1993,7 +2058,7 @@ msgstr ""
msgid "Change camera"
msgstr "توکر کاميرا"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "سيمبڠ"
@@ -2046,9 +2111,8 @@ msgid "Key already in use"
msgstr "ککونچي تله دݢوناکن اونتوق Ùوڠسي لاٴين"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"ايکتن ککونچي. (جيک مينو اين برسليرق⹠ڤادم سستڠه بندا دري ÙØ§ÙŠÙ„ minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2119,10 +2183,6 @@ msgid "Change"
msgstr "توکر"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "صحکن کات لالوان"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "کات لالوان بارو"
@@ -2130,6 +2190,10 @@ msgstr "کات لالوان بارو"
msgid "Old Password"
msgstr "کات لالوان لام"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "کات لالوان تيدق ڤادن!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "کلوار"
@@ -2143,12 +2207,6 @@ msgstr "دبيسوکن"
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).
@@ -2156,6 +2214,16 @@ msgstr "ماسوقکن "
msgid "LANG_CODE"
msgstr "ms_Arab"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "سيلا ڤيليه سواتو نام!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2306,6 +2374,10 @@ msgstr ""
"امبيل ڤرهاتين بهاوا مود سلڠ-سلي ممرلوکن ڤمبايڠ."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2394,6 +2466,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "تمبه نام ايتم"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "تتڤن مندالم"
@@ -2412,7 +2489,8 @@ msgstr ""
"دان چهاي بواتن⹠کسنڽ ڤد چهاي مالم امت رنده."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "سنتياس تربڠ دان برݢرق ڤنتس"
#: src/settings_translation_file.cpp
@@ -2483,6 +2561,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "ککونچي أوتوڤرݢرقن"
@@ -2525,10 +2607,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "اساس"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "کأيستيميواٴن اساس"
@@ -2549,7 +2627,7 @@ msgid "Bind address"
msgstr "علامت ايکتن"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2561,6 +2639,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "لالوان Ùون تبل دان ايتاليک"
@@ -2585,6 +2667,11 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+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"
@@ -2750,6 +2837,11 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "مودس کليئن"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2846,6 +2938,10 @@ msgid "Console height"
msgstr "کتيڠݢين کونسول"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2881,11 +2977,13 @@ msgid ""
msgstr ""
"مڠاول ڤنجڠ کيترن سياڠ\\مالم.\n"
"چونتوهڽ:\n"
-"72 اونتوق 20 مينيت⹠360 اونتوق 4 مينيت⹠1 اونتوق 24 جم⹠0 اونتوق سياڠ\\مالم"
-"\\لاٴين٢ ککل تيدق بروبه."
+"72 اونتوق 20 مينيت⹠360 اونتوق 4 مينيت⹠1 اونتوق 24 جم⹠0 اونتوق "
+"سياڠ\\مالم\\لاٴين٢ ککل تيدق بروبه."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2953,12 +3051,12 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "ککونچي ڤرلاهنکن بوڽي"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
+msgid "Dec. volume key"
+msgstr "ککونچي ڤرلاهنکن بوڽي"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3110,6 +3208,11 @@ msgstr "مڽهسݢرقکن انيماسي بلوک"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Developer Options"
+msgstr "هياسن"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Dig key"
msgstr "ککومچي ککانن"
@@ -3130,6 +3233,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "نام دوماٴين ڤلاين ڤرماٴينن⹠اونتوق دڤاڤرکن دالم سناراي ڤلاين ڤرماٴينن."
@@ -3202,6 +3311,10 @@ msgid "Enable joysticks"
msgstr "ممبوليهکن کايو بديق"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "ممبوليهکن سوکوڠن سالوران مودس."
@@ -3218,18 +3331,6 @@ 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 ""
-"ممبوليهکن ڤڠصحن Ú¤Ù†Ø¯ÙØªØ±Ù† اڤابيلا مڽمبوڠ کڤد ڤلاين.\n"
-"جک دلومڤوهکن⹠اکاٴون بارو اکن Ø¯Ø¯ÙØªØ±Ú©Ù† سچارا اٴوتوماتيک."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3238,6 +3339,10 @@ msgstr ""
"لومڤوهکنڽ اونتوق کلاجوان اتاو اونتوق کليهتن بربيذا."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3332,6 +3437,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3350,6 +3459,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "FPS when unfocused or paused"
msgstr "بيڠکاي ڤر ساٴت (FPS) مکسيما اڤابيلا ڤرماٴينن دجيداکن."
@@ -3438,8 +3551,9 @@ msgstr ""
"اي سدڠ دمواتکن."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "ڤناڤيسن"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "انتيالياس:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3506,6 +3620,11 @@ msgid "Fog toggle key"
msgstr "ککونچي توݢول کابوت"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "سايز Ùون"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Ùون تبل سچارا لالايڽ"
@@ -3667,6 +3786,19 @@ msgid "GUI scaling filter txr2img"
msgstr "ڤناڤيس سکال GUI جنيس txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "ڤرماٴينن"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3698,6 +3830,16 @@ msgid "Graphics"
msgstr "ݢراÙÙŠÚ©"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "ݢراÙÙŠÚ©"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "ݢراÙÙŠÚ©"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3714,8 +3856,13 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "Ùکتور سکالا ڤاڤر ڤندو (HUD)"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "سکال GUI"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -3962,11 +4109,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -4036,6 +4190,15 @@ msgstr ""
"تورون دالم مود تربڠ⹠مڠݢنتيکن ککونچي \"سلينڤ\"."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"ممبوليهکن ڤڠصحن Ú¤Ù†Ø¯ÙØªØ±Ù† اڤابيلا مڽمبوڠ کڤد ڤلاين.\n"
+"جک دلومڤوهکن⹠اکاٴون بارو اکن Ø¯Ø¯ÙØªØ±Ú©Ù† سچارا اٴوتوماتيک."
+
+#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
@@ -4062,7 +4225,10 @@ msgstr ""
"اتاو برنڠ."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr "جک دبوليهکن⹠ڤماٴين٢ بارو تيدق بوليه ماسوق دڠن کات لالوان يڠ کوسوڠ."
#: src/settings_translation_file.cpp
@@ -4106,10 +4272,6 @@ 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 ""
"نيلاي Ø§Ù„ÙØ§ لاتر بلاکڠ کونسول سيمبڠ دالم ڤرماٴينن (کلݢڤن⹠انتارا 0 دان 255)."
@@ -4162,16 +4324,13 @@ 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."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "سلڠ دأنتارا ڤڠهنترن معلومت ماس ڤلاين کڤد کليئن."
#: src/settings_translation_file.cpp
@@ -5011,6 +5170,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr "تندڠ ڤماٴين يڠ مڠهنتر ميسيج لبيه درڤد X ستياڤ 10 ساٴت."
@@ -5070,7 +5233,7 @@ msgstr "ککونچي ککيري"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5082,15 +5245,18 @@ msgstr ""
"ممرلوکن تتڤن چچاٴير برݢلورا دبوليهکن."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5102,7 +5268,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5130,6 +5297,11 @@ msgid "Light curve low gradient"
msgstr "کچرونن رنده لڠکوڠ چهاي"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+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"
@@ -5530,10 +5702,6 @@ msgid "Maximum users"
msgstr "حد جومله ڤڠݢونا"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "مينو"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "کيش ججاريڠ"
@@ -5582,6 +5750,18 @@ msgid "Mipmapping"
msgstr "ڤمتاٴن ميڤ"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "سالوران مودس"
@@ -5674,10 +5854,6 @@ 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."
@@ -5686,6 +5862,11 @@ msgstr ""
"نيلاي اين اکن دأتسي اڤابيلا ممولاکن ڤلاين دري مينو اوتام."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "رڠکاين"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "ڤڠݢونا بارو مستي مماسوقکن کات لالوان اين."
@@ -5698,6 +5879,11 @@ msgid "Noclip key"
msgstr "ککونچي تمبوس بلوک"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "تونجولن نود"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "تونجولن نود"
@@ -5735,10 +5921,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "چچاٴير لݢڤ"
@@ -5857,10 +6039,6 @@ msgstr ""
"اين ممرلوکن کأيستيميواٴن \"تربڠ\" دالم ڤلاين ترسبوت."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "جارق وميندهن ڤماٴين"
@@ -5914,10 +6092,6 @@ msgid "Profiler toggle key"
msgstr "ککونچي توݢول ڤمبوکه"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr "علامت ڤندڠر Prometheus"
@@ -6100,6 +6274,11 @@ msgstr ""
"اڤابيلا ايميج دسسوايکن دڠن سايز بوکن اينتيݢر."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "سکرين:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "تيڠݢي سکرين"
@@ -6130,6 +6309,11 @@ msgstr ""
"ݢوناکن 0 اونتوق کواليتي لالاي."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "تڠکڤ لاير"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -6142,10 +6326,6 @@ 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 ""
@@ -6185,8 +6365,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "ڤلاين ڤرماٴينن \\ ڤماٴين ڤرسأورڠن"
+#, fuzzy
+msgid "Server"
+msgstr "URL ڤلاين"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "نام ڤلاين ڤرماٴينن"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "ڤريهل ڤلاين ڤرماٴينن"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6213,10 +6404,20 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "ڤورت ڤلاين"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "URL سناراي ڤلاين"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "URL سناراي ڤلاين"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "ÙØ§Ù´ÙŠÙ„ سناراي ڤلاين"
@@ -6227,12 +6428,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr "تتڤکن ڤنجڠ اکسارا مکسيموم ميسيج سيمبڠ دهنتر اوليه کليئن."
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -6240,7 +6444,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6331,7 +6535,7 @@ msgstr ""
"Ø§ÙˆÙØ³ÙŠØª بايڠ Ùون لالاي (دالم اونيت ڤيکسل). جيک 0⹠ماک بايڠ تيدق اکن دلوکيس."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6553,6 +6757,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "تتڤن"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6796,7 +7005,8 @@ msgid "Time speed"
msgstr "کلاجوان ماس"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr "حد ماس اونتوق کليئن ممبواڠ ڤتا يڠ تيدق دݢوناکن دري ميموري."
#: src/settings_translation_file.cpp
@@ -6824,10 +7034,19 @@ msgid "Touch screen threshold"
msgstr "نيلاي امبڠ سکرين سنتوه"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "نيلاي امبڠ سکرين سنتوه"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6929,6 +7148,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "ݢوناکن ڤناڤيسن تريلينيار اڤابيلا مڽسوايکن تيکستور."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7194,6 +7417,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
"تتڤکن سام اد هندق منونجوقکن معلومت ڽهڤڤيجت (کسنڽ سام سڤرتي منکن بوتڠ F5)."
@@ -7295,6 +7527,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -7325,6 +7561,9 @@ msgstr ""
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr "اداکه اندا ماهو سيت سمولا دنيا ڤماٴين ڤرساورڠن؟"
+#~ msgid "Basic"
+#~ msgstr "اساس"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "بيت ڤر ڤيکسيل (اتاو کدالمن ورنا) دالم مود سکرين ڤنوه."
@@ -7340,6 +7579,9 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "کونÙيݢوراسي"
+#~ msgid "Connect"
+#~ msgstr "سمبوڠ"
+
#~ msgid "Credits"
#~ msgstr "ڤڠهرݢاٴن"
@@ -7356,6 +7598,18 @@ msgstr ""
#~ "منتعريÙÚ©Ù† تاهڤ ڤرسمڤلن تيکستور.\n"
#~ "نيلاي لبيه تيڠݢي مڠحاصيلکن ڤتا نورمل لبيه لمبوت."
+#~ msgid "Del. Favorite"
+#~ msgstr "ڤادم کݢمرن"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "موات تورون ڤرماٴينن⹠چونتوهڽ Minetest Game⹠دري minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "موات تورون ساتو دري minetest.net"
+
+#~ msgid "Enable register confirmation"
+#~ msgstr "بوليهکن ڤڠصحن Ú¤Ù†Ø¯ÙØªØ±Ù†"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7380,6 +7634,9 @@ msgstr ""
#~ "ممبوليهکن ڤمتاٴن اوکلوسي ڤارالکس.\n"
#~ "ممرلوکن ڤمبايڠ اونتوق دبوليهکن."
+#~ msgid "Enter "
+#~ msgstr "ماسوقکن "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7399,6 +7656,9 @@ msgstr ""
#~ msgid "Fallback font size"
#~ msgstr "سايز Ùون برباليق"
+#~ msgid "Filtering"
+#~ msgstr "ڤناڤيسن"
+
#~ msgid "Font size of the fallback font in point (pt)."
#~ msgstr "سايز Ùون باݢي Ùون برباليق دالم اونيت تيتيق (pt)."
@@ -7408,18 +7668,36 @@ msgstr ""
#~ msgid "Full screen BPP"
#~ msgstr "BPP سکرين ڤنوه"
+#~ msgid "Game"
+#~ msgstr "ڤرماٴينن"
+
#~ msgid "Generate Normal Maps"
#~ msgstr "جان ڤتا نورمل"
#~ msgid "Generate normalmaps"
#~ msgstr "جان ڤتا نورمل"
+#~ msgid "HUD scale factor"
+#~ msgstr "Ùکتور سکالا ڤاڤر ڤندو (HUD)"
+
+#~ msgid "In-Game"
+#~ msgstr "دالم ڤرماٴينن"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "ڤاسڠ: ÙØ§ÙŠÙ„: \"$1\""
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "ايکتن ککونچي. (جيک مينو اين برسليرق⹠ڤادم سستڠه بندا دري ÙØ§ÙŠÙ„ minetest."
+#~ "conf)"
+
#~ msgid "Main"
#~ msgstr "اوتام"
+#~ msgid "Menus"
+#~ msgstr "مينو"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "ڤتا ميني دالم مود رادر⹠زوم 2x"
@@ -7485,6 +7763,9 @@ msgstr ""
#~ msgid "Reset singleplayer world"
#~ msgstr "سيت سمولا دنيا ڤماٴين ڤرساورڠن"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "ڤلاين ڤرماٴينن \\ ڤماٴين ڤرسأورڠن"
+
#~ msgid ""
#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
#~ "not be drawn."
@@ -7521,6 +7802,20 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "ياٴ"
+#, 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 ""
+#~ "اندا اکن سرتاٴي ڤلاين دڠن نام \"%s\" اونتوق کالي ڤرتام.\n"
+#~ "جيک اندا تروسکن⹠اکاٴون بهارو دڠن معلومت اندا اکن دچيڤت دڤلاين اين.\n"
+#~ "سيلا تايڤ سمولا کات لالوان اندا دان کليک 'Ø¯ÙØªØ± دان سرتاٴي' اونتوق صحکن "
+#~ "ڤنچيڤتاٴن اکاٴون⹠اتاو کليک 'باتل' اونتوق ممباتلکن."
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "اندا تله منيڠݢل"
diff --git a/po/nb/minetest.po b/po/nb/minetest.po
index d550602e6..db8baaf4d 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: 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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-06-11 17:19+0000\n"
+"Last-Translator: Kenneth LNOR <kennethlnor@gmail.com>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/"
"minetest/minetest/nb_NO/>\n"
"Language: nb\n"
@@ -12,43 +12,39 @@ 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.10.1\n"
+"X-Generator: Weblate 4.13-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
-msgstr ""
+msgstr "Nullstill meldingskøen"
#: builtin/client/chatcommands.lua
msgid "Empty command."
msgstr "Tom kommando."
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Exit to main menu"
-msgstr "Avslutt til meny"
+msgstr "Avslutt til hovedmeny"
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Invalid command: "
-msgstr "Lokal kommando"
+msgstr "Ugyldig kommando: "
#: builtin/client/chatcommands.lua
msgid "Issued command: "
msgstr "Avgitt kommando: "
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "List online players"
-msgstr "Enkeltspiller"
+msgstr "List opp påkoblede spillere"
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Online players: "
-msgstr "Enkeltspiller"
+msgstr "PÃ¥koblede spillere: "
#: builtin/client/chatcommands.lua
msgid "The out chat queue is now empty."
-msgstr ""
+msgstr "Utgående meldingskø er nå tømt."
#: builtin/client/chatcommands.lua
msgid "This command is disabled by server."
@@ -63,14 +59,12 @@ msgid "You died"
msgstr "Du døde"
#: builtin/common/chatcommands.lua
-#, fuzzy
msgid "Available commands:"
-msgstr "Lokal kommando"
+msgstr "Tilgjengelige kommandoer:"
#: builtin/common/chatcommands.lua
-#, fuzzy
msgid "Available commands: "
-msgstr "Lokal kommando"
+msgstr "Tilgjengelige kommandoer: "
#: builtin/common/chatcommands.lua
msgid "Command not available: "
@@ -78,25 +72,26 @@ msgstr "Ikke tilgjengelig kommando: "
#: builtin/common/chatcommands.lua
msgid "Get help for commands"
-msgstr ""
+msgstr "FÃ¥ hjelp med kommandoer"
#: builtin/common/chatcommands.lua
msgid ""
"Use '.help <cmd>' to get more information, or '.help all' to list everything."
msgstr ""
+"Bruk «.help <kommando>» for å få mer informasjon, eller «.help all» for å "
+"liste opp alt."
#: builtin/common/chatcommands.lua
msgid "[all | <cmd>]"
-msgstr ""
+msgstr "[all | <kommando>]"
#: 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: "
+msgstr "<ingen tilgjengelig>"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
@@ -119,6 +114,31 @@ msgid "The server has requested a reconnect:"
msgstr "Tjeneren har bedt om ny tilkobling:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Velg endringer"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Avvikende protokollversjon. "
@@ -131,6 +151,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Tjener støtter protokollversjoner mellom $1 og $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Vi støtter kun protokollversjon $1."
@@ -138,29 +162,36 @@ msgstr "Vi støtter kun protokollversjon $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Vi støtter protokollversjoner mellom versjon $1 og $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Avbryt"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/tab_content.lua
msgid "Dependencies:"
-msgstr "Avhengigheter:"
+msgstr "Pakker:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
-msgstr "Fjern alt"
+msgstr "Deaktivere alle"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "Koble ut modpakke"
+msgstr "Deaktiver modpakke"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
@@ -168,19 +199,19 @@ msgstr "Aktiver alle"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "Aktiver modpakken"
+msgstr "Aktiver modpakke"
#: 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 ""
-"Kunne ikke aktivere modden «$1» fordi den inneholder ugyldige tegn. Kun "
-"tegnene [a-z0-9_] er tillatt."
+"Kunne ikke aktivere modden \"$1\" inneholder ugyldige tegn. Kun tegnene [a-"
+"z0-9_] er tillatt."
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr "Finn flere mods"
+msgstr "Finn Flere Mods"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
@@ -188,13 +219,14 @@ msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr "Ingen (valgfrie) avhengigheter"
+msgstr "Ingen (valgfrie) pakker"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
msgstr "Mangler spillbeskrivelse."
#: builtin/mainmenu/dlg_config_world.lua
+#, fuzzy
msgid "No hard dependencies"
msgstr "Krever ingen andre modder"
@@ -204,11 +236,11 @@ msgstr "Ingen modpakke-beskrivelse tilgjengelig."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
-msgstr "Ingen valgfrie avhengigheter"
+msgstr "Ingen valgfrie pakker"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
-msgstr "Valgfrie avhengigheter:"
+msgstr "Valgfrie behov:"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
@@ -225,11 +257,11 @@ msgstr "aktivert"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "«$1» eksisterer allerede. Ønsker du å skrive over den?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "$1 og $2 pakker blir installert."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
@@ -240,37 +272,36 @@ msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 laster ned,\n"
+"$2 i kø"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Laster ned..."
+msgstr "$1 laster ned..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 påkrevd pakke manglet."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 blir installert, and $2 pakker blir hoppet over."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Alle pakker"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Tast allerede i bruk"
+msgstr "Allerede installert"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Tilbake til hovedmeny"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Vær vert for spill"
+msgstr "Grunnspill:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -282,34 +313,29 @@ msgstr "Laster ned..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr "Klarte ikke laste ned $1"
+msgstr "Kunne ikke laste ned $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Spill"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install"
-msgstr "Installer"
+msgstr "Installere"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Installer"
+msgstr "Installere $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Valgfrie avhengigheter:"
+msgstr "Installasjon mangler pakker"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install: Unsupported file type or broken archive"
-msgstr "Installasjon: Ikke-støttet filtype \"$1\" eller ødelagt arkiv"
+msgstr "Installasjon: Ikke-støttet filtype eller ødelagt pakke"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Modder"
@@ -319,7 +345,7 @@ msgstr "Kunne ikke hente pakker"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
-msgstr "Resultatløst"
+msgstr "Ingen resultater"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No updates"
@@ -335,7 +361,7 @@ msgstr "Overskriv"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Vennligst sjekk at grunnspillet er riktig."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
@@ -347,19 +373,19 @@ msgstr "Teksturpakker"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
-msgstr "Avinstaller"
+msgstr "Avinstallere"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
-msgstr "Oppdater"
+msgstr "Oppdatere"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Oppdatere Alle [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Se mer informasjon i nettleseren"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -371,19 +397,19 @@ msgstr "Ytterligere terreng"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Altitude chill"
-msgstr "Temperaturen synker med stigende høyde"
+msgstr "Høydekjøling"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Altitude dry"
-msgstr "Tørr høyde"
+msgstr "Høyde tørke"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biome blending"
-msgstr "Biotopblanding"
+msgstr "Biom blanding"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biomes"
-msgstr "Biotop"
+msgstr "Biomer"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caverns"
@@ -402,12 +428,9 @@ msgid "Decorations"
msgstr "Dekorasjoner"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Last ned et spill, for eksempel Minetest Game, fra minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Last ned en fra minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Advarsel: Utviklingstesten er tiltenkt utviklere."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -425,17 +448,13 @@ msgstr "Flytende landmasser på himmelen"
msgid "Floatlands (experimental)"
msgstr "Flytlandene (eksperimentelt)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Spill"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr ""
+msgstr "Generer ikke-fraktalt terreng: Hav og underjordisk"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
-msgstr ""
+msgstr "Bakker"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Humid rivers"
@@ -446,6 +465,15 @@ msgid "Increases humidity around rivers"
msgstr "Øker fuktigheten rundt elver"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Installere $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Innsjøer"
@@ -462,9 +490,8 @@ msgid "Mapgen flags"
msgstr "Mapgen-flagg"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Mapgen-specific flags"
-msgstr "Mapgen"
+msgstr "Mapgen-spesifikke flagg"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
@@ -472,7 +499,7 @@ msgstr "Fjell"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
-msgstr ""
+msgstr "Gjørmeflyt"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
@@ -480,15 +507,15 @@ msgstr "Nettverk av tuneller og huler"
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
-msgstr "Intet spill valgt"
+msgstr "Ingen spill valgt"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces heat with altitude"
-msgstr "Reduserer varme ettersom høyden øker"
+msgstr "Reduserer varmen med høyden"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces humidity with altitude"
-msgstr "Reduserer fuktighet ettersom høyden øker"
+msgstr "Reduserer fuktigheten med høyden"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Rivers"
@@ -496,42 +523,44 @@ msgstr "Elver"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
-msgstr "Havnivåelver"
+msgstr "Havnivå Elver"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
-msgstr "Seed"
+msgstr "Frø"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
-msgstr ""
+msgstr "Glatt overgang mellom 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 vises i terrenget (ingen effekt på trær og jungelgress skapt "
+"av v6)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Structures appearing on the terrain, typically trees and plants"
-msgstr ""
+msgstr "Strukturer som dukker opp i terrenget, typisk trær og planter"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert"
-msgstr ""
+msgstr "Temperert, ørken"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle"
-msgstr ""
+msgstr "Temperert, ørken, jungel"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr ""
+msgstr "Temperert, Ørken, Jungel, Tundra, Taiga"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Terrain surface erosion"
-msgstr ""
+msgstr "Terrengoverflate Erosjon"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
@@ -539,27 +568,23 @@ msgstr "Trær og jungelgress"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Vary river depth"
-msgstr "Varier elvedybde"
+msgstr "Varier elvedybden"
#: 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 "Advarsel: Utviklingstesten er tiltenkt utviklere."
+msgstr "Svært store huler dypt i undergrunnen"
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
-msgstr "Navnet på verdenen"
+msgstr "Navn på verden"
#: builtin/mainmenu/dlg_create_world.lua
msgid "You have no games installed."
-msgstr "Du har ikke noen spill installert."
+msgstr "Du har ingen spill installert."
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr "Er du sikker at du vil slette \"$1\"?"
+msgstr "Er du sikker på at du vil slette \"$1\"?"
#: builtin/mainmenu/dlg_delete_content.lua
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
@@ -569,15 +594,47 @@ msgstr "Slett"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "pkgmgr: Klarte ikke å slette \"$1\""
+msgstr "pkgmgr: mislyktes i å slette \"$1\""
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
-msgstr "pkgmgr: Feil sti \"$1\""
+msgstr "pkgmgr: ugyldig sti \"$1\""
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr "Slett verdenen \"$1\"?"
+msgstr "Slett verden \"$1\"?"
+
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Bekreft passord"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Navn"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Passord"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Passordene samsvarer ikke!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Registrer og logg inn"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
@@ -585,19 +642,19 @@ msgstr "Godta"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Gi et nytt navn til modpaken:"
+msgstr "Gi Modpakke nytt navn:"
#: 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 ""
-"Denne modpaken har et forhåndsdefinert navn i modpack.conf som vil "
-"overskrive et eventuelt nytt navn."
+"Denne modpakken har et gitt navn i modpack.conf som vil overstyre enhver "
+"omdøping."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
-msgstr "(Ingen beskrivelse av gitt)"
+msgstr "(Ingen beskrivelse av innstillingen)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
@@ -609,7 +666,17 @@ msgstr "< Tilbake til innstillinger"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
-msgstr "See gjennom"
+msgstr "Bla gjennom"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Innhold"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Innhold"
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
@@ -633,20 +700,19 @@ msgstr "Oktaver"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
-msgstr "Forskyvning"
+msgstr "Offset"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Persistence"
-msgstr "Bestandighet"
+msgstr "Standhaftighet"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
-msgstr "Vennligst angi et gyldig heltall."
+msgstr "Vennligst skriv inn et gyldig heltall."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid number."
-msgstr "Vennligst angi et gydlig tall."
+msgstr "Vennligst oppgi et gyldig nummer."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
@@ -668,13 +734,13 @@ msgstr "Velg mappe"
msgid "Select file"
msgstr "Velg fil"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Vis tekniske navn"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
-msgstr "Verdien må vøre minst $1."
+msgstr "Verdien må være minst $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
@@ -737,50 +803,48 @@ msgstr "$1 mods"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "Klarte ikke å installere $1 til $2"
+msgstr "Kunne ikke installere $1 til $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr "Installer mod: Klarte ikke å finne riktig mod-navn for: $1"
+msgstr "Installer Mod: Kan ikke finne ekte modnavn for: $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
-msgstr "Installer mod: Klarte ikke finne egnet mappenavn for mod-pakke $1"
+msgstr "Install Mod: Kan ikke finne passende mappenavn for modpack $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr "Klarte ikke finne en gyldig mod eller modpakke"
+msgstr "Kan ikke finne en gyldig mod eller modpakke"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
-msgstr "Klarte ikke å installere $1 som teksturpakke"
+msgstr "Kan ikke installere en $1 som en teksturpakke"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
-msgstr "Klarte ikke å installere et spill som $1"
+msgstr "Kan ikke installere et spill som en $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a mod as a $1"
-msgstr "Klarte ikke å installere mod som en $1"
+msgstr "Kan ikke installere en mod som en $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a modpack as a $1"
-msgstr "Klarte ikke å installere en modpakke som en $1"
+msgstr "Kan ikke installere en modpack som en $1"
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
msgid "Loading..."
-msgstr "Laster..."
+msgstr "Laster inn..."
#: builtin/mainmenu/serverlistmgr.lua
-#, fuzzy
msgid "Public server list is disabled"
-msgstr "Skripting er slått av på klientside"
+msgstr "Offentlig serverliste er deaktivert"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-"Prøv å aktivere offentlig tjenerliste på nytt og sjekk Internettforbindelsen "
-"din."
+"Prøv å aktivere offentlig serverliste og sjekk Internett-tilkoblingen din."
#: builtin/mainmenu/tab_about.lua
msgid "About"
@@ -793,7 +857,7 @@ msgstr "Aktive bidragsytere"
#: builtin/mainmenu/tab_about.lua
#, fuzzy
msgid "Active renderer:"
-msgstr "Område for sending av aktive objekt"
+msgstr "Aktiv grafisk tegner:"
#: builtin/mainmenu/tab_about.lua
msgid "Core Developers"
@@ -809,6 +873,8 @@ msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"Ã…pner katalogen som inneholder brukerleverte verdener, spill, mods,\n"
+"og teksturpakker i en filbehandler/utforsker."
#: builtin/mainmenu/tab_about.lua
msgid "Previous Contributors"
@@ -818,6 +884,11 @@ msgstr "Tidligere bidragsytere"
msgid "Previous Core Developers"
msgstr "Tidligere kjerneutviklere"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Vis feilsøkingsinfo"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Utforsk nettbasert innhold"
@@ -828,7 +899,7 @@ msgstr "Innhold"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
-msgstr "Slå av teksturpakke"
+msgstr "Deaktiver Teksturpakke"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
@@ -840,7 +911,7 @@ msgstr "Installerte pakker:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
-msgstr "Ingen avhengigheter."
+msgstr "Ingen datapakker."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
@@ -860,11 +931,11 @@ msgstr "Bruk teksturpakke"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr "Annonseringstjener"
+msgstr "Kunngjør Server"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr "Bindingsadresse"
+msgstr "Tildel Adresse"
#: builtin/mainmenu/tab_local.lua
msgid "Creative Mode"
@@ -872,11 +943,11 @@ msgstr "Kreativt modus"
#: builtin/mainmenu/tab_local.lua
msgid "Enable Damage"
-msgstr "Skru på skade"
+msgstr "Aktiver skade"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
-msgstr "Vær vert for spill"
+msgstr "Spill Tjener"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
@@ -886,10 +957,6 @@ msgstr "Vertstjener"
msgid "Install games from ContentDB"
msgstr "Installer spill fra ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Navn"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Ny"
@@ -898,10 +965,6 @@ msgstr "Ny"
msgid "No world created or selected!"
msgstr "Ingen verden opprettet eller valgt!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Passord"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Spill"
@@ -911,9 +974,8 @@ msgid "Port"
msgstr "Port"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Velg verden:"
+msgstr "Velg endringer"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -936,10 +998,6 @@ msgid "Clear"
msgstr "Tøm"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Koble til"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Kreativ modus"
@@ -950,29 +1008,28 @@ msgid "Damage / PvP"
msgstr "Skade"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Slett favoritt"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Favoritter"
#: builtin/mainmenu/tab_online.lua
msgid "Incompatible Servers"
-msgstr ""
+msgstr "Inkompatible servere"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
msgstr "Ta del i spill"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Latens"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Public Servers"
-msgstr "Annonseringstjener"
+msgstr "Offentlige servere"
#: builtin/mainmenu/tab_online.lua
msgid "Refresh"
@@ -980,10 +1037,19 @@ msgstr "Oppdater"
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "Eksterne media"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "Serverbeskrivelse"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1024,17 +1090,17 @@ msgid "Connected Glass"
msgstr "Forbundet glass"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
-#, fuzzy
msgid "Dynamic shadows"
-msgstr "Skriftskygge"
+msgstr "Dynamiske skygger"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr ""
+#, fuzzy
+msgid "Dynamic shadows:"
+msgstr "Dynamiske skygger: "
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
-msgstr "Forseggjorte blader"
+msgstr "Stilfulle Blader"
#: builtin/mainmenu/tab_settings.lua
msgid "High"
@@ -1058,7 +1124,7 @@ msgstr "Mipmap + anisotropisk filter"
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr "Inget filter"
+msgstr "Ingen filter"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
@@ -1078,11 +1144,11 @@ msgstr "Ingen"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
-msgstr "Diffuse løv"
+msgstr "Ugjennomsiktige blader"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Water"
-msgstr "Diffust vann"
+msgstr "Ugjennomsiktig vann"
#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
@@ -1098,20 +1164,19 @@ msgstr "Innstillinger"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
-msgstr "Skygger"
+msgstr "Shaders"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Flytlandene (eksperimentelt)"
+msgstr "Shaders (eksperimentelt)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr "Skyggelegging (ikke tilgjengelig)"
+msgstr "Shaders (ikke tilgjengelig)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
-msgstr "Enkle løv"
+msgstr "Enkle Blader"
#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
@@ -1123,18 +1188,20 @@ msgstr "Teksturering:"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
-msgstr "Nyanseoversettelse (tone mapping)"
+msgstr "Tonemapping"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr "Trykkterskel: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
+msgstr "Berøringsterskel: (px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
-msgstr "Trilineært filter"
+msgstr "Tri-lineært filter"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+#, fuzzy
+msgid "Very High"
msgstr "Ultrahøy"
#: builtin/mainmenu/tab_settings.lua
@@ -1143,7 +1210,7 @@ msgstr "Veldig lav"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr "Bølgende blader"
+msgstr "Viftende blader"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Liquids"
@@ -1151,11 +1218,16 @@ msgstr "Skvulpende væsker"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr "Bølgende planter"
+msgstr "Viftende planter"
+
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Tilkoblingsfeil (tidsavbrudd?)"
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
-msgstr "Forbindelsen løp ut på tid."
+msgstr "Tilkoblingen ble tidsavbrutt."
#: src/client/client.cpp
msgid "Done!"
@@ -1163,28 +1235,27 @@ msgstr "Ferdig!"
#: src/client/client.cpp
msgid "Initializing nodes"
-msgstr "Setter opp noder"
+msgstr "Initialisering av noder"
#: src/client/client.cpp
msgid "Initializing nodes..."
-msgstr "Setter opp noder..."
+msgstr "Initialiserer noder..."
#: src/client/client.cpp
msgid "Loading textures..."
-msgstr "Laster teksturer…"
+msgstr "Laster inn teksturer..."
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-msgstr "Gjenoppbygger skyggeleggere…"
+msgstr "Gjenoppbygger shaders..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
msgstr "Tilkoblingsfeil (tidsavbrudd?)"
#: src/client/clientlauncher.cpp
-#, fuzzy
msgid "Could not find or load game: "
-msgstr "Klarte ikke finne eller laste inn spill «"
+msgstr "Kunne ikke finne eller laste inn spillet: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1196,19 +1267,19 @@ msgstr "Hovedmeny"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
-msgstr "Intet å gjøre. Ingen verden valgt og ingen adresse oppgitt."
+msgstr "Ingen verden valgt og ingen adresse oppgitt. Ingenting å gjøre."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr "Spillernavnet er for lagt."
+msgstr "Spillernavn for langt."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr "Velg et navn!"
+msgstr "Vennligst velg et navn!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr "Passordfilen kunne ikke åpnes: "
+msgstr "Den oppgitte passordfilen kunne ikke åpnes: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
@@ -1255,7 +1326,7 @@ msgstr "Det oppstod en feil:"
#: src/client/game.cpp
#, c-format
msgid "Access denied. Reason: %s"
-msgstr ""
+msgstr "Ingen tilgang. PÃ¥ grunn av: %s"
#: src/client/game.cpp
msgid "Automatic forward disabled"
@@ -1267,19 +1338,19 @@ msgstr "Automatisk forover slått på"
#: src/client/game.cpp
msgid "Block bounds hidden"
-msgstr ""
+msgstr "Block bounds gjemt"
#: src/client/game.cpp
msgid "Block bounds shown for all blocks"
-msgstr ""
+msgstr "Block bounds vist for alle blokker"
#: src/client/game.cpp
msgid "Block bounds shown for current block"
-msgstr ""
+msgstr "Block bounds vist for gjeldende blokk"
#: src/client/game.cpp
msgid "Block bounds shown for nearby blocks"
-msgstr ""
+msgstr "Block bounds vist for nærliggende blokker"
#: src/client/game.cpp
msgid "Camera update disabled"
@@ -1290,8 +1361,9 @@ msgid "Camera update enabled"
msgstr "Kameraoppdatering slått på"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
-msgstr ""
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
+msgstr "Kan ikke vise block bounds (trenger 'basic_debug' tillatelser)"
#: src/client/game.cpp
msgid "Change Password"
@@ -1306,13 +1378,12 @@ msgid "Cinematic mode enabled"
msgstr "Filmatisk modus påskrudd"
#: src/client/game.cpp
-#, fuzzy
msgid "Client disconnected"
-msgstr "Brukermodding"
+msgstr "Klienten koblet fra"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
-msgstr "Skripting er slått av på klientside"
+msgstr "Skripting på klientsiden er deaktivert"
#: src/client/game.cpp
msgid "Connecting to server..."
@@ -1320,7 +1391,7 @@ msgstr "Kobler til tjener…"
#: src/client/game.cpp
msgid "Connection failed for unknown reason"
-msgstr ""
+msgstr "Tilkoblingen mislyktes av ukjent årsak"
#: src/client/game.cpp
msgid "Continue"
@@ -1357,12 +1428,12 @@ msgstr ""
"- %s: inventar\n"
"- Mus: snu/se\n"
"- Musehjul: velg ting\n"
-"- %s: sludring\n"
+"- %s: chat\n"
#: src/client/game.cpp
#, c-format
msgid "Couldn't resolve address: %s"
-msgstr ""
+msgstr "Kunne ikke løse adressen: %s"
#: src/client/game.cpp
msgid "Creating client..."
@@ -1374,15 +1445,15 @@ msgstr "Oppretter tjener…"
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr "Skjuler feilsøkingsinfo og profileringsgraf"
+msgstr "Feilsøkingsinformasjon og profileringsgraf er skjult"
#: src/client/game.cpp
msgid "Debug info shown"
-msgstr "Viser feilsøkingsinfo"
+msgstr "Feilsøkingsinformasjon vises"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
-msgstr "Skjuler feilsøkingsinfo, profileringsgraf og 3D-gitter"
+msgstr "Feilsøkingsinformasjon, profileringsgraf og wireframe skjult"
#: src/client/game.cpp
msgid ""
@@ -1414,11 +1485,16 @@ msgstr ""
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
-msgstr "Ubegrenset synsrekkevidde avslått"
+msgstr "Ubegrenset visningsområde deaktivert"
#: src/client/game.cpp
msgid "Enabled unlimited viewing range"
-msgstr "Ubegrenset synsrekkevidde påslått"
+msgstr "Ubegrenset synsrekkevidde aktivert"
+
+#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Oppretter klient…"
#: src/client/game.cpp
msgid "Exit to Menu"
@@ -1430,35 +1506,35 @@ msgstr "Avslutt til operativsystem"
#: src/client/game.cpp
msgid "Fast mode disabled"
-msgstr "Rask forflytning av"
+msgstr "Rask modus deaktivert"
#: src/client/game.cpp
msgid "Fast mode enabled"
-msgstr "Rask forflytning på"
+msgstr "Hurtigmodus aktivert"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr ""
+msgstr "Hurtigmodus aktivert (merk: ingen \"rask\"-rettigheter)"
#: src/client/game.cpp
msgid "Fly mode disabled"
-msgstr "Flymodus av"
+msgstr "Flymodus deaktivert"
#: src/client/game.cpp
msgid "Fly mode enabled"
-msgstr "Flymodus på"
+msgstr "Flymodus aktivert"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr ""
+msgstr "Flymodus aktivert (merk: ingen 'fly'-privilegium)"
#: src/client/game.cpp
msgid "Fog disabled"
-msgstr "TÃ¥ke av"
+msgstr "TÃ¥ke deaktivert"
#: src/client/game.cpp
msgid "Fog enabled"
-msgstr "Tåke på"
+msgstr "TÃ¥ke aktivert"
#: src/client/game.cpp
msgid "Game info:"
@@ -1466,7 +1542,7 @@ msgstr "Spillinfo:"
#: src/client/game.cpp
msgid "Game paused"
-msgstr "Spill pauset"
+msgstr "Spillet er satt på pause"
#: src/client/game.cpp
msgid "Hosting server"
@@ -1490,7 +1566,7 @@ msgstr "MiB/s"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr ""
+msgstr "Minimap er for øyeblikket deaktivert av spill eller mod"
#: src/client/game.cpp
msgid "Multiplayer"
@@ -1498,15 +1574,15 @@ msgstr "Flerspiller"
#: src/client/game.cpp
msgid "Noclip mode disabled"
-msgstr ""
+msgstr "Noclip-modus deaktivert"
#: src/client/game.cpp
msgid "Noclip mode enabled"
-msgstr "Kan gå gjennom vegger"
+msgstr "Noclip-modus aktivert"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr ""
+msgstr "Noclip-modus aktivert (merk: ingen \"noclip\"-rettigheter)"
#: src/client/game.cpp
msgid "Node definitions..."
@@ -1522,27 +1598,27 @@ msgstr "PÃ¥"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
-msgstr "Tonehøydeforandringsmodus avskrudd"
+msgstr "Pitch flyttemodus deaktivert"
#: src/client/game.cpp
msgid "Pitch move mode enabled"
-msgstr ""
+msgstr "Pitch flyttemodus aktivert"
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr ""
+msgstr "Profil graf vises"
#: src/client/game.cpp
msgid "Remote server"
-msgstr "Tjener annensteds hen"
+msgstr "Ekstern server"
#: src/client/game.cpp
msgid "Resolving address..."
-msgstr "Fortolker adresse…"
+msgstr "Løser adresse ..."
#: src/client/game.cpp
msgid "Shutting down..."
-msgstr "Slås av…"
+msgstr "Slår av..."
#: src/client/game.cpp
msgid "Singleplayer"
@@ -1557,60 +1633,59 @@ msgid "Sound muted"
msgstr "Lyd av"
#: src/client/game.cpp
-#, fuzzy
msgid "Sound system is disabled"
-msgstr "Lydsystem avskrudd"
+msgstr "Lydsystemet er deaktivert"
#: src/client/game.cpp
msgid "Sound system is not supported on this build"
-msgstr "Lydsystem støttes ikke på dette bygget"
+msgstr "Lydsystem støttes ikke på denne versjonen"
#: src/client/game.cpp
msgid "Sound unmuted"
-msgstr "Lyd på"
+msgstr "Lyden er på"
#: src/client/game.cpp
#, c-format
msgid "The server is probably running a different version of %s."
-msgstr ""
+msgstr "Serveren kjører sannsynligvis en annen versjon av %s."
#: src/client/game.cpp
#, c-format
msgid "Unable to connect to %s because IPv6 is disabled"
-msgstr ""
+msgstr "Kan ikke koble til %s fordi IPv6 er deaktivert"
#: src/client/game.cpp
#, c-format
msgid "Unable to listen on %s because IPv6 is disabled"
-msgstr ""
+msgstr "Kan ikke lytte på %s fordi IPv6 er deaktivert"
#: src/client/game.cpp
#, c-format
msgid "Viewing range changed to %d"
-msgstr "Synsrekkevidde endret til %d%%"
+msgstr "Visningsområde endret til %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at maximum: %d"
-msgstr "Synsrekkevidde er så lang det går an: %d"
+msgstr "Visningsområdet er maksimalt: %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at minimum: %d"
-msgstr "Synsrekkevidde er så kort det går an: %d"
+msgstr "Visningsområdet er minimum: %d"
#: src/client/game.cpp
#, c-format
msgid "Volume changed to %d%%"
-msgstr "Lydstyrke endret til %d%%"
+msgstr "Volumet endret til %d%%"
#: src/client/game.cpp
msgid "Wireframe shown"
-msgstr ""
+msgstr "Kantlinjer vises"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr ""
+msgstr "Zoom er for øyeblikket deaktivert av spill eller mod"
#: src/client/game.cpp
msgid "ok"
@@ -1626,11 +1701,11 @@ msgstr "Viser chat"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr ""
+msgstr "HUD skjult"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr ""
+msgstr "HUD vist"
#: src/client/gameui.cpp
msgid "Profiler hidden"
@@ -1667,7 +1742,7 @@ msgstr "End"
#: src/client/keycode.cpp
msgid "Erase EOF"
-msgstr ""
+msgstr "Slett EOF"
#: src/client/keycode.cpp
msgid "Execute"
@@ -1927,29 +2002,6 @@ msgstr "Klarte ikke laste ned $1"
msgid "Opening webpage"
msgstr ""
-#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
-msgid "Passwords do not match!"
-msgstr "Passordene samsvarer ikke!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Registrer og logg inn"
-
-#: 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 ""
-"Dette er første gang du kobler deg til serveren «\"%s».\n"
-"Om du fortsetter, vil det opprettes en ny konto med ditt navn og passord på "
-"denne serveren.\n"
-"Vennligst skriv inn et passord og klikk på «Registrer meg og bli med» for å "
-"bekrefte opprettelse av konto, eller klikk « Avbryt» for å avbryte."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Fortsett"
@@ -1983,7 +2035,7 @@ msgstr ""
msgid "Change camera"
msgstr "Endre visning"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Chatte"
@@ -2036,10 +2088,8 @@ msgid "Key already in use"
msgstr "Tast allerede i bruk"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Tastaturtilknytninger. (Hvis dette byr på problemer, fjern ting fra minetest."
-"conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2110,10 +2160,6 @@ msgid "Change"
msgstr "Endre"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Bekreft passord"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nytt passord"
@@ -2121,6 +2167,10 @@ msgstr "Nytt passord"
msgid "Old Password"
msgstr "Gammelt passord"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Passordene samsvarer ikke!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Avslutt"
@@ -2130,15 +2180,9 @@ msgid "Muted"
msgstr "Av"
#: src/gui/guiVolumeChange.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Sound Volume: %d%%"
-msgstr "Lydstyrke: "
-
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Enter "
+msgstr "Lydstyrke: %d%%"
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
@@ -2147,6 +2191,16 @@ msgstr "Enter "
msgid "LANG_CODE"
msgstr "nb"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Vennligst velg et navn!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2310,6 +2364,10 @@ msgstr ""
"Vær klar over at interlace-modus krever at skyggelegging er påslått."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2400,6 +2458,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Legg til elementnavn"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avansert"
@@ -2418,7 +2481,8 @@ msgstr ""
"belysning - det har lite å si for naturlig nattelys."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Alltid flymodus og rask forflytning"
#: src/settings_translation_file.cpp
@@ -2497,6 +2561,10 @@ msgstr ""
"Målenheten er «mapblocks» (en enhet på 16x16 blokker)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Tast for automatisk fremoverbevegelse"
@@ -2539,10 +2607,6 @@ msgid "Base terrain height."
msgstr "Terrengets grunnhøyde."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Grunnleggende"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Enkle rettigheter"
@@ -2563,7 +2627,8 @@ msgid "Bind address"
msgstr "Bindingsadresse"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Temperatur- og fuktighetsparametre for biotop-APIet"
#: src/settings_translation_file.cpp
@@ -2575,6 +2640,10 @@ msgid "Block send optimize distance"
msgstr "Avstand for optimalizering av mapblocksending"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Filsti for fet og kursivert skrifttype"
@@ -2600,6 +2669,11 @@ msgstr "Innebygd"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Camera"
+msgstr "Endre visning"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
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"
@@ -2767,6 +2841,11 @@ msgid "Client side node lookup range restriction"
msgstr "Omfangsbegrensning av blokkoppslag hos klienten"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Brukermodding"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Klatrehastighet"
@@ -2874,6 +2953,10 @@ msgid "Console height"
msgstr "Konsollhøyde"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "ContentDBs svarteliste"
@@ -2914,8 +2997,10 @@ msgstr ""
"uendret."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Bestemmer synkehastigheten i væsker."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2945,13 +3030,12 @@ msgid "Crosshair alpha"
msgstr "Trådkors-alpha"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"This also applies to the object crosshair."
msgstr ""
"Trådkors-alpha (ugjennomsiktighet, mellom 0 og 255).\n"
-"Kontrollerer også objektets trådkorsfarge"
+"Kontrollerer også objektets trådkorsfarge."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2984,12 +3068,12 @@ msgid "Debug log level"
msgstr "Loggingsnivå for feilsøking"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Tast for senking av lydstyrke"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Reduksjon av denne verdien øker bevegelsesmotstanden i væsker."
+msgid "Dec. volume key"
+msgstr "Tast for senking av lydstyrke"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3134,6 +3218,11 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Developer Options"
+msgstr "Dekorasjoner"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Dig key"
msgstr "Høyre tast"
@@ -3154,6 +3243,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+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."
@@ -3224,6 +3319,10 @@ msgid "Enable joysticks"
msgstr "Bruk joystick"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3240,21 +3339,13 @@ msgid "Enable random user input (only used for testing)."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-msgstr "Skru på registerbekreftelse"
-
-#: src/settings_translation_file.cpp
msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
-"Skru på registerbekreftelse ved tilkobling til tjener.\n"
-"Hvis avskrudd, vil en ny konto registres automatisk."
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3328,6 +3419,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3346,6 +3441,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "Maks FPS når spillet ikke har fokus eller er pauset"
@@ -3425,8 +3524,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtrering"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Kantutjevning:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3498,6 +3598,11 @@ msgid "Fog toggle key"
msgstr "TÃ¥kevekslingstast"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Skriftstørrelse"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Fet skrifttype som forvalg"
@@ -3646,6 +3751,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Spill"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3673,6 +3791,16 @@ msgid "Graphics"
msgstr "Grafikk"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Grafikk"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Grafikk"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Tyngdekraft"
@@ -3689,10 +3817,15 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "HUD vist"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr ""
@@ -3929,11 +4062,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "Reduksjon av denne verdien øker bevegelsesmotstanden i væsker."
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3993,6 +4134,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Skru på registerbekreftelse ved tilkobling til tjener.\n"
+"Hvis avskrudd, vil en ny konto registres automatisk."
+
+#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
@@ -4015,7 +4165,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4055,10 +4207,6 @@ msgid "Ignore world errors"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "I-spillet"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
@@ -4109,15 +4257,11 @@ msgid "Instrument the methods of entities on registration."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Instrumentering"
-
-#: 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4905,6 +5049,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4964,7 +5112,7 @@ msgstr "Venstretast"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4977,15 +5125,18 @@ msgstr ""
"Krever at dybdeskapere er aktivert."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4997,7 +5148,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5025,6 +5177,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Jevn belysning"
+
+#: 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"
@@ -5420,10 +5577,6 @@ msgid "Maximum users"
msgstr "Maks antall brukere"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menyer"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5472,6 +5625,19 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Sikkerhet"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5559,16 +5725,17 @@ msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Nettverk"
-
-#: 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
+#, fuzzy
+msgid "Networking"
+msgstr "Nettverk"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5581,6 +5748,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Knutepunktsframheving"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5618,10 +5790,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5717,10 +5885,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Spillernavn"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5768,10 +5932,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Profilering"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5941,6 +6101,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Skjerm:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Skjermhøyde"
@@ -5968,6 +6133,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Skjermdump"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5980,10 +6150,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Sikkerhet"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Se https://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6042,8 +6208,19 @@ msgstr ""
"18 = 4D «Mandelbulb» Julia-mengde."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Server/alene"
+#, fuzzy
+msgid "Server"
+msgstr "Server-URL"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Servernavn"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Serverbeskrivelse"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6071,10 +6248,20 @@ msgid "Server side occlusion culling"
msgstr "Ikke-synlige blokker blir ikke sendt videre av serveren"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Tjenerport"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "Serverliste-URL"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "Serverliste-URL"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Serverlistefil"
@@ -6088,12 +6275,14 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Set the maximum character length of a chat message sent by clients."
-msgstr "Angi maksimalt antall tegn i chatmelding sendt av klienter."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
+msgstr "Angi maksimalt antall tegn i tekstmelding sendt av klienter."
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -6101,7 +6290,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6186,7 +6375,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6400,6 +6589,11 @@ msgid "Temperature variation for biomes."
msgstr "Temperaturvariasjon for biomer."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Innstillinger"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6608,7 +6802,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6633,10 +6827,19 @@ msgid "Touch screen threshold"
msgstr "Strandlydsterskel"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Strandlydsterskel"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6731,6 +6934,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6971,12 +7178,22 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" 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 ""
+"Bredde-delen av vindusstørrelsen ved oppstart. Ignoreres i fullskjerm-modus."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7013,7 +7230,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
-msgstr ""
+msgstr "Verdensjusterte teksturer-modus"
#: src/settings_translation_file.cpp
msgid "Y of flat ground."
@@ -7064,6 +7281,10 @@ msgid "Y-level of seabed."
msgstr "Y-nivå for havbunn."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Tidsutløp for filnedlasting med cURL"
@@ -7092,6 +7313,9 @@ msgstr "Maksimal parallellisering i cURL"
#~ msgid "Back"
#~ msgstr "Tilbake"
+#~ msgid "Basic"
+#~ msgstr "Grunnleggende"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Biter per piksel (dvs. fargedybde) i fullskjermsmodus."
@@ -7122,6 +7346,12 @@ msgstr "Maksimal parallellisering i cURL"
#~ msgid "Configure"
#~ msgstr "Sett opp"
+#~ msgid "Connect"
+#~ msgstr "Koble til"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Bestemmer synkehastigheten i væsker."
+
#~ msgid "Credits"
#~ msgstr "Bidragsytere"
@@ -7131,33 +7361,66 @@ msgstr "Maksimal parallellisering i cURL"
#~ msgid "Damage enabled"
#~ msgstr "Skade aktivert"
+#~ msgid "Del. Favorite"
+#~ msgstr "Slett favoritt"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Last ned et spill, for eksempel Minetest Game, fra minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Last ned fra minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Laster ned og installerer $1, vent…"
#~ msgid "Enable VBO"
#~ msgstr "Aktiver VBO"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Skru på registerbekreftelse"
+
#~ msgid "Enables filmic tone mapping"
#~ msgstr "Aktiver filmatisk toneoversettelse"
+#~ msgid "Enter "
+#~ msgstr "Enter "
+
#~ msgid "Fallback font shadow"
#~ msgstr "Tilbakefallsskriftsskygge"
#~ msgid "Fallback font size"
#~ msgstr "Tilbakefallsskriftstørrelse"
+#~ msgid "Filtering"
+#~ msgstr "Filtrering"
+
#~ msgid "FreeType fonts"
#~ msgstr "FreeType-skrifttyper"
+#~ msgid "Game"
+#~ msgstr "Spill"
+
#~ msgid "Generate Normal Maps"
#~ msgstr "Generer normale kart"
#~ msgid "IPv6 support."
#~ msgstr "IPv6-støtte."
+#~ msgid "In-Game"
+#~ msgstr "I-spillet"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Installasjon: fil \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Instrumentering"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Tastaturtilknytninger. (Hvis dette byr på problemer, fjern ting fra "
+#~ "minetest.conf)"
+
#~ msgid "Main"
#~ msgstr "Hovedmeny"
@@ -7165,6 +7428,9 @@ msgstr "Maksimal parallellisering i cURL"
#~ msgid "Main menu style"
#~ msgstr "Hovedmeny"
+#~ msgid "Menus"
+#~ msgstr "Menyer"
+
#~ msgid "Name / Password"
#~ msgstr "Navn / passord"
@@ -7183,6 +7449,12 @@ msgstr "Maksimal parallellisering i cURL"
#~ msgid "Path to save screenshots at."
#~ msgstr "Filsti til lagring av skjermdumper."
+#~ msgid "Player name"
+#~ msgstr "Spillernavn"
+
+#~ msgid "Profiling"
+#~ msgstr "Profilering"
+
#~ msgid "PvP enabled"
#~ msgstr "Alle mot alle er på"
@@ -7192,6 +7464,9 @@ msgstr "Maksimal parallellisering i cURL"
#~ msgid "Select Package File:"
#~ msgstr "Velg pakkefil:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Server/alene"
+
#~ msgid "Special"
#~ msgstr "Spesial"
@@ -7216,6 +7491,21 @@ msgstr "Maksimal parallellisering i cURL"
#~ msgid "Yes"
#~ msgstr "Ja"
+#, 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 ""
+#~ "Dette er første gang du kobler deg til serveren «\"%s».\n"
+#~ "Om du fortsetter, vil det opprettes en ny konto med ditt navn og passord "
+#~ "på denne serveren.\n"
+#~ "Vennligst skriv inn et passord og klikk på «Registrer meg og bli med» for "
+#~ "å bekrefte opprettelse av konto, eller klikk « Avbryt» for å avbryte."
+
#~ msgid "You died."
#~ msgstr "Du døde."
diff --git a/po/nl/minetest.po b/po/nl/minetest.po
index 44c6277ed..958f1d14e 100644
--- a/po/nl/minetest.po
+++ b/po/nl/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Dutch (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -114,6 +114,31 @@ msgid "The server has requested a reconnect:"
msgstr "De server heeft gevraagd opnieuw verbinding te maken:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Selecteer Mods"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Protocol versie stemt niet overeen. "
@@ -126,6 +151,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "De server ondersteunt protocol versies tussen $1 en $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Wij ondersteunen enkel protocol versie $1."
@@ -133,14 +162,21 @@ msgstr "Wij ondersteunen enkel protocol versie $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Wij ondersteunen protocol versies $1 tot en met $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Annuleer"
@@ -281,7 +317,6 @@ msgid "Failed to download $1"
msgstr "Installeren van mod $1 is mislukt"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Spellen"
@@ -302,7 +337,6 @@ 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"
@@ -395,12 +429,11 @@ msgid "Decorations"
msgstr "Decoraties"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Download een subspel, zoals Minetest Game, van minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Laad er een van minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr ""
+"Waarschuwing: Het minimale ontwikkellaars-test-spel is bedoeld voor "
+"ontwikkelaars."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -418,10 +451,6 @@ msgstr "Zwevende gebergtes"
msgid "Floatlands (experimental)"
msgstr "Zwevende eilanden (experimenteel)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Spel"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Een niet-fractaal terrein genereren: Oceanen en ondergrond"
@@ -439,6 +468,15 @@ msgid "Increases humidity around rivers"
msgstr "Verhoogt de luchtvochtigheid rond rivieren"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Installeer $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Meren"
@@ -541,12 +579,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Zeer grote en diepe grotten"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr ""
-"Waarschuwing: Het minimale ontwikkellaars-test-spel is bedoeld voor "
-"ontwikkelaars."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Wereld naam"
@@ -576,6 +608,39 @@ msgstr "pkgmgr: ongeldig pad voor mod \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Verwijder wereld \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Herhaal wachtwoord"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Wereldgenerator"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Naam"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Wachtwoord"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "De wachtwoorden zijn niet gelijk!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Registreer en doe mee"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Accepteren"
@@ -608,6 +673,16 @@ msgstr "< Terug naar instellingen"
msgid "Browse"
msgstr "Bladeren"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Inhoud"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Inhoud"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Uitgeschakeld"
@@ -664,7 +739,7 @@ msgstr "Selecteer map"
msgid "Select file"
msgstr "Selecteer bestand"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Technische namen weergeven"
@@ -814,6 +889,11 @@ msgstr "Vroegere ontwikkelaars"
msgid "Previous Core Developers"
msgstr "Vroegere hoofdontwikkelaars"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Toon debug informatie"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Content op internet bekijken"
@@ -882,10 +962,6 @@ msgstr "Server Hosten"
msgid "Install games from ContentDB"
msgstr "Installeer spellen van ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Naam"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Nieuw"
@@ -894,10 +970,6 @@ msgstr "Nieuw"
msgid "No world created or selected!"
msgstr "Geen wereldnaam opgegeven of geen wereld aangemaakt!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Wachtwoord"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Spel Starten"
@@ -931,10 +1003,6 @@ msgid "Clear"
msgstr "Wissen"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Verbinden"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Creatieve modus"
@@ -944,10 +1012,6 @@ msgid "Damage / PvP"
msgstr "Schade / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Verwijder Favoriete"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Favorieten"
@@ -960,6 +1024,10 @@ msgid "Join Game"
msgstr "Join spel"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -972,10 +1040,19 @@ msgid "Refresh"
msgstr "Verversen"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Poort van externe server"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Omschrijving van de Server"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1020,7 +1097,8 @@ msgid "Dynamic shadows"
msgstr "Dynamische schaduwen"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "Dynamische schaduwen: "
#: builtin/mainmenu/tab_settings.lua
@@ -1116,7 +1194,8 @@ msgid "Tone Mapping"
msgstr "Tone-mapping"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "Toetsgrenswaarde: (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1124,7 +1203,8 @@ msgid "Trilinear Filter"
msgstr "Trilineair filteren"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+#, fuzzy
+msgid "Very High"
msgstr "Zeer Hoog"
#: builtin/mainmenu/tab_settings.lua
@@ -1143,6 +1223,11 @@ msgstr "Golvende Vloeistoffen"
msgid "Waving Plants"
msgstr "Bewegende planten"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Fout bij verbinden (time out?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Time-out bij opzetten verbinding."
@@ -1278,7 +1363,8 @@ msgid "Camera update enabled"
msgstr "Camera-update ingeschakeld"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr "Kan blokgrenzen niet tonen (privilege 'basic_debug' is nodig)"
#: src/client/game.cpp
@@ -1408,6 +1494,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Oneindige kijkafstand aangezet"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Gebruiker aanmaken..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Terug naar menu"
@@ -1912,31 +2003,6 @@ msgstr "Openen van webpagina mislukt"
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!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Registreer en doe mee"
-
-#: 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 ""
-"U staat op het punt om voor het eerst lid te worden van deze server met de "
-"naam \"%s\". \n"
-"Als u doorgaat, wordt op deze server een nieuw account gemaakt met uw "
-"inloggegevens. \n"
-"Voer uw wachtwoord opnieuw in en klik op 'Registreren en aanmelden' om het "
-"aanmaken van een account te bevestigen, of klik op 'Annuleren' om af te "
-"breken."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Doorgaan"
@@ -1969,7 +2035,7 @@ msgstr "Blok grenzen"
msgid "Change camera"
msgstr "Camera veranderen"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Chatten"
@@ -2022,10 +2088,8 @@ msgid "Key already in use"
msgstr "Toets is al in gebruik"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Sneltoetsen. (Als dit menu stuk gaat, verwijder dan instellingen uit "
-"minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2096,10 +2160,6 @@ msgid "Change"
msgstr "Veranderen"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Herhaal wachtwoord"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nieuw wachtwoord"
@@ -2107,6 +2167,10 @@ msgstr "Nieuw wachtwoord"
msgid "Old Password"
msgstr "Huidig wachtwoord"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "De wachtwoorden zijn niet gelijk!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Terug"
@@ -2120,12 +2184,6 @@ msgstr "Gedempt"
msgid "Sound Volume: %d%%"
msgstr "Geluidsvolume: %d%%"
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Enter "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2133,6 +2191,16 @@ msgstr "Enter "
msgid "LANG_CODE"
msgstr "nl"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Kies alsjeblieft een naam!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2301,6 +2369,10 @@ msgstr ""
"Merk op dat de geïnterlinieerde modus vereist dat shaders zijn ingeschakeld."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2402,6 +2474,11 @@ msgstr ""
"zeker te zijn)."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Voeg itemnaam toe"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Geavanceerd"
@@ -2420,7 +2497,8 @@ msgstr ""
"licht, heeft het weinig effect op natuurlijk nachtlicht."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Zet 'snel' altijd aan bij 'vliegen'"
#: src/settings_translation_file.cpp
@@ -2503,6 +2581,10 @@ msgstr ""
"Vermeld in mapblocks (16 blokken)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Automatisch Vooruit toets"
@@ -2543,10 +2625,6 @@ msgid "Base terrain height."
msgstr "Basis terrein hoogte."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Basis"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Basis rechten"
@@ -2567,7 +2645,8 @@ msgid "Bind address"
msgstr "Lokaal server-adres"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Biome API parameters voor temperatuur- en vochtigheidsruis"
#: src/settings_translation_file.cpp
@@ -2579,6 +2658,10 @@ msgid "Block send optimize distance"
msgstr "Blok verzend optimalisatie afstand"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Vet en cursief pad"
@@ -2603,6 +2686,11 @@ msgid "Builtin"
msgstr "Ingebouwd"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Camera veranderen"
+
+#: 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"
@@ -2768,6 +2856,11 @@ msgid "Client side node lookup range restriction"
msgstr "Clientzijde blok opzoekbereikbeperking"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Cliënt personalisatie (modding)"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Klimsnelheid"
@@ -2887,6 +2980,11 @@ msgid "Console height"
msgstr "Hoogte console"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "Online inhoud repository"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "ContentDB optie: verborgen pakketten lijst"
@@ -2927,8 +3025,10 @@ msgstr ""
"blijft."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Regelt de zinksnelheid in vloeistof."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -3003,12 +3103,12 @@ msgid "Debug log level"
msgstr "Debug logniveau"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Volume verlagen toets"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Verlaag dit om de vloeistofweerstand te vergroten."
+msgid "Dec. volume key"
+msgstr "Volume verlagen toets"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3165,6 +3265,11 @@ msgid "Desynchronize block animation"
msgstr "Textuur-animaties niet synchroniseren"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Decoraties"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Toets voor graven"
@@ -3185,6 +3290,12 @@ msgid "Display Density Scaling Factor"
msgstr "Weergavedichtheid-schaalfactor"
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: 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."
@@ -3264,6 +3375,10 @@ msgid "Enable joysticks"
msgstr "Schakel joysticks in"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Ondersteuning voor mod-kanalen inschakelen."
@@ -3280,18 +3395,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Schakel willkeurige invoer aan (enkel voor testen)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-msgstr "Registerbevestiging inschakelen"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
-msgstr ""
-"Schakel registerbevestiging in wanneer u verbinding maakt met de server. \n"
-"Indien uitgeschakeld, wordt een nieuw account automatisch geregistreerd."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3300,6 +3403,10 @@ msgstr ""
"Schakel dit uit voor minder vertraging, of voor een ander visueel effect."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3398,6 +3505,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "Vallei-profiel"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Profilergegevens print interval"
@@ -3423,6 +3535,10 @@ msgstr ""
"platte laaglanden, geschikt voor een solide zwevende eilanden laag."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "FPS als het spel gepauzeerd of niet gefocussed is"
@@ -3511,8 +3627,9 @@ msgstr ""
"automatisch ingeschakeld als mipmapping aan staat."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filters"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Antialiasing:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3581,6 +3698,11 @@ msgid "Fog toggle key"
msgstr "Mist aan/uitschakelen toets"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Lettergrootte"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Standaard vetgedrukt"
@@ -3750,6 +3872,19 @@ msgid "GUI scaling filter txr2img"
msgstr "GUI schalingsfilter: txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Spellen"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Algemene callbacks"
@@ -3786,6 +3921,16 @@ msgid "Graphics"
msgstr "Grafisch"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Grafisch"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Grafisch"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Zwaartekracht"
@@ -3802,8 +3947,13 @@ msgid "HTTP mods"
msgstr "HTTP Mods"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "HUD schaal factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "GUI schaalfactor"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -4063,8 +4213,10 @@ msgstr ""
"Vereist dat golvende vloeistoffen zijn ingeschakeld."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"De tijd die de server wacht voordat een ongebruikt mapblok vergeten wordt.\n"
@@ -4072,6 +4224,13 @@ msgstr ""
"geheugen."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "Verlaag dit om de vloeistofweerstand te vergroten."
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "Breedte van rivieren."
@@ -4147,6 +4306,15 @@ msgstr ""
"omlaag te klimmen en af te dalen."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Schakel registerbevestiging in wanneer u verbinding maakt met de server. \n"
+"Indien uitgeschakeld, wordt een nieuw account automatisch geregistreerd."
+
+#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
@@ -4177,7 +4345,10 @@ msgstr ""
"van de speler tijdens het vliegen of zwemmen."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
"Spelers kunnen zich niet aanmelden zonder wachtwoord indien aangeschakeld."
@@ -4233,10 +4404,6 @@ msgid "Ignore world errors"
msgstr "Wereldfouten negeren"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "Spel"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
"Chat console achtergrond alphawaarde (ondoorzichtigheid, tussen 0 en 255)."
@@ -4294,17 +4461,14 @@ msgid "Instrument the methods of entities on registration."
msgstr "Profileer de acties van objecten bij het registreren."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Per soort"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""
"Interval voor het opslaan van belangrijke veranderingen in de wereld. In "
"seconden."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "Interval voor het sturen van de kloktijd naar cliënten."
#: src/settings_translation_file.cpp
@@ -5166,6 +5330,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
"Schop spelers die meer dan X berichten per 10 seconden hebben verzonden."
@@ -5224,10 +5392,11 @@ msgid "Left key"
msgstr "Toets voor links"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"Lengte van server stap, en interval waarin objecten via het netwerk\n"
"ververst worden."
@@ -5241,19 +5410,26 @@ msgstr ""
"Dit vereist dat 'golfvloeistoffen' ook aanstaan."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+#, fuzzy
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
"Tijdsinterval waarmee actieve blokken wijzigers (ABMs) geactiveerd worden"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "Tijdsinterval waarmee node timerd geactiveerd worden"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "Tijd tussen actieve blok beheer(ABM) cycli"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5262,7 +5438,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Hoeveelheid logging die geschreven wordt naar debug.txt:\n"
"- <leeg> (geen logging)\n"
@@ -5298,6 +5475,11 @@ msgid "Light curve low gradient"
msgstr "Lichtcurve laag verloop"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Vloeiende verlichting"
+
+#: 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"
@@ -5752,10 +5934,6 @@ msgid "Maximum users"
msgstr "Maximaal aantal gebruikers"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menu's"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "Cache voor meshes"
@@ -5807,6 +5985,20 @@ msgid "Mipmapping"
msgstr "Mip-Mapping"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "Profiler"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Veiligheid"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "Mod-kanalen"
@@ -5910,10 +6102,6 @@ msgid "Near plane"
msgstr "Dichtbij vliegtuig"
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Netwerk"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
@@ -5922,6 +6110,11 @@ msgstr ""
"Bij starten vanuit het hoofdmenu kan een andere poort opgegeven worden."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "Netwerk"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Nieuwe spelers dienen dit wachtwoord op te geven."
@@ -5934,6 +6127,11 @@ msgid "Noclip key"
msgstr "Noclip-toets"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Node licht op"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Geselecteerde node indicatie"
@@ -5991,10 +6189,6 @@ msgstr ""
"geheugengebruik (als vuistregel is 4096 gelijk aan 100 MB)."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Online inhoud repository"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "Ondoorzichtige vloeistoffen"
@@ -6124,10 +6318,6 @@ msgstr ""
"De speler moet wel in het bezit zijn van het \"vliegen\" voorrecht."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Spelernaam"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "Speler verplaatsingsafstand"
@@ -6182,10 +6372,6 @@ msgid "Profiler toggle key"
msgstr "Profiler aan/uit toets"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Profileren"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr "Adres om te luisteren naar Prometheus"
@@ -6380,6 +6566,11 @@ msgstr ""
"een niet-gehele schaalfactor gebruikt wordt."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Scherm:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Schermhoogte"
@@ -6410,6 +6601,11 @@ msgstr ""
"0 = een redelijke standaardwaarde."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Screenshot"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Zeebodem ruis"
@@ -6423,10 +6619,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Tweede van twee 3D geluiden die samen tunnels definiëren."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Veiligheid"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Zie http://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6485,8 +6677,19 @@ msgstr ""
"18 = 4D \"Mandelbulb\" julia verzameling."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Server / Singleplayer"
+#, fuzzy
+msgid "Server"
+msgstr "Server URL"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Naam van de server"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Omschrijving van de Server"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6513,10 +6716,20 @@ msgid "Server side occlusion culling"
msgstr "Door server worden onzichtbare nodes niet doorgegeven"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Server Poort"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "URL van de publieke serverlijst"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "URL van de publieke serverlijst"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Bestand met publieke serverlijst"
@@ -6529,12 +6742,16 @@ msgstr ""
"Een herstart is noodzakelijk om de nieuwe taal te activeren."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr "Maximaal aantal tekens voor chatberichten van gebruikers instellen."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
"Schaduwsterkte instellen.\n"
@@ -6542,10 +6759,11 @@ msgstr ""
"schaduwen."
#: 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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
"Radiusgrootte zachte schaduwen instellen.\n"
"Lagere waarden betekenen scherpere schaduwen, hogere waarden zachtere.\n"
@@ -6643,7 +6861,8 @@ msgstr ""
"getekend."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+#, fuzzy
+msgid "Shadow strength gamma"
msgstr "Schaduwsterkte"
#: src/settings_translation_file.cpp
@@ -6895,6 +7114,11 @@ msgid "Temperature variation for biomes."
msgstr "Temperatuurvariatie voor biomen."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Instellingen"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "Terrein alteratieve ruis"
@@ -7170,7 +7394,8 @@ msgid "Time speed"
msgstr "Tijdsnelheid"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
"Tijdsduur waarna de cliënt ongebruikte wereldgegevens uit het geheugen "
"verwijdert."
@@ -7200,10 +7425,19 @@ msgid "Touch screen threshold"
msgstr "Gevoeligheid van het aanraakscherm"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Gevoeligheid van het aanraakscherm"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Bomen ruis"
@@ -7314,6 +7548,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "Gebruik trilineair filteren om texturen te schalen."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7589,6 +7827,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
"Laat debug informatie zien in de cliënt (heeft hetzelfde effect als de F5 "
@@ -7707,6 +7954,10 @@ msgid "Y-level of seabed."
msgstr "Y-niveau van zee bodem."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "timeout voor cURL download"
@@ -7750,6 +8001,9 @@ msgstr "Maximaal parallellisme in cURL"
#~ msgid "Back"
#~ msgstr "Terug"
+#~ msgid "Basic"
+#~ msgstr "Basis"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Aantal bits per pixel (oftewel: kleurdiepte) in full-screen modus."
@@ -7780,6 +8034,12 @@ msgstr "Maximaal parallellisme in cURL"
#~ msgid "Configure"
#~ msgstr "Instellingen"
+#~ msgid "Connect"
+#~ msgstr "Verbinden"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Regelt de zinksnelheid in vloeistof."
+
#, fuzzy
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
@@ -7826,12 +8086,24 @@ msgstr "Maximaal parallellisme in cURL"
#~ "Bemonsterings-interval voor texturen.\n"
#~ "Een hogere waarde geeft vloeiender normal maps."
+#~ msgid "Del. Favorite"
+#~ msgstr "Verwijder Favoriete"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Download een subspel, zoals Minetest Game, van minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Laad er een van minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "$1 wordt gedownload, een ogenblik geduld alstublieft..."
#~ msgid "Enable VBO"
#~ msgstr "VBO aanzetten"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Registerbevestiging inschakelen"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7860,6 +8132,9 @@ msgstr "Maximaal parallellisme in cURL"
#~ "Schakelt parallax occlusie mappen in.\n"
#~ "Dit vereist dat shaders ook aanstaan."
+#~ msgid "Enter "
+#~ msgstr "Enter "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7879,6 +8154,9 @@ msgstr "Maximaal parallellisme in cURL"
#~ msgid "Fallback font size"
#~ msgstr "Terugval-fontgrootte"
+#~ msgid "Filtering"
+#~ msgstr "Filters"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Drijvend land basis hoogte ruis"
@@ -7897,6 +8175,9 @@ msgstr "Maximaal parallellisme in cURL"
#~ msgid "Full screen BPP"
#~ msgstr "BPP bij volledig scherm"
+#~ msgid "Game"
+#~ msgstr "Spel"
+
#, fuzzy
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7907,15 +8188,30 @@ msgstr "Maximaal parallellisme in cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Genereer normaalmappen"
+#~ msgid "HUD scale factor"
+#~ msgstr "HUD schaal factor"
+
#~ msgid "High-precision FPU"
#~ msgstr "Hoge-nauwkeurigheid FPU"
#~ msgid "IPv6 support."
#~ msgstr "IPv6 ondersteuning."
+#~ msgid "In-Game"
+#~ msgstr "Spel"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Installeer: bestand: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Per soort"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Sneltoetsen. (Als dit menu stuk gaat, verwijder dan instellingen uit "
+#~ "minetest.conf)"
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "Diepte van grote grotten"
@@ -7934,6 +8230,9 @@ msgstr "Maximaal parallellisme in cURL"
#~ "Maakt dat DirectX werkt met LuaJIT. Schakel dit uit als het problemen "
#~ "geeft."
+#~ msgid "Menus"
+#~ msgstr "Menu's"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Mini-kaart in radar modus, Zoom x2"
@@ -8008,6 +8307,12 @@ msgstr "Maximaal parallellisme in cURL"
#~ msgid "Path to save screenshots at."
#~ msgstr "Pad waar screenshots bewaard worden."
+#~ msgid "Player name"
+#~ msgstr "Spelernaam"
+
+#~ msgid "Profiling"
+#~ msgstr "Profileren"
+
#~ msgid "PvP enabled"
#~ msgstr "Spelergevechten ingeschakeld"
@@ -8018,6 +8323,9 @@ msgstr "Maximaal parallellisme in cURL"
#~ msgid "Select Package File:"
#~ msgstr "Selecteer Modbestand:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Server / Singleplayer"
+
#~ msgid "Shadow limit"
#~ msgstr "Schaduw limiet"
@@ -8092,6 +8400,23 @@ msgstr "Maximaal parallellisme in cURL"
#~ msgid "Yes"
#~ msgstr "Ja"
+#, 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 ""
+#~ "U staat op het punt om voor het eerst lid te worden van deze server met "
+#~ "de naam \"%s\". \n"
+#~ "Als u doorgaat, wordt op deze server een nieuw account gemaakt met uw "
+#~ "inloggegevens. \n"
+#~ "Voer uw wachtwoord opnieuw in en klik op 'Registreren en aanmelden' om "
+#~ "het aanmaken van een account te bevestigen, of klik op 'Annuleren' om af "
+#~ "te breken."
+
#~ msgid "You died."
#~ msgstr "Je bent gestorven."
diff --git a/po/nn/minetest.po b/po/nn/minetest.po
index 2cf2ef0cb..d3e8a59dd 100644
--- a/po/nn/minetest.po
+++ b/po/nn/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Norwegian Nynorsk (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-25 23:19+0100\n"
-"PO-Revision-Date: 2021-02-20 05:50+0000\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-16 23:20+0000\n"
"Last-Translator: Tor Egil Hoftun Kvæstad <toregilhk@hotmail.com>\n"
"Language-Team: Norwegian Nynorsk <https://hosted.weblate.org/projects/"
"minetest/minetest/nn/>\n"
@@ -12,7 +12,7 @@ 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.14-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -20,31 +20,27 @@ msgstr ""
#: builtin/client/chatcommands.lua
msgid "Empty command."
-msgstr ""
+msgstr "Tom kommando."
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Exit to main menu"
-msgstr "GÃ¥ ut til meny"
+msgstr "GÃ¥ ut til hovudmeny"
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Invalid command: "
-msgstr "Lokal befaling"
+msgstr "Ugyldig kommando: "
#: builtin/client/chatcommands.lua
msgid "Issued command: "
-msgstr ""
+msgstr "Gitt kommando: "
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "List online players"
-msgstr "Enkeltspelar oppleving"
+msgstr "List opp spelarar som er online"
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Online players: "
-msgstr "Enkeltspelar oppleving"
+msgstr "Spelarar som er online: "
#: builtin/client/chatcommands.lua
msgid "The out chat queue is now empty."
@@ -63,27 +59,27 @@ msgid "You died"
msgstr "Du døydde"
#: builtin/common/chatcommands.lua
-#, fuzzy
msgid "Available commands:"
-msgstr "Lokal befaling"
+msgstr "Tilgjengelege kommandoar:"
#: builtin/common/chatcommands.lua
-#, fuzzy
msgid "Available commands: "
-msgstr "Lokal befaling"
+msgstr "Tilgjengelege kommandoar: "
#: builtin/common/chatcommands.lua
msgid "Command not available: "
-msgstr ""
+msgstr "Kommandoen er ikkje tilgjengeleg: "
#: builtin/common/chatcommands.lua
msgid "Get help for commands"
-msgstr ""
+msgstr "FÃ¥ hjelp med kommandoar"
#: builtin/common/chatcommands.lua
msgid ""
"Use '.help <cmd>' to get more information, or '.help all' to list everything."
msgstr ""
+"Nytt '.help <kommando>' for å få meir informasjon, eller '.help all' for å "
+"liste opp alt."
#: builtin/common/chatcommands.lua
msgid "[all | <cmd>]"
@@ -95,7 +91,7 @@ msgstr "OK"
#: builtin/fstk/ui.lua
msgid "<none available>"
-msgstr ""
+msgstr "<ingen tilgjengeleg>"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
@@ -118,6 +114,31 @@ msgid "The server has requested a reconnect:"
msgstr "Tenaren har førespurt å kople til igjen:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Vel modifikasjonar"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Protkoll versjon bommert. "
@@ -130,6 +151,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Tenaren støtter protokollversjonar mellom $1 og $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Me støtter berre protokoll versjon $1."
@@ -137,14 +162,21 @@ msgstr "Me støtter berre protokoll versjon $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Me støtter protokollversjonar mellom $1 og $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Avbryt"
@@ -239,6 +271,8 @@ msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 lastar ned,\n"
+"$2 i kø"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 downloading..."
@@ -273,16 +307,14 @@ msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr "ContentDB er ikkje tilgjengeleg når Minetest vart kompilert utan cURL"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Downloading..."
-msgstr "Laster ned..."
+msgstr "Lastar ned …"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
msgstr "Klarte ikkje å laste ned $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Spel"
@@ -299,13 +331,10 @@ 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"
+msgstr "Installasjon: Filtypen er ikkje støtta, eller arkivet er korrupt"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Modifikasjonar"
@@ -335,7 +364,7 @@ msgstr "Ver venleg å sjekke at basisspelet er korrekt."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "I kø"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -375,7 +404,7 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biome blending"
-msgstr ""
+msgstr "Biomblanding"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biomes"
@@ -386,9 +415,8 @@ msgid "Caverns"
msgstr "Holer"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Caves"
-msgstr "Oktaver"
+msgstr "Hòler"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
@@ -399,12 +427,9 @@ msgid "Decorations"
msgstr "Dekorasjonar"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Last ned eit spel, slik som Minetest-spelet, frå minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Last ned eit frå minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Ã…tvaring: Utviklingstesten er meint for utviklarar."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -422,10 +447,6 @@ msgstr "Svevande landmassar på himmelen"
msgid "Floatlands (experimental)"
msgstr "Flyteland (eksperimentell)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Spel"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Generer ikkjefraktalterreng: Hav og undergrunn"
@@ -443,6 +464,15 @@ msgid "Increases humidity around rivers"
msgstr "Aukar fuktigheita rundt elver"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Installer $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Sjøar"
@@ -527,7 +557,7 @@ msgstr "Temperert, Ørken, Jungel, Tundra, Taiga"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Terrain surface erosion"
-msgstr ""
+msgstr "Overflateerosjon på terreng"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
@@ -542,11 +572,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Svært store holer djupt i undergrunnen"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Ã…tvaring: Den minimale utviklings-testen e meint for utviklare."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Verdsnamn"
@@ -576,6 +601,38 @@ msgstr "pkgmgr: ugyldig sti «$1»"
msgid "Delete World \"$1\"?"
msgstr "Slett verd «$1»?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Bekreft passord"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Namn"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Passord"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Passorda passar ikkje!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Registrer og bli med"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Aksepter"
@@ -608,6 +665,16 @@ msgstr "< Tilbake til innstillingssida"
msgid "Browse"
msgstr "Bla gjennom"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Innhald"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Innhald"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Deaktivert"
@@ -665,7 +732,7 @@ msgstr "Vel katalog"
msgid "Select file"
msgstr "Vel fil"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Vis tekniske namn"
@@ -773,20 +840,18 @@ msgid "Loading..."
msgstr "Lastar …"
#: builtin/mainmenu/serverlistmgr.lua
-#, fuzzy
msgid "Public server list is disabled"
-msgstr "Klient side-skildring er av"
+msgstr "Den offentlege tenarlista er slått av"
#: builtin/mainmenu/serverlistmgr.lua
-#, fuzzy
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-"Forsøkje å kople attende den offentlege tenarmaskin-lista og sjekk sambands "
-"koplingen."
+"Freist å slå på igjen den offentlege tenarlista, og sjekk Internett-"
+"tilkoplinga di."
#: builtin/mainmenu/tab_about.lua
msgid "About"
-msgstr ""
+msgstr "Om"
#: builtin/mainmenu/tab_about.lua
msgid "Active Contributors"
@@ -819,6 +884,10 @@ msgstr "Tidlegare bidragsytarar"
msgid "Previous Core Developers"
msgstr "Tidlegare kjerne-utviklarar"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Bla i nett-innhald"
@@ -889,10 +958,6 @@ msgstr "Bli tenarmaskin's vert"
msgid "Install games from ContentDB"
msgstr "Installer spel frå ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Namn"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Ny"
@@ -901,10 +966,6 @@ msgstr "Ny"
msgid "No world created or selected!"
msgstr "Inga verd skapt eller valt!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Passord"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Ha i gang spel"
@@ -930,62 +991,62 @@ msgid "Start Game"
msgstr "Start spel"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Address"
-msgstr "- Adresse: "
+msgstr "Adresse"
#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
msgid "Clear"
msgstr "Rydd til side"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Kople i hop"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Kreativ stode"
#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Damage / PvP"
-msgstr "- Skade: "
+msgstr "Skade / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Slett Favoritt"
-
-#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Favorites"
-msgstr "Favoritt"
+msgstr "Favorittar"
#: builtin/mainmenu/tab_online.lua
msgid "Incompatible Servers"
-msgstr ""
+msgstr "Inkompatible tenarar"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
msgstr "Bli med i spel"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Public Servers"
-msgstr "Annonsér tenarmaskin"
+msgstr "Offentlege tenarar"
#: builtin/mainmenu/tab_online.lua
msgid "Refresh"
-msgstr ""
+msgstr "Oppdater"
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "Slett Favoritt"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
-msgstr "Tenarport"
+msgstr "Tenarbeskriving"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -1030,11 +1091,12 @@ msgstr "Kopla i hop glass"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Dynamic shadows"
-msgstr ""
+msgstr "Dynamiske skuggar"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr ""
+#, fuzzy
+msgid "Dynamic shadows:"
+msgstr "Dynamiske skuggar: "
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1042,15 +1104,15 @@ msgstr "Fancy blader"
#: builtin/mainmenu/tab_settings.lua
msgid "High"
-msgstr ""
+msgstr "Høg"
#: builtin/mainmenu/tab_settings.lua
msgid "Low"
-msgstr ""
+msgstr "LÃ¥g"
#: builtin/mainmenu/tab_settings.lua
msgid "Medium"
-msgstr ""
+msgstr "Medium"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
@@ -1135,7 +1197,8 @@ msgid "Tone Mapping"
msgstr "Tone kartlegging"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "Berøringsterskel: (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1143,27 +1206,30 @@ msgid "Trilinear Filter"
msgstr "Tri-lineær filtréring"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
-msgstr ""
+#, fuzzy
+msgid "Very High"
+msgstr "Svært høg"
#: builtin/mainmenu/tab_settings.lua
msgid "Very Low"
-msgstr ""
+msgstr "Svært låg"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Waving Leaves"
-msgstr "Raslende lauv"
+msgstr "Vaiande lauv"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Waving Liquids"
-msgstr "Raslende lauv"
+msgstr "Bølgjande væsker"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Waving Plants"
-msgstr "Raslende planter"
+msgstr "Vaiande planter"
+
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Tilkoplingsfeil (Tidsavbrot?)"
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
@@ -1195,9 +1261,8 @@ msgid "Connection error (timed out?)"
msgstr "Tilkoplingsfeil (Tidsavbrot?)"
#: src/client/clientlauncher.cpp
-#, fuzzy
msgid "Could not find or load game: "
-msgstr "Kunne ikkje finne eller laste spelet \""
+msgstr "Kunne ikkje finne eller laste spel: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1264,9 +1329,8 @@ msgid "- Server Name: "
msgstr "- Tenarnamn: "
#: src/client/game.cpp
-#, fuzzy
msgid "A serialization error occurred:"
-msgstr "Det har skjedd ein feil:"
+msgstr "Ein serialiseringsfeil har oppstått:"
#: src/client/game.cpp
#, c-format
@@ -1306,7 +1370,7 @@ msgid "Camera update enabled"
msgstr "Kamera oppdatering er aktivert"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1323,7 +1387,7 @@ msgstr "Filmatisk modus er i gang"
#: src/client/game.cpp
msgid "Client disconnected"
-msgstr ""
+msgstr "Klienten kopla frå"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
@@ -1335,7 +1399,7 @@ msgstr "Kopler til tenarmaskin..."
#: src/client/game.cpp
msgid "Connection failed for unknown reason"
-msgstr ""
+msgstr "Tilkoplinga feila av ein ukjent grunn"
#: src/client/game.cpp
msgid "Continue"
@@ -1436,6 +1500,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Ubergensa utsiktsrekkjevidd er i gang"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Skapar klient..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "GÃ¥ ut til meny"
@@ -1508,9 +1577,8 @@ 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"
+msgstr "Fleirspelar"
#: src/client/game.cpp
msgid "Noclip mode disabled"
@@ -1579,7 +1647,7 @@ msgstr "Lydsystemet er slått av"
#: src/client/game.cpp
msgid "Sound system is not supported on this build"
-msgstr ""
+msgstr "Lydsystemet er ikkje støtta på denne builden"
#: src/client/game.cpp
msgid "Sound unmuted"
@@ -1588,17 +1656,17 @@ msgstr "Lyd e ikkje dempa lengre"
#: src/client/game.cpp
#, c-format
msgid "The server is probably running a different version of %s."
-msgstr ""
+msgstr "Tenaren køyrer sannsynlegvis ein annan versjon av %s."
#: src/client/game.cpp
#, c-format
msgid "Unable to connect to %s because IPv6 is disabled"
-msgstr ""
+msgstr "Kunne ikkje kople til %s fordi IPv6 er slått av"
#: src/client/game.cpp
#, c-format
msgid "Unable to listen on %s because IPv6 is disabled"
-msgstr ""
+msgstr "Kunne ikkje lytte på %s fordi IPv6 er slått av"
#: src/client/game.cpp
#, c-format
@@ -1936,36 +2004,12 @@ 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"
+msgstr "Klarte ikkje å opne nettside"
#: 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!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Registrer og bli med"
-
-#: src/gui/guiConfirmRegistration.cpp
-#, fuzzy, 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 ""
-"Du er i gang med å hoppe inn i ein tenarmaskin ved %1$s med namnet \"%2$s\" "
-"for fyrste gong. Om du går videre, ein ny brukar med dine detaljer vill bli "
-"skapt på tenarmaskinen.\n"
-"Ver vennleg og skriv passordet, klikk registrer og trykk \"bli med\" for at "
-"kontoen skal bli registrert eller klikk avbryt for å ikkje gjere det."
+msgstr "Opnar nettside"
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
@@ -2000,7 +2044,7 @@ msgstr ""
msgid "Change camera"
msgstr "Byt kamera"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Skravlerør"
@@ -2053,10 +2097,8 @@ msgid "Key already in use"
msgstr "Knapp er allereie i bruk"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Knappebindinger. (Om denne menyen går galen, ta bort tinga fra \"minetest."
-"conf\")"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2128,10 +2170,6 @@ msgid "Change"
msgstr "Byt"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Bekreft passord"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nytt passord"
@@ -2139,6 +2177,10 @@ msgstr "Nytt passord"
msgid "Old Password"
msgstr "Gammalt passord"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Passorda passar ikkje!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Avslutt"
@@ -2148,15 +2190,9 @@ msgid "Muted"
msgstr "MÃ¥lbindt"
#: src/gui/guiVolumeChange.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Sound Volume: %d%%"
-msgstr "Lydstyrke: "
-
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "GÃ¥ "
+msgstr "Lydstyrke: %d%%"
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
@@ -2165,6 +2201,16 @@ msgstr "GÃ¥ "
msgid "LANG_CODE"
msgstr "nn-NO"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Ver venleg å velje eit namn!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2292,6 +2338,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2328,7 +2378,7 @@ msgstr "Gravitasjonsakselerasjon, i nodar per sekund per sekund."
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
-msgstr ""
+msgstr "Aktive blokkmodifikatorar"
#: src/settings_translation_file.cpp
msgid "Active block management interval"
@@ -2348,6 +2398,9 @@ msgid ""
"Leave this blank to start a local server.\n"
"Note that the address field in the main menu overrides this setting."
msgstr ""
+"Adresse å kople til.\n"
+"La dette vere tomt for å starte ein lokal tenar.\n"
+"Merk at adressefeltet i hovudmenyen overkøyrer denne innstillinga."
#: src/settings_translation_file.cpp
msgid "Adds particles when digging a node."
@@ -2358,10 +2411,14 @@ msgid ""
"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
"screens."
msgstr ""
+"Juster dpi-konfigurasjonen for din skjem (kun system utan X11/Android), f."
+"eks. for 4K-skjermar."
#: src/settings_translation_file.cpp
msgid "Adjust the detected display density, used for scaling UI elements."
msgstr ""
+"Juster den oppdaga skjermtettheita, vert nytta for å skalere "
+"brukargrensesnittelement."
#: src/settings_translation_file.cpp
#, c-format
@@ -2374,6 +2431,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Verdsnamn"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avansert"
@@ -2387,7 +2449,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2408,11 +2470,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Announce server"
-msgstr ""
+msgstr "Annonser tenar"
#: src/settings_translation_file.cpp
msgid "Announce to this serverlist."
-msgstr ""
+msgstr "Annonser til denne tenarlista."
#: src/settings_translation_file.cpp
msgid "Append item name"
@@ -2428,17 +2490,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Arm inertia"
-msgstr ""
+msgstr "Armtreigheit"
#: src/settings_translation_file.cpp
msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
msgstr ""
+"Armtreigheit gir meir realistisk armbevegingar\n"
+"når kameraet flyttar seg."
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
-msgstr ""
+msgstr "Spør om å kople til igjen etter eit kræsj"
#: src/settings_translation_file.cpp
msgid ""
@@ -2456,10 +2520,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Automatic forward key"
+msgid "Audio"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Automatic forward key"
+msgstr "Automatisk framoverknapp"
+
+#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
msgstr ""
@@ -2469,7 +2537,7 @@ msgstr "Rapporter automatisk til tenarlista."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
-msgstr ""
+msgstr "Lagre skjermstørrelsen automatisk"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
@@ -2485,7 +2553,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Backward key"
-msgstr ""
+msgstr "Bakoverknapp"
#: src/settings_translation_file.cpp
msgid "Base ground level"
@@ -2496,10 +2564,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Basis"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Basisprivilegium"
@@ -2517,10 +2581,10 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Bind address"
-msgstr ""
+msgstr "Bind adresse"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2532,6 +2596,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2556,6 +2624,11 @@ msgid "Builtin"
msgstr "Innebygd"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Byt kamera"
+
+#: 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"
@@ -2589,7 +2662,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Cave width"
-msgstr ""
+msgstr "Hòlebreidde"
#: src/settings_translation_file.cpp
msgid "Cave1 noise"
@@ -2630,9 +2703,8 @@ msgid "Chat command time message threshold"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat commands"
-msgstr "Befaling"
+msgstr "Chatkommandoar"
#: src/settings_translation_file.cpp
msgid "Chat font size"
@@ -2644,7 +2716,7 @@ msgstr "Nettpratstast"
#: src/settings_translation_file.cpp
msgid "Chat log level"
-msgstr ""
+msgstr "Loggnivå for chat"
#: src/settings_translation_file.cpp
msgid "Chat message count limit"
@@ -2660,16 +2732,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Chat message max length"
-msgstr ""
+msgstr "Maksimal lengde på chattemeldingar"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
-msgstr ""
+msgstr "Knapp for å slå chatten av/på"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat weblinks"
-msgstr "Skravlerøret er vist"
+msgstr "Nettlenker i chatten"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2714,6 +2785,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Klatrefart"
@@ -2727,7 +2802,7 @@ msgstr "Skyer"
#: src/settings_translation_file.cpp
msgid "Clouds are a client side effect."
-msgstr ""
+msgstr "Skyer er ei effekt på klientsida."
#: src/settings_translation_file.cpp
msgid "Clouds in menu"
@@ -2738,9 +2813,8 @@ msgid "Colored fog"
msgstr "Farga tåke"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Colored shadows"
-msgstr "Farga tåke"
+msgstr "Farga skuggar"
#: src/settings_translation_file.cpp
msgid ""
@@ -2767,7 +2841,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Command key"
-msgstr ""
+msgstr "Kommandoknapp"
#: src/settings_translation_file.cpp
msgid ""
@@ -2787,11 +2861,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Connect glass"
-msgstr ""
+msgstr "Kople saman glas"
#: src/settings_translation_file.cpp
msgid "Connect to external media server"
-msgstr ""
+msgstr "Kople til ekstern mediatenar"
#: src/settings_translation_file.cpp
msgid "Connects glass if supported by node."
@@ -2799,14 +2873,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Console alpha"
-msgstr ""
+msgstr "Konsollgjennomsiktigheit"
#: src/settings_translation_file.cpp
msgid "Console color"
-msgstr ""
+msgstr "Konsollfarge"
#: src/settings_translation_file.cpp
msgid "Console height"
+msgstr "Konsollhøgde"
+
+#: src/settings_translation_file.cpp
+msgid "Content Repository"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2815,7 +2893,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "Største antal samtidige nedlastingar frå ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2841,9 +2919,14 @@ msgid ""
"Examples:\n"
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
msgstr ""
+"Kontrollerer lengda på dag/natt-syklusen.\n"
+"Eksempel:\n"
+"72 = 20 min., 360 = 4 min., 1 = 24 timar, 0 = dag/natt/anna forblir uendra."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2891,15 +2974,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "DPI"
-msgstr ""
+msgstr "DPI"
#: src/settings_translation_file.cpp
msgid "Damage"
-msgstr ""
+msgstr "Skade"
#: src/settings_translation_file.cpp
msgid "Debug info toggle key"
-msgstr ""
+msgstr "Knapp for å slå debuggingsinformasjon av/på"
#: src/settings_translation_file.cpp
msgid "Debug log file size threshold"
@@ -2910,11 +2993,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2962,11 +3045,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
-msgstr ""
+msgstr "Definerer område der tre har eple."
#: src/settings_translation_file.cpp
msgid "Defines areas with sandy beaches."
-msgstr ""
+msgstr "Definerer område med sandstrender."
#: src/settings_translation_file.cpp
msgid "Defines distribution of higher terrain and steepness of cliffs."
@@ -2974,7 +3057,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Defines distribution of higher terrain."
-msgstr ""
+msgstr "Definerer distribusjonen av høgare terreng."
#: src/settings_translation_file.cpp
msgid "Defines full size of caverns, smaller values create larger caverns."
@@ -2994,7 +3077,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Defines the depth of the river channel."
-msgstr ""
+msgstr "Definerer djupna til elvekanalen."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
@@ -3059,6 +3142,11 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Dekorasjonar"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -3079,6 +3167,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3148,6 +3242,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3164,19 +3262,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3250,6 +3342,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3268,6 +3364,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3345,8 +3445,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr ""
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Kantutjemning:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3413,6 +3514,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3561,6 +3666,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Spel"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3588,6 +3706,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3604,10 +3730,15 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "HUD er vist"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr ""
@@ -3844,11 +3975,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3909,6 +4047,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3930,7 +4074,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3970,10 +4116,6 @@ 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 ""
@@ -4024,15 +4166,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4653,6 +4791,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4708,7 +4850,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4718,15 +4860,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4738,7 +4883,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4766,6 +4912,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Jevn belysning"
+
+#: 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"
@@ -5150,10 +5301,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5202,6 +5349,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5288,16 +5447,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5310,6 +5469,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Knute-fremheving"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5347,10 +5511,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5444,10 +5604,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5494,10 +5650,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5666,6 +5818,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Skjerm:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5693,6 +5850,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Skjermbilde"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5705,10 +5867,6 @@ 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 ""
@@ -5748,8 +5906,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr ""
+#, fuzzy
+msgid "Server"
+msgstr "Bli tenarmaskin's vert"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "- Tenarnamn: "
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Tenarbeskriving"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5776,10 +5945,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Tenarport"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5790,12 +5968,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5803,7 +5983,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5879,7 +6059,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6080,6 +6260,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Innstillingar"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6282,7 +6467,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6306,10 +6491,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6400,6 +6593,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6637,6 +6834,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6726,6 +6932,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6753,6 +6963,9 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "Attende"
+#~ msgid "Basic"
+#~ msgstr "Basis"
+
#~ msgid "Bump Mapping"
#~ msgstr "Dunke kartlegging"
@@ -6762,21 +6975,45 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Konfigurér"
+#~ msgid "Connect"
+#~ msgstr "Kople i hop"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Kontrollerer kor raskt ting synk i væske."
+
#~ msgid "Credits"
#~ msgstr "Medvirkende"
#~ msgid "Damage enabled"
#~ msgstr "Skade aktivert"
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Last ned eit spel, slik som Minetest-spelet, frå minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Last ned eit frå minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Henter og installerer $1, ver vennleg og vent..."
+#~ msgid "Enter "
+#~ msgstr "GÃ¥ "
+
+#~ msgid "Game"
+#~ msgstr "Spel"
+
#~ msgid "Generate Normal Maps"
#~ msgstr "Generér normale kart"
#~ msgid "Install: file: \"$1\""
#~ msgstr "Installer: fil: «$1»"
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Knappebindinger. (Om denne menyen går galen, ta bort tinga fra \"minetest."
+#~ "conf\")"
+
#~ msgid "Main"
#~ msgstr "Hovud"
@@ -6832,6 +7069,21 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "Ja"
+#, fuzzy, 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 ""
+#~ "Du er i gang med å hoppe inn i ein tenarmaskin ved %1$s med namnet "
+#~ "\"%2$s\" for fyrste gong. Om du går videre, ein ny brukar med dine "
+#~ "detaljer vill bli skapt på tenarmaskinen.\n"
+#~ "Ver vennleg og skriv passordet, klikk registrer og trykk \"bli med\" for "
+#~ "at kontoen skal bli registrert eller klikk avbryt for å ikkje gjere det."
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "Du døydde"
diff --git a/po/oc/minetest.po b/po/oc/minetest.po
new file mode 100644
index 000000000..1450730a4
--- /dev/null
+++ b/po/oc/minetest.po
@@ -0,0 +1,6859 @@
+# 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-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-31 17:28+0000\n"
+"Last-Translator: Walter Bulbazor <prbulbazor@protonmail.com>\n"
+"Language-Team: Occitan <https://hosted.weblate.org/projects/minetest/"
+"minetest/oc/>\n"
+"Language: oc\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.14-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Panar la sortida de messatges"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Comanda voeida."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Quitar au menú principau"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Comanda pas valida: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Comanda mandada: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Listar los jogaires en linha"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Jogaires en linha: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "La sortida de messatges es avora voeida."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Aquesta comanda es pas activada per lo servidor."
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "Respawn"
+msgstr "Tornar"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "You died"
+msgstr "Setz mòrt·as"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Comandas disponiblas:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Comandas disponiblas: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Comanda pas disponibla: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Ajuda per las comandas"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Utilizatz '.help <cmd>' per aver mai d'informacions, o '.help all' per tot "
+"listar."
+
+#: 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 "D'accòrdi"
+
+#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<pas res disponible>"
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred in a Lua script:"
+msgstr "Se presenta una error dins un escrípt Lua:"
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred:"
+msgstr "Se presenta una error:"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Menú principau"
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Tornar Conectar"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Lo servidor demandèt de se tornar conectar:"
+
+#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr "Una novèla $1 version es disponible"
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr "Mòds dau Client"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+"Version installada: $1\n"
+"Version novèla: $2\n"
+"Vos chau visitar $3 per sabèr cossí tenèr la novèla version e gardar una "
+"version mesa a jorn per los foncionalitats e las reparacions de bugs."
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr "Mai Tard"
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr "Pas Jamai"
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "La version dau protocòl correspònda pas. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "Lo servidor impausa la version $1 dau protocòl. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "Lo servidor pòt suportar de versions dau protocòl entre $1 e $2. "
+
+#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr "Visitar le sit"
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Suportem mas la version $1 dau protocòl."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Suportem de versions dau protocòl entre $1 e $2."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr "(Activat, a una error)"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+msgstr "(Insatisfait)"
+
+#: 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_register.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
+msgid "Cancel"
+msgstr "Annular"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/tab_content.lua
+msgid "Dependencies:"
+msgstr "Dependéncias:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable all"
+msgstr "Tot desactivar"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable modpack"
+msgstr "Desactivar lo mòdpack"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Tot activar"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable modpack"
+msgstr "Activar lo mòdpack"
+
+#: 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 ""
+"Error per l'activacion dau mòd \"$1\" per çò qu'a de caractèrs pas "
+"autorizats. Mas los caractèrs [a-z0-9_] son autorizats."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "Charchar Mai de Mòds"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr "Mòd:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No (optional) dependencies"
+msgstr "Pas de dependéncias (optionalas)"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No game description provided."
+msgstr "Lo juòc ten pas de descripcion provesida."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No hard dependencies"
+msgstr "Pas de dependéncias"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No modpack description provided."
+msgstr "Lo mòdpack ten pas de descripcion provesida."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No optional dependencies"
+msgstr "Pas de dependéncias optionalas"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Optional dependencies:"
+msgstr "Dependéncias optionalas:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr "Sauvar"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Monde:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr "activat"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "\"$1\" already exists. Would you like to overwrite it?"
+msgstr "\"$1\" exista dejà. Voletz l'espotir?"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 and $2 dependencies will be installed."
+msgstr "Las dependéncias $1 e $2 van s'installar."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 by $2"
+msgstr "$1 per $2"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid ""
+"$1 downloading,\n"
+"$2 queued"
+msgstr ""
+"$1 en descharjament,\n"
+"$2 en espeita"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 downloading..."
+msgstr "Descharjament de $1..."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 required dependencies could not be found."
+msgstr "Las dependéncias que fasàn besonh per $1 pòdan pas se trobar."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 will be installed, and $2 dependencies will be skipped."
+msgstr "$1 sera installat, e las dependéncias de $2 seràn ignoradas."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "All packages"
+msgstr "Tot los paquets"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Already installed"
+msgstr "Dejá installat"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Back to Main Menu"
+msgstr "Tornar au Menú Principau"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Base Game:"
+msgstr "Juòc de Basa:"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr "ContentDB es pas disponible quand Minetest es compilat sens cURL"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "Descharjament..."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Failed to download $1"
+msgstr "Error per lo descharjament de $1"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Games"
+msgstr "Juòcs"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install"
+msgstr "Installar"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install $1"
+msgstr "Installar $1"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install missing dependencies"
+msgstr "Installar las dependéncias mancantas"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Installacion: Tipe de fichèir pas supportat o archiva cassada"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Mods"
+msgstr "Mòds"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No packages could be retrieved"
+msgstr "Pas ges de paquets poguèron èstre quèrre"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No results"
+msgstr "Pas de resultats"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No updates"
+msgstr "Pas de mesas a jorn"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Not found"
+msgstr "Pas trobat"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Overwrite"
+msgstr "Espotir"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Please check that the base game is correct."
+msgstr "Verifiatz que lo juòc de basa es corrèct."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Queued"
+msgstr "En espeita"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Texture packs"
+msgstr "Pacs de textura"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Uninstall"
+msgstr "Desinstallar"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update"
+msgstr "Mesa a jorn"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update All [$1]"
+msgstr "Tot metre a jorn [$1]"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View more information in a web browser"
+msgstr "Agachar mai d'informacions dins un navegador wèb"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "Un monde sona \"$1\" exista dejà"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "Tarren en mai"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Freid de nautor"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr "Nautor sècha"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "Mesclar de biòm"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "Biòms"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "Caunas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "Cavas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Crear"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "Decoracions"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Development Test is meant for developers."
+msgstr "Test de Desvelopament es per los desvelopair·e·a·s."
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr "Donjons"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "Tarren plat"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "Massas de tarren que flotàn dins lo ciau"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "Tarrens flotejants (experimentau)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr "Generar un tarren pas fractau: Oceans e sostarrens"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "Montèls"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "Ribèiras mostas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "Aumente la mostor a l'entorn de ribèiras"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr "Installar un juòc"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr "Installar un autre juòc"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "Lacs"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+"Mostor bassa e chalor elevada fan venir las ribèiras pas plòndas e sèchas"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Generator de tarrens"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Drapèls de generator de tarren"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "Drapèls specifics dau generator de tarren"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "Montanhas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "Rajada de gadòlha"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "Ret de tunèls e de gròtas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No game selected"
+msgstr "Pas de juòc selectionat"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "Redusa la chalor embei l'altitud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "Redusa la mostor embei l'altitud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "Ribèiras"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "Ribèiras au nivèl de la mar"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Seed"
+msgstr "Grana"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr "Transicion doça entre los biòms"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+"Estructuras aparéisson per le tarren (pas d'efèit per los aubres e l'èrba de "
+"jungla creats per la v6)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr "Estructuras aparéisson per le tarren, en generau d'aubres e de plantas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "Temperat, Desertic"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "Temperat, Desertic, Jungla"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "Temperat, Desertic, Jungla, Tondra, Taïga"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr "Erosia de la surfàcia dau tarren"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "Aubres e èrba de jungla"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "Variar la plondor de la ribèira"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "Mai grandas caunas plondorosas dins lo sostarren"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Nom dau monde"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no games installed."
+msgstr "Avètz pas ges de juòc installat."
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr "Sètz surat de vaudre suprimar \"$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 "Suprimar"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: failed to delete \"$1\""
+msgstr "pkgmgr: error per suprimar \"$1\""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: invalid path \"$1\""
+msgstr "pkgmgr: chamin \"$1\" pas valide"
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr "Suprimar lo Monde \"$1\"?"
+
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Accept"
+msgstr "Acceptar"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr "Tornar sonar lo Mòdpack:"
+
+#: 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 "(Pas de descripcion o de paramètre bailat)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "2D Noise"
+msgstr "Brut 2D"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< Tornar a la Paja de Paramètres"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "Navegar"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
+msgid "Disabled"
+msgstr "Desactivat"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Modifiar"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "Activat"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Lacunarity"
+msgstr "Lacunaritada"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Octaves"
+msgstr "Octavas"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Offset"
+msgstr "Descalatge"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Persistence"
+msgstr "Persisténcia"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Bailatz un nombre entèir valide."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Bailatz un nombre valide."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Tornar per defaut"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Scale"
+msgstr "Eschala"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
+msgid "Search"
+msgstr "Charchar"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select directory"
+msgstr "Seleccionar un repertòre"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select file"
+msgstr "Seleccionar un fichèir"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Show technical names"
+msgstr "Mostrar los noms tecnics"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be at least $1."
+msgstr "Chau que la valor siáge au mens $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must not be larger than $1."
+msgstr "Chau pas que la valor siáge mai granda que $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X"
+msgstr "X"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X spread"
+msgstr "Escart X"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y"
+msgstr "Y"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y spread"
+msgstr "Escart Y"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z"
+msgstr "Z"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z spread"
+msgstr "Escart Z"
+
+#. ~ "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 "valor absoluda"
+
+#. ~ "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 "defaut"
+
+#. ~ "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 "polit"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 (Enabled)"
+msgstr "$1 (Activat)"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 mods"
+msgstr "$1 mòds"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr "Error per installar $1 vès $2"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find real mod name for: $1"
+msgstr "Installar un Mòd: Pas possible de trobar lo nom reau dau mòd per: $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find suitable folder name for modpack $1"
+msgstr ""
+"Installar un Mòd: Pas possible de trobar un nom de dorsèir convenant per lo "
+"mòdpack $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to find a valid mod or modpack"
+msgstr "Se pòt pas trobar un mòd o un mòdpack valide"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a $1 as a texture pack"
+msgstr "Se pòt pas installar $1 coma un pack de texturas"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a game as a $1"
+msgstr "Se pòt pas installar un juòc coma un $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a mod as a $1"
+msgstr "Se pòt pas installar un mòd coma un $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a modpack as a $1"
+msgstr "Se pòt pas installar un mòdpack coma un $1"
+
+#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
+msgid "Loading..."
+msgstr "Charjament..."
+
+#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr "La lista de servidors publics es pas activada"
+
+#: builtin/mainmenu/serverlistmgr.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr ""
+"Essatjatz de tornar activar la lista de servidors e verifiatz vòstra "
+"connexion d'internet."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "A prepaus"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Collaboradors Actius"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Developaires Principaus"
+
+#: 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 "Ancians Collaboradors"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Ancians Developaires Principaus"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+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
+msgid "New"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "No world created or selected!"
+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 "Creative mode"
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: builtin/mainmenu/tab_online.lua
+msgid "Damage / PvP"
+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 "Login"
+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 "Remove favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+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 "Shaders"
+
+#: 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 "Touch threshold (px):"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very 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
+msgid "Connection aborted (protocol error?)."
+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 (disabled by mod or game)"
+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
+#, c-format
+msgid "Error creating client: %s"
+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/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 src/settings_translation_file.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."
+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 "New Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+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 ""
+
+#. ~ 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/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+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 "3d"
+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 "Admin name"
+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 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 "Audio"
+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 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 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 "Bobbing"
+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"
+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 "Client-side Modding"
+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 "Content Repository"
+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 when idling. Negative values will cause\n"
+"you to rise instead."
+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 "Debugging"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dec. volume key"
+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 "Developer Options"
+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 ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+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 joysticks. Requires a restart to take effect"
+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 smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 profiler"
+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"
+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 and Antialiasing"
+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"
+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 "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamepads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+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 "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+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"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
+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 long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+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, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+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, players cannot join without a password or change theirs to 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 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 "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, stated in seconds."
+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 "Keyboard and Mouse"
+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, stated in seconds."
+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, stated "
+"in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
+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\n"
+"- trace"
+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 "Lighting"
+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 "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 "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+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 port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Networking"
+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 and Entity Highlighting"
+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 "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 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 "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"
+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 "Screenshots"
+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 "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"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
+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 "Server/Env Performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+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 length of a chat message (in characters) sent by clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\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: 15.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 gamma"
+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 "Temporary Settings"
+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, in seconds."
+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 "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+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 "User Interfaces"
+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 technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" 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"
+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/pl/minetest.po b/po/pl/minetest.po
index ecce3cb36..39c570424 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: 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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-03-18 02:57+0000\n"
+"Last-Translator: Jakub Z <mrkubax10@onet.pl>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/minetest/minetest/"
"pl/>\n"
"Language: pl\n"
@@ -13,7 +13,7 @@ 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.10.1\n"
+"X-Generator: Weblate 4.12-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -83,18 +83,16 @@ msgstr ""
"wyświetlić wszystko."
#: builtin/common/chatcommands.lua
-#, fuzzy
msgid "[all | <cmd>]"
-msgstr "[all | <cmd>]"
+msgstr "[wszystko | <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: "
+msgstr "<niedostępne>"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
@@ -117,6 +115,31 @@ msgid "The server has requested a reconnect:"
msgstr "Serwer zażądał ponownego połączenia:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Wybierz Mody"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Niezgodne wersje protokołów. "
@@ -129,6 +152,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Serwer wspiera protokoły w wersjach od $1 do $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Wspieramy wyłącznie protokół w wersji $1."
@@ -136,14 +163,21 @@ msgstr "Wspieramy wyłącznie protokół w wersji $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Wspieramy protokoły w wersji od $1 do $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Anuluj"
@@ -177,9 +211,8 @@ msgstr ""
"znaki. Tylko znaki od [a-z, 0-9 i _] sÄ… dozwolone."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "Find More Mods"
-msgstr "Znajdź więcej modów"
+msgstr "Znajdź Więcej Modów"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
@@ -227,17 +260,14 @@ msgid "\"$1\" already exists. Would you like to overwrite it?"
msgstr "\"$1\" aktualnie istnieje. Czy chcesz go nadpisać?"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 and $2 dependencies will be installed."
msgstr "Zależności $1 i $2 będą zainstalowane."
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 by $2"
msgstr "$1 przez $2"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid ""
"$1 downloading,\n"
"$2 queued"
@@ -286,7 +316,6 @@ msgid "Failed to download $1"
msgstr "Pobieranie $1 do $2 nie powiodło się :("
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Gry"
@@ -303,14 +332,12 @@ 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"
+msgstr "Instalacja: nieznany typ pliku lub uszkodzone archiwum"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
-msgstr "Mody"
+msgstr "Modyfikacje"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
@@ -350,7 +377,7 @@ msgstr "Odinstaluj"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
-msgstr "Aktualizacja"
+msgstr "Aktualizuj"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
@@ -401,12 +428,9 @@ msgid "Decorations"
msgstr "Dekoracje"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Pobierz tryb gry, taki jak Minetest Game, z minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "ÅšciÄ…gnij takÄ… z minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Ostrzeżenie: The Development Test jest przeznaczony dla programistów."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -424,10 +448,6 @@ msgstr "Masywy lÄ…dowe unoszÄ…ce siÄ™ na niebie"
msgid "Floatlands (experimental)"
msgstr "LatajÄ…ce wyspy (eksperymentalne)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Gra"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Generuj niefraktalny teren: oceany i podziemia"
@@ -445,6 +465,15 @@ msgid "Increases humidity around rivers"
msgstr "Zwiększa wilgotność wokół rzek"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Zainstaluj $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Jeziora"
@@ -471,7 +500,6 @@ msgid "Mountains"
msgstr "Góry"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Mud flow"
msgstr "Strumień błota"
@@ -517,49 +545,36 @@ msgstr ""
"dżungli stworzone przez v6)"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Structures appearing on the terrain, typically trees and plants"
msgstr "Struktury pojawiające się na terenie, zazwyczaj drzewa i rośliny"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Temperate, Desert"
-msgstr "Biocenozy klimatu umiarkowanego, pustynie"
+msgstr "Umiarkowany, Pustynny"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Temperate, Desert, Jungle"
-msgstr "Biocenozy klimatu umiarkowanego, pustynie i dżungle"
+msgstr "Umiarkowany, Pustynia, Dżungla"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr "Biocenozy klimatu umiarkowanego, pustynie, dżungla, tajga i tundra"
+msgstr "Umiarkowany, Pustynia, Dżungla, Tundra, Tajga"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Terrain surface erosion"
msgstr "Erozja powierzchni terenu"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Trees and jungle grass"
msgstr "Drzewa i trawa w dżungli"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Vary river depth"
msgstr "Zmienna głębokość rzeki"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Very large caverns deep in the underground"
-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 "Ostrzeżenie: test rozwojowy jest przeznaczony dla programistów."
+msgstr "Bardzo duże jaskinie głęboko w podziemiach"
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -591,6 +606,39 @@ msgstr "Modmgr: nieprawidłowy katalog \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Usunąć świat \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Potwierdź hasło"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Nazwa generatora mapy"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Nazwa"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Hasło"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Hasła nie są jednakowe!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Zarejestruj się i dołącz"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Zaakceptuj"
@@ -623,6 +671,16 @@ msgstr "< Wróć do ekranu ustawień"
msgid "Browse"
msgstr "PrzeglÄ…daj"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Zawartość"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Zawartość"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Wyłączone"
@@ -648,7 +706,6 @@ msgid "Offset"
msgstr "Margines"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Persistence"
msgstr "Trwałość"
@@ -670,7 +727,7 @@ msgstr "Skaluj"
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
-msgstr "Szukaj"
+msgstr "Wyszukaj"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
@@ -680,7 +737,7 @@ msgstr "Wybierz katalog"
msgid "Select file"
msgstr "Wybierz plik"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Pokaż nazwy techniczne"
@@ -785,7 +842,6 @@ msgid "Loading..."
msgstr "Åadowanie..."
#: builtin/mainmenu/serverlistmgr.lua
-#, fuzzy
msgid "Public server list is disabled"
msgstr "Lista serwerów publicznych jest wyłączona"
@@ -796,16 +852,14 @@ msgstr ""
"z sieciÄ… Internet."
#: builtin/mainmenu/tab_about.lua
-#, fuzzy
msgid "About"
-msgstr "O grze"
+msgstr "O"
#: 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:"
@@ -814,12 +868,10 @@ 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."
@@ -836,6 +888,11 @@ msgstr "Byli współautorzy"
msgid "Previous Core Developers"
msgstr "Poprzedni Główni Deweloperzy"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Pokaż informacje debugowania"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Przeglądaj zawartość online"
@@ -901,15 +958,9 @@ msgid "Host Server"
msgstr "Udostępnij serwer"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Install games from ContentDB"
msgstr "Instaluj gry z ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Name"
-msgstr "Nazwa"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Nowy"
@@ -918,11 +969,6 @@ msgstr "Nowy"
msgid "No world created or selected!"
msgstr "Nie wybrano bądź nie utworzono świata!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "Hasło"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Graj"
@@ -956,30 +1002,19 @@ msgid "Clear"
msgstr "Delete"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Połącz"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Tryb kreatywny"
#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Damage / PvP"
-msgstr "Włącz obrażenia/ PvP"
+msgstr "Obrażenia / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Usuń ulubiony"
-
-#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Favorites"
msgstr "Ulubione"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Incompatible Servers"
msgstr "Niekompatybilne serwery"
@@ -988,24 +1023,35 @@ msgid "Join Game"
msgstr "Dołącz do gry"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Public Servers"
msgstr "Publiczne serwery"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Refresh"
msgstr "Odśwież"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Port zdalny"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Opis serwera"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1046,13 +1092,12 @@ 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: "
+msgid "Dynamic shadows:"
msgstr "Cienie dynamiczne: "
#: builtin/mainmenu/tab_settings.lua
@@ -1060,17 +1105,14 @@ 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"
@@ -1127,7 +1169,6 @@ msgid "Shaders"
msgstr "Shadery"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
msgstr "Shadery (eksperymentalne)"
@@ -1152,7 +1193,8 @@ msgid "Tone Mapping"
msgstr "Tone Mapping"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "Próg dotyku (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1161,11 +1203,10 @@ msgstr "Filtrowanie trójliniowe"
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Ultra High"
+msgid "Very High"
msgstr "Bardzo wysokie"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Very Low"
msgstr "Bardzo niskie"
@@ -1181,6 +1222,11 @@ msgstr "Fale (Ciecze)"
msgid "Waving Plants"
msgstr "Falujące rośliny"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Błąd połączenia (brak odpowiedzi?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Upłynął czas połączenia."
@@ -1210,9 +1256,8 @@ msgid "Connection error (timed out?)"
msgstr "Błąd połączenia (brak odpowiedzi?)"
#: src/client/clientlauncher.cpp
-#, fuzzy
msgid "Could not find or load game: "
-msgstr "Nie można znaleźć lub wczytać trybu gry \""
+msgstr "Nie można znaleźć lub załadować gry: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1276,9 +1321,8 @@ msgid "- Server Name: "
msgstr "- Nazwa serwera: "
#: src/client/game.cpp
-#, fuzzy
msgid "A serialization error occurred:"
-msgstr "Wystąpił błąd:"
+msgstr "Wystąpił błąd serializacji:"
#: src/client/game.cpp
#, c-format
@@ -1294,22 +1338,18 @@ msgid "Automatic forward enabled"
msgstr "Automatyczne chodzenie do przodu włączone"
#: src/client/game.cpp
-#, fuzzy
msgid "Block bounds hidden"
-msgstr "Granice bloków"
+msgstr "Ukryte granice bloków"
#: src/client/game.cpp
-#, fuzzy
msgid "Block bounds shown for all blocks"
-msgstr "Granice bloku pokazane dla wszystkich bloków"
+msgstr "Granice bloków 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"
@@ -1323,8 +1363,9 @@ 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)"
+msgid "Can't show block bounds (disabled by mod or game)"
+msgstr ""
+"Nie można wyświetlić granic bloków (wymagane uprawnienie 'basic_debug')"
#: src/client/game.cpp
msgid "Change Password"
@@ -1339,9 +1380,8 @@ msgid "Cinematic mode enabled"
msgstr "Tryb kinowy włączony"
#: src/client/game.cpp
-#, fuzzy
msgid "Client disconnected"
-msgstr "Modyfikacja klienta"
+msgstr "Klient został rozłączony"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
@@ -1352,7 +1392,6 @@ 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"
@@ -1361,7 +1400,7 @@ msgid "Continue"
msgstr "Kontynuuj"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1378,23 +1417,25 @@ msgid ""
"- Mouse wheel: select item\n"
"- %s: chat\n"
msgstr ""
-"Sterowanie:↵\n"
-"- %s: idź do przodu↵\n"
-"- %s: idź do tyłu↵\n"
-"- %s: idź w lewo↵\n"
-"- %s: idź w prawo↵\n"
-"- %s: skocz/wspinaj się↵\n"
-"- %s: skradaj się/idź do dołu↵\n"
-"- %s: upuść przedmiot↵\n"
-"- %s: otwórz ekwipunek↵\n"
-"- Mysz: obróć się/patrz↵\n"
-"- Rolka myszy: wybierz przedmiot↵\n"
-"- %s: czatuj↵\n"
+"Sterowanie:\n"
+"- %s: idź do przodu\n"
+"- %s: przesuń się do tyłu\n"
+"- %s: przesuń się w lewo\n"
+"- %s: przesuń w prawo\n"
+"- %s: skok/wspinaj siÄ™\n"
+"- %s: kopanie/cios\n"
+"- %s: połóż/użyj\n"
+"- %s: skradanie się/schodzenie w dół\n"
+"- %s: upuść przedmiot\n"
+"- %s: ekwipunek\n"
+"- Mysz: obróć / spójrz\n"
+"- Kółko myszy: wybierz element\n"
+"- %s: czat\n"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Couldn't resolve address: %s"
-msgstr "Nie można rozwiązać adresu: %s."
+msgstr "Nie można rozwiązać adresu: %s"
#: src/client/game.cpp
msgid "Creating client..."
@@ -1453,6 +1494,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Włączono nieskończony zasięg widoczności"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Tworzenie klienta..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Wyjście do menu"
@@ -1525,7 +1571,6 @@ 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"
@@ -1590,12 +1635,10 @@ msgid "Sound muted"
msgstr "Głośność wyciszona"
#: src/client/game.cpp
-#, fuzzy
msgid "Sound system is disabled"
msgstr "System dźwiękowy jest wyłączony"
#: src/client/game.cpp
-#, fuzzy
msgid "Sound system is not supported on this build"
msgstr "System dźwiękowy nie jest obsługiwany w tej kompilacji"
@@ -1604,17 +1647,17 @@ msgid "Sound unmuted"
msgstr "Głośność włączona ponownie"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, 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
+#, 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
+#, 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"
@@ -1939,61 +1982,34 @@ msgid "Minimap hidden"
msgstr "Minimapa ukryta"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
msgstr "Minimapa w trybie radaru, Zoom x%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
msgstr "Minimapa w trybie powierzchniowym, powiększenie x%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
msgstr "Minimapa w trybie teksturowym"
#: src/gui/guiChatConsole.cpp
-#, fuzzy
msgid "Failed to open webpage"
-msgstr "Pobieranie $1 do $2 nie powiodło się :("
+msgstr "Nie udało się otworzyć strony internetowej"
#: 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!"
-msgstr "Hasła nie są jednakowe!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Zarejestruj się i dołącz"
-
-#: 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 ""
-"Próbujesz wejść na serwer \"%s\" o nazwie \"%2$s2\" po raz pierwszy . Jeśli "
-"zdecydujesz się kontynuować na serwerze zostanie utworzone nowe konto z "
-"Twoim danymi.\n"
-"Wpisz ponownie hasło i wciśnij \"Zarejestruj się i Dołącz\" aby potwierdzić "
-"utworzenie konta lub wciśnij \"Anuluj\" aby przerwać ten proces."
+msgstr "Otwieram stronÄ™ internetowÄ…"
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Kontynuuj"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "\"Aux1\" = climb down"
-msgstr "\"Specjalny\" = schodź"
+msgstr "\"Aux1\" = schodź"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -2004,7 +2020,6 @@ msgid "Automatic jumping"
msgstr "Automatyczne skoki"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Aux1"
msgstr "Aux1"
@@ -2013,7 +2028,6 @@ msgid "Backward"
msgstr "Tył"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Block bounds"
msgstr "Granice bloków"
@@ -2021,7 +2035,7 @@ msgstr "Granice bloków"
msgid "Change camera"
msgstr "Zmień kamerę"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Czat"
@@ -2074,10 +2088,8 @@ msgid "Key already in use"
msgstr "Klawisz już zdefiniowany"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Zdefiniowane klawisze. (Jeżeli to menu nie działa, usuń skonfigurowane "
-"klawisze z pliku minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2136,7 +2148,6 @@ msgid "Toggle noclip"
msgstr "Przełącz tryb noclip"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle pitchmove"
msgstr "Przełączanie przemieszczania"
@@ -2149,10 +2160,6 @@ msgid "Change"
msgstr "Zmień"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Potwierdź hasło"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nowe hasło"
@@ -2160,6 +2167,10 @@ msgstr "Nowe hasło"
msgid "Old Password"
msgstr "Stare hasło"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Hasła nie są jednakowe!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Wyjście"
@@ -2169,15 +2180,9 @@ msgid "Muted"
msgstr "Wyciszony"
#: src/gui/guiVolumeChange.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Sound Volume: %d%%"
-msgstr "Głośność: "
-
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Enter "
+msgstr "Głośność: %d%%"
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
@@ -2186,6 +2191,16 @@ msgstr "Enter "
msgid "LANG_CODE"
msgstr "pl"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Wybierz nazwÄ™!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2196,15 +2211,14 @@ msgstr ""
"dotknięcia."
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"(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."
+"(Android) Użyj wirtualnego joysticka, aby aktywować przycisk \"Aux1\".\n"
+"Gdy jest włączone to wirtualny joystick również naciśnie przycisk \"Aux1\", "
+"gdy znajduje się poza głównym okręgiem."
#: src/settings_translation_file.cpp
msgid ""
@@ -2217,13 +2231,15 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-"(X, Y, Z) margines fraktalu od centrum świata w jednostkach \"skali\".\n"
-"Używany by przesunąć odpowiednie miejsce do punktu spawnu podłoża blisko "
-"punktu (0, 0).\n"
-"Domyślny jest odpowiedni dla zbiorów Mandelbrota, lecz wymaga edycji dla "
-"zbiorów Julii.\n"
-"Zakres w przybliżeniu -2 do 2. Pomnożony przez \"skalę\" dla marginesu na "
-"węzłech."
+"(X,Y,Z) przesuniÄ™cie fraktala od Å›rodka Å›wiata w jednostkach „skaliâ€.\n"
+"Może być użyty do przeniesienia żądanego punktu do (0, 0), aby utworzyć a\n"
+"odpowiedni punkt odradzania, lub aby umożliwić „przybliżenie†na żądanym "
+"miejscu\n"
+"punkt, zwiÄ™kszajÄ…c „skalÄ™â€.\n"
+"Domyślnie ustawiony jest odpowiedni punkt odradzania dla Mandelbrota\n"
+"zestawy z domyślnymi parametrami, może wymagać zmiany w innych\n"
+"sytuacje.\n"
+"Zakres mniej więcej -2 do 2. Pomnóż przez „skalę†dla przesunięcia w węzłach."
#: src/settings_translation_file.cpp
msgid ""
@@ -2269,9 +2285,8 @@ msgid "2D noise that controls the size/occurrence of step mountain ranges."
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 doliny i kanały rzeczne."
+msgstr "Szum 2D lokalizuje doliny i kanały rzeczne."
#: src/settings_translation_file.cpp
msgid "3D clouds"
@@ -2282,7 +2297,6 @@ msgid "3D mode"
msgstr "Modele 3D"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "3D mode parallax strength"
msgstr "Siła paralaksy w trybie 3D"
@@ -2299,7 +2313,6 @@ 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"
@@ -2325,7 +2338,6 @@ msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
msgstr "Szum 3D dla nawisów skalnych, klifów, itp. Zwykle mało zróżnicowany."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "3D noise that determines number of dungeons per mapchunk."
msgstr "Szum 3D, który wpływa na liczbę lochów na jeden mapchunk."
@@ -2354,6 +2366,10 @@ msgstr ""
"Zauważ, że tryb interlaced wymaga włączenia shaderów."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2373,17 +2389,14 @@ msgstr ""
"wyłączony."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ABM interval"
msgstr "Interwał ABM"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ABM time budget"
msgstr "Budżet czasowy ABM"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Absolute limit of queued blocks to emerge"
msgstr "Bezwzględny limit kolejki pojawiających się bloków"
@@ -2434,13 +2447,12 @@ msgstr ""
"ekranów 4k."
#: src/settings_translation_file.cpp
-#, 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
+#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
"Increase value to increase density. Can be positive or negative.\n"
@@ -2456,6 +2468,11 @@ msgstr ""
"zawsze sprawdzaj) tworzy stałą warstwę pływającej wyspy."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Dołącz nazwę przedmiotu"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Zaawansowane"
@@ -2474,7 +2491,8 @@ msgstr ""
"światło nocne podlega zmianie w minimalnym stopniu."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Zawsze lataj oraz poruszaj siÄ™ szybko"
#: src/settings_translation_file.cpp
@@ -2498,7 +2516,6 @@ msgid "Announce server"
msgstr "Rozgłoś serwer"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Announce to this serverlist."
msgstr "Rozgłoś listę serwerów."
@@ -2544,15 +2561,21 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
-"Z tej odległości serwer mocno zoptymalizuje, które bloki są wysłane do "
+"W tej odległości serwer agresywnie zoptymalizuje, które bloki są wysyłane "
+"do\n"
"klientów.\n"
-"Małe wartości mogą bardzo poprawić działanie, kosztem widocznego "
-"renderowania glitchy.\n"
-"(Niektóre bloki nie będą wygenerowane pod wodą ani w jaskiniach, jak również "
-"na lÄ…dzie.\n"
-"Zmiana wartości na wyższą niż max_block_send_distance wyłącza tą "
-"optymalizacjÄ™.\n"
-"Zapisane w blokach mapy (16 bloków)."
+"Małe wartości potencjalnie znacznie poprawiają wydajność, kosztem "
+"widocznych\n"
+"trzaski renderowania (niektóre bloki nie będą renderowane pod wodą i w "
+"jaskiniach,\n"
+"jak również czasami na lądzie).\n"
+"Ustawienie tego na wartość większą niż max_block_send_distance wyłącza to\n"
+"optymalizacja.\n"
+"Podane w mapblocks (16 węzłów)."
+
+#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Automatic forward key"
@@ -2575,12 +2598,10 @@ 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"
@@ -2597,10 +2618,6 @@ msgid "Base terrain height."
msgstr "Bazowa wysokość terenu."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Podstawowy"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Podstawowe uprawnienia"
@@ -2621,7 +2638,8 @@ msgid "Bind address"
msgstr "Sprawdzanie adresu"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Parametry hałasu temperatury i wilgotności API Biome"
#: src/settings_translation_file.cpp
@@ -2633,23 +2651,24 @@ msgid "Block send optimize distance"
msgstr "Dystans optymalizacji wysyłanych bloków"
#: src/settings_translation_file.cpp
-#, fuzzy
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Ścieżka pogrubionej czcionki oraz kursywy"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "Ścieżka pogrubionej czcionki oraz kursywy typu Monospace"
+msgstr "Ścieżka czcionki o stałej szerokości i pogrubionej kursywą"
#: src/settings_translation_file.cpp
msgid "Bold font path"
msgstr "Ścieżka fontu pogrubionego"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "Ścieżka czcionki typu Monospace"
+msgstr "Pogrubiona ścieżka czcionki o stałej szerokości"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2661,14 +2680,20 @@ msgstr "Wbudowany"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Camera"
+msgstr "Zmień kamerę"
+
+#: 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 ""
-"Dystans kamery obok samolotu w węzłach, pomiędzy 0 i 0.5\n"
-"Większość użytkowników nie będzie potrzebowała tego zmieniać.\n"
+"Odległość kamery „w pobliżu płaszczyzny przycinania†w węzłach, od 0 do "
+"0.25\n"
+"Działa tylko na platformie GLES. Większość użytkowników nie będzie "
+"potrzebowała tego zmieniać.\n"
"Zwiększenie może zmniejszyć występowanie artefaktów na słabszych kartach "
"graficznych.\n"
"0.1 = Domyślnie, 0.25 = Dobra wartość dla słabszych tabletów."
@@ -2726,28 +2751,24 @@ msgid "Cavern threshold"
msgstr "Próg groty"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cavern upper limit"
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."
+"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"
+msgstr "Próg wiadomości czasu polecenia czatu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat commands"
-msgstr "Komenda"
+msgstr "Komendy czatu"
#: src/settings_translation_file.cpp
msgid "Chat font size"
@@ -2758,17 +2779,14 @@ msgid "Chat key"
msgstr "Klawisz czatu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat log level"
msgstr "Poziom dziennika czatu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message count limit"
msgstr "Limit liczby wiadomości na czacie"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message format"
msgstr "Format wiadomości czatu"
@@ -2785,7 +2803,6 @@ msgid "Chat toggle key"
msgstr "Klawisz przełączania czatu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat weblinks"
msgstr "Chat widoczny"
@@ -2806,13 +2823,12 @@ 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."
+"Klikalne łącza internetowe (kliknięcie środkowym przyciskiem lub Ctrl+lewy "
+"przycisk myszy) włączone w danych wyjściowych konsoli czatu."
#: src/settings_translation_file.cpp
msgid "Client"
@@ -2827,14 +2843,17 @@ msgid "Client modding"
msgstr "Modyfikacja klienta"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Client side modding restrictions"
msgstr "Ograniczenia modowania po stronie klienta"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Client side node lookup range restriction"
-msgstr "Ograniczenie zasięgu widoczności bloków Client side"
+msgstr "Ograniczenie zakresu wyszukiwania węzłów po stronie klienta"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Modyfikacja klienta"
#: src/settings_translation_file.cpp
msgid "Climbing speed"
@@ -2861,12 +2880,10 @@ 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 "
@@ -2876,13 +2893,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/"
+"Lista oddzielonych przecinkami flag do ukrycia w repozytorium treści.\n"
+"„niewolne†może służyć do ukrywania pakietów, które nie kwalifikują się jako "
+"„wolne oprogramowanieâ€,\n"
+"zgodnie z definicjÄ… Free Software Foundation.\n"
+"Możesz także określić oceny treści.\n"
+"Te flagi są niezależne od wersji Minetest,\n"
+"więc zobacz pełną listę na https://content.minetest.net/help/content_flags/"
#: src/settings_translation_file.cpp
msgid ""
@@ -2905,30 +2922,29 @@ 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"
+"Poziom kompresji jaki ma być stosowany przy zapisie bloków mapy na dysk.\n"
"-1 - użyj domyślnego poziomu kompresji\n"
-"0 - najmniejsza kompresja, najszybsza\n"
-"9 - najlepsza kompresja, najwolniejsza"
+"0 - najmniejsza kompresja, najszybciej\n"
+"9 - najlepsza kompresja, najwolniej"
#: 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"
+"Poziom kompresji jaki ma być użyty podczas wysyłania bloków mapy do "
+"klienta.\n"
"-1 - użyj domyślnego poziomu kompresji\n"
-"0 - najmniejsza kompresja, najszybsza\n"
-"9 - najlepsza kompresja, najwolniejsza"
+"0 - najmniejsza kompresja, najszybciej\n"
+"9 - najlepsza kompresja, najwolniej"
#: src/settings_translation_file.cpp
msgid "Connect glass"
@@ -2955,11 +2971,15 @@ msgid "Console height"
msgstr "Wysokość konsoli"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "Repozytorium Zawartości z Sieci"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "Flaga czarnej listy ContentDB"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ContentDB Max Concurrent Downloads"
msgstr "Maksymalna liczba jednoczesnych pobrań ContentDB"
@@ -2998,8 +3018,10 @@ msgstr ""
"72 = 20min, 360 = 4min, 1 = 24h, 0 = dzień/noc/wszystko pozostaje bez zmian."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Wpływa na prędkość zanurzania w płynie."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -3033,13 +3055,12 @@ msgid "Crosshair alpha"
msgstr "Kanał alfa celownika"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"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"
+"Wpływa również na kolor celownika obiektów."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -3076,12 +3097,12 @@ msgid "Debug log level"
msgstr "Poziom logowania debugowania"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Klawisz zmniejszania głośności"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Zmniejsz wartość, aby zwiększyć opór ruchu w cieczy."
+msgid "Dec. volume key"
+msgstr "Klawisz zmniejszania głośności"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3232,13 +3253,12 @@ msgid "Desert noise threshold"
msgstr "Próg szumu pustyni"
#: 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 ""
"Pustynie pojawią się gdy np_biome przekroczy tą wartość.\n"
-"Kiedy flaga 'snowbiomes' jest włączona, ta wartość jest ignorowana."
+"Kiedy flaga 'snowbiomes' jest włączona, ta wartość jest ignorowana."
#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
@@ -3246,6 +3266,11 @@ msgstr "Odsynchronizuj animację bloków"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Developer Options"
+msgstr "Dekoracje"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Dig key"
msgstr "Klawisz kopania"
@@ -3267,6 +3292,12 @@ msgid "Display Density Scaling Factor"
msgstr "Wyświetl współczynnik skalowania gęstości"
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: 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."
@@ -3350,6 +3381,10 @@ msgid "Enable joysticks"
msgstr "Włącz joystick"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Włącz wsparcie kanałów z modami."
@@ -3366,20 +3401,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Włącz losowe wejście użytkownika (tylko dla testowania)."
#: src/settings_translation_file.cpp
-#, fuzzy
-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 ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3388,6 +3409,10 @@ msgstr ""
"Wyłącz dla szybkości lub wyglądu."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3488,6 +3513,14 @@ 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 ""
+"Umożliwia kompromisy, które zmniejszają obciążenie procesora lub zwiększają "
+"wydajność renderowania\n"
+"kosztem drobnych usterek wizualnych, które nie wpływają na grywalność gry."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "Profilowanie doliny"
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -3516,6 +3549,10 @@ msgstr ""
"płaskimi nizinami, odpowiednimi dla jednolitej warstwy pływających wysp."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "FPS when unfocused or paused"
msgstr "Maksymalny FPS gdy gra spauzowana"
@@ -3608,8 +3645,9 @@ msgstr ""
"w czasie ładowania tekstur."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtrowanie anizotropowe"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Antyaliasing:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3685,6 +3723,11 @@ msgstr "Klawisz przełączania mgły"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Font"
+msgstr "Rozmiar czcionki"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Font bold by default"
msgstr "Domyślnie pogrubiona czcionka"
@@ -3706,18 +3749,20 @@ msgid "Font size"
msgstr "Rozmiar czcionki"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Font size divisible by"
-msgstr ""
+msgstr "Rozmiar czcionki podzielny przez"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
-msgstr "Rozmiar domyślnej czcionki w punktach (pt)."
+msgstr ""
+"Rozmiar czcionki domyślnej czcionki, gdzie 1 jednostka = 1 piksel przy 96 DPI"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
-msgstr "Rozmiar czcionki monospace w punktach (pt)."
+msgstr ""
+"Rozmiar czcionki o stałej szerokości, gdzie 1 jednostka = 1 piksel przy 96 "
+"DPI"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3738,6 +3783,12 @@ msgid ""
"be\n"
"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
msgstr ""
+"W przypadku czcionek pikselowych, które nie skalują się dobrze, zapewnia to, "
+"że ich rozmiary używanych\n"
+"z nią będą zawsze podzielne przez tę wartość w pikselach. Na przykład,\n"
+"czcionka pikselowa o wysokości 16 pikseli powinna mieć ustawioną tą wartość "
+"na 16, więc zawsze będzie tylko\n"
+"rozmiar 16, 32, 48, itd., więc mod żądający rozmiaru 25 otrzyma 32."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3824,7 +3875,6 @@ 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"
@@ -3837,9 +3887,9 @@ msgstr ""
"\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)"
+"będzie utrzymywał aktywne obiekty do tej odległości w kierunku w\n"
+"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"
@@ -3862,6 +3912,19 @@ msgid "GUI scaling filter txr2img"
msgstr "Filtr skalowania GUI txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Gry"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Globalne wywołania zwrotne"
@@ -3901,6 +3964,16 @@ msgid "Graphics"
msgstr "Grafika"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Grafika"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Grafika"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Grawitacja"
@@ -3919,8 +3992,13 @@ msgid "HTTP mods"
msgstr "Adres HTTP modów"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "Współczynnik skalowania HUD"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "Skalowanie GUI"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -4010,7 +4088,6 @@ msgid "Homepage of server, to be displayed in the serverlist."
msgstr "Główna strona serwera, wyświetlana na liście serwerów."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Horizontal acceleration in air when jumping or falling,\n"
"in nodes per second per second."
@@ -4221,8 +4298,10 @@ msgstr ""
"Wymaga włączenia falowania cieczy."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"Jak długo serwer będzie czekać do zwolnienia nieużywanych bloków mapy.\n"
@@ -4230,6 +4309,13 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "Zmniejsz wartość, aby zwiększyć opór ruchu w cieczy."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "How wide to make rivers."
msgstr "Jak szerokie sÄ… rzeki."
@@ -4262,13 +4348,13 @@ msgstr ""
"nie marnuj mocy CPU bez znaczących korzyści."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"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 "
-"jeśli tryb szybkiego poruszania oraz latania jest włączony."
+"Jeśli wyłączone to klawisz \"Aux1\" jest wykorzystany aby latać szybko jeśli "
+"tryb szybkiego poruszania oraz latania jest\n"
+"włączony."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4308,6 +4394,15 @@ msgstr ""
"opadania."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+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 ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
@@ -4338,7 +4433,10 @@ msgstr ""
"zależy do nachylenia gracza."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr "Jeśli włączone, nowi gracze nie mogą dołączyć do gry z pustym hasłem."
#: src/settings_translation_file.cpp
@@ -4395,10 +4493,6 @@ msgid "Ignore world errors"
msgstr "Ignoruj błędy świata"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "Gra"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr "Kanał alfa konsoli w grze (od 0 do 255)."
@@ -4460,16 +4554,12 @@ msgid "Instrument the methods of entities on registration."
msgstr "Poinstruuj metody jednostkowe przy rejestracji."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Instrumentation"
-msgstr "Instrukcja"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr "Interwał zapisywania ważnych zmian w świecie, w sekundach."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "Interwał wysyłania czasu gry do klientów."
#: src/settings_translation_file.cpp
@@ -5376,6 +5466,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -5437,10 +5531,11 @@ msgid "Left key"
msgstr "W lewo"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"Długość interwału czasowego serwera w trakcie którego obiekty są ogólnie "
"aktualizowane \n"
@@ -5457,15 +5552,20 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr "Długość czasu pomiędzy wykonywanymi cyklami ABM"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "Długość czasu pomiędzy wykonywanymi cyklami NodeTimer"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "Czas pomiędzy cyklami zarządzania aktywnymi blokami"
#: src/settings_translation_file.cpp
@@ -5478,7 +5578,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Poziom logowania zapisywany do pliku debug.txt:\n"
"- <nic> (brak logowania)\n"
@@ -5518,6 +5619,11 @@ msgid "Light curve low gradient"
msgstr "Centrum środkowego przyśpieszenia krzywej światła"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Płynne oświetlenie"
+
+#: 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"
@@ -5675,31 +5781,29 @@ msgid "Map generation attributes specific to Mapgen v5."
msgstr "Właściwości generowania mapy określające Mapgen 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 ""
-"Globalne właściwości generowania map.\n"
-"W generatorze map v6 flaga \"decorations\" kontroluje wszystkie dekoracje\n"
-"z wyjątkiem drzew i trawy dżungli. we wszystkich innych generatorach flaga\n"
-"ta kontroluje wszystkie dekoracje.\n"
-"Flagi, które nie są wymienione w ciągu flagi nie są modyfikowane z "
-"domyślnych.\n"
-"Flagi rozpoczynające się od \"no\" są stosowane aby jawnie ją wyłączyć."
+"Atrybuty generowania map specyficzne dla Generatora map v6.\n"
+"Flaga „biomów śnieżnych†włącza nowy system 5 biomów.\n"
+"Gdy flaga „biomy śnieżne†jest włączona, dżungle są automatycznie włączane "
+"i\n"
+"flaga „dżungli†jest ignorowana."
#: 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 ""
-"Właściwości generowania mapy określające Mapgen v7.\n"
-"\"grzbiety\" aktywujÄ… rzeki."
+"Atrybuty generowania map specyficzne dla Generatora map v7.\n"
+"'grzbietyâ€: rzeki.\n"
+"'latajÄ…ce wyspy': unoszÄ…ce siÄ™ w atmosferze masy lÄ…dowe.\n"
+"'jaskinie': Gigantyczne jaskinie głęboko pod ziemią."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -5933,10 +6037,11 @@ msgid ""
"try reducing it, but don't reduce it to a number below double of targeted\n"
"client number."
msgstr ""
-"Maksymalna liczba pakietów przesyłanych podczas kroku, jeżeli masz wolne "
-"łącze\n"
-"spróbuj zredukować to, ale nie redukuj jej poniżej podwojonej liczby "
-"klientów."
+"Maksymalna liczba pakietów wysyłanych na krok wysyłania, jeśli masz wolne "
+"połączenie\n"
+"spróbuj go zmniejszyć, ale nie zmniejszaj go do liczby poniżej podwójnej "
+"liczby docelowej\n"
+"numer klienta."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5944,9 +6049,8 @@ msgid "Maximum number of players that can be connected simultaneously."
msgstr "Maksymalna liczba graczy, która może się jednocześnie połączyć."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum number of recent chat messages to show"
-msgstr "Maksymalna ilość, wczytanych wymuszeniem, bloków mapy."
+msgstr "Maksymalna liczba ostatnich wiadomości czatu do wyświetlenia"
#: src/settings_translation_file.cpp
msgid "Maximum number of statically stored objects in a block."
@@ -6001,10 +6105,6 @@ msgid "Maximum users"
msgstr "Maksymalna ilość użytkowników"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menu"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "Pamięć podręczna siatki"
@@ -6057,6 +6157,20 @@ msgid "Mipmapping"
msgstr "Mip-Mappowanie"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "Profiler"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Bezpieczeństwo"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "Kanały modów"
@@ -6159,10 +6273,6 @@ msgid "Near plane"
msgstr "Najbliższy wymiar"
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Sieć"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
@@ -6171,6 +6281,11 @@ msgstr ""
"Ta wartość będzie nadpisana gdy zaczynasz z menu głównego."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "Sieć"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Nowi użytkownicy muszą wpisać to hasło."
@@ -6183,6 +6298,11 @@ msgid "Noclip key"
msgstr "Klawisz trybu noclip"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Podświetlanie bloków"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Podświetlanie bloków"
@@ -6226,7 +6346,6 @@ msgstr ""
"'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"
@@ -6234,15 +6353,10 @@ msgid ""
msgstr ""
"Ilość dodatkowych bloków, które mogą zostać wczytane naraz przez /"
"clearobjects.\n"
-"To wymiana pomiędzy sqlite i\n"
+"Jest to kompromis między obciążeniem transakcji SQLite a\n"
"konsumpcją pamięci (4096=100MB, praktyczna zasada)."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Online Content Repository"
-msgstr "Repozytorium Zawartości z Sieci"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "Nieprzeźroczyste ciecze"
@@ -6261,7 +6375,8 @@ msgid ""
"open."
msgstr ""
"Otwórz menu pauzy, gdy okno jest nieaktywne. Nie zatrzymuje gry jeśli "
-"formspec jest otwarty."
+"formspec jest\n"
+"otwarty."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6269,18 +6384,14 @@ 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. 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."
+"Ścieżka czcionki zastępczej. Musi być czcionką TrueType.\n"
+"Ta czcionka będzie używana w niektórych językach lub jeśli domyślna czcionka "
+"jest niedostępna."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6307,28 +6418,20 @@ msgstr ""
"wyszukiwane z tej lokalizacji."
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"Ś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."
+"Ścieżka do domyślnej czcionki. Musi być czcionką TrueType.\n"
+"Czcionka rezerwowa zostanie użyta, jeśli nie można załadować czcionki."
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"Ś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."
+"Ścieżka do czcionki o stałej szerokości. Musi być czcionką TrueType.\n"
+"Ta czcionka jest używana np. w ekranie konsoli i profilera."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
@@ -6377,10 +6480,6 @@ msgstr ""
"Wymaga to przywileju \"fly\" na serwerze."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Nazwa gracza"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "Odległość przesyłania graczy"
@@ -6419,13 +6518,12 @@ msgstr ""
"wywoływanie komend powłoki."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Print the engine's profiling data in regular intervals (in seconds).\n"
"0 = disable. Useful for developers."
msgstr ""
-"Drukuj dane profilu silnika w regularnych interwałach (w sekundach) 0 = "
-"wyłączone. Przydatne dla deweloperów."
+"Drukuj dane profilu silnika w regularnych interwałach (w sekundach).\n"
+"0 = wyłączone. Przydatne dla deweloperów."
#: src/settings_translation_file.cpp
msgid "Privileges that players with basic_privs can grant"
@@ -6441,11 +6539,6 @@ msgstr "Klawisza przełączania profilera"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Profiling"
-msgstr "Profilowanie modyfikacji"
-
-#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Prometheus listener address"
msgstr "Adres słuchacza Prometheusa"
@@ -6477,9 +6570,8 @@ msgstr ""
"Wartości większe niż 26 skutkują ostrym odcięciem w rogach chmur."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Raises terrain to make valleys around the rivers."
-msgstr "Podwyższa teren by stworzyć doliny wokół rzek"
+msgstr "Podwyższa teren by stworzyć doliny wokół rzek."
#: src/settings_translation_file.cpp
msgid "Random input"
@@ -6523,6 +6615,7 @@ msgid "Report path"
msgstr "Ścieżka raportu"
#: src/settings_translation_file.cpp
+#, fuzzy
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"
@@ -6535,6 +6628,20 @@ msgid ""
"csm_restriction_noderange)\n"
"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
msgstr ""
+"Ogranicza dostęp do pewnych funkcji po stronie klienta na serwerach.\n"
+"Połącz poniższe flagi bajtów, aby ograniczyć funkcje po stronie klienta, lub "
+"ustaw na 0\n"
+"bez ograniczeń:\n"
+"LOAD_CLIENT_MODS: 1 (wyłączenie ładowania modów dostarczonych przez "
+"klienta)\n"
+"CHAT_MESSAGES: 2 (wyłączenie wywoływania send_chat_message po stronie "
+"klienta)\n"
+"READ_ITEMDEFS: 4 (wyłączenie wywoływania get_item_def po stronie klienta)\n"
+"READ_NODEDEFS: 8 (wyłączenie wywoływania get_node_def po stronie klienta)\n"
+"LOOKUP_NODES_LIMIT: 16 (ogranicza wywoływanie get_node po stronie klienta "
+"do\n"
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (wyłącza wywoływanie get_player_names po stronie klienta)"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6634,11 +6741,16 @@ msgid ""
"pixels when scaling down, at the cost of blurring some\n"
"edge pixels when images are scaled by non-integer sizes."
msgstr ""
-"Skaluj gui wartościami użytkownika.\n"
-"Użyj najbliższego filtru anty-alias, żeby przeskalować GUI.\n"
-"Wygładzi to niektóre poszarpane krawędzie oraz zmiesza piksele, podczas "
-"zmniejszenia skali, kosztem rozmazywania niektórych pikseli krawędziowych, "
-"gdy obrazy są skalowane niecałkowitym wartościami."
+"Skaluj GUI według wartości określonej przez użytkownika.\n"
+"Użyj najbliższego filtru anti-alias aby skalować GUI.\n"
+"Spowoduje to wygładzenie niektórych szorstkich krawędzi i wygładzenie\n"
+"pikseli przy zmniejszaniu, kosztem rozmycia niektórych\n"
+"piksele krawędzi, gdy obrazy są skalowane o rozmiary niecałkowite."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Ekran:"
#: src/settings_translation_file.cpp
msgid "Screen height"
@@ -6671,6 +6783,11 @@ msgstr ""
"0 to domyślna jakość."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Zrzut ekranu"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Szum dna morza"
@@ -6685,10 +6802,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Drugi z dwóch szumów 3D które razem określają tunele."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Bezpieczeństwo"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Sprawdź http://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6748,8 +6861,19 @@ msgstr ""
"18 = 4D \"Mandelbulb\" zbiór Julii."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Pojedynczy gracz"
+#, fuzzy
+msgid "Server"
+msgstr "Adres URL serwera"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Nazwa serwera"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Opis serwera"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6776,10 +6900,20 @@ msgid "Server side occlusion culling"
msgstr "Occulusion culling po stronie serwera"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Port Serwera"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "Lista publicznych serwerów"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "Lista publicznych serwerów"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Plik listy publicznych serwerów"
@@ -6792,14 +6926,17 @@ msgstr ""
"Wymagany restart po zmianie ustawienia."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
"Ustaw maksymalny ciąg znaków wiadomości czatu wysyłanych przez klientów."
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
"Ustaw siłę cienia.\n"
@@ -6811,7 +6948,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
"Ustaw rozmiar zasięgu gładkiego cienia.\n"
"Niższe wartości oznaczają ostrzejsze cienie, wyższe wartości oznaczają "
@@ -6888,8 +7025,9 @@ msgid ""
"This only works with the OpenGL video backend."
msgstr ""
"Shadery pozwalają na zaawansowane efekty wizualne, mogą również zwiększyć "
-"wydajność niektórych kart graficznych.\n"
-"Działa tylko na grafice OpenGL ."
+"wydajność niektórych kart\n"
+"graficznych.\n"
+"Działa tylko z zapleczem wideo OpenGL ."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6920,7 +7058,7 @@ msgstr "Offset cienia czcionki, jeżeli 0 to cień nie będzie rysowany."
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr "Siła cienia"
#: src/settings_translation_file.cpp
@@ -6962,6 +7100,13 @@ msgid ""
"Altering this value is for special usage, leaving it unchanged is\n"
"recommended."
msgstr ""
+"Rozmiar mapchunków generowanych przez mapgen, podany w mapblockach (16 "
+"węzłów).\n"
+"UWAGA!: Nie ma z tego żadnego pożytku, ale występuje kilka zagrożeń, przy\n"
+"zwiększaniu tej wartości powyżej 5.\n"
+"Zmniejszenie tej wartości podnosi gęstość jaskiń i lochów.\n"
+"Zmiana tej wartości ma specjalne zastosowanie, zalecane jest pozostawienie\n"
+"jej nietkniętą."
#: src/settings_translation_file.cpp
msgid ""
@@ -6969,12 +7114,14 @@ msgid ""
"increase the cache hit %, reducing the data being copied from the main\n"
"thread, thus reducing jitter."
msgstr ""
-"Rozmiar pamięci bloków mapy generatora siatki. Zwiększenie zmieni rozmiar % "
-"pamięci, ograniczając dane kopiowane z głównego wątku oraz ilość drgań."
+"Rozmiar pamięci bloków mapy generatora siatki. Zwiększenie\n"
+"zmieni rozmiar % pamięci, ograniczając dane kopiowane z głównego wątku\n"
+"oraz ilość drgań."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Sky Body Orbit Tilt"
-msgstr ""
+msgstr "Pochylenie orbity ciała niebieskiego"
#: src/settings_translation_file.cpp
msgid "Slice w"
@@ -6986,12 +7133,14 @@ msgid "Slope and fill work together to modify the heights."
msgstr "Zbocze oraz wypełnienie działają razem, aby zmodyfikować wysokości."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Small cave maximum number"
-msgstr ""
+msgstr "Maksymalna ilość małych jaskiń"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Small cave minimum number"
-msgstr ""
+msgstr "Minimalna ilość małych jaskiń"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
@@ -7064,6 +7213,9 @@ msgid ""
"Note that mods or games may explicitly set a stack for certain (or all) "
"items."
msgstr ""
+"Określa domyślny rozmiar stosu węzłów, elementów i narzędzi.\n"
+"Pamiętaj, że mody lub gry mogą jawnie ustawiać stos dla niektórych (lub "
+"wszystkich) przedmiotów."
#: src/settings_translation_file.cpp
msgid ""
@@ -7072,15 +7224,19 @@ msgid ""
"will consume more resources.\n"
"Minimum value: 1; maximum value: 16"
msgstr ""
+"Rozszerz pełną aktualizację mapy cieni na określoną ilość klatek.\n"
+"Wyższe wartości mogą sprawić, że cienie będą lagować,\n"
+"niższe wartości powodują zużycie większej ilości zasobów.\n"
+"Minimalna wartość: 1; maksymalna wartość: 16"
#: 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 ""
"Rozrzut przyśpieszenia środkowego krzywej światła.\n"
+"Steruje szerokością zakresu, który ma być wzmocniony.\n"
"Standardowe zniekształcenie gaussowego przyśpieszenia środkowego."
#: src/settings_translation_file.cpp
@@ -7112,6 +7268,9 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
+"Siła podbicia krzywej świetlnej.\n"
+"3 parametry 'boost' definiują zakres krzywej świetlnej\n"
+"który jest wzmacniany pod względem jasności."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -7135,6 +7294,21 @@ msgid ""
"server-intensive extreme water flow and to avoid vast flooding of the\n"
"world surface below."
msgstr ""
+"Poziom powierzchni opcjonalnej wody umieszczonej na stałej warstwie terenu "
+"pływającego.\n"
+"Woda domyślnie jest wyłączona i zostanie umieszczona tylko wtedy, gdy "
+"wartość ta jest ustawiona\n"
+"powyżej 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (początek\n"
+"górnego zwężenia).\n"
+"***OSTRZEŻENIE, POTENCJALNE ZAGROŻENIE DLA ŚWIATÓW I WYDAJNOŚCI "
+"SERWERÓW***:\n"
+"Przy włączonym umieszczaniu wody, tereny pływające muszą być ustawione i "
+"przetestowane\n"
+"oraz być warstwą stałą poprzez ustawienie 'mgv7_floatland_density' na 2.0 "
+"(lub innej\n"
+"wymaganej wartości w zależności od 'mgv7_np_floatland'), \n"
+"aby uniknąć intensywnego przepływu wody na serwerze oraz ogromnego zalania\n"
+"powierzchni świata poniżej."
#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
@@ -7146,6 +7320,11 @@ msgstr "Zmienność temperatury biomów."
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Temporary Settings"
+msgstr "Ustawienia"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Terrain alternative noise"
msgstr "Szum wysokości terenu"
@@ -7194,13 +7373,18 @@ msgid "Texture path"
msgstr "Paczki tekstur"
#: 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 ""
+"Rozmiar tekstury, na której ma być renderowana mapa cieni.\n"
+"Wartość musi być potęgą dwójki.\n"
+"Większe liczby tworzą lepsze cienie, ale jest to również kosztowniejsze."
#: src/settings_translation_file.cpp
+#, fuzzy
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"
@@ -7209,6 +7393,15 @@ msgid ""
"this option allows enforcing it for certain node types. Note though that\n"
"that is considered EXPERIMENTAL and may not work properly."
msgstr ""
+"Tekstury na węźle mogą być dopasowane albo do niego albo do świata.\n"
+"Ten pierwszy tryb bardziej pasuje do rzeczy takich jak maszyny, meble, itp.\n"
+"ten drugi sprawia, że schody i mikrobloki lepiej komponują się z "
+"otoczeniem.\n"
+"Z uwagi na to, że ta możliwość jest nowa, nie może być wykorzystywana przez "
+"starsze serwery,\n"
+"opcja ta pozwala na wymuszenie jej dla określonych typów węzłów. Zwróć "
+"uwagę, że\n"
+"to opcja EKSPERYMENTALNA i może nie działać zbyt poprawnie."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -7225,8 +7418,8 @@ msgid ""
"The default format in which profiles are being saved,\n"
"when calling `/profiler save [format]` without format."
msgstr ""
-"Domyślny format zapisu profili, gdy wpisujemy `/ profiler save [format]` bez "
-"określonego formatu."
+"Domyślny format w jakim są zapisywane profile,\n"
+"gdy wpisujemy `/ profiler save [format]` bez określonego formatu."
#: src/settings_translation_file.cpp
msgid "The depth of dirt or other biome filler node."
@@ -7249,6 +7442,7 @@ msgstr ""
"Długość w pikselach wymagana do wejścia w interakcję z ekranem dotykowym."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The maximum height of the surface of waving liquids.\n"
"4.0 = Wave height is two nodes.\n"
@@ -7256,6 +7450,11 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Maksymalna wysokość powierzchni falujących cieczy.\n"
+"4,0 = wysokość fali wynosi dwa węzły.\n"
+"0.0 = Fala w ogóle się nie porusza.\n"
+"Wartość domyślna to 1.0 (1/2 węzła).\n"
+"Wymaga włączenia falujących cieczy."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
@@ -7279,6 +7478,12 @@ msgid ""
"maintained.\n"
"This should be configured together with active_object_send_range_blocks."
msgstr ""
+"Promień objętości bloków wokół każdego gracza, który podlega\n"
+"aktywne bloki, określone w mapblocks (16 węzłów).\n"
+"W aktywnych blokach ładowane są obiekty i uruchamiane ABM.\n"
+"Jest to również minimalny zakres, w którym utrzymywane są obiekty aktywne "
+"(moby).\n"
+"Należy to skonfigurować razem z active_object_send_range_blocks."
#: src/settings_translation_file.cpp
msgid ""
@@ -7289,13 +7494,21 @@ msgid ""
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
+"Zaplecze renderowania.\n"
+"Po zmianie wymagane jest ponowne uruchomienie.\n"
+"Uwaga: w Androidzie trzymaj się OGLES1, jeśli nie masz pewności! W "
+"przeciwnym razie aplikacja może się nie uruchomić.\n"
+"Na innych platformach zalecany jest OpenGL.\n"
+"Shadery są obsługiwane przez OpenGL (tylko komputery stacjonarne) i OGLES2 "
+"(eksperymentalne)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
"in-game view frustum around."
-msgstr "Czułość osi joysticka, wpływa na drgania widoku."
+msgstr ""
+"Czułość osi joysticka, wpływa na poruszanie się\n"
+"widoku dookoła."
#: src/settings_translation_file.cpp
msgid ""
@@ -7307,7 +7520,8 @@ msgstr ""
"Siła(ciemność) ambient-occlusion shading bloków.\n"
"Niższa wartość to więcej ciemności, a wyższa wartość to więcej światła.\n"
"Dozwolona wartość obejmuje przedział od 0,25 do 4,0 włącznie. Jeśli wybrana "
-"wartość jest z poza skali to zostanie zmieniona na najbliższą prawidłową."
+"wartość jest z poza skali to\n"
+"zostanie zmieniona na najbliższą prawidłową."
#: src/settings_translation_file.cpp
msgid ""
@@ -7315,32 +7529,35 @@ 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 ""
-"Czas (w sekundach) po którym następuje próba zmniejszenia rozmiaru kolejki "
-"cieczy przez jej usunięcie. Do tego czasu kolejka może urosnąć ponad "
-"pojemność przetwarzania. Wartość 0 wyłącza tą funkcjonalność."
+"Czas (w sekundach), przez który kolejka płynów może wyrosnąć poza "
+"przetwarzanie\n"
+"pojemności do momentu podjęcia próby zmniejszenia jej rozmiaru poprzez "
+"zrzucenie starej kolejki\n"
+"przedmiotów. Wartość 0 wyłącza funkcjonalność."
#: 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 ""
+"Budżet czasu, jaki ABM mógł wykonać na każdym kroku\n"
+"(jako ułamek interwału ABM)"
#: src/settings_translation_file.cpp
msgid ""
"The time in seconds it takes between repeated events\n"
"when holding down a joystick button combination."
msgstr ""
-"Czas między powtarzanymi zdarzeniami, gdy wciskamy kombinację klawiszy "
-"joysticka."
+"Czas w sekundach jest brany między powtarzającymi się zdarzeniami\n"
+"kiedy przytrzymuje się kombinację przycisków joysticka."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
-"Czas, wyrażany w sekundach,pomiędzy powtarzanymi kliknięciami prawego "
-"przycisku myszy."
+"Czas w sekundach między kolejnymi położeniem węzłów po przytrzymaniu\n"
+"przycisku umieszczania.."
#: src/settings_translation_file.cpp
msgid "The type of joystick"
@@ -7352,6 +7569,11 @@ msgid ""
"enabled. Also the vertical distance over which humidity drops by 10 if\n"
"'altitude_dry' is enabled."
msgstr ""
+"Odległość w pionie, powyżej której ciepło spada o 20, jeśli funkcja "
+"„altitude_chill†jest\n"
+"włączona. Również odległość w pionie, na której wilgotność spada o 10, "
+"jeśli\n"
+"„altitude_dry†jest włączony."
#: src/settings_translation_file.cpp
msgid "Third of 4 2D noises that together define hill/mountain range height."
@@ -7380,7 +7602,8 @@ msgid "Time speed"
msgstr "Szybkość upływu czasu"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
"Przekroczono czas oczekiwania usuwania z pamięci danych nieużywanych map "
"klienta."
@@ -7409,7 +7632,16 @@ msgid "Touch screen threshold"
msgstr "Próg ekranu dotykowego"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Próg ekranu dotykowego"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
+msgstr "Kompromisy dla wydajności"
+
+#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
msgstr ""
#: src/settings_translation_file.cpp
@@ -7512,12 +7744,24 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"Użyj wielopróbkowego antyaliasingu (MSAA), aby wygładzić krawędzie bloków.\n"
+"Algorytm ten wygładza widok 3D, zachowując jednocześnie ostrość obrazu,\n"
+"ale nie wpływa na wnętrze tekstur\n"
+"(co jest szczególnie widoczne w przypadku przezroczystych tekstur).\n"
+"Widoczne odstępy pojawiają się między węzłami, gdy moduły cieniujące są "
+"wyłączone.\n"
+"Jeśli jest ustawiony na 0, MSAA jest wyłączone.\n"
+"Po zmianie tej opcji wymagane jest ponowne uruchomienie."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
msgstr "Użyj filtrowania tri-linearnego podczas skalowania tekstur."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7633,7 +7877,6 @@ msgstr ""
"Wymaga włączenia shaderów."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"W coordinate of the generated 3D slice of a 4D fractal.\n"
"Determines which 3D slice of the 4D shape is generated.\n"
@@ -7641,10 +7884,11 @@ msgid ""
"Has no effect on 3D fractals.\n"
"Range roughly -2 to 2."
msgstr ""
-"Koordynat W generowanej części 3D z fraktala 4D.\n"
-"Określa która część 3D ma być wygenerowana z 4D.\n"
-"Nie działa na fraktale 3D.\n"
-"Jego zakres jest od -2 do 2"
+"Współrzędna W wygenerowanego wycinka 3D fraktala 4D.\n"
+"Określa, który wycinek 3D kształtu 4D jest generowany.\n"
+"Zmienia kształt fraktala.\n"
+"Nie ma wpływu na fraktale 3D.\n"
+"Zasięg około -2 do 2."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -7713,9 +7957,9 @@ msgid ""
"filtered in software, but some images are generated directly\n"
"to hardware (e.g. render-to-texture for nodes in inventory)."
msgstr ""
-"Gdy gui_scaling_filter jest aktywny to wszystkie obrazy muszą być filtrowane "
-"przez Minetest, ale niektóre są generowane bezpośrednio na sprzęt ( np. "
-"renderuj tekstury do bloków inwentarza)."
+"Gdy gui_scaling_filter jest aktywny to wszystkie obrazy muszą być\n"
+"filtrowane w oprogramowaniu, ale niektóre są generowane bezpośrednio na\n"
+"sprzęt ( np. renderuj tekstury do bloków ekwipunku)."
#: src/settings_translation_file.cpp
msgid ""
@@ -7760,6 +8004,8 @@ msgid ""
"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
+"Czy tła tagów nazw mają być domyślnie pokazywane.\n"
+"Mody mogą nadal tworzyć tło."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -7796,6 +8042,20 @@ msgid ""
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
+"Czy wyciszyć dźwięki. Dźwięki można wyłączyć w dowolnym momencie, chyba że\n"
+"system dźwiękowy jest wyłączony (enable_sound=false).\n"
+"W grze możesz przełączać stan wyciszenia za pomocą klawisza wyciszania lub "
+"używając\n"
+"menu pauzy."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -7843,6 +8103,13 @@ msgid ""
"See also texture_min_size.\n"
"Warning: This option is EXPERIMENTAL!"
msgstr ""
+"Tekstury wyrównane do świata mogą być skalowane tak, aby obejmowały kilka "
+"węzłów. Jednakże,\n"
+"serwer może nie wysłać żądanej wagi, zwłaszcza jeśli używasz\n"
+"specjalnie zaprojektowany pakiet tekstur; z tą opcją klient próbuje\n"
+"automatycznie określić skalę na podstawie rozmiaru tekstury.\n"
+"Zobacz także texture_min_size.\n"
+"Ostrzeżenie: ta opcja jest EKSPERYMENTALNA!"
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
@@ -7877,6 +8144,11 @@ 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 ""
+"Odległość Y, na której pływające tereny zwężają się od pełnej gęstości do "
+"zera.\n"
+"Zbieżność rozpoczyna się w tej odległości od granicy Y.\n"
+"W przypadku litej warstwy pływów kontroluje wysokość wzgórz/gór.\n"
+"Musi być mniejsza lub równa połowie odległości między granicami Y."
#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
@@ -7899,6 +8171,10 @@ msgid "Y-level of seabed."
msgstr "Wysokość dna jezior."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL przekroczono limit pobierania pliku"
@@ -7947,6 +8223,9 @@ msgstr "Limit równoległy cURL"
#~ msgid "Back"
#~ msgstr "Backspace"
+#~ msgid "Basic"
+#~ msgstr "Podstawowy"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Bity na piksel (głębia koloru) w trybie pełnoekranowym."
@@ -7979,6 +8258,12 @@ msgstr "Limit równoległy cURL"
#~ msgid "Configure"
#~ msgstr "Ustaw"
+#~ msgid "Connect"
+#~ msgstr "Połącz"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Wpływa na prędkość zanurzania w płynie."
+
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value."
@@ -8023,12 +8308,25 @@ msgstr "Limit równoległy cURL"
#~ "Definiuje krok próbkowania tekstury.\n"
#~ "Wyższa wartość reprezentuje łagodniejszą mapę normalnych."
+#~ msgid "Del. Favorite"
+#~ msgstr "Usuń ulubiony"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Pobierz tryb gry, taki jak Minetest Game, z minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "ÅšciÄ…gnij takÄ… z minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Pobieranie i instalowanie $1, proszÄ™ czekaj..."
#~ msgid "Enable VBO"
#~ msgstr "Włącz VBO"
+#, fuzzy
+#~ msgid "Enable register confirmation"
+#~ msgstr "Włącz potwierdzanie rejestracji"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -8057,6 +8355,9 @@ msgstr "Limit równoległy cURL"
#~ "Włącza mapowanie paralaksy.\n"
#~ "Wymaga włączenia shaderów."
+#~ msgid "Enter "
+#~ msgstr "Enter "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -8076,6 +8377,9 @@ msgstr "Limit równoległy cURL"
#~ msgid "Fallback font size"
#~ msgstr "Zastępczy rozmiar czcionki"
+#~ msgid "Filtering"
+#~ msgstr "Filtrowanie anizotropowe"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Podstawowy szum wysokości wznoszącego się terenu"
@@ -8091,6 +8395,9 @@ msgstr "Limit równoległy cURL"
#~ msgid "Full screen BPP"
#~ msgstr "Głębia koloru w trybie pełnoekranowym"
+#~ msgid "Game"
+#~ msgstr "Gra"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -8100,16 +8407,32 @@ msgstr "Limit równoległy cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Generuj mapy normalnych"
+#~ msgid "HUD scale factor"
+#~ msgstr "Współczynnik skalowania HUD"
+
#~ msgid "High-precision FPU"
#~ msgstr "FPU Wysokiej precyzji"
#~ msgid "IPv6 support."
#~ msgstr "Wsparcie IPv6."
+#~ msgid "In-Game"
+#~ msgstr "Gra"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Zainstaluj mod: plik: \"$1\""
#, fuzzy
+#~ msgid "Instrumentation"
+#~ msgstr "Instrukcja"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Zdefiniowane klawisze. (Jeżeli to menu nie działa, usuń skonfigurowane "
+#~ "klawisze z pliku minetest.conf)"
+
+#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "Głębia dużej jaskini"
@@ -8130,6 +8453,9 @@ msgstr "Limit równoległy cURL"
#~ msgstr ""
#~ "Sprawia, że DirectX działa z LuaJIT. Wyłącz jeśli występują kłopoty."
+#~ msgid "Menus"
+#~ msgstr "Menu"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Minimapa w trybie radaru, Zoom x2"
@@ -8198,6 +8524,13 @@ msgstr "Limit równoległy cURL"
#~ msgid "Path to save screenshots at."
#~ msgstr "Ścieżka, pod którą zapisywane są zrzuty ekranu."
+#~ msgid "Player name"
+#~ msgstr "Nazwa gracza"
+
+#, fuzzy
+#~ msgid "Profiling"
+#~ msgstr "Profilowanie modyfikacji"
+
#~ msgid "Projecting dungeons"
#~ msgstr "Projekcja lochów"
@@ -8210,6 +8543,9 @@ msgstr "Limit równoległy cURL"
#~ msgid "Select Package File:"
#~ msgstr "Wybierz plik paczki:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Pojedynczy gracz"
+
#~ msgid "Shadow limit"
#~ msgstr "Limit cieni"
@@ -8286,6 +8622,22 @@ msgstr "Limit równoległy cURL"
#~ msgid "Yes"
#~ msgstr "Tak"
+#, 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 ""
+#~ "Próbujesz wejść na serwer \"%s\" o nazwie \"%2$s2\" po raz pierwszy . "
+#~ "Jeśli zdecydujesz się kontynuować na serwerze zostanie utworzone nowe "
+#~ "konto z Twoim danymi.\n"
+#~ "Wpisz ponownie hasło i wciśnij \"Zarejestruj się i Dołącz\" aby "
+#~ "potwierdzić utworzenie konta lub wciśnij \"Anuluj\" aby przerwać ten "
+#~ "proces."
+
#~ msgid "You died."
#~ msgstr "Umarłeś."
diff --git a/po/pt/minetest.po b/po/pt/minetest.po
index d403ad5d4..0a2341523 100644
--- a/po/pt/minetest.po
+++ b/po/pt/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Portuguese (Minetest)\n"
"Report-Msgid-Bugs-To: \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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-31 17:28+0000\n"
+"Last-Translator: Fábio Rodrigues Ribeiro <farribeiro@gmail.com>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/minetest/"
"minetest/pt/>\n"
"Language: pt\n"
@@ -12,7 +12,7 @@ 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.10.1\n"
+"X-Generator: Weblate 4.14-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -95,7 +95,7 @@ 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:"
+msgstr "Ocorreu um erro em um script Lua:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
@@ -111,7 +111,35 @@ msgstr "Reconectar"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
-msgstr "O servidor solicitou uma reconexão :"
+msgstr "O servidor solicitou uma reconexão:"
+
+#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr "Uma nova versão de $1 está disponível"
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr "Mods de cliente"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+"Versão instalada: $1\n"
+"Nova versão: $ 2\n"
+"Visite $3 para descobrir como obter a versão mais recente e manter-se "
+"atualizado com recursos e correções de bugs."
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr "Depois"
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr "Nunca"
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
@@ -126,6 +154,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "O servidor suporta versões de protocolo entre $1 e $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr "Visite o website"
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Nós suportamos apenas o protocolo versão $1."
@@ -133,14 +165,21 @@ msgstr "Nós suportamos apenas o protocolo versão $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Nós suportamos as versões de protocolo entre $1 e $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr "(Ativado, tem erro)"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+msgstr "(Insatisfeito)"
+
#: 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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Cancelar"
@@ -280,7 +319,6 @@ msgid "Failed to download $1"
msgstr "Falhou em descarregar $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Jogos"
@@ -301,7 +339,6 @@ 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"
@@ -394,12 +431,8 @@ msgid "Decorations"
msgstr "Decorações"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Baixe um jogo, como Minetest Game, do site minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Descarregue um do site minetest.net"
+msgid "Development Test is meant for developers."
+msgstr "O Development Test destina-se apenas a programadores."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -417,10 +450,6 @@ msgstr "Terrenos flutuantes no céu"
msgid "Floatlands (experimental)"
msgstr "Terrenos flutuantes (experimental)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Jogo"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Gerar terreno não-fractal: Oceanos e subsolo"
@@ -438,6 +467,14 @@ msgid "Increases humidity around rivers"
msgstr "Aumenta a humidade perto de rios"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr "Instalar um jogo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr "Instalar outro jogo"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Lagos"
@@ -539,10 +576,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Cavernas bastante profundas"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Aviso: O Development Test destina-se apenas a programadores."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Nome do mundo"
@@ -572,6 +605,36 @@ msgstr "pkgmgr: caminho inválido \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Eliminar mundo \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Confirmar palavra-passe"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr "Juntando-se a $1"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr "Nome em falta"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Nome"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Palavra-passe"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr "As senhas não coincidem"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr "Registe-se"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Aceitar"
@@ -604,6 +667,14 @@ msgstr "< Voltar para as definições"
msgid "Browse"
msgstr "Navegar"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr "Conteúdo: Jogos"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr "Conteúdo: Mods"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Desativado"
@@ -660,7 +731,7 @@ msgstr "Selecione o diretório"
msgid "Select file"
msgstr "Selecione o ficheiro"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Mostrar nomes técnicos"
@@ -773,8 +844,8 @@ msgstr "A lista de servidores públicos está desativada"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-"Tente recarregar a lista de servidores públicos e verifique a sua ligação à "
-"internet."
+"Tente reativar a lista de servidores públicos e verifique sua conexão com a "
+"Internet."
#: builtin/mainmenu/tab_about.lua
msgid "About"
@@ -812,6 +883,10 @@ msgstr "Antigos Contribuidores"
msgid "Previous Core Developers"
msgstr "Desenvolvedores principais anteriores"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr "Compartilhar log de depuração"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Procurar conteúdo online"
@@ -880,10 +955,6 @@ msgstr "Servidor"
msgid "Install games from ContentDB"
msgstr "Instalar jogos do ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Nome"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Novo"
@@ -892,10 +963,6 @@ msgstr "Novo"
msgid "No world created or selected!"
msgstr "Nenhum mundo criado ou seleccionado!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Palavra-passe"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Jogar Jogo"
@@ -929,10 +996,6 @@ msgid "Clear"
msgstr "Limpar"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Ligar"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Modo Criativo"
@@ -942,10 +1005,6 @@ msgid "Damage / PvP"
msgstr "Dano / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Rem. Favorito"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Favoritos"
@@ -958,6 +1017,10 @@ msgid "Join Game"
msgstr "Juntar-se ao jogo"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr "Login"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -970,10 +1033,18 @@ msgid "Refresh"
msgstr "Atualizar"
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr "Remover favorito"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Descrição do servidor"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr "(Suporte de jogo necessário)"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1018,8 +1089,8 @@ msgid "Dynamic shadows"
msgstr "Sombras dinâmicas"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr "Sombras dinâmicas: "
+msgid "Dynamic shadows:"
+msgstr "Sombras dinâmicas:"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1059,7 +1130,7 @@ msgstr "Destaque dos Cubos"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
-msgstr "Destaque dos Cubos"
+msgstr "Destaque dos Nós"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
@@ -1074,8 +1145,9 @@ msgid "Opaque Water"
msgstr "Ãgua Opaca"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Particles"
-msgstr "Ativar Particulas"
+msgstr "Partículas"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
@@ -1114,15 +1186,15 @@ msgid "Tone Mapping"
msgstr "Mapeamento de tons"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr "Nível de sensibilidade ao toque (px)"
+msgid "Touch threshold (px):"
+msgstr "Nível de sensibilidade ao toque (px):"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
msgstr "Filtro trilinear"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr "Muito Alto"
#: builtin/mainmenu/tab_settings.lua
@@ -1141,6 +1213,10 @@ msgstr "Líquidos ondulantes"
msgid "Waving Plants"
msgstr "Plantas ondulantes"
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr "Conexão abortada (erro de protocolo?)."
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Erro de ligação (tempo excedido)."
@@ -1276,8 +1352,8 @@ 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 ""
+msgid "Can't show block bounds (disabled by mod or game)"
+msgstr "Não é possível mostrar limites de bloco (desativado por mod ou jogo)"
#: src/client/game.cpp
msgid "Change Password"
@@ -1406,6 +1482,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Alcance de visualização ilimitado ativado"
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr "A criar cliente: %s"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Sair para o Menu"
@@ -1910,30 +1991,6 @@ msgstr "Falha ao abrir página da web"
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!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Registrar e entrar"
-
-#: 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 ""
-"Está prestes a entrar neste servidor com o nome \"%s\" pela primeira vez.\n"
-"Se prosseguir, uma nova conta usando suas credenciais será criada neste "
-"servidor.\n"
-"Por favor, digite novamente a sua palavra-passe e clique em 'Registrar e se "
-"cadastrar' para confirmar a criação da conta ou clique em 'Cancelar' para "
-"cancelar."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Continuar"
@@ -1966,7 +2023,7 @@ msgstr "Limites de bloco"
msgid "Change camera"
msgstr "Mudar camera"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Chat"
@@ -2019,8 +2076,8 @@ msgid "Key already in use"
msgstr "Tecla já em uso"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "Teclas. (Se este menu se estragar, remova as linhas do minetest.conf)"
+msgid "Keybindings."
+msgstr "Combinações de teclas."
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2091,10 +2148,6 @@ msgid "Change"
msgstr "Mudar"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Confirmar palavra-passe"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Palavra-passe nova"
@@ -2102,6 +2155,10 @@ msgstr "Palavra-passe nova"
msgid "Old Password"
msgstr "Palavra-passe antiga"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "As palavra-passes não correspondem!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Sair"
@@ -2115,12 +2172,6 @@ msgstr "Mutado"
msgid "Sound Volume: %d%%"
msgstr "Volume do som: %d%%"
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Enter "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2128,6 +2179,18 @@ msgstr "Enter "
msgid "LANG_CODE"
msgstr "pt"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+"O nome não está registrado. Para criar uma conta neste servidor, clique em "
+"'Registrar'"
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "O nome foi tomado. Por favor, escolha outro nome"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2294,6 +2357,10 @@ msgstr ""
"Note que o modo interlaçado requer que sombreamentos estejam ativados."
#: src/settings_translation_file.cpp
+msgid "3d"
+msgstr "3d"
+
+#: 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."
@@ -2393,6 +2460,10 @@ msgstr ""
"para ter certeza) cria uma camada sólida de terrenos flutuantes."
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr "Nome do administrador"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avançado"
@@ -2411,8 +2482,8 @@ msgstr ""
"tem muito pouco efeito na luz natural da noite."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
-msgstr "Sempre voar e correr"
+msgid "Always fly fast"
+msgstr "Sempre voe rápido"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
@@ -2493,6 +2564,10 @@ msgstr ""
"Especificado em barreiras do mapa (16 nós)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr "Ãudio"
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Tecla para frente automática"
@@ -2533,10 +2608,6 @@ msgid "Base terrain height."
msgstr "Altura base do terreno."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Básico"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Privilégios básicos"
@@ -2557,8 +2628,8 @@ msgid "Bind address"
msgstr "Endereço de bind"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
-msgstr "Temperatura da API Biome e parâmetros de ruído de humidade"
+msgid "Biome API noise parameters"
+msgstr "Parâmetros de ruído da API do bioma"
#: src/settings_translation_file.cpp
msgid "Biome noise"
@@ -2569,6 +2640,10 @@ msgid "Block send optimize distance"
msgstr "Distância otimizada de envio de bloco"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Caminho de fonte para negrito e itálico"
@@ -2593,6 +2668,10 @@ msgid "Builtin"
msgstr "Integrado"
#: src/settings_translation_file.cpp
+msgid "Camera"
+msgstr "Câmera"
+
+#: 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"
@@ -2757,6 +2836,10 @@ msgid "Client side node lookup range restriction"
msgstr "Restrição do alcançe da visão superior de nós no lado do cliente"
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr "Modding do lado do cliente"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Velocidade de escalada"
@@ -2797,10 +2880,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 Free Software Foundation.\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 ""
@@ -2826,7 +2910,6 @@ 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"
@@ -2836,9 +2919,8 @@ 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)"
+"9 - Melhor compressão; o mais devagar (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 ""
@@ -2850,9 +2932,8 @@ 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)"
+"9 - Melhor compressão; o mais devagar (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"
@@ -2879,6 +2960,10 @@ msgid "Console height"
msgstr "Tecla da consola"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr "Repositório de conteúdo"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "Lista negra de flags do ContentDB"
@@ -2918,8 +3003,13 @@ msgstr ""
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = Dia/noite permanece inalterado."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Controla a velocidade de afundamento em líquido."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
+"Controla a velocidade de afundamento em líquido quando em marcha lenta. "
+"Valores negativos causarão\n"
+"você a subir em vez disso."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2992,12 +3082,12 @@ msgid "Debug log level"
msgstr "Nível de log de depuração"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Tecla de dimin. de som"
+msgid "Debugging"
+msgstr "Debugging"
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Diminuir isto para aumentar a resistência do líquido ao movimento."
+msgid "Dec. volume key"
+msgstr "Tecla de dimin. de som"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3157,6 +3247,10 @@ msgid "Desynchronize block animation"
msgstr "Dessincroniza animação de blocos"
#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr "Opções de desenvolvedor"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Tecla para escavar"
@@ -3174,6 +3268,12 @@ msgstr "Não permitir palavra-passes vazias"
#: src/settings_translation_file.cpp
msgid "Display Density Scaling Factor"
+msgstr "Fator de escala de densidade de exibição"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3256,6 +3356,10 @@ msgid "Enable joysticks"
msgstr "Ativar Joysticks"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Ativar suporte a canais de módulos."
@@ -3272,18 +3376,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Ativa a entrada de comandos aleatória (apenas usado para testes)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-msgstr "Ativar registo de confirmação"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
-msgstr ""
-"Ativar confirmação de registo quando conectar ao servidor.\n"
-"Caso desativado, uma nova conta será registada automaticamente."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3292,6 +3384,10 @@ msgstr ""
"Desativar para velocidade ou vistas diferentes."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3339,8 +3435,9 @@ msgid ""
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
-"Ativar/desativar a execução de um servidor de IPv6. \n"
-"Ignorado se bind_address estiver definido."
+"Ativar/desativar a execução de um servidor IPv6.\n"
+"Ignorado se bind_address estiver definido.\n"
+"Necessita de habilitar_ipv6."
#: src/settings_translation_file.cpp
msgid ""
@@ -3387,6 +3484,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr "Perfil do motor"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Intervalo de exibição dos dados das analizes do motor"
@@ -3415,6 +3516,10 @@ msgstr ""
"terrenos flutuantes."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "FPS quando desfocado ou pausado"
@@ -3473,7 +3578,8 @@ msgid ""
"Multiplayer Tab."
msgstr ""
"Ficheiro 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"
@@ -3494,15 +3600,17 @@ msgid ""
"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 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\"."
+"Texturas filtradas podem misturar valores RGB com os vizinhos totalmente "
+"transparentes,\n"
+"o qual otimizadores PNG geralmente descartam, por vezes resultando numa "
+"linha escura ou\n"
+"em texturas transparentes. Aplique esse filtro para limpar isso no momento "
+"de carregamento\n"
+"da textura. Esse filtro será ativo automaticamente ao ativar \"mipmapping\"."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtros"
+msgid "Filtering and Antialiasing"
+msgstr "Filtragem e Antialiasing"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3570,6 +3678,10 @@ msgid "Fog toggle key"
msgstr "Tecla de ativar/desativar nevoeiro"
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr "Fonte"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Fonte em negrito por predefinição"
@@ -3594,14 +3706,13 @@ msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
-msgstr "Tamanho da fonte predefinida em pontos (pt)."
+msgstr "Tamanho da fonte padrão onde 1 unidade = 1 pixel a 96 DPI"
#: src/settings_translation_file.cpp
-#, 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)."
+msgstr ""
+"Tamanho da fonte da fonte monoespaçada onde 1 unidade = 1 pixel a 96 DPI"
#: src/settings_translation_file.cpp
msgid ""
@@ -3647,15 +3758,15 @@ msgstr "Opacidade de fundo padrão do formspec"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Color"
-msgstr "Cor de fundo em ecrã cheio do formspec"
+msgstr "Cores de fundo de ecrã cheia de formspec"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Opacity"
-msgstr "Opacidade de fundo em ecrã cheio do formspec"
+msgstr "Opacidade de fundo de ecrã cheia do Formspec"
#: src/settings_translation_file.cpp
msgid "Formspec default background color (R,G,B)."
-msgstr "Cor de fundo(R,G,B) padrão do formspec padrão."
+msgstr "Cor de fundo padrão do Formspec (R,G,B)."
#: src/settings_translation_file.cpp
msgid "Formspec default background opacity (between 0 and 255)."
@@ -3708,11 +3819,13 @@ 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 ""
-"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 "
-"sevidor mantenha objetos ativos na distancia que o jogador está olhando."
-"(Isso pode evitar que mobs desapareçam da visão de repente)"
+"De quão longe clientes sabem sobre objetos declarados em mapblocks (16 nós)."
+"\n"
+"\n"
+"Configurando isto maior do que o alcance de bloco ativo vai fazer com que o "
+"servidor\n"
+"mantenha objetos ativos na distancia que o jogador\n"
+"está olhando.(Isso pode evitar que mobs desapareçam da visão de repente)"
#: src/settings_translation_file.cpp
msgid "Full screen"
@@ -3735,6 +3848,18 @@ msgid "GUI scaling filter txr2img"
msgstr "Filtro txr2img de redimensionamento do interface gráfico"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamepads"
+msgstr "Gamepads"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Chamadas de retorno Globais"
@@ -3771,6 +3896,14 @@ msgid "Graphics"
msgstr "Gráficos"
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr "Efeitos Gráficos"
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr "Gráficos e Ãudio"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Gravidade"
@@ -3787,8 +3920,12 @@ msgid "HTTP mods"
msgstr "Módulos HTTP"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "Fator de escalonamento do painel de interface"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
+msgstr "Dimensionamento do HUD"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -4048,12 +4185,22 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
-"A quantidade que o servidor vai esperar antes de descarregar mapblocks não "
-"utilizados.\n"
-"Valor maior é mais suave, mas irá usar mais memoria RAM."
+"Quanto tempo o servidor esperará antes de descarregar mapblocks não usados, "
+"declarados em segundos.\n"
+"O valor mais alto é mais suave, mas usará mais RAM."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+"O quanto se é atrasado ao mover-se dentro de um líquido.\n"
+"Diminua isto para aumentar a resistência do líquido ao movimento."
#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
@@ -4133,6 +4280,16 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Se ativado, o registro da conta será separado do login na interface do "
+"usuário.\n"
+"Se desativadas, novas contas serão registradas automaticamente ao fazer "
+"login."
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -4160,7 +4317,10 @@ msgstr ""
"quando a voar ou a nadar."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
"Se ativado, novos jogadores não podem entrar com uma palavra-passe vazia."
@@ -4217,10 +4377,6 @@ msgid "Ignore world errors"
msgstr "Ignorar erros do mundo"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "No jogo"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
"Valor alfa do fundo do console do bate-papo no jogo (opacidade, entre 0 e "
@@ -4253,9 +4409,8 @@ msgstr ""
"Isto é usualmente apenas nessesário por contribuidores core/builtin"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Instrument chat commands on registration."
-msgstr "Monitoração de comandos de chat quando registrados."
+msgstr "Comandos de chat de instrumentos no registro."
#: src/settings_translation_file.cpp
msgid ""
@@ -4282,18 +4437,15 @@ msgid "Instrument the methods of entities on registration."
msgstr "Monitorar os métodos das entidades durante a registração."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Monitorização"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""
"Intervalo para cada salvamento de alterações importantes no mundo, indicado "
"em segundos."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
-msgstr "Intervalo de envio de hora do dia para os clientes."
+msgid "Interval of sending time of day to clients, stated in seconds."
+msgstr ""
+"Intervalo de envio de hora do dia para os clientes, indicados em segundos."
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
@@ -4335,8 +4487,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."
@@ -4369,7 +4521,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"
+"Determinando o formato do fractal.\n"
"Não tem nenhum efeito em fractais 3D.\n"
"varia aproximadamente entre -2 e 2."
@@ -4393,8 +4546,9 @@ msgid ""
"Range roughly -2 to 2."
msgstr ""
"Apenas para configuração de Julia.\n"
-"Componente Y da constante hipercomplexa.\n"
-"Varia aproximadamente entre -2 e 2."
+"Componente em Y da constante hipercomplexa.\n"
+"Altera a forma do fractal.\n"
+"Alcance aproximado de -2 a 2."
#: src/settings_translation_file.cpp
msgid ""
@@ -5104,7 +5258,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Tecla para ativar/desativar a exibição do HUD.\n"
+"Tecla para ativar/desativar a a exibição do HUD.\n"
"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5114,8 +5268,8 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Tecla para ativar/desativar a exibição de informações de depuração.\n"
-"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"Tecla para ativar/desativar exibição do bate-papo.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
@@ -5150,6 +5304,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr "Expulsar jogadores que enviaram mais de X mensagem por 10 segundos."
@@ -5209,10 +5367,11 @@ msgstr "Tecla para a esquerda"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
-"Comprimento do tick do servidor e o intervalo no qual os objetos são "
-"geralmente atualizados em rede."
+"Duração de um tick do servidor e o intervalo no qual os objetos são "
+"geralmente atualizados ao longo\n"
+"rede, declarada em segundos."
#: src/settings_translation_file.cpp
msgid ""
@@ -5223,16 +5382,25 @@ msgstr ""
"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"
-msgstr "Período de tempo entre os ciclos de execução de ABMs"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
+msgstr ""
+"Duração do tempo entre ciclos de execução do Active Block Modifier (ABM), "
+"indicado em segundos."
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
-msgstr "Período de tempo entre ciclos de execução de NodeTimer"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
+msgstr ""
+"Duração do tempo entre ciclos de execução do NodeTimer, indicado em segundos."
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
-msgstr "Período de tempo entre os ciclos de gestão de blocos"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
+msgstr ""
+"Duração do tempo entre ciclos ativos de gestão de blocos, indicado em "
+"segundos."
#: src/settings_translation_file.cpp
msgid ""
@@ -5243,16 +5411,18 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
-"Nível de registo log a ser guardado em debug.txt:\n"
-"- <nothing> (nada registado)\n"
+"Nível de registro log a ser guardado em debug.txt:\n"
+"- <nothing> (nada registrado)\n"
"- none (mensagens sem nível de log)\n"
"- error\n"
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
#: src/settings_translation_file.cpp
msgid "Light curve boost"
@@ -5279,14 +5449,18 @@ msgid "Light curve low gradient"
msgstr "Gradiente baixo da curva de luz"
#: src/settings_translation_file.cpp
+msgid "Lighting"
+msgstr "Iluminação"
+
+#: 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 ""
-"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 ""
@@ -5460,9 +5634,8 @@ 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"
+msgstr "Quadros de atualização de sombras do mapa"
#: src/settings_translation_file.cpp
msgid "Mapblock limit"
@@ -5661,15 +5834,16 @@ msgstr ""
"Definido como -1 para quantidade ilimitada."
#: src/settings_translation_file.cpp
+#, fuzzy
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 ""
-"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."
+"Número máximo de pacotes enviados por etapa de envio, se tiver uma conexão "
+"lenta\n"
+"tente reduzi-lo, mas não o reduza para um número abaixo do dobro do alvo\n"
+"número de cliente."
#: src/settings_translation_file.cpp
msgid "Maximum number of players that can be connected simultaneously."
@@ -5732,10 +5906,6 @@ msgid "Maximum users"
msgstr "Limite de utilizadores"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Opções para menus"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "Cache de malha"
@@ -5786,6 +5956,18 @@ msgid "Mipmapping"
msgstr "Mapeamento MIP"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr "Mod Profiler"
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr "Segurança do Mod"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "Canais de mod"
@@ -5802,9 +5984,8 @@ 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"
+msgstr "Tamanho de letra monoespaçada divisível por"
#: src/settings_translation_file.cpp
msgid "Mountain height noise"
@@ -5885,10 +6066,6 @@ msgid "Near plane"
msgstr "Plano próximo"
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Rede"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
@@ -5897,6 +6074,10 @@ msgstr ""
"Esse valor será substituído se for definido a partir do menu principal."
#: src/settings_translation_file.cpp
+msgid "Networking"
+msgstr "Rede"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Novos jogadores precisam de introduzir esta palavra-passe."
@@ -5909,6 +6090,10 @@ msgid "Noclip key"
msgstr "Tecla Noclip"
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr "Nó e Entidade em Destaque"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Destacando cubos"
@@ -5964,10 +6149,6 @@ msgstr ""
"consumo de memória (4096 = 100 MB, como uma regra de ouro)."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Repositório de conteúdo online"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "Líquidos Opacos"
@@ -5983,25 +6164,22 @@ msgid ""
"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 de ligações do bate-papo."
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"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."
+"Caminho da fonte de fallback. Deve ser uma fonte TrueType.\n"
+"Essa fonte será usada para determinados idiomas ou se a fonte padrão não "
+"estiver disponível."
#: src/settings_translation_file.cpp
msgid ""
@@ -6026,28 +6204,20 @@ msgstr ""
"primeiro daqui."
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"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."
+"Caminho para a fonte padrão. Deve ser uma fonte TrueType.\n"
+"A fonte de fallback será usada se a fonte não puder ser carregada."
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"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."
+"Caminho para a fonte monoespaçada. Deve ser uma fonte TrueType.\n"
+"Esta fonte é usada para, por exemplo, a tela do console e do profiler."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
@@ -6091,10 +6261,6 @@ msgstr ""
"Isso requer o privilégio \"fly\" no servidor."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Nome do Jogador"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "Distância de transferência do jogador"
@@ -6133,8 +6299,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 = desativado. "
-"Útil para desenvolvedores."
+"Intervalo de impressão de dados do analisador (em segundos).\n"
+"0 = desativado. Útil para desenvolvedores."
#: src/settings_translation_file.cpp
msgid "Privileges that players with basic_privs can grant"
@@ -6149,10 +6315,6 @@ msgid "Profiler toggle key"
msgstr "Tecla de alternância do Analizador"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Analizando"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr "Endereço do Prometheus"
@@ -6240,12 +6402,13 @@ 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 (desativa o carregamento de mods de cliente)\n"
"CHAT_MESSAGES: 2 (desativa a chamada send_chat_message no lado do cliente)\n"
"READ_ITEMDEFS: 4 (desativa a chamada get_item_def no lado do cliente)\n"
"READ_NODEDEFS: 8 (desativa a chamada get_node_def no lado do cliente)\n"
-"LOOKUP_NODES_LIMIT: 16 (limita a chamada get_node no lado do cliente para "
+"LOOKUP_NODES_LIMIT: 16 (limita a chamada get_node no lado do cliente para\n"
"csm_restriction_noderange)\n"
"READ_PLAYERINFO: 32 (desativa a chamada get_player_names no lado do cliente)"
@@ -6344,6 +6507,11 @@ msgstr ""
"quando as imagens são dimensionadas em tamanhos não inteiros."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Ecrã"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Altura do ecrã"
@@ -6374,6 +6542,11 @@ msgstr ""
"Use 0 para qualidade padrão."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Captura de ecrã"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Ruído para cavernas #1"
@@ -6387,10 +6560,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Segundo de 2 ruídos 3D que juntos definem tunéis."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Segurança"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Consulte http://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6450,8 +6619,16 @@ msgstr ""
"18 = Conjunto de julia \"Bulbo de Mandelbrot\" 4D."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Servidor / Um jogador"
+msgid "Server"
+msgstr "Servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr "Jogabilidade do servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
+msgstr "Segurança do Servidor"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6478,10 +6655,18 @@ msgid "Server side occlusion culling"
msgstr "Separação de oclusão no lado do servidor"
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr "Desempenho do Servidor/Env"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "URL da lista de servidores"
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr "Lista de servidores e MOTD"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Ficheiro da lista de servidores"
@@ -6494,25 +6679,30 @@ msgstr ""
"Apos mudar isso uma reinicialização é necessária."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
-"Configura o tamanho máximo de caracteres de uma mensagem enviada por "
-"clientes."
+"Defina o comprimento máximo de uma mensagem de chat (em caracteres) enviada "
+"por clientes."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\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."
+"Coloque a força da sombra gama.\n"
+"Ajusta a intensidade das sombras dinâmicas no jogo.\n"
+"Valor mais baixo significa sombras mais claras, maior valor significa "
+"sombras mais escuras."
#: 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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
"Defina o tamanho do raio de sombras suaves.\n"
"Valores mais baixos significam sombras mais nítidas e valores altos sombras "
@@ -6583,7 +6773,8 @@ 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 placas de\n"
+"vídeo.\n"
"Só funcionam com o modo de vídeo OpenGL."
#: src/settings_translation_file.cpp
@@ -6611,8 +6802,8 @@ msgstr ""
"será desenhada."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
-msgstr "Força da sombra"
+msgid "Shadow strength gamma"
+msgstr "Força da sombra gamma"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6652,10 +6843,11 @@ msgid ""
"recommended."
msgstr ""
"Tamanho dos mapchunks gerados pelo gerador de mapa, em mapblocks(16 nós).\n"
-"ALERTA!: Não há benefício e existem diversos perigos em aumentar este valor "
-"acima de 5.\n"
+"ALERTA!: Não há benefício e existem diversos perigos em\n"
+"aumentar este valor acima de 5.\n"
"Reduzir este valor aumenta a densidade de dungeons e cavernas.\n"
-"Alterar este valor é para uso especial, é recomendado deixar inalterado."
+"Alterar este valor é para uso especial, é recomendado deixar\n"
+"inalterado."
#: src/settings_translation_file.cpp
msgid ""
@@ -6664,8 +6856,10 @@ 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, a reduzir os dados que são copiados "
-"do encadeamento principal, e assim reduz o jitter."
+"aumentará\n"
+"o percentual de hit do cache %, a reduzir os dados que são copiados do "
+"encadeamento principal,\n"
+"e assim reduz o jitter."
#: src/settings_translation_file.cpp
msgid "Sky Body Orbit Tilt"
@@ -6854,6 +7048,10 @@ msgid "Temperature variation for biomes."
msgstr "Variação de temperatura para biomas."
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr "Configurações Temporárias"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "Ruído alternativo do terreno"
@@ -6921,12 +7119,12 @@ msgid ""
"that is considered EXPERIMENTAL and may not work properly."
msgstr ""
"Texturas num nó podem ser alinhadas ao próprio nó ou ao mundo.\n"
-"O modo antigo serve melhor para coisas como maquinas, móveis, etc, enquanto "
+"O modo antigo serve melhor para coisas como maquinas, móveis, etc, enquanto\n"
"o novo faz com que escadas e microblocos encaixem melhor a sua volta.\n"
"Entretanto, como essa é uma possibilidade nova, não deve ser usada em "
-"servidores antigos, essa opção pode ser forçada para certos tipos de nós. "
-"Note que esta opção é considerada EXPERIMENTAL e pode não funcionar "
-"adequadamente."
+"servidores antigos,\n"
+"essa opção pode ser forçada para certos tipos de nós. Note que esta\n"
+"opção é considerada EXPERIMENTAL e pode não funcionar adequadamente."
#: src/settings_translation_file.cpp
msgid "The URL for the content repository"
@@ -7120,10 +7318,10 @@ msgid "Time speed"
msgstr "Velocidade de tempo"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
-"Tempo de espera para o cliente remover dados de mapa não utilizados da "
-"memória."
+"Tempo limite para o cliente remover dados de mapa não utilizados da memória, "
+"em segundos."
#: src/settings_translation_file.cpp
msgid ""
@@ -7149,10 +7347,18 @@ msgid "Touch screen threshold"
msgstr "Limiar o ecrã de toque"
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr "Tela sensível ao toque"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Ruido de árvores"
@@ -7230,15 +7436,14 @@ msgid "Use bilinear filtering when scaling textures."
msgstr "Usar filtragem bilinear ao dimensionamento de texturas."
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
"Usar mip mapping para escalar texturas. Pode aumentar a performance "
-"levemente, especialmente quando usando um pacote de texturas em alta "
-"resolução.\n"
+"levemente,\n"
+"especialmente quando usando um pacote de texturas em alta resolução.\n"
"O downscaling correto de gama não é suportado."
#: src/settings_translation_file.cpp
@@ -7267,6 +7472,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "Use a filtragem trilinear ao dimensionamento de texturas."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7389,6 +7598,7 @@ msgid ""
msgstr ""
"Coordenada W da fatia 3D gerada de um fractal 4D.\n"
"Determina qual fatia 3D da forma 4D é gerada.\n"
+"Altera a forma do fractal.\n"
"Não tem efeito sobre fractais 3D.\n"
"Varia aproximadamente de -2 a 2."
@@ -7469,7 +7679,6 @@ 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"
@@ -7487,10 +7696,10 @@ msgstr ""
"de nearest-neighbor para preservar os pixels nítidos. Isto define o tamanho\n"
"mínimo da textura para as texturas melhoradas; valores mais altos parecem\n"
"mais nítidos, mas requerem mais memória. Potências de 2 são recomendadas.\n"
-"Essa configuração superior a 1 pode não ter um efeito visível, a menos que "
-"a \n"
+"Essa configuração superior a 1 pode não ter um efeito visível, a menos que a "
+"\n"
"filtragem bilineares/trilinear/anisotrópica estejam habilitadas.\n"
-"Isso também é usado como tamanho base da textura para autoescalamento de "
+"Isso também é usado como tamanho base da textura para auto-escalamento de "
"texturas."
#: src/settings_translation_file.cpp
@@ -7546,6 +7755,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
"Se deve mostrar ao cliente informação de depuração (tem o mesmo efeito que "
@@ -7591,11 +7809,12 @@ msgid ""
"See also texture_min_size.\n"
"Warning: This option is EXPERIMENTAL!"
msgstr ""
-"Texturas alinhadas ao mundo podem ser escaladas em vários nós. Entretando, o "
-"servidor pode não enviar a escala desejada, especialmente se você usa um "
-"pacote de textura especialmente projetado; com está opção, o cliente tenta "
-"determinar a escala automaticamente baseado no tamanho da textura. Veja "
-"também texture_min_size.\n"
+"Texturas alinhadas ao mundo podem ser escaladas em vários nós. Entretanto,\n"
+"o servidor pode não enviar a escala desejada, especialmente se você usa\n"
+"um pacote de textura especialmente projetado; com está opção, o cliente "
+"tenta\n"
+"determinar a escala automaticamente baseado no tamanho da textura.\n"
+"Veja também texture_min_size.\n"
"Alerta: Esta opção é EXPERIMENTAL!"
#: src/settings_translation_file.cpp
@@ -7658,13 +7877,16 @@ msgid "Y-level of seabed."
msgstr "Nível Y do fundo do mar."
#: src/settings_translation_file.cpp
+msgid "cURL"
+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"
+msgstr "tempo limite interativo cURL"
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
@@ -7706,6 +7928,9 @@ msgstr "limite paralelo de cURL"
#~ msgid "Back"
#~ msgstr "Voltar"
+#~ msgid "Basic"
+#~ msgstr "Básico"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Bits por pixel (profundidade de cor) no modo de ecrã inteiro."
@@ -7739,6 +7964,12 @@ msgstr "limite paralelo de cURL"
#~ msgid "Configure"
#~ msgstr "Configurar"
+#~ msgid "Connect"
+#~ msgstr "Ligar"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Controla a velocidade de afundamento em líquido."
+
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value."
@@ -7782,6 +8013,9 @@ msgstr "limite paralelo de cURL"
#~ "Define nível de amostragem de textura.\n"
#~ "Um valor mais alto resulta em mapas normais mais suaves."
+#~ msgid "Del. Favorite"
+#~ msgstr "Rem. Favorito"
+
#~ msgid ""
#~ "Deprecated, define and locate cave liquids using biome definitions "
#~ "instead.\n"
@@ -7791,12 +8025,21 @@ msgstr "limite paralelo de cURL"
#~ "biomas.\n"
#~ "Y do limite superior de lava em grandes cavernas."
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Baixe um jogo, como Minetest Game, do site minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Descarregue um do site minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Descarregando e instalando $1, por favor aguarde..."
#~ msgid "Enable VBO"
#~ msgstr "Ativar VBO"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Ativar registo de confirmação"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7825,6 +8068,9 @@ msgstr "limite paralelo de cURL"
#~ "Ativa mapeamento de oclusão de paralaxe.\n"
#~ "Requer sombreadores ativados."
+#~ msgid "Enter "
+#~ msgstr "Enter "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7844,6 +8090,9 @@ msgstr "limite paralelo de cURL"
#~ msgid "Fallback font size"
#~ msgstr "Tamanho da fonte alternativa"
+#~ msgid "Filtering"
+#~ msgstr "Filtros"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Altura base de ruído de terra flutuante"
@@ -7862,6 +8111,9 @@ msgstr "limite paralelo de cURL"
#~ msgid "Full screen BPP"
#~ msgstr "BPP em ecrã inteiro"
+#~ msgid "Game"
+#~ msgstr "Jogo"
+
#~ msgid "Gamma"
#~ msgstr "Gama"
@@ -7871,15 +8123,29 @@ msgstr "limite paralelo de cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Gerar mapa de normais"
+#~ msgid "HUD scale factor"
+#~ msgstr "Fator de escalonamento do painel de interface"
+
#~ msgid "High-precision FPU"
#~ msgstr "FPU de alta precisão"
#~ msgid "IPv6 support."
#~ msgstr "Suporte IPv6."
+#~ msgid "In-Game"
+#~ msgstr "No jogo"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Instalar: ficheiro: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Monitorização"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Teclas. (Se este menu se estragar, remova as linhas do minetest.conf)"
+
#~ msgid "Lava depth"
#~ msgstr "Profundidade da lava"
@@ -7898,6 +8164,9 @@ msgstr "limite paralelo de cURL"
#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
#~ msgstr "Faz o DirectX trabalhar com LuaJIT. Desative se causa problemas."
+#~ msgid "Menus"
+#~ msgstr "Opções para menus"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Minimapa em modo radar, zoom 2x"
@@ -7971,6 +8240,12 @@ msgstr "limite paralelo de cURL"
#~ msgid "Path to save screenshots at."
#~ msgstr "Caminho para onde salvar screenshots."
+#~ msgid "Player name"
+#~ msgstr "Nome do Jogador"
+
+#~ msgid "Profiling"
+#~ msgstr "Analizando"
+
#~ msgid "Projecting dungeons"
#~ msgstr "Projetando dungeons"
@@ -7983,6 +8258,9 @@ msgstr "limite paralelo de cURL"
#~ msgid "Select Package File:"
#~ msgstr "Selecionar o ficheiro do pacote:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Servidor / Um jogador"
+
#~ msgid "Shadow limit"
#~ msgstr "Limite de mapblock"
@@ -8062,6 +8340,23 @@ msgstr "limite paralelo de cURL"
#~ msgid "Yes"
#~ msgstr "Sim"
+#, 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 ""
+#~ "Está prestes a entrar neste servidor com o nome \"%s\" pela primeira "
+#~ "vez.\n"
+#~ "Se prosseguir, uma nova conta usando suas credenciais será criada neste "
+#~ "servidor.\n"
+#~ "Por favor, digite novamente a sua palavra-passe e clique em 'Registrar e "
+#~ "se cadastrar' para confirmar a criação da conta ou clique em 'Cancelar' "
+#~ "para cancelar."
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "Você morreu"
diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po
index 58a980523..2b295d37a 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: 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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-06-12 18:17+0000\n"
+"Last-Translator: Igor Vinoski <igor.vinoski2@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"minetest/minetest/pt_BR/>\n"
"Language: pt_BR\n"
@@ -12,7 +12,7 @@ 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.10-dev\n"
+"X-Generator: Weblate 4.13-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -114,6 +114,31 @@ msgid "The server has requested a reconnect:"
msgstr "O servidor solicitou uma nova conexão:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Selecione Mods"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Versão do protocolo incompatível. "
@@ -126,6 +151,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "O servidor suporta versões de protocolo entre $1 e $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Nós só suportamos a versão do protocolo $1."
@@ -133,14 +162,21 @@ msgstr "Nós só suportamos a versão do protocolo $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Suportamos protocolos com versões entre $1 e $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Cancelar"
@@ -192,11 +228,11 @@ msgstr "Nenhuma descrição de jogo disponível."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr "Sem dependências"
+msgstr "Sem dependências rígidas"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "Nenhuma descrição de modpack disponível."
+msgstr "Nenhuma descrição do modpack fornecida."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
@@ -280,7 +316,6 @@ msgid "Failed to download $1"
msgstr "Falha ao baixar $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Jogos"
@@ -301,7 +336,6 @@ 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)"
@@ -394,12 +428,9 @@ msgid "Decorations"
msgstr "Decorações"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Baixe um jogo, como Minetest Game, do site minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Baixe um a partir do site minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Aviso: O jogo Development Test é projetado para desenvolvedores."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -417,10 +448,6 @@ msgstr "Ilhas flutuantes no céu"
msgid "Floatlands (experimental)"
msgstr "Ilhas flutuantes (experimental)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Jogo"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Gera terrenos não fractais: Oceanos e subterrâneos"
@@ -435,7 +462,16 @@ msgstr "Rios húmidos"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Increases humidity around rivers"
-msgstr "Aumenta a humidade perto de rios"
+msgstr "Aumenta a umidade perto de rios"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Instalar $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
@@ -539,10 +575,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Cavernas muito grandes nas profundezas do subsolo"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Aviso: O jogo Development Test é projetado para desenvolvedores."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Nome do mundo"
@@ -572,6 +604,39 @@ msgstr "pkgmgr: caminho inválido \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Excluir o mundo \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Confirmar a senha"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Nome do gerador de mundo"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Nome"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Senha"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "As senhas não correspondem!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Registrar e entrar"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Aceitar"
@@ -604,6 +669,16 @@ msgstr "< Voltar para as configurações"
msgid "Browse"
msgstr "Procurar"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Conteúdo"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Conteúdo"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Desabilitado"
@@ -660,7 +735,7 @@ msgstr "Selecione o diretório"
msgid "Select file"
msgstr "Selecione o arquivo"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Mostrar nomes técnicos"
@@ -811,6 +886,11 @@ msgstr "Colaboradores Anteriores"
msgid "Previous Core Developers"
msgstr "Desenvolvedores Principais Anteriores"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Mostrar informações de depuração"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Procurar conteúdo online"
@@ -879,10 +959,6 @@ msgstr "Hospedar Servidor"
msgid "Install games from ContentDB"
msgstr "Instalar jogos do ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Nome"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Novo"
@@ -891,10 +967,6 @@ msgstr "Novo"
msgid "No world created or selected!"
msgstr "Nenhum mundo criado ou selecionado!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Senha"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Jogar"
@@ -928,10 +1000,6 @@ msgid "Clear"
msgstr "Limpar"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Conectar"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Modo criativo"
@@ -941,10 +1009,6 @@ msgid "Damage / PvP"
msgstr "Dano / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Rem. Favorito"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Favoritos"
@@ -957,6 +1021,10 @@ msgid "Join Game"
msgstr "Entrar em um Jogo"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -969,10 +1037,19 @@ msgid "Refresh"
msgstr "Atualizar"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Porta remota"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Descrição do servidor"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1017,7 +1094,8 @@ msgid "Dynamic shadows"
msgstr "Sombras dinâmicas"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "Sombras dinâmicas: "
#: builtin/mainmenu/tab_settings.lua
@@ -1113,7 +1191,8 @@ msgid "Tone Mapping"
msgstr "Tone mapping"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "Nível de sensibilidade ao toque (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1121,7 +1200,8 @@ msgid "Trilinear Filter"
msgstr "Filtragem tri-linear"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+#, fuzzy
+msgid "Very High"
msgstr "Muito Alto"
#: builtin/mainmenu/tab_settings.lua
@@ -1140,6 +1220,11 @@ msgstr "Líquidos com ondas"
msgid "Waving Plants"
msgstr "Plantas balançam"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Erro de conexão (tempo excedido?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Erro de conexão (tempo excedido)."
@@ -1276,8 +1361,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)"
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
+"Não é possível mostrar limites de bloco (precisa do privilégio 'basic_debug')"
#: src/client/game.cpp
msgid "Change Password"
@@ -1406,6 +1493,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Alcance de visualização ilimitado habilitado"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Criando o cliente..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Sair para o menu"
@@ -1910,30 +2002,6 @@ msgstr "Falha ao abrir página da web"
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!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Registrar e entrar"
-
-#: 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 ""
-"Você está prestes a entrar no servidor com o nome \"%s\" pela primeira "
-"vez. \n"
-"Se continuar, uma nova conta usando suas credenciais será criada neste "
-"servidor.\n"
-"Por favor, confirme sua senha e clique em \"Registrar e Entrar\" para "
-"confirmar a criação da conta, ou clique em \"Cancelar\" para abortar."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Continuar"
@@ -1966,7 +2034,7 @@ msgstr "Limites de bloco"
msgid "Change camera"
msgstr "Mudar camera"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Bate-papo"
@@ -2019,10 +2087,8 @@ msgid "Key already in use"
msgstr "Essa tecla já está em uso"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Teclas (se este menu estiver com problema, remova itens do arquivo minetest."
-"conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2093,10 +2159,6 @@ msgid "Change"
msgstr "Alterar"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Confirmar a senha"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nova senha"
@@ -2104,6 +2166,10 @@ msgstr "Nova senha"
msgid "Old Password"
msgstr "Senha antiga"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "As senhas não correspondem!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Sair"
@@ -2117,12 +2183,6 @@ msgstr "Mutado"
msgid "Sound Volume: %d%%"
msgstr "Volume do som: %d%%"
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Entrar "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2130,6 +2190,16 @@ msgstr "Entrar "
msgid "LANG_CODE"
msgstr "pt_BR"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Por favor, escolha um nome!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2301,6 +2371,10 @@ msgstr ""
"Note que o modo interlaçado requer que o sombreamento esteja habilitado."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2400,6 +2474,11 @@ msgstr ""
"para ter certeza) cria uma camada sólida de ilhas flutuantes."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Concatenar nome do item"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avançado"
@@ -2415,11 +2494,12 @@ msgstr ""
"Valores altos tornam os níveis médios e baixos de luminosidade mais "
"brilhantes.\n"
"O valor '1.0' mantêm a curva de luz inalterada.\n"
-"Isto só tem um efeito significativo sobre a luz do dia e a luz \n"
+"Isto só tem um efeito significativo sobre a luz do dia e a luz\n"
"artificial, tem pouquíssimo efeito na luz natural da noite."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Sempre voar e correr"
#: src/settings_translation_file.cpp
@@ -2502,6 +2582,10 @@ msgstr ""
"Especificado em barreiras do mapa (16 nodes)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Tecla para frente automática"
@@ -2523,7 +2607,7 @@ msgstr "Modo de alto escalamento"
#: src/settings_translation_file.cpp
msgid "Aux1 key"
-msgstr "Tecla especial"
+msgstr "Tecla Aux1"
#: src/settings_translation_file.cpp
msgid "Aux1 key for climbing/descending"
@@ -2542,10 +2626,6 @@ msgid "Base terrain height."
msgstr "Altura base do terreno."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Básico"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Privilégios básicos"
@@ -2555,7 +2635,7 @@ msgstr "Ruído de praias"
#: src/settings_translation_file.cpp
msgid "Beach noise threshold"
-msgstr "Limiar do ruído de praias."
+msgstr "Limiar do ruído de praias"
#: src/settings_translation_file.cpp
msgid "Bilinear filtering"
@@ -2566,7 +2646,8 @@ msgid "Bind address"
msgstr "Endereço de bind"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Parâmetros de ruído e umidade da API de Bioma"
#: src/settings_translation_file.cpp
@@ -2578,6 +2659,10 @@ msgid "Block send optimize distance"
msgstr "Distância otimizada de envio de bloco"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Caminho de fonte em negrito e itálico"
@@ -2602,6 +2687,11 @@ msgid "Builtin"
msgstr "Embutido"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Mudar camera"
+
+#: 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"
@@ -2767,6 +2857,11 @@ msgid "Client side node lookup range restriction"
msgstr "Restrição do alcançe da visão superior de nós no lado do cliente"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Mods de Cliente Local"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Velocidade de subida (em escadas e outros)"
@@ -2845,9 +2940,7 @@ 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)"
+"9 - Melhor compressão; o mais devagar"
#: src/settings_translation_file.cpp
msgid ""
@@ -2888,6 +2981,11 @@ msgid "Console height"
msgstr "Tamanho vertical do console"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "Repositório de conteúdo online"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "Lista negra de flags do ContentDB"
@@ -2927,8 +3025,10 @@ msgstr ""
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = Dia/noite permanece inalterado."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Controla a velocidade de afundamento em líquidos."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -3001,12 +3101,12 @@ msgid "Debug log level"
msgstr "Nível de log do Debug"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Tecla de abaixar volume"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Diminua isto para aumentar a resistência do líquido ao movimento."
+msgid "Dec. volume key"
+msgstr "Tecla de abaixar volume"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3165,6 +3265,11 @@ msgid "Desynchronize block animation"
msgstr "Dessincronizar animação do bloco"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Decorações"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Tecla para escavar"
@@ -3181,7 +3286,14 @@ msgid "Disallow empty passwords"
msgstr "Não permitir logar sem senha"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Display Density Scaling Factor"
+msgstr "Fator de escala de densidade de exibição"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3257,13 +3369,17 @@ msgstr "Habilitar janela de console"
#: src/settings_translation_file.cpp
msgid "Enable creative mode for all players"
-msgstr "Habilitar modo criativo para todos os jogadores."
+msgstr "Habilitar modo criativo para todos os jogadores"
#: src/settings_translation_file.cpp
msgid "Enable joysticks"
msgstr "Habilitar Joysticks"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Habilitar suporte a canais de módulos."
@@ -3280,18 +3396,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Habilitar entrada de comandos aleatórios (apenas usado para testes)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-msgstr "Habilitar registro de confirmação"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
-msgstr ""
-"Habilitar confirmação de registro quando conectar ao servidor.\n"
-"Caso desabilitado, uma nova conta será registrada automaticamente."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3300,6 +3404,10 @@ msgstr ""
"Desativada para andar rápido ou para visões diferentes."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3349,7 +3457,7 @@ msgid ""
msgstr ""
"Habilitar/desabilitar a execução de um IPv6 do servidor. \n"
"Ignorado se bind_address estiver definido.\n"
-"Precisa de enable_ipv6 para ser ativado."
+"Precisa de enable_ipv6 para ser ativado."
#: src/settings_translation_file.cpp
msgid ""
@@ -3390,10 +3498,19 @@ msgstr ""
"Mudar esta configuração requer uma reinicialização."
#: src/settings_translation_file.cpp
+#, fuzzy
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 ""
+"Permite compensações que reduzem a carga da CPU ou aumentam o desempenho de "
+"renderização\n"
+"à custa de pequenas falhas visuais que não afetam a jogabilidade do jogo."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "Perfil do vale"
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -3422,6 +3539,10 @@ msgstr ""
"planícies mais planas, adequadas para uma camada sólida de ilhas flutuantes."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "FPS quando o jogo é pausado ou perde o foco"
@@ -3509,8 +3630,9 @@ msgstr ""
"Esse filtro será ativo automaticamente ao ativar \"mipmapping\"."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtros"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Anti-aliasing:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3578,6 +3700,11 @@ msgid "Fog toggle key"
msgstr "Tecla de comutação de névoa"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Tamanho da fonte"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Fonte em negrito por padrão"
@@ -3599,17 +3726,17 @@ msgstr "Tamanho da fonte"
#: src/settings_translation_file.cpp
msgid "Font size divisible by"
-msgstr ""
+msgstr "Tamanho da fonte divisível por"
#: src/settings_translation_file.cpp
#, 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)."
+msgstr "Tamanho da fonte padrão onde 1 unidade = 1 pixel em 96 DPI"
#: src/settings_translation_file.cpp
#, 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)."
+msgstr "Tamanho da fonte monoespacial onde 1 unidade = 1 pixel em 96 DPI"
#: src/settings_translation_file.cpp
msgid ""
@@ -3621,6 +3748,7 @@ msgstr ""
"O valor 0 irá utilizar o tamanho padrão de fonte."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"For pixel-style fonts that do not scale well, this ensures that font sizes "
"used\n"
@@ -3630,6 +3758,14 @@ msgid ""
"be\n"
"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
msgstr ""
+"Para fontes de estilo de pixel que não são bem dimensionadas, isso garante "
+"que os tamanhos de fonte usados\n"
+"com esta fonte será sempre divisível por este valor, em pixels. Por "
+"exemplo,\n"
+"uma fonte de 16 pixels de altura deve ter isso definido como 16, então só "
+"será\n"
+"tamanho 16, 32, 48, etc., então um mod solicitando um tamanho de 25 receberá "
+"32."
#: src/settings_translation_file.cpp
msgid ""
@@ -3721,8 +3857,10 @@ msgstr ""
"nós).\n"
"\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)"
+"sevidor\n"
+"mantenha objetos ativos na distancia na direção que o\n"
+"jogador está olhando.(Isso pode evitar que mobs desapareçam da visão de "
+"repente)"
#: src/settings_translation_file.cpp
msgid "Full screen"
@@ -3745,6 +3883,19 @@ msgid "GUI scaling filter txr2img"
msgstr "Filtro txr2img de escala da GUI"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Jogos"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Chamadas de retorno Globais"
@@ -3781,6 +3932,16 @@ msgid "Graphics"
msgstr "Gráficos"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Gráficos"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Gráficos"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Gravidade"
@@ -3797,8 +3958,13 @@ msgid "HTTP mods"
msgstr "Módulos HTTP"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "Fator de escalonamento do painel de interface"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "Escala da GUI"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -3827,7 +3993,7 @@ msgid ""
msgstr ""
"Tem o instrumento de registro em si:\n"
"* Monitorar uma função vazia.\n"
-"Isto estima a sobrecarga, que o istrumento está adicionando (+1 Chamada de "
+"Isto estima a sobrecarga, que o instrumento está adicionando (+1 Chamada de "
"função).\n"
"* Monitorar o amostrador que está sendo usado para atualizar as estatísticas."
@@ -4057,14 +4223,23 @@ msgstr ""
"Requer que a ondulação de líquidos esteja ativada."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"Quanto o servidor aguardará antes de descarregar chunks não utilizados. \n"
"Um valor mais elevado é mais suave, mas vai usar mais memória RAM."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "Diminua isto para aumentar a resistência do líquido ao movimento."
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "Quão largos serão os rios."
@@ -4139,6 +4314,15 @@ msgstr ""
"descer."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Habilitar confirmação de registro quando conectar ao servidor.\n"
+"Caso desabilitado, uma nova conta será registrada automaticamente."
+
+#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
@@ -4167,7 +4351,10 @@ msgstr ""
"quando voando ou nadando."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr "Se habilitado, novos jogadores não podem entrar com uma senha vazia."
#: src/settings_translation_file.cpp
@@ -4224,10 +4411,6 @@ msgid "Ignore world errors"
msgstr "Ignorar erros do mundo"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "No jogo"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
"Valor alfa do fundo do console do bate-papo no jogo (opacidade, entre 0 e "
@@ -4289,17 +4472,14 @@ msgid "Instrument the methods of entities on registration."
msgstr "Monitorar os métodos das entidades durante a registração."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Monitorização"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""
"Intervalo para cada salvamento de alterações importantes no mundo, indicado "
"em segundos."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "Intervalo de envio de hora do dia para os clientes."
#: src/settings_translation_file.cpp
@@ -5160,6 +5340,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr "Expulsar jogadores que enviaram mais de X mensagem por 10 segundos."
@@ -5216,10 +5400,11 @@ msgid "Left key"
msgstr "Tecla para a esquerda"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"Comprimento do tick do servidor e o intervalo no qual os objetos são "
"geralmente atualizados em\n"
@@ -5234,18 +5419,25 @@ msgstr ""
"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"
+#, fuzzy
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr "Período de tempo entre os ciclos de execução de ABMs"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "Período de tempo entre ciclos de execução de NodeTimer"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "Período de tempo entre os ciclos de gerenciamento de blocos"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5254,7 +5446,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Nível de registro a serem gravados em debug.txt:\n"
"- <nothing> (nenhum)\n"
@@ -5290,6 +5483,11 @@ msgid "Light curve low gradient"
msgstr "Gradiente baixo da curva de luz"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Iluminação suave"
+
+#: 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"
@@ -5500,7 +5698,7 @@ msgstr "Gerador de mundo Carpathian"
#: src/settings_translation_file.cpp
msgid "Mapgen Carpathian specific flags"
-msgstr "Flags específicas do gerador de mundo Carpathian"
+msgstr "Flags específicas do gerador de mundo Carpathian"
#: src/settings_translation_file.cpp
msgid "Mapgen Flat"
@@ -5589,7 +5787,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum distance to render shadows."
-msgstr "Distância máxima para renderizar sombras"
+msgstr "Distância máxima para renderizar sombras."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -5741,10 +5939,6 @@ msgid "Maximum users"
msgstr "Limite de usuários"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Opções para menus"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "Cache de malha"
@@ -5793,6 +5987,20 @@ msgid "Mipmapping"
msgstr "Mipmapping (filtro)"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "Analizador"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Segurança"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "Canais de mod"
@@ -5893,10 +6101,6 @@ msgid "Near plane"
msgstr "Plano próximo"
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Rede"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
@@ -5905,6 +6109,11 @@ msgstr ""
"Esse valor será substituído se for definido a partir do menu principal."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "Rede"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Novos usuários precisam inserir esta senha."
@@ -5917,6 +6126,11 @@ msgid "Noclip key"
msgstr "Tecla Noclip"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Destaque nos Blocos"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Destacamento do bloco"
@@ -5971,10 +6185,6 @@ msgstr ""
"consumo de memória (4096 = 100 MB, como uma regra de ouro)."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Repositório de conteúdo online"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "Líquidos Opacos"
@@ -6004,12 +6214,9 @@ msgid ""
"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."
+"Caminho da fonte de fallback. Deve ser uma fonte TrueType.\n"
+"Essa fonte será usada para determinados idiomas ou se a fonte padrão não "
+"estiver disponível."
#: src/settings_translation_file.cpp
msgid ""
@@ -6039,11 +6246,8 @@ 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 ""
-"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."
+"Caminho para a fonte padrão. Deve ser uma fonte TrueType.\n"
+"A fonte de fallback será usada se a fonte não puder ser carregada."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6051,11 +6255,9 @@ 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 ""
-"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 na tela de depuração."
+"Caminho para a fonte monoespaçada. Deve ser uma fonte TrueType.\n"
+"Esta fonte é usada para, por exemplo, a tela do console e do criador de "
+"perfil."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
@@ -6099,10 +6301,6 @@ msgstr ""
"Isso requer o privilégio \"fly\" no servidor."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Nome do Jogador"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "Distância de transferência do jogador"
@@ -6157,10 +6355,6 @@ msgid "Profiler toggle key"
msgstr "Tecla de alternância do Analizador"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Analizando"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr "Endereço do Prometheus"
@@ -6256,7 +6450,7 @@ msgstr ""
"cliente)\n"
"READ_ITEMDEFS: 4 (desabilita a chamada get_item_def no lado do cliente)\n"
"READ_NODEDEFS: 8 (desabilita a chamada get_node_def no lado do cliente)\n"
-"LOOKUP_NODES_LIMIT: 16 (limita a chamada get_node no lado do cliente para "
+"LOOKUP_NODES_LIMIT: 16 (limita a chamada get_node no lado do cliente para\n"
"csm_restriction_noderange)\n"
"READ_PLAYERINFO: 32 (desabilita a chamada get_player_names no lado do "
"cliente)"
@@ -6356,6 +6550,11 @@ msgstr ""
"quando as imagens são dimensionadas em tamanhos não-inteiros."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Tela:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Altura da tela"
@@ -6373,7 +6572,7 @@ msgstr "Formato da Captura de tela"
#: src/settings_translation_file.cpp
msgid "Screenshot quality"
-msgstr "Qualidade da Captura de tela;"
+msgstr "Qualidade da Captura de tela"
#: src/settings_translation_file.cpp
msgid ""
@@ -6386,6 +6585,11 @@ msgstr ""
"Use 0 para qualidade padrão."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Captura de tela"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Ruído nas cavernas #1"
@@ -6399,10 +6603,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Segundo de 2 ruídos 3D que juntos definem tunéis."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Segurança"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Consulte http://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6450,7 +6650,7 @@ msgstr ""
"7 = Conjunto de mandelbrot \"Variation\" 4D.\n"
"8 = Conjunto de julia \"Variation\" 4D.\n"
"9 = Conjunto de mandelbrot \"Mandelbrot/Mandelbar\" 3D.\n"
-"10 = Conjunto de julia \"Mandelbrot/Mandelbar\" 3D.\n"
+"10 = Conjunto de julia \"Mandelbrot/Mandelbar\" 3D.\n"
"11 = Conjunto de mandelbrot \"Ãrvore de natal\" 3D.\n"
"12 = Conjunto de julia \"Ãrvore de natal\" 3D..\n"
"13 = Conjunto de mandelbrot \"Bulbo de Mandelbrot\" 3D.\n"
@@ -6461,8 +6661,19 @@ msgstr ""
"18 = Conjunto de julia \"Bulbo de Mandelbrot\" 4D."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Servidor / Um jogador"
+#, fuzzy
+msgid "Server"
+msgstr "URL do servidor"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Nome do servidor"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Descrição do servidor"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6489,10 +6700,20 @@ msgid "Server side occlusion culling"
msgstr "Separação de oclusão no lado do servidor"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Porta do Servidor"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "URL da lista de servidores"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "URL da lista de servidores"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Arquivo da lista de servidores"
@@ -6505,14 +6726,18 @@ msgstr ""
"Apos mudar isso uma reinicialização é necessária."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
"Configura o tamanho máximo de caracteres de uma mensagem enviada por "
"clientes."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
"Defina a força da sombra.\n"
@@ -6520,10 +6745,11 @@ msgstr ""
"significam sombras mais fortes."
#: 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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
"Defina o tamanho do raio de sombras suaves.\n"
"Valores mais baixos significam sombras mais nítidas e valores altos sombras "
@@ -6623,7 +6849,8 @@ msgstr ""
"será desenhada."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+#, fuzzy
+msgid "Shadow strength gamma"
msgstr "Força da sombra"
#: src/settings_translation_file.cpp
@@ -6664,10 +6891,11 @@ msgid ""
"recommended."
msgstr ""
"Tamanho dos mapchunks gerados pelo gerador de mapa, em mapblocks(16 nós).\n"
-"ALERTA!: Não há benefício e existem diversos perigos em aumentar este valor "
-"acima de 5.\n"
+"ALERTA!: Não há benefício e existem diversos perigos em\n"
+"aumentar este valor acima de 5.\n"
"Reduzir este valor aumenta a densidade de dungeons e cavernas.\n"
-"Alterar este valor é para uso especial, é recomendado deixar inalterado."
+"Alterar este valor é para uso especial, é recomendado deixar\n"
+"inalterado."
#: src/settings_translation_file.cpp
msgid ""
@@ -6676,8 +6904,10 @@ 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á\n"
+"o percentual de hit do cache, reduzindo os dados sendo copiados do "
+"encadeamento principal\n"
+", reduzindo assim o jitter."
#: src/settings_translation_file.cpp
msgid "Sky Body Orbit Tilt"
@@ -6774,12 +7004,18 @@ msgstr ""
"(ou todos) os itens."
#: src/settings_translation_file.cpp
+#, fuzzy
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 ""
+"Espalhe uma atualização completa do mapa de sombras em uma determinada "
+"quantidade de quadros.\n"
+"Valores mais altos podem tornar as sombras lentas, valores mais baixos\n"
+"consumirá mais recursos.\n"
+"Valor mínimo: 1; valor máximo: 16"
#: src/settings_translation_file.cpp
msgid ""
@@ -6867,6 +7103,11 @@ msgid "Temperature variation for biomes."
msgstr "Variação de temperatura para biomas."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Configurações"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "Ruído alternativo do terreno"
@@ -6934,12 +7175,12 @@ msgid ""
"that is considered EXPERIMENTAL and may not work properly."
msgstr ""
"Texturas em um nó podem ser alinhadas ao próprio nó ou ao mundo.\n"
-"O modo antigo serve melhor para coisas como maquinas, móveis, etc, enquanto "
+"O modo antigo serve melhor para coisas como maquinas, móveis, etc, enquanto\n"
"o novo faz com que escadas e microblocos encaixem melhor a sua volta.\n"
"Entretanto, como essa é uma possibilidade nova, não deve ser usada em "
-"servidores antigos, essa opção pode ser forçada para certos tipos de nós. "
-"Note que esta opção é considerada EXPERIMENTAL e pode não funcionar "
-"adequadamente."
+"servidores antigos,\n"
+"essa opção pode ser forçada para certos tipos de nós. Note que esta opção\n"
+"é considerada EXPERIMENTAL e pode não funcionar adequadamente."
#: src/settings_translation_file.cpp
msgid "The URL for the content repository"
@@ -7038,13 +7279,12 @@ 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"
"in-game view frustum around."
msgstr ""
-"A sensibilidade dos eixos do joystick para movimentar o frustum de exibição "
-"no jogo."
+"A sensibilidade dos eixos do joystick para movimentar o\n"
+"frustum de exibição no jogo."
#: src/settings_translation_file.cpp
msgid ""
@@ -7076,8 +7316,8 @@ msgid ""
"The time budget allowed for ABMs to execute on each step\n"
"(as a fraction of the ABM Interval)"
msgstr ""
-"O tempo disponível permitido para ABMs executarem em cada passo (como uma "
-"fração do intervalo do ABM)"
+"O tempo disponível permitido para ABMs executarem em cada passo\n"
+"(como uma fração do intervalo do ABM)"
#: src/settings_translation_file.cpp
msgid ""
@@ -7105,8 +7345,8 @@ msgid ""
"enabled. Also the vertical distance over which humidity drops by 10 if\n"
"'altitude_dry' is enabled."
msgstr ""
-"A distancia vertical onde o calor cai por 20 caso 'altitude_chill' esteja "
-"habilitado. Também é a distancia vertical onde a umidade cai por 10 se "
+"A distancia vertical onde o calor cai por 20 caso 'altitude_chill' esteja\n"
+"habilitado. Também é a distancia vertical onde a umidade cai por 10 se\n"
"'altitude_dry' estiver habilitado."
#: src/settings_translation_file.cpp
@@ -7135,7 +7375,8 @@ msgid "Time speed"
msgstr "Velocidade de tempo"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
"Tempo de espera para o cliente remover dados de mapa não utilizados da "
"memória."
@@ -7165,7 +7406,17 @@ msgid "Touch screen threshold"
msgstr "Limiar a tela de toque"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Limiar a tela de toque"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Tradeoffs for performance"
+msgstr "Trocas por desempenho"
+
+#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
msgstr ""
#: src/settings_translation_file.cpp
@@ -7246,15 +7497,14 @@ msgid "Use bilinear filtering when scaling textures."
msgstr "Usar filtragem bilinear ao dimensionamento de texturas."
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
"Usar mip mapping para escalar texturas. Pode aumentar a performance "
-"levemente, especialmente quando usando um pacote de texturas em alta "
-"resolução.\n"
+"levemente,\n"
+"especialmente quando usando um pacote de texturas em alta resolução.\n"
"O downscaling correto de gama não é suportado."
#: src/settings_translation_file.cpp
@@ -7283,6 +7533,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "Use a filtragem trilinear ao dimensionamento de texturas."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7361,9 +7615,7 @@ msgstr "Visualização de balanço"
#: src/settings_translation_file.cpp
msgid "View distance in nodes."
-msgstr ""
-"Distância de visão (em nós).\n"
-"Minimo = 20"
+msgstr "Distância de visão (em nós)."
#: src/settings_translation_file.cpp
msgid "View range decrease key"
@@ -7398,6 +7650,7 @@ msgstr ""
"Requer que o sistema de som esteja ativado."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"W coordinate of the generated 3D slice of a 4D fractal.\n"
"Determines which 3D slice of the 4D shape is generated.\n"
@@ -7405,10 +7658,11 @@ msgid ""
"Has no effect on 3D fractals.\n"
"Range roughly -2 to 2."
msgstr ""
-"Coordenada W da fatia 3D gerada de um fractal 4D.\n"
-"Determina qual fatia 3D da forma 4D é gerada.\n"
-"Não tem efeito sobre fractais 3D.\n"
-"Varia aproximadamente de -2 a 2."
+"W coordenada da fatia 3D gerada de um fractal 4D.\n"
+"Determina qual a fatia 3D da forma 4D que é gerada.\n"
+"Altera a forma do fractal.\n"
+"Não tem efeito sobre os fractais 3D.\n"
+"Alcance aproximado de -2 a 2."
#: src/settings_translation_file.cpp
msgid "Walking and flying speed, in nodes per second."
@@ -7566,6 +7820,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
"Se deseja mostrar informação de depuração ao cliente (tem o mesmo efeito "
@@ -7611,11 +7874,12 @@ msgid ""
"See also texture_min_size.\n"
"Warning: This option is EXPERIMENTAL!"
msgstr ""
-"Texturas alinhadas ao mundo podem ser escaladas em vários nós. Entretando, o "
-"servidor pode não enviar a escala desejada, especialmente se você usa um "
-"pacote de textura especialmente projetado; com está opção, o cliente tenta "
-"determinar a escala automaticamente baseado no tamanho da textura. Veja "
-"também texture_min_size.\n"
+"Texturas alinhadas ao mundo podem ser escaladas em vários nós. Entretanto,\n"
+"o servidor pode não enviar a escala desejada, especialmente se você usa\n"
+"um pacote de textura especialmente projetado; com está opção, o cliente "
+"tenta\n"
+"determinar a escala automaticamente baseado no tamanho da textura.\n"
+"Veja também texture_min_size.\n"
"Alerta: Esta opção é EXPERIMENTAL!"
#: src/settings_translation_file.cpp
@@ -7636,7 +7900,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Y of upper limit of large caves."
-msgstr "Limite Y máximo de grandes cavernas."
+msgstr "Limite Y máximo de grandes cavernas."
#: src/settings_translation_file.cpp
msgid "Y-distance over which caverns expand to full size."
@@ -7678,6 +7942,10 @@ msgid "Y-level of seabed."
msgstr "Nível Y do fundo do mar."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Tempo limite de download de arquivo via cURL"
@@ -7726,6 +7994,9 @@ msgstr "limite paralelo de cURL"
#~ msgid "Back"
#~ msgstr "Backspace"
+#~ msgid "Basic"
+#~ msgstr "Básico"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr ""
#~ "Bits por pixel (Também conhecido como profundidade de cor) no modo de "
@@ -7760,6 +8031,12 @@ msgstr "limite paralelo de cURL"
#~ msgid "Configure"
#~ msgstr "Configurar"
+#~ msgid "Connect"
+#~ msgstr "Conectar"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Controla a velocidade de afundamento em líquidos."
+
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value."
@@ -7804,12 +8081,24 @@ msgstr "limite paralelo de cURL"
#~ "Define processo amostral de textura.\n"
#~ "Um valor mais alto resulta em mapas de normais mais suaves."
+#~ msgid "Del. Favorite"
+#~ msgstr "Rem. Favorito"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Baixe um jogo, como Minetest Game, do site minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Baixe um a partir do site minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Baixando e instalando $1, por favor aguarde..."
#~ msgid "Enable VBO"
#~ msgstr "Habilitar VBO"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Habilitar registro de confirmação"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7838,6 +8127,9 @@ msgstr "limite paralelo de cURL"
#~ "Ativar mapeamento de oclusão de paralaxe.\n"
#~ "Requer shaders a serem ativados."
+#~ msgid "Enter "
+#~ msgstr "Entrar "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7857,6 +8149,9 @@ msgstr "limite paralelo de cURL"
#~ msgid "Fallback font size"
#~ msgstr "Tamanho da fonte alternativa"
+#~ msgid "Filtering"
+#~ msgstr "Filtros"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Altura base de ruído de Ilha Flutuante"
@@ -7875,6 +8170,9 @@ msgstr "limite paralelo de cURL"
#~ msgid "Full screen BPP"
#~ msgstr "Tela cheia BPP"
+#~ msgid "Game"
+#~ msgstr "Jogo"
+
#~ msgid "Gamma"
#~ msgstr "Gama"
@@ -7884,15 +8182,30 @@ msgstr "limite paralelo de cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Gerar mapa de normais"
+#~ msgid "HUD scale factor"
+#~ msgstr "Fator de escalonamento do painel de interface"
+
#~ msgid "High-precision FPU"
#~ msgstr "FPU de alta precisão"
#~ msgid "IPv6 support."
#~ msgstr "Suporte a IPv6."
+#~ msgid "In-Game"
+#~ msgstr "No jogo"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Instalação: arquivo: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Monitorização"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Teclas (se este menu estiver com problema, remova itens do arquivo "
+#~ "minetest.conf)"
+
#~ msgid "Lava depth"
#~ msgstr "Profundidade da lava"
@@ -7911,6 +8224,9 @@ msgstr "limite paralelo de cURL"
#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
#~ msgstr "Faz o DirectX trabalhar com LuaJIT. Desative se causa problemas."
+#~ msgid "Menus"
+#~ msgstr "Opções para menus"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Minimapa em modo radar, zoom 2x"
@@ -7984,6 +8300,12 @@ msgstr "limite paralelo de cURL"
#~ msgid "Path to save screenshots at."
#~ msgstr "Caminho para onde salvar screenshots."
+#~ msgid "Player name"
+#~ msgstr "Nome do Jogador"
+
+#~ msgid "Profiling"
+#~ msgstr "Analizando"
+
#~ msgid "Projecting dungeons"
#~ msgstr "Projetando dungeons"
@@ -7996,6 +8318,9 @@ msgstr "limite paralelo de cURL"
#~ msgid "Select Package File:"
#~ msgstr "Selecionar o arquivo do pacote:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Servidor / Um jogador"
+
#~ msgid ""
#~ "Set the shadow update time.\n"
#~ "Lower value means shadows and map updates faster, but it consume more "
@@ -8086,6 +8411,22 @@ msgstr "limite paralelo de cURL"
#~ msgid "Yes"
#~ msgstr "Sim"
+#, 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 ""
+#~ "Você está prestes a entrar no servidor com o nome \"%s\" pela primeira "
+#~ "vez. \n"
+#~ "Se continuar, uma nova conta usando suas credenciais será criada neste "
+#~ "servidor.\n"
+#~ "Por favor, confirme sua senha e clique em \"Registrar e Entrar\" para "
+#~ "confirmar a criação da conta, ou clique em \"Cancelar\" para abortar."
+
#~ msgid "You died."
#~ msgstr "Você morreu."
diff --git a/po/ro/minetest.po b/po/ro/minetest.po
index 484fe4d4b..909b33d2c 100644
--- a/po/ro/minetest.po
+++ b/po/ro/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Romanian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -116,6 +116,31 @@ msgid "The server has requested a reconnect:"
msgstr "Serverul cere o reconectare:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Alege modificările"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Nepotrivire versiune protocol. "
@@ -128,6 +153,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Serverul permite versiuni ale protocolului între $1 și $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Permitem doar versiunea de protocol $1."
@@ -135,14 +164,21 @@ msgstr "Permitem doar versiunea de protocol $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Acceptăm versiuni de protocol între versiunea 1$ și 2$."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Anulează"
@@ -281,7 +317,6 @@ msgid "Failed to download $1"
msgstr "Nu s-a putut descărca $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Jocuri"
@@ -303,7 +338,6 @@ 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
msgid "Mods"
msgstr "Modificări"
@@ -396,12 +430,9 @@ msgid "Decorations"
msgstr "Decorațiuni"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Descărcați un joc, precum Minetest Game, de pe minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Descărcați unul de pe minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Avertisment: Testul de dezvoltare este destinat dezvoltatorilor."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -419,10 +450,6 @@ msgstr "Mase de teren plutitoare în cer"
msgid "Floatlands (experimental)"
msgstr "Terenuri plutitoare (experimental)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Joc"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Generare terenuri fără fracturi: Oceane și sub pământ"
@@ -440,6 +467,15 @@ msgid "Increases humidity around rivers"
msgstr "Mărește umiditea în jurul râurilor"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Instalează $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Lacuri"
@@ -542,10 +578,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Caverne foarte mari adânc în pământ"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Avertisment: Testul de dezvoltare este destinat dezvoltatorilor."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Numele lumii"
@@ -575,6 +607,39 @@ msgstr "Pkgmgr: calea nevalidă '$ 1'"
msgid "Delete World \"$1\"?"
msgstr "Ștergi lumea \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Confirmarea parolei"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Numele Mapgen"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Nume"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Parola"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Parolele nu se potrivesc!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Înregistrează-te și Alătură-te"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Acceptă"
@@ -607,6 +672,16 @@ msgstr "< Înapoi la pagina de setări"
msgid "Browse"
msgstr "Navighează"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Conţinut"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Conţinut"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Dezactivat"
@@ -664,7 +739,7 @@ msgstr "Selectează directorul"
msgid "Select file"
msgstr "Selectează fila"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Afișați numele tehnice"
@@ -815,6 +890,10 @@ msgstr "Foști contribuitori"
msgid "Previous Core Developers"
msgstr "Dezvoltatori de bază precedenți"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Căutați conținut online"
@@ -883,10 +962,6 @@ msgstr "Găzduiește Server"
msgid "Install games from ContentDB"
msgstr "Instalarea jocurilor din ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Nume"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Nou"
@@ -895,10 +970,6 @@ msgstr "Nou"
msgid "No world created or selected!"
msgstr "Nicio lume creată sau selectată!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Parola"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Joacă jocul"
@@ -932,10 +1003,6 @@ msgid "Clear"
msgstr "Șterge"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Conectează"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Modul Creativ"
@@ -945,10 +1012,6 @@ msgid "Damage / PvP"
msgstr "Daune / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Åžterge Favorit"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Favorite"
@@ -961,6 +1024,10 @@ msgid "Join Game"
msgstr "Alatură-te jocului"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -973,10 +1040,19 @@ msgid "Refresh"
msgstr "Actualizează"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Åžterge Favorit"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Descrierea serverului"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1021,7 +1097,8 @@ msgid "Dynamic shadows"
msgstr "Umbre dinamice"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "Umbre dinamice: "
#: builtin/mainmenu/tab_settings.lua
@@ -1117,7 +1194,8 @@ msgid "Tone Mapping"
msgstr "Mapare ton"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "PragulAtingerii: (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1125,7 +1203,7 @@ msgid "Trilinear Filter"
msgstr "Filtrare Triliniară"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1144,6 +1222,11 @@ msgstr "Fluturarea lichidelor"
msgid "Waving Plants"
msgstr "Plante legănătoare"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Eroare de conexiune (timeout?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Conexiunea a expirat."
@@ -1281,7 +1364,7 @@ msgid "Camera update enabled"
msgstr "Actualizarea camerei este activată"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1412,6 +1495,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Interval de vizualizare nelimitat activat"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Se creează clientul..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Ieși în Meniu"
@@ -1918,30 +2006,6 @@ msgstr "Nu s-a putut descărca $1"
msgid "Opening webpage"
msgstr ""
-#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
-msgid "Passwords do not match!"
-msgstr "Parolele nu se potrivesc!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Înregistrează-te și Alătură-te"
-
-#: 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 ""
-"Sunteți pe cale să vă asociați pentru prima dată la acest server cu numele "
-"\"%s\".\n"
-"Dacă continuați, se va crea un cont nou utilizând acreditările pe acest "
-"server.\n"
-"Reintroduceți parola și faceți clic pe \"Înregistrare și asociere\" pentru a "
-"confirma crearea contului sau faceți clic pe \"Revocare\" pentru a abandona."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Continuă"
@@ -1975,7 +2039,7 @@ msgstr ""
msgid "Change camera"
msgstr "Schimba camera"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Chat"
@@ -2028,9 +2092,8 @@ msgid "Key already in use"
msgstr "Tastă deja folosită"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Keybindings. (Dacă acest meniu apare, șterge lucrurile din minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2101,10 +2164,6 @@ msgid "Change"
msgstr "Schimbă"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Confirmarea parolei"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Noua parolă"
@@ -2112,6 +2171,10 @@ msgstr "Noua parolă"
msgid "Old Password"
msgstr "Vechea parolă"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Parolele nu se potrivesc!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Ieșire"
@@ -2125,12 +2188,6 @@ msgstr "Amuțit"
msgid "Sound Volume: %d%%"
msgstr "Volum sunet: "
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Introduceţi "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2138,6 +2195,16 @@ msgstr "Introduceţi "
msgid "LANG_CODE"
msgstr "ro"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Vă rugăm să alegeți un nume!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2155,8 +2222,8 @@ msgid ""
"circle."
msgstr ""
"(Android) Utilizați joystick-ul virtual pentru a declanșa butonul \"aux\".\n"
-"Dacă este activat, joystick-ul virtual va atinge, de asemenea, butonul \"aux"
-"\" atunci când este în afara cercului principal."
+"Dacă este activat, joystick-ul virtual va atinge, de asemenea, butonul "
+"\"aux\" atunci când este în afara cercului principal."
#: src/settings_translation_file.cpp
msgid ""
@@ -2306,6 +2373,10 @@ msgstr ""
"Rețineți că modul între țesutnecesită umbrire pentru a fi activat."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2405,6 +2476,11 @@ msgstr ""
"pentru siguranță) va crea un strat solid de insulă plutitoare."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Adăugare nume element"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avansat"
@@ -2425,7 +2501,8 @@ msgstr ""
"lumina, are un efect foarte mic asupra naturală lumina de noapte."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Întotdeauna zboară și rapid"
#: src/settings_translation_file.cpp
@@ -2506,6 +2583,10 @@ msgstr ""
"În scrise în mapblocks (16 noduri)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Tasta de avans automată"
@@ -2547,10 +2628,6 @@ msgid "Base terrain height."
msgstr "Înălțimea terenului de bază."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "De bază"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Privilegii de bază"
@@ -2571,7 +2648,8 @@ msgid "Bind address"
msgstr "Adresa de legare"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Parametrii de zgomot de temperatură și umiditate Biome API"
#: src/settings_translation_file.cpp
@@ -2583,6 +2661,10 @@ msgid "Block send optimize distance"
msgstr "Distanță de optimizare trimitere bloc"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Cale font aldin și cursiv"
@@ -2607,6 +2689,11 @@ msgid "Builtin"
msgstr "Incorporat"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Schimba camera"
+
+#: 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"
@@ -2773,6 +2860,11 @@ msgid "Client side node lookup range restriction"
msgstr "Restricția razei de căutare a nodurilor în clienți"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Modare la client"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Viteza escaladării"
@@ -2879,6 +2971,10 @@ msgid "Console height"
msgstr "Înalţime consolă"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2912,7 +3008,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2979,11 +3077,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3126,6 +3224,11 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Decorațiuni"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Tasta pentru săpat"
@@ -3146,6 +3249,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3215,6 +3324,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Activați suportul pentru canale mod."
@@ -3231,19 +3344,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3317,6 +3424,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3335,6 +3446,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3412,8 +3527,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtrarea"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Antialiasing:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3480,6 +3596,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3628,6 +3748,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Jocuri"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3655,6 +3788,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3671,10 +3812,15 @@ msgid "HTTP mods"
msgstr "Moduri HTTP"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "HUD afișat"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr ""
@@ -3911,11 +4057,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3976,6 +4129,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3997,7 +4156,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4037,10 +4198,6 @@ msgid "Ignore world errors"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "ÃŽn joc"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
@@ -4091,15 +4248,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4720,6 +4873,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4775,7 +4932,7 @@ msgstr "Tasta stângă"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4785,15 +4942,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4805,7 +4965,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4833,6 +4994,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Lumină fină"
+
+#: 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"
@@ -5217,10 +5383,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Meniuri"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5269,6 +5431,19 @@ msgid "Mipmapping"
msgstr "Cartografierea mip"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Activați securitatea modului"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5355,16 +5530,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5377,6 +5552,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Evidenţiere Nod"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5414,10 +5594,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5511,10 +5687,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5562,10 +5734,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5734,6 +5902,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Ecran:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5761,6 +5934,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Captură de ecran"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5773,10 +5951,6 @@ 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 ""
@@ -5816,8 +5990,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Server / Jucător singur"
+#, fuzzy
+msgid "Server"
+msgstr "URL-ul serverului"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Numele serverului"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Descrierea serverului"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5844,10 +6029,20 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Port server"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "URL listă server"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "URL listă server"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Fișier listă pentru servere"
@@ -5858,12 +6053,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5871,7 +6068,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5948,7 +6145,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6149,6 +6346,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Setări"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6351,7 +6553,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6375,10 +6577,19 @@ msgid "Touch screen threshold"
msgstr "Prag ecran tactil"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Prag ecran tactil"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6469,6 +6680,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6702,6 +6917,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6791,6 +7015,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6824,6 +7052,9 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "ÃŽnapoi"
+#~ msgid "Basic"
+#~ msgstr "De bază"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Biți per pixel (aka adâncime de culoare) în modul ecran complet."
@@ -6854,6 +7085,9 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Configurează"
+#~ msgid "Connect"
+#~ msgstr "Conectează"
+
#~ msgid "Credits"
#~ msgstr "Credite"
@@ -6864,6 +7098,12 @@ msgstr ""
#~ msgid "Darkness sharpness"
#~ msgstr "Mapgen"
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Descărcați un joc, precum Minetest Game, de pe minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Descărcați unul de pe minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Se descarca si se instaleaza $ 1, vă rugăm să așteptați ..."
@@ -6875,18 +7115,38 @@ msgstr ""
#~ msgid "Enables filmic tone mapping"
#~ msgstr "Activează Daune"
+#~ msgid "Enter "
+#~ msgstr "Introduceţi "
+
+#~ msgid "Filtering"
+#~ msgstr "Filtrarea"
+
+#~ msgid "Game"
+#~ msgstr "Joc"
+
#~ msgid "Generate Normal Maps"
#~ msgstr "Generați Hărți Normale"
+#~ msgid "In-Game"
+#~ msgstr "ÃŽn joc"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Instalare: fișier: \"$1\""
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Keybindings. (Dacă acest meniu apare, șterge lucrurile din minetest.conf)"
+
#~ msgid "Main"
#~ msgstr "Principal"
#~ msgid "Main menu style"
#~ msgstr "Stilul meniului principal"
+#~ msgid "Menus"
+#~ msgstr "Meniuri"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Hartă mip în modul radar, Zoom x2"
@@ -6924,6 +7184,9 @@ msgstr ""
#~ msgid "Select Package File:"
#~ msgstr "Selectează Fișierul Modului:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Server / Jucător singur"
+
#~ msgid "Special"
#~ msgstr "Special"
@@ -6946,6 +7209,23 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "Da"
+#, 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 ""
+#~ "Sunteți pe cale să vă asociați pentru prima dată la acest server cu "
+#~ "numele \"%s\".\n"
+#~ "Dacă continuați, se va crea un cont nou utilizând acreditările pe acest "
+#~ "server.\n"
+#~ "Reintroduceți parola și faceți clic pe \"Înregistrare și asociere\" "
+#~ "pentru a confirma crearea contului sau faceți clic pe \"Revocare\" pentru "
+#~ "a abandona."
+
#~ msgid "You died."
#~ msgstr "Ai murit."
diff --git a/po/ru/minetest.po b/po/ru/minetest.po
index 916b15064..11295943b 100644
--- a/po/ru/minetest.po
+++ b/po/ru/minetest.po
@@ -2,18 +2,18 @@ msgid ""
msgstr ""
"Project-Id-Version: Russian (Minetest)\n"
"Report-Msgid-Bugs-To: \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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-06-27 03:16+0000\n"
+"Last-Translator: Темак <artemkotlubai@yandex.ru>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/minetest/"
"minetest/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.11-dev\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -37,11 +37,11 @@ msgstr "Ð’Ñ‹Ð´Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°: "
#: builtin/client/chatcommands.lua
msgid "List online players"
-msgstr "СпиÑок онлайн игроков"
+msgstr "СпиÑок игроков в Ñети"
#: builtin/client/chatcommands.lua
msgid "Online players: "
-msgstr "Онлайн игроки: "
+msgstr "Игроки в Ñети: "
#: builtin/client/chatcommands.lua
msgid "The out chat queue is now empty."
@@ -115,6 +115,31 @@ msgid "The server has requested a reconnect:"
msgstr "Сервер запроÑил переподключение:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Выберите моды"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "ÐеÑоответÑтвие верÑии протокола. "
@@ -127,6 +152,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Сервер поддерживает верÑии протокола Ñ $1 по $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Мы поддерживаем только протокол верÑии $1."
@@ -134,14 +163,21 @@ msgstr "Мы поддерживаем только протокол верÑии
msgid "We support protocol versions between version $1 and $2."
msgstr "ПоддерживаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ протоколы верÑий Ñ $1 по $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Отмена"
@@ -156,7 +192,7 @@ msgstr "Отключить вÑе"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "Отключить пакет модов"
+msgstr "Отключить набор модов"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
@@ -164,7 +200,7 @@ msgstr "Включить вÑе"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "Включить пакет модов"
+msgstr "Включить набор модов"
#: builtin/mainmenu/dlg_config_world.lua
msgid ""
@@ -195,8 +231,9 @@ msgid "No hard dependencies"
msgstr "Ðет жёÑтких завиÑимоÑтей"
#: builtin/mainmenu/dlg_config_world.lua
+#, fuzzy
msgid "No modpack description provided."
-msgstr "ОпиÑание пакета модов недоÑтупно."
+msgstr "ОпиÑание набора модов недоÑтупно."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
@@ -265,7 +302,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"
@@ -280,7 +317,6 @@ msgid "Failed to download $1"
msgstr "Ðе удалоÑÑŒ загрузить $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Игры"
@@ -297,19 +333,17 @@ msgid "Install missing dependencies"
msgstr "УÑтановить недоÑтающие завиÑимоÑти"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install: Unsupported file type or broken archive"
-msgstr ""
-"УÑтановка мода: неподдерживаемый тип файла или повреждённый архив \"$1\""
+msgstr "УÑтановка мода: неподдерживаемый тип файла или повреждённый архив"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Моды"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
msgid "No packages could be retrieved"
-msgstr "Пакеты не могут быть получены"
+msgstr "Ð”Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ могут быть получены"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
@@ -328,16 +362,18 @@ msgid "Overwrite"
msgstr "ПерезапиÑать"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
msgid "Please check that the base game is correct."
-msgstr "ПожалуйÑта, убедитеÑÑŒ, что Ð±Ð°Ð·Ð¾Ð²Ð°Ñ Ð¸Ð³Ñ€Ð° верна."
+msgstr "ПожалуйÑта, убедитеÑÑŒ, что оÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð¸Ð³Ñ€Ð° верна."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
msgstr "В очереди"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
msgid "Texture packs"
-msgstr "Пакеты текÑтур"
+msgstr "Ðаборы текÑтур"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
@@ -396,12 +432,9 @@ msgid "Decorations"
msgstr "УкрашениÑ"
#: builtin/mainmenu/dlg_create_world.lua
-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"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Внимание: «The Development Test» предназначен Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð²."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -419,10 +452,6 @@ msgstr "ПарÑщие оÑтрова на небе"
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 "Создать нефрактальную меÑтноÑть: океаны и подземельÑ"
@@ -440,6 +469,15 @@ msgid "Increases humidity around rivers"
msgstr "Увеличивает влажноÑть вокруг рек"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "УÑтановить $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Озёра"
@@ -457,8 +495,9 @@ msgid "Mapgen flags"
msgstr "Флаги картогенератора"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Mapgen-specific flags"
-msgstr "Специальные флаги картогенератора"
+msgstr "ОÑобые флаги картогенератора"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
@@ -502,16 +541,18 @@ msgid "Smooth transition between biomes"
msgstr "Плавный переход между биомами"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid ""
"Structures appearing on the terrain (no effect on trees and jungle grass "
"created by v6)"
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
msgid "Temperate, Desert"
@@ -542,10 +583,6 @@ 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 "Внимание: «The Development Test» предназначен Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð²."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Ðазвание мира"
@@ -575,20 +612,55 @@ msgstr "pkgmgr: недопуÑтимый путь «$1»"
msgid "Delete World \"$1\"?"
msgstr "Удалить мир «$1»?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Подтверждение паролÑ"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Ðазвание картогенератора"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "ИмÑ"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Пароль"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Пароли не Ñовпадают!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¸ подключение"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "ПринÑть"
#: builtin/mainmenu/dlg_rename_modpack.lua
+#, fuzzy
msgid "Rename Modpack:"
-msgstr "Переименовать пакет модов:"
+msgstr "Переименовать набор модов:"
#: builtin/mainmenu/dlg_rename_modpack.lua
+#, fuzzy
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
@@ -607,13 +679,23 @@ msgstr "< Ðазад к Ñтранице наÑтроек"
msgid "Browse"
msgstr "Обзор"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "ДополнениÑ"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "ДополнениÑ"
+
#: 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"
@@ -632,9 +714,8 @@ msgid "Offset"
msgstr "Смещение"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Persistence"
-msgstr "ПерÑиÑтенциÑ"
+msgstr "УпорÑтво"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
@@ -657,14 +738,15 @@ msgid "Search"
msgstr "ПоиÑк"
#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
msgid "Select directory"
-msgstr "Выбрать каталог"
+msgstr "Выбрать папку"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select file"
msgstr "Выбрать файл"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Показывать техничеÑкие названиÑ"
@@ -740,9 +822,10 @@ msgid "Install Mod: Unable to find real mod name for: $1"
msgstr "УÑтановка мода: не удаётÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ название мода Ð´Ð»Ñ Â«$1»"
#: builtin/mainmenu/pkgmgr.lua
+#, fuzzy
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
-"УÑтановка мода: не удаётÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ подходÑщей каталог Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð° модов «$1»"
+"УÑтановка мода: не удаётÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ подходÑщую папку Ð´Ð»Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° модов «$1»"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
@@ -750,8 +833,9 @@ msgstr ""
"УÑтановка мода: не удаётÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ подходÑщий каталог Ð´Ð»Ñ Ð¼Ð¾Ð´Ð° или пакета модов"
#: builtin/mainmenu/pkgmgr.lua
+#, fuzzy
msgid "Unable to install a $1 as a texture pack"
-msgstr "Ðе удаётÑÑ ÑƒÑтановить $1 как пакет текÑтур"
+msgstr "Ðе удаётÑÑ ÑƒÑтановить $1 как набор текÑтур"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
@@ -780,7 +864,7 @@ msgstr ""
#: builtin/mainmenu/tab_about.lua
msgid "About"
-msgstr "Об Ñтом"
+msgstr "Об игре"
#: builtin/mainmenu/tab_about.lua
msgid "Active Contributors"
@@ -795,16 +879,18 @@ msgid "Core Developers"
msgstr "ОÑновные разработчики"
#: builtin/mainmenu/tab_about.lua
+#, fuzzy
msgid "Open User Data Directory"
-msgstr "Открыть каталог данных пользователÑ"
+msgstr "Открыть папку данных пользователÑ"
#: 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 ""
-"Открывает каталог, Ñодержащий пользовательÑкие миры, игры, моды,\n"
-"и пакеты текÑтур в файловом менеджере / проводнике."
+"Открывает папку, Ñодержащую пользовательÑкие миры, игры, моды,\n"
+"и наборы текÑтур в файловом менеджере / проводнике."
#: builtin/mainmenu/tab_about.lua
msgid "Previous Contributors"
@@ -814,6 +900,11 @@ msgstr "Прошлые учаÑтники"
msgid "Previous Core Developers"
msgstr "Прошлые оÑновные разработчики"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Показывать отладочную информацию"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "ПоиÑк дополнений в Ñети"
@@ -823,8 +914,9 @@ msgid "Content"
msgstr "ДополнениÑ"
#: builtin/mainmenu/tab_content.lua
+#, fuzzy
msgid "Disable Texture Pack"
-msgstr "Отключить пакет текÑтур"
+msgstr "Отключить набор текÑтур"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
@@ -851,8 +943,9 @@ msgid "Uninstall Package"
msgstr "Удалить дополнение"
#: builtin/mainmenu/tab_content.lua
+#, fuzzy
msgid "Use Texture Pack"
-msgstr "ИÑпользовать пакет текÑтур"
+msgstr "ИÑпользовать набор текÑтур"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
@@ -882,10 +975,6 @@ msgstr "ЗапуÑтить Ñервер"
msgid "Install games from ContentDB"
msgstr "УÑтановить игры из ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "ИмÑ"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Ðовый"
@@ -894,10 +983,6 @@ msgstr "Ðовый"
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 "Играть"
@@ -931,10 +1016,6 @@ msgid "Clear"
msgstr "ОчиÑтить"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "ПодключитьÑÑ"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Режим творчеÑтва"
@@ -944,10 +1025,6 @@ msgid "Damage / PvP"
msgstr "Урон / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Убрать из избранного"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Избранное"
@@ -960,8 +1037,13 @@ msgid "Join Game"
msgstr "ПодключитьÑÑ Ðº игре"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Ping"
-msgstr "Пинг"
+msgstr "Задержка"
#: builtin/mainmenu/tab_online.lua
msgid "Public Servers"
@@ -972,10 +1054,19 @@ msgid "Refresh"
msgstr "Обновить"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Удалённый порт"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "ОпиÑание Ñервера"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1020,7 +1111,8 @@ msgid "Dynamic shadows"
msgstr "ДинамичеÑкие тени"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "ДинамичеÑкие тени: "
#: builtin/mainmenu/tab_settings.lua
@@ -1040,20 +1132,23 @@ 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 "Без фильтрации"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "No Mipmap"
-msgstr "Без мипмаппинга"
+msgstr "Без Ñ€Ð°Ð·Ð¼Ñ‹Ñ‚Ð¸Ñ Ñ‚ÐµÐºÑтур"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
@@ -1064,7 +1159,6 @@ msgid "Node Outlining"
msgstr "Обводка нод"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "None"
msgstr "Ðичего"
@@ -1117,7 +1211,8 @@ msgid "Tone Mapping"
msgstr "Тональное отображение"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "ЧувÑтвительноÑть: (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1125,8 +1220,9 @@ msgid "Trilinear Filter"
msgstr "Ð¢Ñ€Ð¸Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
-msgstr "УльтравыÑокое"
+#, fuzzy
+msgid "Very High"
+msgstr "СверхвыÑокое"
#: builtin/mainmenu/tab_settings.lua
msgid "Very Low"
@@ -1144,9 +1240,15 @@ msgstr "ВолниÑтые жидкоÑти"
msgid "Waving Plants"
msgstr "Покачивание раÑтений"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Ошибка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹ÑˆÐ»Ð¾?)"
+
#: src/client/client.cpp src/client/game.cpp
+#, fuzzy
msgid "Connection timed out."
-msgstr "Тайм-аут ÑоединениÑ."
+msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸Ñтекло."
#: src/client/client.cpp
msgid "Done!"
@@ -1170,7 +1272,7 @@ msgstr "Сборка шейдеров..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
-msgstr "Ошибка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (тайм-аут?)"
+msgstr "Ошибка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹ÑˆÐ»Ð¾?)"
#: src/client/clientlauncher.cpp
msgid "Could not find or load game: "
@@ -1230,8 +1332,9 @@ msgstr "- ПубличноÑть: "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
+#, fuzzy
msgid "- PvP: "
-msgstr "- PvP: "
+msgstr "- Режим ÑражениÑ: "
#: src/client/game.cpp
msgid "- Server Name: "
@@ -1279,7 +1382,8 @@ msgid "Camera update enabled"
msgstr "Обновление камеры включено"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr "ÐÐµÐ»ÑŒÐ·Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚ÑŒ границы блока (нужна Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ 'basic_debug')"
#: src/client/game.cpp
@@ -1299,8 +1403,9 @@ msgid "Client disconnected"
msgstr "Клиент отключилÑÑ"
#: src/client/game.cpp
+#, fuzzy
msgid "Client side scripting is disabled"
-msgstr "КлиентÑкие моды отключены"
+msgstr "ПользовательÑкие моды отключены"
#: src/client/game.cpp
msgid "Connecting to server..."
@@ -1410,6 +1515,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Ограничение видимоÑти отключено"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Создание клиента..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Выход в меню"
@@ -1671,23 +1781,23 @@ msgstr "Home"
#: src/client/keycode.cpp
msgid "IME Accept"
-msgstr "IME Accept"
+msgstr "ПринÑть IME"
#: src/client/keycode.cpp
msgid "IME Convert"
-msgstr "IME Convert"
+msgstr "Конвертировать IME"
#: src/client/keycode.cpp
msgid "IME Escape"
-msgstr "IME Escape"
+msgstr "Экранировать IME"
#: src/client/keycode.cpp
msgid "IME Mode Change"
-msgstr "IME Mode Change"
+msgstr "Изменить режим IME"
#: src/client/keycode.cpp
msgid "IME Nonconvert"
-msgstr "IME Nonconvert"
+msgstr "Ðеконвертируемый IME"
#: src/client/keycode.cpp
msgid "Insert"
@@ -1813,7 +1923,7 @@ msgstr "Играть"
#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
-msgstr "Print"
+msgstr "PrtSc"
#: src/client/keycode.cpp
msgid "Return"
@@ -1914,30 +2024,6 @@ msgstr "Ðе удалоÑÑŒ открыть веб-Ñтраницу"
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 ""
-"Ð’Ñ‹ ÑобираетеÑÑŒ впервые приÑоединитьÑÑ Ðº Ñерверу под именем «%s».\n"
-"ЕÑли вы продолжите, на Ñтом Ñервере будет Ñоздан новый аккаунт Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ "
-"учётными данными.\n"
-"ПожалуйÑта, введите пароль ещё раз и нажмите «РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¸ подключение», "
-"чтобы подтвердить Ñоздание аккаунта, либо нажмите «Отмена», чтобы прервать "
-"операцию."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Продолжить"
@@ -1967,10 +2053,11 @@ msgid "Block bounds"
msgstr "Границы блока"
#: src/gui/guiKeyChangeMenu.cpp
+#, fuzzy
msgid "Change camera"
-msgstr "Сменить ракурÑ"
+msgstr "Сменить угол"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Чат"
@@ -2023,10 +2110,8 @@ msgid "Key already in use"
msgstr "Клавиша уже иÑпользуетÑÑ"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"ПривÑзки клавиш. (ЕÑли Ñто меню ÑломаетÑÑ, удалите наÑтройки из minetest."
-"conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2050,7 +2135,7 @@ msgstr "ДальноÑть прориÑовки"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Screenshot"
-msgstr "Cкриншот"
+msgstr "Снимок Ñкрана"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Sneak"
@@ -2062,7 +2147,7 @@ msgstr "Вкл/выкл игровой интерфейÑ"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle chat log"
-msgstr "Включить лог чата"
+msgstr "Вкл/выкл иÑторию чата"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
@@ -2097,10 +2182,6 @@ msgid "Change"
msgstr "Изменить"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Подтверждение паролÑ"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Ðовый пароль"
@@ -2108,6 +2189,10 @@ msgstr "Ðовый пароль"
msgid "Old Password"
msgstr "Старый пароль"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Пароли не Ñовпадают!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Выход"
@@ -2121,12 +2206,6 @@ msgstr "Заглушить"
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 "Введите "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2134,6 +2213,16 @@ msgstr "Введите "
msgid "LANG_CODE"
msgstr "ru"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "ПожалуйÑта, выберите имÑ!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2239,12 +2328,13 @@ msgid "3D noise defining giant caverns."
msgstr "3D-шум, определÑющий огромные пещеры."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"3D noise defining mountain structure and height.\n"
"Also defines structure of floatland mountain terrain."
msgstr ""
-"3D-шум, определÑющий Ñтруктуру гор и их выÑоту.\n"
-"Также определÑет Ñтруктуру гор на парÑщих оÑтровах."
+"3D-шум, определÑющий Ñтроение гор и их выÑоту.\n"
+"Также определÑет Ñтроение гор на парÑщих оÑтровах."
#: src/settings_translation_file.cpp
msgid ""
@@ -2260,8 +2350,9 @@ msgstr ""
"когда значение шума находитьÑÑ Ð² диапазоне от -2.0 до 2.0."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "3D noise defining structure of river canyon walls."
-msgstr "3D-шум, определÑющий Ñтруктуру Ñтен речного каньона."
+msgstr "3D-шум, определÑющий Ñтроение Ñтен речного каньона."
#: src/settings_translation_file.cpp
msgid "3D noise defining terrain."
@@ -2301,6 +2392,10 @@ msgstr ""
"Примечание: в режиме interlaced шейдеры должны быть включены."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2317,8 +2412,9 @@ msgid "A message to be displayed to all clients when the server shuts down."
msgstr "Сообщение, которое будет показано вÑем при отключении Ñервера."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "ABM interval"
-msgstr "ABM интервал"
+msgstr "ABM промежуток"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
@@ -2341,8 +2437,9 @@ msgid "Active Block Modifiers"
msgstr "Модификаторы активных блоков"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Active block management interval"
-msgstr "Интервал ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¼ блоком"
+msgstr "Промежуток ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¼ блоком"
#: src/settings_translation_file.cpp
msgid "Active block range"
@@ -2392,12 +2489,17 @@ msgstr ""
"Регулирует плотноÑть ÑÐ»Ð¾Ñ Ð¿Ð°Ñ€Ñщих оÑтровов.\n"
"Увеличьте значение, чтобы увеличить плотноÑть. Может быть положительным или "
"отрицательным.\n"
-"Значение = 0,0: 50% объема парÑщих оÑтровов.\n"
+"Значение = 0,0: 50% o объема парÑщих оÑтровов.\n"
"Значение = 2,0 (может быть выше в завиÑимоÑти от 'mgv7_np_floatland', вÑегда "
-"теÑтируйте) \n"
+"проверÑйте)\n"
"Ñоздает Ñплошной Ñлой парÑщих оÑтровов."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "ДобавлÑть Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð¼ÐµÑ‚Ð¾Ð²"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Дополнительно"
@@ -2416,7 +2518,8 @@ msgstr ""
"Ñвет, но имеет очень Ñлабый Ñффект на еÑтеÑтвенный ночной Ñвет."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Ð’Ñегда включены полёт и уÑкорение"
#: src/settings_translation_file.cpp
@@ -2426,8 +2529,8 @@ msgstr "Гамма глобального затенениÑ"
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
msgstr ""
-"Задаёт макÑимальное количеÑтво Ñообщений, которые клиент может отправить в "
-"чат в течении 10 Ñекунд."
+"Задаёт предельное количеÑтво Ñообщений, которые клиент может отправить в чат "
+"в течении 10 Ñекунд."
#: src/settings_translation_file.cpp
msgid "Amplifies the valleys."
@@ -2466,7 +2569,7 @@ msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
msgstr ""
-"Делает более реалиÑтичным движение руки\n"
+"Делает более правдоподобным движение руки\n"
"перÑонажа при движении камеры."
#: src/settings_translation_file.cpp
@@ -2497,6 +2600,10 @@ msgstr ""
"УказываетÑÑ Ð² блоках карты (16 нод)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "ÐвтоматичеÑÐºÐ°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вперед"
@@ -2537,12 +2644,9 @@ msgid "Base terrain height."
msgstr "Ð’Ñ‹Ñота оÑновной меÑтноÑти."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Базовый"
-
-#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Basic privileges"
-msgstr "Базовые привилегии"
+msgstr "ОÑновные привилегии"
#: src/settings_translation_file.cpp
msgid "Beach noise"
@@ -2561,7 +2665,8 @@ msgid "Bind address"
msgstr "ÐÐ´Ñ€ÐµÑ Ð¿Ñ€Ð¸Ð²Ñзки"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Параметры температуры и влажноÑти Ð´Ð»Ñ API биомов"
#: src/settings_translation_file.cpp
@@ -2573,6 +2678,10 @@ msgid "Block send optimize distance"
msgstr "Оптимизированное раÑÑтоÑние отправки блока"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Путь к жирному и курÑивному шрифту"
@@ -2597,6 +2706,11 @@ msgid "Builtin"
msgstr "Ð’Ñтроенный"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+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"
@@ -2703,12 +2817,14 @@ msgid "Chat message format"
msgstr "Формат Ñообщений в чате"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Chat message kick threshold"
-msgstr "МакÑимальное количеÑтво Ñообщений в чате (Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ)"
+msgstr "Предельное количеÑтво Ñообщений в чате (Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ)"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Chat message max length"
-msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² чате"
+msgstr "ÐŸÑ€ÐµÐ´ÐµÐ»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² чате"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
@@ -2716,7 +2832,7 @@ msgstr "Кнопка Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ‡Ð°Ñ‚Ð°"
#: src/settings_translation_file.cpp
msgid "Chat weblinks"
-msgstr "Веб-ÑÑылки чата"
+msgstr "Сетевые ÑÑылки в чате"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2761,6 +2877,11 @@ msgid "Client side node lookup range restriction"
msgstr "Ограничение диапазона клиентÑкого поиÑка нод"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Моддинг клиента"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "СкороÑть подъёма"
@@ -2829,30 +2950,28 @@ 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"
+"Уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ Ñохранении картографичеÑких блоков на "
+"диÑке.\n"
+"-1 - уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ Ð¿Ð¾ умолчанию\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"
+"Уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ отправке блоков карты клиенту.\n"
+"-1 - уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ Ð¿Ð¾ умолчанию\n"
"0 - без компреÑÑора, Ñамый быÑтрый\n"
"9 - лучшее Ñжатие, Ñамое медленное\n"
"(уровни 1-3 иÑпользуют \"быÑтрый\" метод Zlib, 4-9 иÑпользуют обычный метод)"
@@ -2882,12 +3001,18 @@ msgid "Console height"
msgstr "Ð’Ñ‹Ñота конÑоли"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "Сетевое хранилище"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "Чёрный ÑпиÑок флагов ContentDB"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "ContentDB Max Concurrent Downloads"
-msgstr "МакÑимальное количеÑтво одновременных загрузок ContentDB"
+msgstr "Предельное количеÑтво одновременных загрузок ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2920,8 +3045,10 @@ msgstr ""
"72 = 20 минут, 360 = 4 минуты, 1 = 24 чаÑа, 0 = Ñтатичное Ð²Ñ€ÐµÐ¼Ñ Ñуток."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Контролирует ÑкороÑть Ð¿Ð¾Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð² жидкоÑти."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2961,7 +3088,7 @@ msgid ""
"This also applies to the object crosshair."
msgstr ""
"ПрозрачноÑть прицела (от 0 (прозрачно) до 255 (непрозрачно)).\n"
-"Также контролирует перекреÑÑ‚Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°."
+"Также контролирует цвет перекреÑÑ‚Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2996,12 +3123,12 @@ msgid "Debug log level"
msgstr "Отладочный уровень"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Клавиша ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Уменьшите значение, чтобы увеличить Ñопротивление жидкоÑти движению."
+msgid "Dec. volume key"
+msgstr "Клавиша ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3036,17 +3163,17 @@ msgid "Default report format"
msgstr "Формат отчёта по умолчанию"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Default stack size"
-msgstr "Размер Ñтака по умолчанию"
+msgstr "Размер Ñтопки по умолчанию"
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"Определите качеÑтво фильтрации теней\n"
+"Определите качеÑтво фильтрации теней.\n"
"Это имитирует Ñффект мÑгких теней, применÑÑ PCF или пуаÑÑоновÑкий диÑк\n"
"но также иÑпользует больше реÑурÑов."
@@ -3074,8 +3201,9 @@ msgstr ""
"ОпределÑет полный размер пещер, меньшие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñоздают большие пещеры."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Defines large-scale river channel structure."
-msgstr "ОпределÑет крупномаÑштабную Ñтруктуру каналов рек."
+msgstr "ОпределÑет крупномаÑштабное Ñтроение каналов рек."
#: src/settings_translation_file.cpp
msgid "Defines location and terrain of optional hills and lakes."
@@ -3090,9 +3218,10 @@ msgid "Defines the depth of the river channel."
msgstr "ОпределÑет глубину руÑла реки."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
msgstr ""
-"ОпределÑет макÑимальное раÑÑтоÑние Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸Ð³Ñ€Ð¾ÐºÐ° в блоках (0 = "
+"ОпределÑет предельное раÑÑтоÑние Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸Ð³Ñ€Ð¾ÐºÐ° в блоках (0 = "
"неограниченное)."
#: src/settings_translation_file.cpp
@@ -3108,13 +3237,14 @@ msgid "Defines tree areas and tree density."
msgstr "ОпределÑет облаÑти и плотноÑть деревьев."
#: src/settings_translation_file.cpp
+#, fuzzy
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 ""
"Задержка между обновлением мешей на клиенте в миллиÑекундах. Увеличение "
"Ñтого значениÑ\n"
-"замедлит темп Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼ÐµÑˆÐµÐ¹, тем Ñамым ÑƒÐ¼ÐµÐ½ÑŒÑˆÐ°Ñ ÐºÐ¾Ð»ÐµÐ±Ð°Ð½Ð¸Ñ ÐºÐ°Ð´Ñ€Ð¾Ð²Ð¾Ð¹ "
+"замедлит ÑкороÑть Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼ÐµÑˆÐµÐ¹, тем Ñамым ÑƒÐ¼ÐµÐ½ÑŒÑˆÐ°Ñ ÐºÐ¾Ð»ÐµÐ±Ð°Ð½Ð¸Ñ ÐºÐ°Ð´Ñ€Ð¾Ð²Ð¾Ð¹ "
"чаÑтоты на медленных клиентах."
#: src/settings_translation_file.cpp
@@ -3130,8 +3260,9 @@ msgid "Deprecated Lua API handling"
msgstr "Обработка уÑтаревшего Lua API"
#: src/settings_translation_file.cpp
+#, fuzzy
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."
@@ -3162,6 +3293,11 @@ msgid "Desynchronize block animation"
msgstr "РаÑÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ð¸ блоков"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "УкрашениÑ"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Кнопка копать"
@@ -3182,6 +3318,12 @@ msgid "Display Density Scaling Factor"
msgstr "КоÑффициент маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚Ð½Ð¾Ñти отображениÑ"
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Доменное Ð¸Ð¼Ñ Ñервера, отображаемое в ÑпиÑке Ñерверов."
@@ -3241,13 +3383,12 @@ msgstr ""
"иÑпользуетÑÑ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ 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"
@@ -3262,6 +3403,10 @@ msgid "Enable joysticks"
msgstr "Включить джойÑтики"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Включить поддержку каналов модов."
@@ -3278,18 +3423,6 @@ 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 ""
-"Включить подтверждение региÑтрации при подключении к Ñерверу.\n"
-"ЕÑли отключено, то новый аккаунт будет зарегиÑтрирован автоматичеÑки."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3298,6 +3431,10 @@ msgstr ""
"Отключите Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ выÑокой ÑкороÑти или другого внешнего вида."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3396,8 +3533,14 @@ msgstr ""
"ценой мелких визуальных дефектов, не влиÑющих на геймплей."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "Профиль долины"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Engine profiling data print interval"
-msgstr "Интервал печати данных Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐºÐ°"
+msgstr "Промежуток печати данных Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐºÐ°"
#: src/settings_translation_file.cpp
msgid "Entity methods"
@@ -3420,6 +3563,10 @@ msgstr ""
"Ñ Ð±Ð¾Ð»ÐµÐµ плоÑкими низинами, подходит Ð´Ð»Ñ Ð¼Ð°ÑÑивного ÑƒÑ€Ð¾Ð²Ð½Ñ Ð¿Ð°Ñ€Ñщих оÑтровов."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "МакÑимум кадровой чаÑтоты при паузе или когда окно вне фокуÑа"
@@ -3465,11 +3612,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Field of view"
-msgstr "Поле зрениÑ"
+msgstr "Угол обзора"
#: src/settings_translation_file.cpp
msgid "Field of view in degrees."
-msgstr "Поле Ð·Ñ€ÐµÐ½Ð¸Ñ Ð² градуÑах."
+msgstr "Угол обзора в градуÑах."
#: src/settings_translation_file.cpp
msgid ""
@@ -3477,7 +3624,7 @@ msgid ""
"the\n"
"Multiplayer Tab."
msgstr ""
-"Файл в директории client/serverlist/, Ñодержащий ваши избранные Ñерверы\n"
+"Файл в папке client/serverlist/, Ñодержащий ваши избранные Ñерверы\n"
"из вкладки Мультиплеер."
#: src/settings_translation_file.cpp
@@ -3508,8 +3655,9 @@ msgstr ""
"mipmapping."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "ФильтрациÑ"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Сглаживание:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3576,12 +3724,17 @@ msgid "Fog toggle key"
msgstr "Клавиша Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ‚ÑƒÐ¼Ð°Ð½Ð°"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+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"
@@ -3596,19 +3749,16 @@ msgid "Font size"
msgstr "Размер шрифта"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Font size divisible by"
msgstr "Размер шрифта, кратный"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
-msgstr "Размер Ñтандартного шрифта в пунктах (pt)."
+msgstr "Размер Ñтандартного шрифта в пунктах (pt)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
-msgstr "Размер моноширинного шрифта в пунктах (pt)."
+msgstr "Размер моноширинного шрифта в пунктах (pt)"
#: src/settings_translation_file.cpp
msgid ""
@@ -3647,8 +3797,9 @@ msgstr ""
"@name, @message, @timestamp (необÑзательно)"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Format of screenshots."
-msgstr "Формат Ñкриншотов."
+msgstr "Формат Ñнимков Ñкрана."
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Color"
@@ -3748,11 +3899,23 @@ msgid "GUI scaling filter txr2img"
msgstr "Фильтр txr2img Ð´Ð»Ñ Ð¼Ð°ÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñа"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Игры"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
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"
@@ -3783,8 +3946,19 @@ msgid "Graphics"
msgstr "Графика"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Графика"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Графика"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Gravity"
-msgstr "ГравитациÑ"
+msgstr "ПритÑжение"
#: src/settings_translation_file.cpp
msgid "Ground level"
@@ -3799,8 +3973,13 @@ msgid "HTTP mods"
msgstr "Моды HTTP"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "МаÑштаб игрового интерфейÑа"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "МаÑштабирование интерфейÑа"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -4059,12 +4238,21 @@ msgstr ""
"Требует, чтобы волниÑтые жидкоÑти были включены."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"Ð’Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ñервера до выгрузки неиÑпользуемых блоков.\n"
-"Ð’Ñ‹Ñокие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ плавные, но иÑпользуют больше RAM."
+"Ð’Ñ‹Ñокие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ плавные, но иÑпользуют больше оперативной памÑти."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "Уменьшите значение, чтобы увеличить Ñопротивление жидкоÑти движению."
#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
@@ -4141,6 +4329,15 @@ msgstr ""
"ÑпуÑка."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Включить подтверждение региÑтрации при подключении к Ñерверу.\n"
+"ЕÑли отключено, то новый аккаунт будет зарегиÑтрирован автоматичеÑки."
+
+#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
@@ -4169,7 +4366,10 @@ msgstr ""
"взглÑда игрока во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð»Ñ‘Ñ‚Ð° или плаваниÑ."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
"ЕÑли включено, то новые игроки не Ñмогут подключатьÑÑ Ñ Ð¿ÑƒÑтым паролем."
@@ -4212,18 +4412,15 @@ msgstr ""
"debug.txt перемещаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ тогда, когда Ñто значение положительное."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "If this is set, players will always (re)spawn at the given position."
-msgstr "ЕÑли уÑтановлено, то игроки будут возрождатьÑÑ Ð² указанной позиции."
+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 "ПрозрачноÑть фона внутриигровой конÑоли (непрозрачноÑть от 0 до 255)."
@@ -4278,16 +4475,15 @@ msgid "Instrument the methods of entities on registration."
msgstr "ЗамерÑть методы ÑущноÑтей."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Замеры"
-
-#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Interval of saving important changes in the world, stated in seconds."
-msgstr "Интервал ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ð°Ð¶Ð½Ñ‹Ñ… изменений в мире, уÑтановленный в Ñекундах."
+msgstr ""
+"Промежуток ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ð°Ð¶Ð½Ñ‹Ñ… изменений в мире, уÑтановленный в Ñекундах."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
-msgstr "Интервал отправки клиентам Ñведений о времени днÑ."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
+msgstr "Промежуток отправки клиентам Ñведений о времени днÑ."
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
@@ -4979,7 +5175,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Клавиша ÑнÑÑ‚Ð¸Ñ Ñкриншота.\n"
+"Клавиша Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñнимка Ñкрана .\n"
"См. http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5145,6 +5341,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
"ЕÑли клиент отправит в чат Ñтолько Ñообщений в течении 10 Ñекунд, то будет "
@@ -5167,12 +5367,14 @@ msgid "Large cave depth"
msgstr "Глубина больших пещер"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Large cave maximum number"
-msgstr "МакÑимальное количеÑтво больших пещер"
+msgstr "Предельное количеÑтво больших пещер"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Large cave minimum number"
-msgstr "Минимальное количеÑтво больших пещер"
+msgstr "Ðаименьшее количеÑтво больших пещер"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
@@ -5204,12 +5406,13 @@ msgid "Left key"
msgstr "Кнопка выхода"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
-"Длина Ñерверного тика и интервал, на котором объекты обычно\n"
+"Длина Ñерверного тика и промежуток, на котором объекты обычно\n"
"обновлÑÑŽÑ‚ÑÑ Ð¿Ð¾ Ñети."
#: src/settings_translation_file.cpp
@@ -5221,18 +5424,25 @@ msgstr ""
"ТребуетÑÑ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ðµ волниÑтых жидкоÑтей."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+#, fuzzy
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñƒ циклами Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð² активных блоков (ABM)"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñƒ циклами Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ‚Ð°Ð¹Ð¼ÐµÑ€Ð¾Ð² нод"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñƒ циклами ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¼Ð¸ блоками (ABM)"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5241,7 +5451,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Уровень логов Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи в debug.txt:\n"
"- <nothing> (нет логов)\n"
@@ -5277,6 +5488,11 @@ msgid "Light curve low gradient"
msgstr "Ðизкий градиент кривой Ñвета"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+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"
@@ -5311,8 +5527,9 @@ msgid "Liquid fluidity smoothing"
msgstr "Сглаживание текучеÑти жидкоÑтей"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Liquid loop max"
-msgstr "МакÑимальное количеÑтво зацикленных жидкоÑтей"
+msgstr "Предельное количеÑтво зацикленных жидкоÑтей"
#: src/settings_translation_file.cpp
msgid "Liquid queue purge time"
@@ -5323,12 +5540,14 @@ msgid "Liquid sinking"
msgstr "Стекание жидкоÑти"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Liquid update interval in seconds."
-msgstr "Интервал Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¶Ð¸Ð´ÐºÐ¾Ñтей в Ñекундах."
+msgstr "Промежуток Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¶Ð¸Ð´ÐºÐ¾Ñтей в Ñекундах."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Liquid update tick"
-msgstr "Интервал Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¶Ð¸Ð´ÐºÐ¾Ñтей"
+msgstr "Промежуток Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¶Ð¸Ð´ÐºÐ¾Ñтей"
#: src/settings_translation_file.cpp
msgid "Load the game profiler"
@@ -5379,8 +5598,9 @@ msgid "Map Compression Level for Network Transfer"
msgstr "Уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ ÐºÐ°Ñ€Ñ‚Ñ‹ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸ по Ñети"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Map directory"
-msgstr "Каталог ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÐºÐ°Ñ€Ñ‚"
+msgstr "Папка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÐºÐ°Ñ€Ñ‚"
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen Carpathian."
@@ -5437,6 +5657,7 @@ msgstr ""
"активируютÑÑ Ð´Ð¶ÑƒÐ½Ð³Ð»Ð¸, а флаг «jungles» игнорируетÑÑ."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
"'ridges': Rivers.\n"
@@ -5446,18 +5667,18 @@ msgstr ""
"Ðтрибуты генерации карт, Ñпецифичные Ð´Ð»Ñ Mapgen v7.\n"
"'ridges': Реки.\n"
"'floatlands': ПарÑщие оÑтрова Ñуши в атмоÑфере.\n"
-"'caverns': ГигантÑкие пещеры глубоко под землей."
+"'caverns': Крупные пещеры глубоко под землей."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
msgstr "Предел генерации карты"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Map save interval"
-msgstr "Интервал ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÐºÐ°Ñ€Ñ‚Ñ‹"
+msgstr "Промежуток ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÐºÐ°Ñ€Ñ‚Ñ‹"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Map shadows update frames"
msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ñ€Ñ‚Ñ‹"
@@ -5474,32 +5695,36 @@ msgid "Mapblock mesh generator's MapBlock cache size in MB"
msgstr "Размер кÑша блоков карты в генераторе мешей в МБ"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Mapblock unload timeout"
-msgstr "Тайм-аут выгрузки блоков"
+msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð²Ñ‹Ð³Ñ€ÑƒÐ·ÐºÐ¸ блоков"
#: src/settings_translation_file.cpp
msgid "Mapgen Carpathian"
msgstr "Картогенератор Карпаты"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Mapgen Carpathian specific flags"
-msgstr "Специальные флаги генератора Карпаты"
+msgstr "ОÑобые флаги генератора Карпаты"
#: src/settings_translation_file.cpp
msgid "Mapgen Flat"
msgstr "Картогенератор плоÑкоÑти"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Mapgen Flat specific flags"
-msgstr "Специальные флаги картогенератора плоÑкоÑти"
+msgstr "ОÑобые флаги картогенератора плоÑкоÑти"
#: src/settings_translation_file.cpp
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"
@@ -5514,24 +5739,27 @@ msgid "Mapgen V6"
msgstr "Картогенератор V6"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Mapgen V6 specific flags"
-msgstr "Специальные флаги картогенератора V6"
+msgstr "ОÑобые флаги картогенератора V6"
#: src/settings_translation_file.cpp
msgid "Mapgen V7"
msgstr "Картогенератор V7"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Mapgen V7 specific flags"
-msgstr "Специальные флаги картогенератора V7"
+msgstr "ОÑобые флаги картогенератора V7"
#: src/settings_translation_file.cpp
msgid "Mapgen Valleys"
msgstr "Картогенератор долин"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Mapgen Valleys specific flags"
-msgstr "Специальные флаги картогенератора долин"
+msgstr "ОÑобые флаги картогенератора долин"
#: src/settings_translation_file.cpp
msgid "Mapgen debug"
@@ -5542,193 +5770,221 @@ msgid "Mapgen name"
msgstr "Ðазвание картогенератора"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Max block generate distance"
-msgstr "МакÑимальное раÑÑтоÑние генерации блоков"
+msgstr "Предельное раÑÑтоÑние генерации блоков"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Max block send distance"
-msgstr "МакÑимальное раÑÑтоÑние отправки блоков"
+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 "КоличеÑтво дополнительно загружаемых блоков clearobjects"
#: 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, когда окно не ÑфокуÑировано, или когда игра приоÑтановлена."
+"Предел кадровой чаÑтоты, когда окно не ÑфокуÑировано, или когда игра "
+"приоÑтановлена."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum distance to render shadows."
-msgstr "МакÑимальное раÑÑтоÑние Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ñовки теней."
+msgstr "Предельное раÑÑтоÑние Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ñовки теней."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum forceloaded blocks"
-msgstr "МакÑимальное количеÑтво принудительно загруженных блоков"
+msgstr "Предельное количеÑтво принудительно загруженных блоков"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum hotbar width"
-msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° горÑчей панели"
+msgstr "ÐŸÑ€ÐµÐ´ÐµÐ»ÑŒÐ½Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° горÑчей панели"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum limit of random number of large caves per mapchunk."
msgstr ""
-"МакÑимальный предел Ñлучайного количеÑтва больших пещер на куÑок карты."
+"Предельное ограничение Ñлучайного количеÑтва больших пещер на куÑок карты."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum limit of random number of small caves per mapchunk."
msgstr ""
-"МакÑимальный предел Ñлучайного количеÑтва маленьких пещер на куÑок карты."
+"Предельное ограничение Ñлучайного количеÑтва маленьких пещер на куÑок карты."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
-"МакÑимальное Ñопротивление жидкоÑти. Контролирует замедление\n"
+"Предельное Ñопротивление жидкоÑти. Контролирует замедление\n"
"при погружении в жидкоÑть на выÑокой ÑкороÑти."
#: 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 ""
-"МакÑимальное количеÑтво одновременно отправлÑемых каждому клиенту блоков.\n"
+"Предельное количеÑтво одновременно отправлÑемых каждому клиенту блоков.\n"
"Общее макÑимальное количеÑтво вычиÑлÑетÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑки:\n"
"max_total = ceil((#clients + max_users) * per_client / 4)"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum number of blocks that can be queued for loading."
msgstr ""
-"МакÑимальное количеÑтво блоков, которые могут быть помещены в очередь Ð´Ð»Ñ "
+"Предельное количеÑтво блоков, которые могут быть помещены в очередь Ð´Ð»Ñ "
"загрузки."
#: 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"
+"Предельное количеÑтво блоков в очередь, которые должны быть образованы.\n"
"Это ограничение применÑетÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ игрока."
#: 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"
"Это ограничение применÑетÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ игрока."
#: 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 ""
-"МакÑимальное количеÑтво одновременных загрузок. Загрузки, превышающие Ñтот "
-"лимит, будут поÑтавлены в очередь.\n"
+"Предельное количеÑтво одновременных загрузок. Загрузки, превышающие Ñто "
+"ограничение, будут поÑтавлены в очередь.\n"
"Это должно быть меньше curl_parallel_limit."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum number of forceloaded mapblocks."
-msgstr "МакÑимальное количеÑтво принудительно загруженных блоков."
+msgstr "Предельное количеÑтво принудительно загруженных блоков."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of mapblocks for client to be kept in memory.\n"
"Set to -1 for unlimited amount."
msgstr ""
-"МакÑимальное количеÑтво блоков в памÑти клиента.\n"
+"Предельное количеÑтво блоков в памÑти клиента.\n"
"УÑтановите в -1 Ð´Ð»Ñ Ð±ÐµÑконечного количеÑтва."
#: src/settings_translation_file.cpp
+#, fuzzy
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 ""
-"МакÑимальное количеÑтво пакетов, отправлÑемых за шаг. ЕÑли у Ð²Ð°Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ðµ "
+"Предельное количеÑтво пакетов, отправлÑемых за раз. ЕÑли у Ð²Ð°Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ðµ "
"подключение,\n"
"попробуйте уменьшить его, но не уÑтанавливайте ниже Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°,\n"
"умноженного на два."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum number of players that can be connected simultaneously."
-msgstr "МакÑимальное количеÑтво одновременно подключённых игроков."
+msgstr "Предельное количеÑтво одновременно подключённых игроков."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum number of recent chat messages to show"
-msgstr "МакÑимальное количеÑтво поÑледних отображаемых Ñообщений чата"
+msgstr "Предельное количеÑтво поÑледних отображаемых Ñообщений чата"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum number of statically stored objects in a block."
-msgstr "МакÑимальное количеÑтво ÑтатичеÑки хранимых объектов в блоке."
+msgstr "Предельное количеÑтво ÑтатичеÑки хранимых объектов в блоке."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum objects per block"
-msgstr "МакÑимальное количеÑтво объектов на блок"
+msgstr "Предельное количеÑтво объектов на блок"
#: src/settings_translation_file.cpp
+#, fuzzy
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 ""
-"МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð¾Ð»Ñ Ð¾ÐºÐ½Ð°, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ð°Ñ Ð´Ð»Ñ Ð³Ð¾Ñ€Ñчей панели.\n"
+"ÐŸÑ€ÐµÐ´ÐµÐ»ÑŒÐ½Ð°Ñ Ð´Ð¾Ð»Ñ Ð¾ÐºÐ½Ð°, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ð°Ñ Ð´Ð»Ñ Ð³Ð¾Ñ€Ñчей панели.\n"
"Полезно, еÑли что-то будет отображатьÑÑ Ñправа или Ñлева от него."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum simultaneous block sends per client"
-msgstr "МакÑимальное чиÑло одновременно отправлÑемых блоков на клиент"
+msgstr "Предельное чиÑло одновременно отправлÑемых блоков на клиент"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum size of the out chat queue"
-msgstr "МакÑимальный размер очереди иÑходÑщих Ñообщений"
+msgstr "Предельный размер очереди иÑходÑщих Ñообщений"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum size of the out chat queue.\n"
"0 to disable queueing and -1 to make the queue size unlimited."
msgstr ""
-"МакÑимальный размер очереди иÑходÑщих Ñообщений.\n"
+"Предельный размер очереди иÑходÑщих Ñообщений.\n"
"0 Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ и -1 Ð´Ð»Ñ Ð½ÐµÐ¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð½Ð¾Ð³Ð¾ размера."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum time a file download (e.g. a mod download) may take, stated in "
"milliseconds."
msgstr ""
-"МакÑимальное Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файла (например, загрузки мода), указанное в "
+"Предельное Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файла (например, загрузки мода), указанное в "
"миллиÑекундах."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum time an interactive request (e.g. server list fetch) may take, "
"stated in milliseconds."
msgstr ""
-"МакÑимальное времÑ, которое может занÑть интерактивный Ð·Ð°Ð¿Ñ€Ð¾Ñ (например, "
+"Предельное времÑ, которое может занÑть интерактивный Ð·Ð°Ð¿Ñ€Ð¾Ñ (например, "
"получение ÑпиÑка Ñерверов), указываетÑÑ Ð² миллиÑекундах."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum users"
-msgstr "МакÑимальное количеÑтво пользователей"
-
-#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Меню"
+msgstr "Предельное количеÑтво пользователей"
#: src/settings_translation_file.cpp
msgid "Mesh cache"
@@ -5743,12 +5999,14 @@ msgid "Message of the day displayed to players connecting."
msgstr "Сообщение, отображаемое подключившимÑÑ Ð¸Ð³Ñ€Ð¾ÐºÐ°Ð¼."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Method used to highlight selected object."
-msgstr "Метод подÑветки выделенного объекта."
+msgstr "СпоÑоб подÑветки выделенного объекта."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Minimal level of logging to be written to chat."
-msgstr "Минимальный уровень запиÑи в чат."
+msgstr "Ðаименьший уровень запиÑи в чат."
#: src/settings_translation_file.cpp
msgid "Minimap"
@@ -5763,20 +6021,38 @@ msgid "Minimap scan height"
msgstr "Ð’Ñ‹Ñота ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¸Ð½Ð¸ÐºÐ°Ñ€Ñ‚Ñ‹"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr "Минимальный предел Ñлучайного количеÑтва больших пещер на куÑок карты."
+msgstr "Ðаименьший предел Ñлучайного количеÑтва больших пещер на куÑок карты."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr "Минимальное количеÑтво маленьких пещер на куÑок карты."
+msgstr "Ðаименьшее количеÑтво маленьких пещер на куÑок карты."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Minimum texture size"
-msgstr "Минимальный размер текÑтуры"
+msgstr "Ðаименьший размер текÑтуры"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Mipmapping"
-msgstr "Мипмаппинг (MIP-текÑтурирование)"
+msgstr "Размытие текÑтур (MIP-текÑтурирование)"
+
+#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "Профилировщик"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "БезопаÑноÑть"
#: src/settings_translation_file.cpp
msgid "Mod channels"
@@ -5795,9 +6071,8 @@ msgid "Monospace font size"
msgstr "Размер моноширинного шрифта"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Monospace font size divisible by"
-msgstr "Размер моноширинного шрифта"
+msgstr "Размер моноширинного шрифта, кратный"
#: src/settings_translation_file.cpp
msgid "Mountain height noise"
@@ -5876,10 +6151,6 @@ 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."
@@ -5888,6 +6159,11 @@ msgstr ""
"Этот параметр будет переопределён, еÑли запуÑтить Ñервер из главного меню."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "Сеть"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Ðовым пользователÑм нужно вводить Ñтот пароль."
@@ -5900,12 +6176,18 @@ msgid "Noclip key"
msgstr "Клавиша Ð¿Ñ€Ð¾Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ñквозь Ñтены"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "ПодÑветка нод"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "ПодÑветка нод"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "NodeTimer interval"
-msgstr "Интервал таймера нод"
+msgstr "Промежуток таймера нод"
#: src/settings_translation_file.cpp
msgid "Noises"
@@ -5954,10 +6236,6 @@ msgstr ""
"памÑти (4096=100 MБ, как правило)."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Сетевой репозиторий"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "Ðепрозрачные жидкоÑти"
@@ -5980,7 +6258,6 @@ msgid "Optional override for chat weblink color."
msgstr "ÐеобÑзательное переопределение цвета ÑÑылки в чате."
#: src/settings_translation_file.cpp
-#, fuzzy
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 "
@@ -5993,29 +6270,31 @@ msgstr ""
"шрифт недоÑтупен."
#: 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 ""
-"Путь Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñкриншотов. Может быть абÑолютным или отноÑительным "
+"Путь Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñнимков Ñкрана. Может быть абÑолютным или отноÑительным "
"путем.\n"
"Папка будет Ñоздана, еÑли она еще не ÑущеÑтвует."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Path to shader directory. If no path is defined, default location will be "
"used."
msgstr ""
-"Путь к директории Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð°Ð¼Ð¸. ЕÑли не задан, то будет иÑпользоватьÑÑ Ð¿ÑƒÑ‚ÑŒ "
-"по умолчанию."
+"Путь к папке Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð°Ð¼Ð¸. ЕÑли не задан, то будет иÑпользоватьÑÑ Ð¿ÑƒÑ‚ÑŒ по "
+"умолчанию."
#: src/settings_translation_file.cpp
+#, fuzzy
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. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
@@ -6067,22 +6346,20 @@ msgid "Place key"
msgstr "Клавиша положить"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Place repetition interval"
-msgstr "Интервал повторного размещениÑ"
+msgstr "Промежуток повторного размещениÑ"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Player is able to fly without being affected by gravity.\n"
"This requires the \"fly\" privilege on the server."
msgstr ""
-"Игрок может летать без влиÑÐ½Ð¸Ñ Ð³Ñ€Ð°Ð²Ð¸Ñ‚Ð°Ñ†Ð¸Ð¸.\n"
+"Игрок может летать без влиÑÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ñ‚ÑжениÑ.\n"
"Это требует привилегии 'fly' на Ñервере."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Ð˜Ð¼Ñ Ð¸Ð³Ñ€Ð¾ÐºÐ°"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "РаÑÑтоÑние передачи игрока"
@@ -6119,11 +6396,13 @@ msgstr ""
"конÑольных команд."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Print the engine's profiling data in regular intervals (in seconds).\n"
"0 = disable. Useful for developers."
msgstr ""
-"Печатать информацию о профилировании через заданные интервалы (в Ñекундах).\n"
+"Печатать информацию о профилировании через заданные промежутки (в "
+"Ñекундах).\n"
"0 = отключить. Полезно Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð²."
#: src/settings_translation_file.cpp
@@ -6139,15 +6418,10 @@ msgid "Profiler toggle key"
msgstr "Клавиша Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ñ‰Ð¸ÐºÐ°"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Профилирование"
-
-#: src/settings_translation_file.cpp
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"
@@ -6336,6 +6610,11 @@ msgstr ""
"пикÑелей на гранÑÑ… при маÑштабировании на нецелые размеры."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Экран:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Ð’Ñ‹Ñота Ñкрана"
@@ -6344,28 +6623,37 @@ msgid "Screen width"
msgstr "Ширина Ñкрана"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Screenshot folder"
-msgstr "Каталог Ñо Ñкриншотами"
+msgstr "Папка Ð´Ð»Ñ Ñнимков Ñкрана"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Screenshot format"
-msgstr "Формат Ñкриншота"
+msgstr "Формат Ñнимка Ñкрана"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Screenshot quality"
-msgstr "КачеÑтво Ñкриншота"
+msgstr "КачеÑтво Ñнимка Ñкрана"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Screenshot quality. Only used for JPEG format.\n"
"1 means worst quality; 100 means best quality.\n"
"Use 0 for default quality."
msgstr ""
-"КачеÑтво Ñкриншота. ИÑпользуетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ð¹ в формате JPEG.\n"
+"КачеÑтво Ñнимка Ñкрана. ИÑпользуетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ð¹ в формате JPEG.\n"
"1 означает худшее качеÑтво; 100 означает лучшее качеÑтво.\n"
"ИÑпользуйте 0 Ð´Ð»Ñ Ð½Ð°Ñтроек по умолчанию."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Снимок Ñкрана"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Шум морÑкого дна"
@@ -6380,10 +6668,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Второй из двух 3D-шумов, которые вмеÑте определÑÑŽÑ‚ туннели."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "БезопаÑноÑть"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "См. http://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6442,8 +6726,19 @@ msgstr ""
"18 = 4D \"Mandelbulb\" множеÑтво Жюлиа."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Сервер / Ð¾Ð´Ð¸Ð½Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð³Ñ€Ð°"
+#, fuzzy
+msgid "Server"
+msgstr "URL Ñервера"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Ð˜Ð¼Ñ Ñервера"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "ОпиÑание Ñервера"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6470,10 +6765,20 @@ msgid "Server side occlusion culling"
msgstr "ОтÑечение невидимой геометрии на Ñтороне Ñервера"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Порт Ñервера"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "ÐÐ´Ñ€ÐµÑ ÑпиÑка Ñерверов"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "ÐÐ´Ñ€ÐµÑ ÑпиÑка Ñерверов"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Файл ÑпиÑка Ñерверов"
@@ -6482,18 +6787,22 @@ msgid ""
"Set the language. Leave empty to use the system language.\n"
"A restart is required after changing this."
msgstr ""
-"УÑтановка Ñзыка. ОÑтавьте пуÑтым Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑиÑтемного Ñзыка.\n"
+"УÑтановка Ñзыка. ОÑтавьте пуÑтым Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñзыка ÑиÑтемы.\n"
"Требует перезапуÑка поÑле изменениÑ."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
-"Задаёт макÑимальное количеÑтво Ñимволов в Ñообщении, отправлÑемом клиентами "
-"в чат."
+"Задаёт предельное количеÑтво Ñимволов в Ñообщении, отправлÑемом клиентами в "
+"чат."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
"УÑтановите Ñилу тени.\n"
@@ -6505,7 +6814,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
"УÑтановить размер радиуÑа мÑгкой тени.\n"
"Меньшие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ð·Ð½Ð°Ñ‡Ð°ÑŽÑ‚ более резкие тени, большие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ мÑгкие.\n"
@@ -6520,7 +6829,7 @@ msgid ""
msgstr ""
"УÑтановка наклона орбиты Солнца/Луны в градуÑах.\n"
"Значение 0 означает отÑутÑтвие наклона / вертикальную орбиту.\n"
-"Минимальное значение 0.0 и макÑимальное значение 60.0"
+"Ðаименьшее значение 0.0 и макÑимальное значение 60.0"
#: src/settings_translation_file.cpp
msgid ""
@@ -6585,8 +6894,9 @@ msgid "Shadow filter quality"
msgstr "КачеÑтво теневого фильтра"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Shadow map max distance in nodes to render shadows"
-msgstr "МакÑимальное раÑÑтоÑние карты теней в узлах Ð´Ð»Ñ Ñ€ÐµÐ½Ð´ÐµÑ€Ð¸Ð½Ð³Ð° теней"
+msgstr "Предельное раÑÑтоÑние карты теней в нодах Ð´Ð»Ñ Ñ€ÐµÐ½Ð´ÐµÑ€Ð¸Ð½Ð³Ð° теней"
#: src/settings_translation_file.cpp
msgid "Shadow map texture in 32 bits"
@@ -6605,7 +6915,8 @@ msgstr ""
"будет показана."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+#, fuzzy
+msgid "Shadow strength gamma"
msgstr "Сила тени"
#: src/settings_translation_file.cpp
@@ -6629,9 +6940,8 @@ msgstr ""
"Требует перезапуÑка поÑле изменениÑ."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Show name tag backgrounds by default"
-msgstr "Отображать фон у табличек Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸"
+msgstr "Отображать задний план у табличек Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6679,12 +6989,14 @@ msgid "Slope and fill work together to modify the heights."
msgstr "Склон и заполнение работают ÑовмеÑтно Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ñ‹Ñот."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Small cave maximum number"
-msgstr "МакÑимальное количеÑтво маленьких пещер"
+msgstr "Предельное количеÑтво маленьких пещер"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Small cave minimum number"
-msgstr "Минимальное количеÑтво маленьких пещер"
+msgstr "Ðаименьшее количеÑтво маленьких пещер"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
@@ -6750,13 +7062,14 @@ msgstr ""
"Файлы, которых не будет, будут Ñкачены обычным путём."
#: src/settings_translation_file.cpp
+#, fuzzy
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 ""
-"УÑтанавливает размер Ñтека нодов, предметов и инÑтрументов по-умолчанию.\n"
-"Обратите внимание, что моды или игры могут Ñвно уÑтановить Ñтек Ð´Ð»Ñ "
+"УÑтанавливает размер Ñтопки блоков, предметов и инÑтрументов по умолчанию.\n"
+"Обратите внимание, что моды или игры могут Ñвно уÑтановить Ñтопку Ð´Ð»Ñ "
"определенных (или вÑех) предметов."
#: src/settings_translation_file.cpp
@@ -6770,7 +7083,7 @@ msgstr ""
"Более выÑокие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ Ñделать тени неÑтабильными, более низкие "
"значениÑ\n"
"будут потреблÑть больше реÑурÑов.\n"
-"Минимальное значение: 1; макÑимальное значение: 16"
+"Ðаименьшее значение: 1; Предельное значение: 16"
#: src/settings_translation_file.cpp
msgid ""
@@ -6858,12 +7171,18 @@ msgid "Temperature variation for biomes."
msgstr "Ð’Ð°Ñ€Ð¸Ð°Ñ†Ð¸Ñ Ñ‚ÐµÐ¼Ð¿ÐµÑ€Ð°Ñ‚ÑƒÑ€ в биомах."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "ÐаÑтройки"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "Ðльтернативный шум рельефа"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Terrain base noise"
-msgstr "Базовый шум поверхноÑти"
+msgstr "ОÑновной шум поверхноÑти"
#: src/settings_translation_file.cpp
msgid "Terrain height"
@@ -6906,7 +7225,6 @@ 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"
@@ -6914,7 +7232,7 @@ msgid ""
msgstr ""
"Размер текÑтуры Ð´Ð»Ñ Ñ€ÐµÐ½Ð´ÐµÑ€Ð¸Ð½Ð³Ð° карты теней.\n"
"Это должно быть чиÑло, кратное двум.\n"
-"Большие чиÑла Ñоздают более качеÑтвенные тени, но они и более дорогие."
+"Большие чиÑла Ñоздают более качеÑтвенные тени, но они и более затратные."
#: src/settings_translation_file.cpp
msgid ""
@@ -6935,8 +7253,9 @@ msgstr ""
"образом."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "The URL for the content repository"
-msgstr "ÐÐ´Ñ€ÐµÑ Ñетевого репозиториÑ"
+msgstr "ÐÐ´Ñ€ÐµÑ Ñетевого хранилища"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6973,6 +7292,7 @@ msgstr ""
"Ñкраном."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The maximum height of the surface of waving liquids.\n"
"4.0 = Wave height is two nodes.\n"
@@ -6980,7 +7300,7 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
-"МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð²Ñ‹Ñота поверхноÑти волниÑтых жидкоÑтей.\n"
+"ÐŸÑ€ÐµÐ´ÐµÐ»ÑŒÐ½Ð°Ñ Ð²Ñ‹Ñота поверхноÑти волниÑтых жидкоÑтей.\n"
"4.0 = выÑота волны равна двум нодам.\n"
"0.0 = волна не двигаетÑÑ Ð²Ð¾Ð¾Ð±Ñ‰Ðµ.\n"
"Значение по умолчанию — 1.0 (1/2 ноды).\n"
@@ -7067,12 +7387,13 @@ msgstr ""
"Значение 0 отключает Ñтот функционал."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The time budget allowed for ABMs to execute on each step\n"
"(as a fraction of the ABM Interval)"
msgstr ""
"Бюджет времени Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ABM на каждом шаге\n"
-"(как чаÑть ABM-интервала)"
+"(как чаÑть ABM-промежутка)"
#: src/settings_translation_file.cpp
msgid ""
@@ -7080,7 +7401,7 @@ msgid ""
"when holding down a joystick button combination."
msgstr ""
"Ð’Ñ€ÐµÐ¼Ñ Ð² Ñекундах между повторÑющимиÑÑ ÑобытиÑми,\n"
-"когда зажата ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº на джойÑтике."
+"когда зажато Ñочетание кнопок на джойÑтике."
#: src/settings_translation_file.cpp
msgid ""
@@ -7124,15 +7445,17 @@ msgstr ""
"Ð’Ñ€ÐµÐ¼Ñ Ñуток во вновь Ñозданном мире, в милличаÑах (значение от 0 до 23999)."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Time send interval"
-msgstr "Интервал отправки времени"
+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."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
"ВремÑ, поÑле которого клиент удалÑет из памÑти неиÑпользуемую информацию о "
"карте."
@@ -7162,10 +7485,19 @@ msgid "Touch screen threshold"
msgstr "Порог ÑенÑорного Ñкрана"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Порог ÑенÑорного Ñкрана"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr "КомпромиÑÑÑ‹ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти"
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Шум деревьев"
@@ -7208,7 +7540,7 @@ msgstr ""
"затрагиваетÑÑ.\n"
"Значительно увеличивает производительноÑть за Ñчёт вывода менее подробного "
"изображениÑ.\n"
-"Ð’Ñ‹Ñокие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ð¾Ð´ÑÑ‚ к менее детализированному изображению."
+"Ð’Ñ‹Ñокие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ð¾Ð´ÑÑ‚ к менее проработанному изображению."
#: src/settings_translation_file.cpp
msgid "Unlimited player transfer distance"
@@ -7252,7 +7584,7 @@ msgid ""
msgstr ""
"ИÑпользовать MIP-текÑтурирование Ð´Ð»Ñ Ð¼Ð°ÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑтур. Может немного "
"увеличить производительноÑть,\n"
-"оÑобенно при иÑпользовании пакета текÑтур выÑокого разрешениÑ.\n"
+"оÑобенно при иÑпользовании набора текÑтур выÑокого разрешениÑ.\n"
"Гамма-ÐºÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ Ð¿Ñ€Ð¸ уменьшении маÑштаба не поддерживаетÑÑ."
#: src/settings_translation_file.cpp
@@ -7280,6 +7612,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "ИÑпользовать трилинейную фильтрацию Ð´Ð»Ñ Ð¼Ð°ÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑтур."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "Объекты буфера вершин (VBO)"
@@ -7308,8 +7644,9 @@ msgid "Variation of biome filler depth."
msgstr "Ð’Ð°Ñ€Ð¸Ð°Ñ†Ð¸Ñ Ð³Ð»ÑƒÐ±Ð¸Ð½Ñ‹ Ð½Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»Ñ Ð±Ð¸Ð¾Ð¼Ð°."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Variation of maximum mountain height (in nodes)."
-msgstr "Ð’Ð°Ñ€Ð¸Ð°Ñ†Ð¸Ñ Ð¼Ð°ÐºÑимальной выÑоты гор (в нодах)."
+msgstr "Ð’Ð°Ñ€Ð¸Ð°Ñ†Ð¸Ñ Ð¿Ñ€ÐµÐ´ÐµÐ»ÑŒÐ½Ð¾Ð¹ выÑоты гор (в нодах)."
#: src/settings_translation_file.cpp
msgid "Variation of number of caves."
@@ -7372,8 +7709,9 @@ msgid "View zoom key"
msgstr "Клавиша режима увеличениÑ"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Viewing range"
-msgstr "ДиÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ð¾Ñ‚Ñ€Ð¸Ñовки"
+msgstr "ДальноÑть отриÑовки"
#: src/settings_translation_file.cpp
msgid "Virtual joystick triggers Aux1 button"
@@ -7504,7 +7842,7 @@ msgstr ""
"размер текÑтуры\n"
"Ð´Ð»Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð½Ñ‹Ñ… текÑтур; более выÑокие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð³Ð»ÑдÑÑ‚ более чёткими, но "
"требуют больше\n"
-"памÑти. РекомендуетÑÑ Ð¸Ñпользовать значениÑ, кратные 2. Эта наÑтройка "
+"памÑти. РекомендуетÑÑ Ð¸Ñпользовать значениÑ, кратные 2. Эта наÑтройка "
"применÑетÑÑ Ð¢ÐžÐ›Ð¬ÐšÐž в том Ñлучае, еÑли\n"
"включена билинейнаÑ/трилинейнаÑ/Ð°Ð½Ð¸Ð·Ð¾Ñ‚Ñ€Ð¾Ð¿Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ.\n"
"Это значение также иÑпользуетÑÑ Ð² качеÑтве базового размера текÑтуры узла "
@@ -7517,8 +7855,8 @@ msgid ""
"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
-"Должен ли отображатьÑÑ Ñ„Ð¾Ð½ бирки по умолчанию.\n"
-"Моды в любом Ñлучае могут задать фон."
+"Должен ли отображатьÑÑ Ð·Ð°Ð´Ð½Ð¸Ð¹ план бирки по умолчанию.\n"
+"Моды в любом Ñлучае могут задать задний план."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -7565,6 +7903,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr "Показывать данные отладки (аналогично нажатию F5)."
@@ -7589,11 +7936,12 @@ msgstr ""
"Содержит ту же информацию, что и файл debug.txt (Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° может отличатьÑÑ)."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"World directory (everything in the world is stored here).\n"
"Not needed if starting from the main menu."
msgstr ""
-"Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð¼Ð¸Ñ€Ð° (вÑÑ‘ в мире хранитÑÑ Ð² ней).\n"
+"Папка мира (вÑÑ‘ в мире хранитÑÑ Ð² ней).\n"
"Ðе требуетÑÑ Ð¿Ñ€Ð¸ запуÑке из главного меню."
#: src/settings_translation_file.cpp
@@ -7601,6 +7949,7 @@ msgid "World start time"
msgstr "Ðачальное Ð²Ñ€ÐµÐ¼Ñ Ð¼Ð¸Ñ€Ð°"
#: src/settings_translation_file.cpp
+#, fuzzy
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"
@@ -7612,7 +7961,7 @@ msgstr ""
"ТекÑтуры Ñ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸ÐµÐ¼ по миру могут быть маÑштабированы так, чтобы "
"охватить неÑколько узлов. Однако,\n"
"Ñервер может не передать нужный маÑштаб, оÑобенно еÑли вы иÑпользуете\n"
-"Ñпециально разработанный пакет текÑтур; при иÑпользовании Ñтой опции клиент "
+"Ñпециально разработанный набор текÑтур; при иÑпользовании Ñтой опции клиент "
"пытаетÑÑ\n"
"определить маÑштаб автоматичеÑки, оÑновываÑÑÑŒ на размере текÑтуры.\n"
"См. также texture_min_size.\n"
@@ -7675,16 +8024,22 @@ msgid "Y-level of seabed."
msgstr "Y-уровень морÑкого дна."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "cURL file download timeout"
-msgstr "Тайм-аут загрузки файла Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ cURL"
+msgstr "Превышено Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файла Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ cURL"
#: src/settings_translation_file.cpp
msgid "cURL interactive timeout"
-msgstr "Интерактивный таймаут cURL"
+msgstr "Превышено Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ñ cURL"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "cURL parallel limit"
-msgstr "Лимит одновременных Ñоединений cURL"
+msgstr "Предел одновременных Ñоединений cURL"
#~ msgid "- Creative Mode: "
#~ msgstr "- Режим творчеÑтва: "
@@ -7720,6 +8075,10 @@ msgstr "Лимит одновременных Ñоединений cURL"
#~ msgid "Back"
#~ msgstr "Ðазад"
+#, fuzzy
+#~ msgid "Basic"
+#~ msgstr "ОÑновной"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Бит на пикÑель (глубина цвета) в полноÑкранном режиме."
@@ -7752,6 +8111,12 @@ msgstr "Лимит одновременных Ñоединений cURL"
#~ msgid "Configure"
#~ msgstr "ÐаÑтроить"
+#~ msgid "Connect"
+#~ msgstr "ПодключитьÑÑ"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Контролирует ÑкороÑть Ð¿Ð¾Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð² жидкоÑти."
+
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value."
@@ -7797,6 +8162,9 @@ msgstr "Лимит одновременных Ñоединений cURL"
#~ "ОпределÑет шаг выборки текÑтуры.\n"
#~ "Более выÑокое значение приводит к более гладким картам нормалей."
+#~ msgid "Del. Favorite"
+#~ msgstr "Убрать из избранного"
+
#~ msgid ""
#~ "Deprecated, define and locate cave liquids using biome definitions "
#~ "instead.\n"
@@ -7806,6 +8174,12 @@ msgstr "Лимит одновременных Ñоединений cURL"
#~ "определений биома.\n"
#~ "Y верхней границы лавы в больших пещерах."
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Скачивайте игры, такие как Minetest Game, на minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Ð’Ñ‹ можете Ñкачать их на minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr ""
#~ "ЗагружаетÑÑ Ð¸ уÑтанавливаетÑÑ $1.\n"
@@ -7814,6 +8188,9 @@ msgstr "Лимит одновременных Ñоединений cURL"
#~ msgid "Enable VBO"
#~ msgstr "Включить объекты буфера вершин (VBO)"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Включить подтверждение региÑтрации"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7842,6 +8219,9 @@ msgstr "Лимит одновременных Ñоединений cURL"
#~ "Включает Parallax Occlusion.\n"
#~ "Требует, чтобы шейдеры были включены."
+#~ msgid "Enter "
+#~ msgstr "Введите "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7861,6 +8241,9 @@ msgstr "Лимит одновременных Ñоединений cURL"
#~ msgid "Fallback font size"
#~ msgstr "Размер резервного шрифта"
+#~ msgid "Filtering"
+#~ msgstr "ФильтрациÑ"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Шум базовой выÑоты парÑщих оÑтровов"
@@ -7879,6 +8262,9 @@ msgstr "Лимит одновременных Ñоединений cURL"
#~ msgid "Full screen BPP"
#~ msgstr "Глубина цвета в полноÑкранном режиме"
+#~ msgid "Game"
+#~ msgstr "Игра"
+
#~ msgid "Gamma"
#~ msgstr "Гамма"
@@ -7888,15 +8274,30 @@ msgstr "Лимит одновременных Ñоединений cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Генерировать карты нормалей"
+#~ msgid "HUD scale factor"
+#~ msgstr "МаÑштаб игрового интерфейÑа"
+
#~ msgid "High-precision FPU"
#~ msgstr "Ð’Ñ‹Ñокоточный FPU"
#~ msgid "IPv6 support."
#~ msgstr "Поддержка IPv6."
+#~ msgid "In-Game"
+#~ msgstr "В игре"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "УÑтановка мода: файл \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Замеры"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "ПривÑзки клавиш. (ЕÑли Ñто меню ÑломаетÑÑ, удалите наÑтройки из minetest."
+#~ "conf)"
+
#~ msgid "Lava depth"
#~ msgstr "Глубина лавы"
@@ -7917,6 +8318,9 @@ msgstr "Лимит одновременных Ñоединений cURL"
#~ "ЗаÑтавлÑет DirectX работать Ñ LuaJIT. Отключите, еÑли Ñто вызывает "
#~ "проблемы."
+#~ msgid "Menus"
+#~ msgstr "Меню"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Миникарта в режиме радара, увеличение x2"
@@ -7988,6 +8392,12 @@ msgstr "Лимит одновременных Ñоединений cURL"
#~ msgid "Path to save screenshots at."
#~ msgstr "Путь Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñкриншотов."
+#~ msgid "Player name"
+#~ msgstr "Ð˜Ð¼Ñ Ð¸Ð³Ñ€Ð¾ÐºÐ°"
+
+#~ msgid "Profiling"
+#~ msgstr "Профилирование"
+
#~ msgid "Projecting dungeons"
#~ msgstr "ПроÑтупающие подземельÑ"
@@ -8000,6 +8410,9 @@ msgstr "Лимит одновременных Ñоединений cURL"
#~ msgid "Select Package File:"
#~ msgstr "Выберите файл дополнениÑ:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Сервер / Ð¾Ð´Ð¸Ð½Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð³Ñ€Ð°"
+
#~ msgid ""
#~ "Set the shadow update time.\n"
#~ "Lower value means shadows and map updates faster, but it consume more "
@@ -8087,6 +8500,22 @@ msgstr "Лимит одновременных Ñоединений cURL"
#~ msgid "Yes"
#~ msgstr "Да"
+#, 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 ""
+#~ "Ð’Ñ‹ ÑобираетеÑÑŒ впервые приÑоединитьÑÑ Ðº Ñерверу под именем «%s».\n"
+#~ "ЕÑли вы продолжите, на Ñтом Ñервере будет Ñоздан новый аккаунт Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ "
+#~ "учётными данными.\n"
+#~ "ПожалуйÑта, введите пароль ещё раз и нажмите «РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¸ подключение», "
+#~ "чтобы подтвердить Ñоздание аккаунта, либо нажмите «Отмена», чтобы "
+#~ "прервать операцию."
+
#~ msgid "You died."
#~ msgstr "Ты умер."
diff --git a/po/sk/minetest.po b/po/sk/minetest.po
index 22cf8e570..878e86a1f 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: 2022-01-25 23:19+0100\n"
-"PO-Revision-Date: 2022-01-26 22:42+0000\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-24 09:25+0000\n"
"Last-Translator: Marian <daretmavi@gmail.com>\n"
"Language-Team: Slovak <https://hosted.weblate.org/projects/minetest/minetest/"
"sk/>\n"
@@ -17,11 +17,11 @@ 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.11-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
-msgstr "Vymaž výstupnú komunikaÄnú frontu"
+msgstr "VyprázdniÅ¥ výstupný komunikaÄný poradovník"
#: builtin/client/chatcommands.lua
msgid "Empty command."
@@ -29,7 +29,7 @@ msgstr "Prázdny príkaz."
#: builtin/client/chatcommands.lua
msgid "Exit to main menu"
-msgstr "Návrat do menu"
+msgstr "Návrat do hlavnej ponuky"
#: builtin/client/chatcommands.lua
msgid "Invalid command: "
@@ -41,15 +41,15 @@ msgstr "Spustený príkaz: "
#: builtin/client/chatcommands.lua
msgid "List online players"
-msgstr "Zoznam online hráÄov"
+msgstr "VypísaÅ¥ pripojených hráÄov"
#: builtin/client/chatcommands.lua
msgid "Online players: "
-msgstr "Online hráÄi: "
+msgstr "Pripojení hráÄi: "
#: builtin/client/chatcommands.lua
msgid "The out chat queue is now empty."
-msgstr "Výstupná komunikaÄná fronty je teraz prázdna."
+msgstr "Výstupný komunikaÄný poradovník je teraz prázdny."
#: builtin/client/chatcommands.lua
msgid "This command is disabled by server."
@@ -77,7 +77,7 @@ msgstr "Príkaz nie je k dispozícií: "
#: builtin/common/chatcommands.lua
msgid "Get help for commands"
-msgstr "Zobraz pomoc k príkazom"
+msgstr "Zobraz pomocníka k príkazom"
#: builtin/common/chatcommands.lua
msgid ""
@@ -88,11 +88,11 @@ msgstr ""
#: builtin/common/chatcommands.lua
msgid "[all | <cmd>]"
-msgstr "[all | <cmd>]"
+msgstr "[all | <príkaz>]"
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
-msgstr "OK"
+msgstr "V poriadku"
#: builtin/fstk/ui.lua
msgid "<none available>"
@@ -100,15 +100,15 @@ msgstr "<nie je k dispozícií>"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
-msgstr "Chyba v lua skripte:"
+msgstr "Objavila sa chyba v lua skripte:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
-msgstr "Chyba:"
+msgstr "Objavila sa chyba:"
#: builtin/fstk/ui.lua
msgid "Main menu"
-msgstr "Hlavné menu"
+msgstr "Hlavná ponuka"
#: builtin/fstk/ui.lua
msgid "Reconnect"
@@ -116,11 +116,39 @@ msgstr "Znova pripojiť"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
-msgstr "Server požadoval obnovu spojenia:"
+msgstr "Server požiadal o obnovu spojenia:"
+
+#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr "K dispozícií je nová verzia $1"
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr "Užívateľské módy"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+"Nainštalovaná verzia: $1\n"
+"Nová verzia: $2\n"
+"Navštív $3 pre informácie ako získať najnovšiu verziu a maj prehľad o "
+"funkciách a opravách chýb."
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr "Neskôr"
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr "Nikdy"
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
-msgstr "Nesúhlas verzií protokolov. "
+msgstr "Verzie protokolov sa nezhodujú. "
#: builtin/mainmenu/common.lua
msgid "Server enforces protocol version $1. "
@@ -128,59 +156,70 @@ msgstr "Server vyžaduje protokol verzie $1. "
#: builtin/mainmenu/common.lua
msgid "Server supports protocol versions between $1 and $2. "
-msgstr "Server podporuje verzie protokolov: $1 - $2. "
+msgstr "Server podporuje verzie protokolov medzi $1 a $2. "
+
+#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr "Navštív webovú stránku"
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
-msgstr "Podporujeme len protokol verzie $1."
+msgstr "Podporujeme iba protokol verzie $1."
#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
-msgstr "Podporujeme verzie protokolov: $1 - $2."
+msgstr "Podporujeme verzie protokolov medzi $1 a $2."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr "(Povolené, s chybou)"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+msgstr "(Neuspokojivé)"
#: 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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
-msgstr "Zruš"
+msgstr "Zrušiť"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/tab_content.lua
msgid "Dependencies:"
-msgstr "Závislosti:"
+msgstr "Nevyhnutné doplnky:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
-msgstr "Deaktivuj všetko"
+msgstr "Zakázať všetko"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "Deaktivuj balíÄek rozšírení"
+msgstr "Deaktivuj balíÄek modifikácií"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
-msgstr "Aktivuj všetko"
+msgstr "Povoliť všetko"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "Aktivuj balíÄek rozšírení"
+msgstr "PovoliÅ¥ balíÄek modifikácií"
#: 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 ""
-"Nepodarilo sa aktivovať rozšírenie \"$1\" lebo obsahuje nepovolené znaky. "
+"Nepodarilo sa povoliť modifikáciu \"$1\" pretože obsahuje nepovolené znaky. "
"Povolené sú len znaky [a-z0-9_]."
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr "Nájdi viac rozšírení"
+msgstr "Nájdi viac modifikácií"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
@@ -188,7 +227,7 @@ msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr "Bez (voliteľných) závislostí"
+msgstr "Bez (voliteľných) nevyhnutných doplnkov"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
@@ -196,7 +235,7 @@ msgstr "Popis hry nie je k dispozícií."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr "Bez povinných závislostí"
+msgstr "Bez povinných nevyhnutných doplnkov"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
@@ -204,16 +243,16 @@ msgstr "Popis balíka rozšírení nie je k dispozícií."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
-msgstr "Bez voliteľných závislostí"
+msgstr "Bez voliteľných nevuhnutných doplnkov"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
-msgstr "Voliteľné závislosti:"
+msgstr "Voliteľné nevyhnutné doplnky:"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
msgid "Save"
-msgstr "Ulož"
+msgstr "Uložiť"
#: builtin/mainmenu/dlg_config_world.lua
msgid "World:"
@@ -221,7 +260,7 @@ msgstr "Svet:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr "aktívne"
+msgstr "povolené"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
@@ -229,7 +268,7 @@ msgstr "\"$1\" už exituje. Chcel by si ho prepísať?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr "Závislosti $1 a $2 budú nainštalované."
+msgstr "Nevyhnutné doplnky $1 a $2 budú nainštalované."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
@@ -240,7 +279,7 @@ msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
-"$1 sťahujem,\n"
+"$1 sa sťahuje,\n"
"$2 Äaká v rade"
#: builtin/mainmenu/dlg_contentstore.lua
@@ -249,23 +288,23 @@ msgstr "$1 sťahujem..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr "$1 požadované závislosti nie je možné nájsť."
+msgstr "$1 požadované nevyhnutné doplnky nie je možné nájsť."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr "$1 bude nainÅ¡talovaný, a $2 závislosti budú preskoÄené."
+msgstr "$1 bude nainštalovaný a $2 nevyhnutné doplnky budú vynechané."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
-msgstr "Všetko"
+msgstr "Všetky balíky"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Already installed"
-msgstr "Už je nainštalované"
+msgstr "Už nainštalované"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
-msgstr "Hlavné menu"
+msgstr "Späť na Hlavnú ponuku"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Base Game:"
@@ -284,28 +323,26 @@ msgid "Failed to download $1"
msgstr "Nepodarilo sa stiahnuť $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Hry"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install"
-msgstr "Inštaluj"
+msgstr "Nainštalovať"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install $1"
-msgstr "Inštaluj $1"
+msgstr "Nainštalovať $1"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install missing dependencies"
-msgstr "Nainštaluj chýbajúce závislosti"
+msgstr "Nainštalovať chýbajúce nevyhnutné doplnky (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"
@@ -315,7 +352,7 @@ msgstr "Nepodarilo sa stiahnuÅ¥ žiadne balíÄky"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
-msgstr "Bez výsledku"
+msgstr "Bez výsledkov"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No updates"
@@ -327,7 +364,7 @@ msgstr "Nenájdené"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr "Prepíš"
+msgstr "Prepísať"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
@@ -339,19 +376,19 @@ msgstr "Čaká v rade"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
-msgstr "Textúry"
+msgstr "Balíky textúr"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
-msgstr "Odinštaluj"
+msgstr "Odinštalovať"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
-msgstr "Aktualizuj"
+msgstr "Aktualizácia"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr "Aktualizuj všetky [$1]"
+msgstr "Aktualizovať všetky [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
@@ -359,7 +396,7 @@ msgstr "Pozri si viac informácií vo webovom prehliadaÄi"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
-msgstr "Svet menom \"$1\" už existuje"
+msgstr "Svet s názvom \"$1\" už existuje"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Additional terrain"
@@ -391,19 +428,15 @@ msgstr "Jaskyne"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
-msgstr "Vytvor"
+msgstr "Vytvoriť"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Decorations"
msgstr "Dekorácie"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Stiahni si hru, ako napr. Minetest Game z minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Stiahni jednu z minetest.net"
+msgid "Development Test is meant for developers."
+msgstr "Vývojový Test je urÄený vývojárom."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -421,10 +454,6 @@ msgstr "Poletujúce pevniny na oblohe"
msgid "Floatlands (experimental)"
msgstr "Lietajúce krajiny (experimentálne)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Hra"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Generuj nefragmentovaný terén: oceány a podzemie"
@@ -442,6 +471,14 @@ msgid "Increases humidity around rivers"
msgstr "Zvyšuje vlhkosť v okolí riek"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr "Nainštalovať hru"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr "Nainštalovať inú hru"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Jazerá"
@@ -545,10 +582,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Obrovské jaskyne hlboko v podzemí"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Varovanie: Vývojarský Test je urÄený vývojárom."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Meno sveta"
@@ -564,7 +597,7 @@ msgstr "Si si istý, že chceš zmazať \"$1\"?"
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
#: src/client/keycode.cpp
msgid "Delete"
-msgstr "Zmaž"
+msgstr "Vymazať"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
@@ -578,6 +611,36 @@ msgstr "pkgmgr: nesprávna cesta \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Zmazať svet \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "PotvrÄ heslo"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr "Pripája sa $1"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr "Chýba meno"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Meno"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Heslo"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr "Heslá sa nezhodujú"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr "Registrovať sa"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Prijať"
@@ -610,6 +673,14 @@ msgstr "< Späť na nastavenia"
msgid "Browse"
msgstr "Prehliadaj"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr "Doplnky: Hry"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr "Doplnky: Rozšírenia (módy)"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Vypnuté"
@@ -666,7 +737,7 @@ msgstr "Zvoľ adresár"
msgid "Select file"
msgstr "Zvoľ súbor"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Zobraz technické názvy"
@@ -818,6 +889,10 @@ msgstr "Predchádzajúci prispievatelia"
msgid "Previous Core Developers"
msgstr "Predchádzajúci hlavný vývojári"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr "Zdieľaj ladiaci záznam (debug log)"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Hľadaj nový obsah na internete"
@@ -886,10 +961,6 @@ msgstr "Hosťuj server"
msgid "Install games from ContentDB"
msgstr "Inštaluj hry z ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Meno"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Nový"
@@ -898,10 +969,6 @@ msgstr "Nový"
msgid "No world created or selected!"
msgstr "Nie je vytvorený ani zvolený svet!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Heslo"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Hraj hru"
@@ -935,10 +1002,6 @@ msgid "Clear"
msgstr "Zmaž"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Pripojiť sa"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Kreatívny mód"
@@ -948,10 +1011,6 @@ msgid "Damage / PvP"
msgstr "Zranenie / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Zmaž obľúbené"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Obľúbené"
@@ -964,6 +1023,10 @@ msgid "Join Game"
msgstr "Pripoj sa do hry"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr "Prihlásiť sa"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -976,10 +1039,18 @@ msgid "Refresh"
msgstr "Obnov"
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr "Odstráň z obľúbených"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Popis servera"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr "(vyžaduje sa podpora hry)"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1024,8 +1095,8 @@ msgid "Dynamic shadows"
msgstr "Dynamické tiene"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr "Dynamické tiene: "
+msgid "Dynamic shadows:"
+msgstr "Dynamické tiene:"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1120,15 +1191,15 @@ msgid "Tone Mapping"
msgstr "Optim. farieb"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr "Dotykový prah: (px)"
+msgid "Touch threshold (px):"
+msgstr "Dotykový prah (px):"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
msgstr "Trilineárny filter"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr "Veľmi vysoké"
#: builtin/mainmenu/tab_settings.lua
@@ -1147,6 +1218,10 @@ msgstr "Vlniace sa kvapaliny"
msgid "Waving Plants"
msgstr "Vlniace sa rastliny"
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr "Spojenie zrušené (chyba protokolu?)."
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Časový limit pripojenia vypršal."
@@ -1282,9 +1357,8 @@ 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')"
+msgid "Can't show block bounds (disabled by mod or game)"
+msgstr "Hranice bloku nie je možné zobraziť (zakázané rozšírením, alebo hrou)"
#: src/client/game.cpp
msgid "Change Password"
@@ -1413,6 +1487,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Neobmedzená dohľadnosť je aktivovaná"
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr "Chyba pri vytváraní klienta: %s"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Návrat do menu"
@@ -1918,29 +1997,6 @@ msgstr "Nepodarilo sa otvoriť web stránku"
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ú!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Registrovať a pripojiť sa"
-
-#: 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 ""
-"Chystáš sa pripojiť k serveru \"%s\" po prvý krát.\n"
-"Ak budeÅ¡ pokraÄovaÅ¥, bude na tomto serveri vytvorený nový úÄet s tvojimi "
-"údajmi.\n"
-"Zapíš znova prosím svoje heslo a klikni 'Registrovať a pripojiť sa' pre "
-"potvrdenie súhlasu s vytvorením úÄtu, alebo klikni 'ZruÅ¡iÅ¥' pre návrat."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "PokraÄuj"
@@ -1973,7 +2029,7 @@ msgstr "Hranice bloku"
msgid "Change camera"
msgstr "Zmeň pohľad"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Komunikácia"
@@ -2026,10 +2082,8 @@ msgid "Key already in use"
msgstr "Klávesa sa už používa"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"Priradenie kláves. (ak je toto menu rozbité, zmaž zbytoÄnosti z minetest."
-"conf)"
+msgid "Keybindings."
+msgstr "Priradenie kláves."
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2100,10 +2154,6 @@ msgid "Change"
msgstr "Zmeniť"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "PotvrÄ heslo"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nové heslo"
@@ -2111,6 +2161,10 @@ msgstr "Nové heslo"
msgid "Old Password"
msgstr "Staré heslo"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Hesla sa nezhodujú!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Odísť"
@@ -2124,12 +2178,6 @@ msgstr "Zvuk stlmený"
msgid "Sound Volume: %d%%"
msgstr "Hlasitosť: %d%%"
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Vlož "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2137,6 +2185,17 @@ msgstr "Vlož "
msgid "LANG_CODE"
msgstr "sk"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+"Meno nie je zaregistrované. Pre vytvorenie úÄtu na tomto serveri klikni na "
+"'Registrovať' ('Register')"
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr "Meno už je použité. Prosím zvoľ si iné meno"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2300,6 +2359,10 @@ msgstr ""
"Režim interlaced požaduje, aby boli aktivované shadery."
#: src/settings_translation_file.cpp
+msgid "3d"
+msgstr "3d"
+
+#: 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."
@@ -2317,7 +2380,7 @@ msgstr "Správa, ktorá sa zobrazí vÅ¡etkým klientom, keÄ sa server vypína."
#: src/settings_translation_file.cpp
msgid "ABM interval"
-msgstr "ABM interval"
+msgstr "Interval Aktívnej Blokovej Modifikácie (ABM)"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
@@ -2396,6 +2459,10 @@ msgstr ""
"aby si si bol istý) vytvorí pevnú úroveň lietajúcej pevniny."
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr "Meno správcu"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "PokroÄilé"
@@ -2414,8 +2481,8 @@ msgstr ""
"ma len veľmi malý vplyv na prirodzené noÄné svetlo."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
-msgstr "Vždy zapnuté lietanie a rýchlosť"
+msgid "Always fly fast"
+msgstr "Vždy lietaj rýchlo"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
@@ -2494,6 +2561,10 @@ msgstr ""
"Udávane v blokoch mapy (16 kociek)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr "Zvuk"
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "TlaÄidlo Automatický pohyb vpred"
@@ -2534,10 +2605,6 @@ msgid "Base terrain height."
msgstr "Základná výška terénu."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Základné"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Základné práva"
@@ -2558,8 +2625,8 @@ msgid "Bind address"
msgstr "Spájacia adresa"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
-msgstr "Parametre šumu teploty a vlhkosti pre Biome API"
+msgid "Biome API noise parameters"
+msgstr "Parametre šumu pre Biome API"
#: src/settings_translation_file.cpp
msgid "Biome noise"
@@ -2570,6 +2637,10 @@ msgid "Block send optimize distance"
msgstr "Vzdialenosť pre optimalizáciu posielania blokov"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr "Nadskakovanie"
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Cesta k tuÄnému Å¡ikmému písmu"
@@ -2594,6 +2665,10 @@ msgid "Builtin"
msgstr "Vstavané (Builtin)"
#: src/settings_translation_file.cpp
+msgid "Camera"
+msgstr "Pohľad"
+
+#: 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"
@@ -2758,6 +2833,10 @@ msgid "Client side node lookup range restriction"
msgstr "Obmedzenie vyhľadávania dosahu kociek na strane klienta"
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr "Úpravy (módovanie) na strane klienta"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Rýchlosť šplhania"
@@ -2873,6 +2952,10 @@ msgid "Console height"
msgstr "Výška konzoly"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr "Úložisko doplnkov"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "Čierna listina príznakov z ContentDB"
@@ -2912,8 +2995,12 @@ msgstr ""
"72 = 20min, 360 = 4min, 1 = 24hodín, 0 = deň/noc/Äokoľvek ostáva nezmenený."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Riadi rýchlosť ponárania v tekutinách."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
+"Riadi rýchlosÅ¥ klesania v kvapaline pri neÄinnosti. Negatívne hodnoty\n"
+"spôsobia, že budeš namiesto klesania stúpať."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2986,12 +3073,12 @@ msgid "Debug log level"
msgstr "Úroveň ladiacich info"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "TlaÄidlo Zníž hlasitosÅ¥"
+msgid "Debugging"
+msgstr "Ladenie"
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Zníž pre spomalenie teÄenia."
+msgid "Dec. volume key"
+msgstr "TlaÄidlo Zníž hlasitosÅ¥"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3146,6 +3233,10 @@ msgid "Desynchronize block animation"
msgstr "Nesynchronizuj animáciu blokov"
#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr "Nastavenia pre vývojárov"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "TlaÄidlo Kopanie"
@@ -3166,6 +3257,14 @@ msgid "Display Density Scaling Factor"
msgstr "Faktor škálovania hustoty zobrazenia"
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+"Vzdialenosť v kockách do ktorej sa ešte spracúva hĺbka priesvitnosti\n"
+"Používa sa obmedzenie dopadu na výkon pri spracovaní hĺbky priesvitnosti"
+
+#: 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."
@@ -3244,6 +3343,10 @@ msgid "Enable joysticks"
msgstr "Aktivuj joysticky"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr "Povoľ joystick. Vyžaduje sa reštart hry"
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Aktivuj podporu komunikaÄných kanálov rozšírení (mod channels)."
@@ -3260,18 +3363,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Aktivuje náhodný užívateľský vstup (používa sa len pre testovanie)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-msgstr "Aktivuj potvrdenie registrácie"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
-msgstr ""
-"Aktivuj potvrdzovanie registrácie pri pripájaní sa k serveru.\n"
-"Ak je zakázané, nové konto sa zaregistruje automaticky."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3280,6 +3371,10 @@ msgstr ""
"Vypni pre zrýchlenie, alebo iný vzhľad."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+msgstr "Povoľ rozdielné prihlásenie/registráciu"
+
+#: 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 "
@@ -3374,6 +3469,10 @@ msgstr ""
"za cenu drobných vizuálnych chýb, ktoré neovplyvnia hrateľnosť."
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr "Profil enginu"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Interval tlaÄe profilových dát enginu"
@@ -3399,6 +3498,10 @@ msgstr ""
"rovnejšími nížinami, vhodné ako pevná základná vrstva lietajúcej pevniny."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr "FPS"
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "FPS ak je hra nezameraná, alebo pozastavená"
@@ -3488,8 +3591,8 @@ msgstr ""
"mipmapping."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtrovanie"
+msgid "Filtering and Antialiasing"
+msgstr "Filtrovanie a vyhladzovanie"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3556,6 +3659,10 @@ msgid "Fog toggle key"
msgstr "TlaÄidlo Prepnutie hmly"
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr "Písmo"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Å tandardne tuÄné písmo"
@@ -3733,6 +3840,18 @@ msgid "GUI scaling filter txr2img"
msgstr "Filter mierky GUI txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr "Užívateľské rozhrania"
+
+#: src/settings_translation_file.cpp
+msgid "Gamepads"
+msgstr "Gamepady"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "Všeobecné"
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Globálne odozvy"
@@ -3768,6 +3887,14 @@ msgid "Graphics"
msgstr "Grafika"
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr "Grafické efekty"
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr "Grafika a zvuk"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Gravitácia"
@@ -3784,7 +3911,11 @@ msgid "HTTP mods"
msgstr "HTTP rozšírenia"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr "HUD"
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr "Mierka HUD"
#: src/settings_translation_file.cpp
@@ -4043,11 +4174,20 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
-"Koľko bude server ÄakaÅ¥ kým uvoľní nepoužívané bloky mapy.\n"
-"Vyššia hodnota je plynulejšia, ale použije viac RAM."
+"Koľko bude server ÄakaÅ¥ kým uvoľní nepoužívané bloky mapy, v sekundách.\n"
+"Vyššia hodnota je plynulejšia, ale použije sa viac RAM."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+"Ako veľmi budeš spomalený pri pohybe v tekutine.\n"
+"Znížením zvýšiš odpor tekutiny pri pohybe."
#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
@@ -4126,6 +4266,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Ak je aktivované, tak registrácia úÄtu je oddelená od prihlásenia v UI.\n"
+"Ak je zakázané, nové konto sa zaregistruje automaticky pri prihlásení."
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -4154,8 +4302,12 @@ msgstr ""
"hráÄa."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
-msgstr "Ak je aktivované, nový hráÄi sa nemôžu pridaÅ¥ bez zadaného hesla."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
+msgstr ""
+"Ak je aktivované, nový hráÄi sa nemôžu prihlásiÅ¥ bez zadaného hesla, ani si "
+"nemôžu heslo vymazať."
#: src/settings_translation_file.cpp
msgid ""
@@ -4205,10 +4357,6 @@ msgid "Ignore world errors"
msgstr "Ignoruj chyby vo svete"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "V hre"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr "Priehľadnosť pozadia konzoly v hre (nepriehľadnosť, medzi 0 a 255)."
@@ -4263,16 +4411,12 @@ msgid "Instrument the methods of entities on registration."
msgstr "Inštrumentuj metódy bytostí pri registrácií."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Výstroj"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr "Interval ukladania dôležitých zmien vo svete, uvádzaný v sekundách."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
-msgstr "Interval v akom sa posiela denný Äas klientom."
+msgid "Interval of sending time of day to clients, stated in seconds."
+msgstr "Interval v akom sa posiela denný Äas klientom, v sekundách."
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
@@ -5130,6 +5274,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr "Klávesnica a myš"
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr "VylÃºÄ hráÄa, ktorý poÅ¡le viac ako X správ za 10 sekúnd."
@@ -5190,10 +5338,10 @@ msgstr "TlaÄidlo Vľavo"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
-"Dĺžka kroku servera a interval v ktorom sú objekty aktualizované\n"
-"cez sieť."
+"Dĺžka kroku servera a interval v ktorom sú objekty štandardne aktualizované\n"
+"cez sieť, uvedené v sekundách."
#: src/settings_translation_file.cpp
msgid ""
@@ -5204,20 +5352,25 @@ msgstr ""
"Požaduje, aby boli aktivované vlniace sa tekutiny."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
"Časový interval medzi jednotlivými vykonávacími cyklami ABM (Active Block "
-"Modifier)"
+"Modifier), v sekundách."
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
"ÄŒasový interval medzi jednotlivými vykonávacími cyklami ÄasovaÄa kociek "
-"(NodeTimer)"
+"(NodeTimer), v sekundách."
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
-msgstr "Časový interval medzi jednotlivými riadiacimi cyklami aktívnych blokov"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
+msgstr ""
+"Časový interval medzi jednotlivými riadiacimi cyklami aktívnych blokov, v "
+"sekundách."
#: src/settings_translation_file.cpp
msgid ""
@@ -5228,7 +5381,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Úroveň ladiacich informácií, ktoré budú zapísané do debug.txt:\n"
"- <niÄ> (bez logovania)\n"
@@ -5237,7 +5391,8 @@ msgstr ""
"- warning - varovania\n"
"- akcie\n"
"- info - informácie\n"
-"- verbose - všetko"
+"- verbose - všetko\n"
+"- trace - krokovanie"
#: src/settings_translation_file.cpp
msgid "Light curve boost"
@@ -5264,6 +5419,10 @@ msgid "Light curve low gradient"
msgstr "Spodný gradient svetelnej krivky"
#: src/settings_translation_file.cpp
+msgid "Lighting"
+msgstr "Osvetlenie"
+
+#: 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"
@@ -5708,10 +5867,6 @@ msgid "Maximum users"
msgstr "Maximálny poÄet hráÄov"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menu"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "Medzipamäť Mesh"
@@ -5759,7 +5914,19 @@ msgstr "Minimálna veľkosť textúry"
#: src/settings_translation_file.cpp
msgid "Mipmapping"
-msgstr "Mipmapping"
+msgstr "Mip-mapovanie"
+
+#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr "Rôzne"
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr "Profiler rozšírení"
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr "BezpeÄnosÅ¥ rozšírení"
#: src/settings_translation_file.cpp
msgid "Mod channels"
@@ -5858,10 +6025,6 @@ msgid "Near plane"
msgstr "Blízkosť roviny"
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Sieť"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
@@ -5870,6 +6033,10 @@ msgstr ""
"Táto hodnota bude prepísaná pri spustení z hlavného menu."
#: src/settings_translation_file.cpp
+msgid "Networking"
+msgstr "Sieťové nastavenia"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Noví hráÄi musia zadaÅ¥ toto heslo."
@@ -5882,6 +6049,10 @@ msgid "Noclip key"
msgstr "TlaÄidlo Prechádzanie stenami"
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr "Nasvietenie kocky a bytosti"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Zvýrazňovanie kociek"
@@ -5932,10 +6103,6 @@ msgstr ""
"a spotrebou pamäti (4096=100MB, ako približné pravidlo)."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Úložisko doplnkov na internete"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "Nepriehľadné tekutiny"
@@ -6045,10 +6212,6 @@ msgstr ""
"Toto si na serveri vyžaduje privilégium \"fly\"."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Meno hráÄa"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "VzdialenosÅ¥ zobrazenia hráÄa"
@@ -6096,17 +6259,13 @@ msgstr "Oprávnenia, ktoré môže udeliÅ¥ hrÃ¡Ä s basic_privs"
#: src/settings_translation_file.cpp
msgid "Profiler"
-msgstr "Profiler"
+msgstr "Profilátor"
#: src/settings_translation_file.cpp
msgid "Profiler toggle key"
msgstr "TlaÄidlo Prepínanie profileru"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Profilovanie"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr "OdpoÄúvacia adresa Promethea"
@@ -6298,6 +6457,10 @@ msgstr ""
"obrázkov mení podľa neceloÄíselných hodnôt."
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr "Zobrazenie"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Výška obrazovky"
@@ -6328,6 +6491,10 @@ msgstr ""
"Použi 0 pre štandardnú kvalitu."
#: src/settings_translation_file.cpp
+msgid "Screenshots"
+msgstr "Fotky obrazovky"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Šum morského dna"
@@ -6340,10 +6507,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Druhý z dvoch 3D šumov, ktoré spolu definujú tunely."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "BezpeÄnosÅ¥"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "ViÄ. https://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6402,8 +6565,16 @@ msgstr ""
"18 = 4D \"Mandelbulb\" sada Julia."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Server / Hra pre jedného hráÄa"
+msgid "Server"
+msgstr "Server"
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr "Hra na serveri"
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
+msgstr "BezpeÄnosÅ¥ servera"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6430,10 +6601,18 @@ msgid "Server side occlusion culling"
msgstr "Occlusion culling na strane servera"
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr "Výkon servera/prostredia"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "URL zoznamu serverov"
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr "Zoznam serverov a hláška dňa"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Súbor so zoznamom serverov"
@@ -6446,15 +6625,18 @@ msgstr ""
"Po zmene je požadovaný reštart."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr "Nastav maximálny poÄet znakov komunikaÄnej správy posielanej klientmi."
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
-"Nastav silu tieňov.\n"
+"Nastav gammu tieňov.\n"
+"VylaÄ intenzitu dynamických tieňov v hre.\n"
"Nižšia hodnota znamená svetlejšie tiene, vyššia hodnota znamená tmavšie "
"tiene."
@@ -6462,11 +6644,11 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.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"
+"Minimálna hodnota: 1.0; Maximálna hodnota: 15.0"
#: src/settings_translation_file.cpp
msgid ""
@@ -6562,8 +6744,8 @@ msgstr ""
"vykreslený."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
-msgstr "Sila tieňov"
+msgid "Shadow strength gamma"
+msgstr "Úroveň gamma tieňov"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6616,7 +6798,7 @@ msgid ""
"increase the cache hit %, reducing the data being copied from the main\n"
"thread, thus reducing jitter."
msgstr ""
-"Veľkosť medzipamäte blokov v Mesh generátoru.\n"
+"Veľkosť medzipamäte blokov v Mesh generátori.\n"
"Zvýšenie zvýši využitie medzipamäte %, zníži sa množstvo dát kopírovaných\n"
"z hlavnej vetvy a tým sa zníži chvenie."
@@ -6807,6 +6989,10 @@ msgid "Temperature variation for biomes."
msgstr "Odchýlky teplôt pre biómy."
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr "DoÄasné nastavenia"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "Alternatívny šum terénu"
@@ -7068,10 +7254,10 @@ msgid "Time speed"
msgstr "RýchlosÅ¥ Äasu"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
-"Časový limit na klientovi, pre odstránenie nepoužívaných mapových dát z "
-"pamäte."
+"Časový limit klienta, pre odstránenie nepoužívaných mapových dát z pamäte, v "
+"sekundách."
#: src/settings_translation_file.cpp
msgid ""
@@ -7096,10 +7282,18 @@ msgid "Touch screen threshold"
msgstr "Prah citlivosti dotykovej obrazovky"
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr "Dotyková obrazovka"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr "Kompromisy za výkon"
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr "Vzdialenosť spracovania priehľadnosti"
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Å um stromov"
@@ -7208,6 +7402,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "Použi trilineárne filtrovanie pri zmene mierky textúr."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr "Užívateľské rozhranie"
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7425,8 +7623,8 @@ 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 sa aplikuje len,\n"
-"ak je použité bilineárne/trilineárne/anisotropné filtrovanie.\n"
+"OdporúÄané sú mocniny 2. Nastavenie sa aplikuje len 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."
@@ -7480,6 +7678,20 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+"Zobrazovanie technických názvov.\n"
+"Ovplyvní rozšírenia a balíÄky textúr v Doplnkoch a pri výbere rozšírení, ako "
+"aj\n"
+"názvy nastavení v menu všetkých nastavení.\n"
+"Nastavuje sa zaÅ¡krtávacím políÄkom v menu \"VÅ¡etky nastavenia\"."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr "Zobrazenie ladiaceho okna na klientovi (má rovnaký efekt ako F5)."
@@ -7587,6 +7799,10 @@ msgid "Y-level of seabed."
msgstr "Y-úroveň morského dna."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr "cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL Äasový rámec sÅ¥ahovania súborov"
@@ -7617,6 +7833,9 @@ msgstr "Paralelný limit cURL"
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr "Si si istý, že chceÅ¡ vynulovaÅ¥ svoj svet jedného hráÄa?"
+#~ msgid "Basic"
+#~ msgstr "Základné"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "PoÄet bitov na pixel (farebná hĺbka) v režime celej obrazovky."
@@ -7646,6 +7865,12 @@ msgstr "Paralelný limit cURL"
#~ msgid "Configure"
#~ msgstr "Konfigurácia"
+#~ msgid "Connect"
+#~ msgstr "Pripojiť sa"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Riadi rýchlosť ponárania v tekutinách."
+
#~ msgid "Credits"
#~ msgstr "PoÄakovanie"
@@ -7669,6 +7894,18 @@ msgstr "Paralelný limit cURL"
#~ "Definuje vzorkovací krok pre textúry.\n"
#~ "Vyššia hodnota vedie k jemnejším normálovým mapám."
+#~ msgid "Del. Favorite"
+#~ msgstr "Zmaž obľúbené"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Stiahni si hru, ako napr. Minetest Game z minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Stiahni jednu z minetest.net"
+
+#~ msgid "Enable register confirmation"
+#~ msgstr "Aktivuj potvrdenie registrácie"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7694,6 +7931,9 @@ msgstr "Paralelný limit cURL"
#~ "Aktivuj parallax occlusion mapping.\n"
#~ "Požaduje aby boli aktivované shadery."
+#~ msgid "Enter "
+#~ msgstr "Vlož "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7713,6 +7953,9 @@ msgstr "Paralelný limit cURL"
#~ msgid "Fallback font size"
#~ msgstr "Veľkosť záložného písma"
+#~ msgid "Filtering"
+#~ msgstr "Filtrovanie"
+
#~ msgid "Font size of the fallback font in point (pt)."
#~ msgstr "Veľkosť písma záložného písma v bodoch (pt)."
@@ -7722,18 +7965,36 @@ msgstr "Paralelný limit cURL"
#~ msgid "Full screen BPP"
#~ msgstr "BPP v režime celej obrazovky"
+#~ msgid "Game"
+#~ msgstr "Hra"
+
#~ msgid "Generate Normal Maps"
#~ msgstr "Normal Maps (nerovnosti)"
#~ msgid "Generate normalmaps"
#~ msgstr "Generuj normálové mapy"
+#~ msgid "HUD scale factor"
+#~ msgstr "Mierka HUD"
+
#~ msgid "High-precision FPU"
#~ msgstr "Vysoko-presné FPU"
+#~ msgid "In-Game"
+#~ msgstr "V hre"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Inštalácia: súbor: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Výstroj"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Priradenie kláves. (ak je toto menu rozbité, zmaž zbytoÄnosti z minetest."
+#~ "conf)"
+
#~ msgid "Main"
#~ msgstr "Hlavné"
@@ -7743,6 +8004,9 @@ msgstr "Paralelný limit cURL"
#~ 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 "Menus"
+#~ msgstr "Menu"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Minimapa v radarovom režime, priblíženie x2"
@@ -7802,12 +8066,21 @@ msgstr "Paralelný limit cURL"
#~ msgid "Parallax occlusion scale"
#~ msgstr "Mierka parallax occlusion"
+#~ msgid "Player name"
+#~ msgstr "Meno hráÄa"
+
+#~ msgid "Profiling"
+#~ msgstr "Profilovanie"
+
#~ msgid "PvP enabled"
#~ msgstr "PvP je aktívne"
#~ msgid "Reset singleplayer world"
#~ msgstr "Vynuluj svet jedného hráÄa"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Server / Hra pre jedného hráÄa"
+
#~ msgid ""
#~ "Set the shadow update time.\n"
#~ "Lower value means shadows and map updates faster, but it consume more "
@@ -7856,6 +8129,21 @@ msgstr "Paralelný limit cURL"
#~ msgid "Yes"
#~ msgstr "Ãno"
+#, 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 ""
+#~ "Chystáš sa pripojiť k serveru \"%s\" po prvý krát.\n"
+#~ "Ak budeÅ¡ pokraÄovaÅ¥, bude na tomto serveri vytvorený nový úÄet s tvojimi "
+#~ "údajmi.\n"
+#~ "Zapíš znova prosím svoje heslo a klikni 'Registrovať a pripojiť sa' pre "
+#~ "potvrdenie súhlasu s vytvorením úÄtu, alebo klikni 'ZruÅ¡iÅ¥' pre návrat."
+
#~ msgid "You died."
#~ msgstr "Zomrel si."
diff --git a/po/sl/minetest.po b/po/sl/minetest.po
index cab8e9dae..5412dd023 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: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -11,8 +11,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
-"%100==4 ? 2 : 3;\n"
+"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
+"n%100==4 ? 2 : 3;\n"
"X-Generator: Weblate 4.3-dev\n"
#: builtin/client/chatcommands.lua
@@ -119,6 +119,31 @@ msgid "The server has requested a reconnect:"
msgstr "Strežnik zahteva ponovno povezavo:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Izbor sveta:"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "RazliÄice protokola niso skladne. "
@@ -131,6 +156,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Strežnik podpira razliÄice protokolov med $1 in $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Podporta je le razliÄica protokola $1."
@@ -138,14 +167,21 @@ msgstr "Podporta je le razliÄica protokola $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Podprte so razliÄice protokolov med $1 in $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "PrekliÄi"
@@ -289,7 +325,6 @@ msgid "Failed to download $1"
msgstr "Prenos $1 je spodletel"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Igre"
@@ -313,7 +348,6 @@ 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)"
@@ -412,12 +446,9 @@ msgid "Decorations"
msgstr "Dekoracije"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Prenesi igro, kot na primer Minetest Game, s spletiÅ¡Äa minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Na voljo so na spletiÅ¡Äu minetest.net/customize"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Opozorilo: okrnjena razvojna razliÄica je namenjena razvijalcem."
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
@@ -438,10 +469,6 @@ msgstr "LebdeÄe kopenske mase na nebu"
msgid "Floatlands (experimental)"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Igra"
-
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "Generate non-fractal terrain: Oceans and underground"
@@ -460,6 +487,15 @@ msgid "Increases humidity around rivers"
msgstr "PoveÄa vlažnost v bližini rek"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Namesti"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Jezera"
@@ -564,11 +600,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Zelo velike jame globoko v podzemlju"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Opozorilo: okrnjena razvojna razliÄica je namenjena razvijalcem."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Ime sveta"
@@ -598,6 +629,39 @@ msgstr "Package manager: neveljavna pot \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Ali res želiš izbrisati svet »$1«?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Potrditev gesla"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Password"
+msgstr "Novo geslo"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Gesli se ne ujemata!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Registriraj in prijavi se"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Sprejmi"
@@ -630,6 +694,16 @@ msgstr "< Nazaj do Nastavitev"
msgid "Browse"
msgstr "Prebrskaj"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Vsebina"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Vsebina"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "OnemogoÄeno"
@@ -688,7 +762,7 @@ msgstr "Izberi mapo"
msgid "Select file"
msgstr "Izberi datoteko"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Prikaži tehniÄna imena"
@@ -840,6 +914,10 @@ msgstr "Predhodni sodelavci"
msgid "Previous Core Developers"
msgstr "Predhodni razvajalci"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Brskaj po spletnih vsebinah"
@@ -908,10 +986,6 @@ msgstr "Gostiteljski strežnik"
msgid "Install games from ContentDB"
msgstr "Namesti igre iz ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Novo"
@@ -920,11 +994,6 @@ msgstr "Novo"
msgid "No world created or selected!"
msgstr "Ni ustvarjenega oziroma izbranega sveta!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "Novo geslo"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Zaženi igro"
@@ -960,10 +1029,6 @@ msgid "Clear"
msgstr "PoÄisti"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Poveži"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Ustvarjalni naÄin"
@@ -974,10 +1039,6 @@ msgid "Damage / PvP"
msgstr "Poškodbe"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Izbriši priljubljeno"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "Priljubljeno"
@@ -991,6 +1052,10 @@ msgid "Join Game"
msgstr "Prijavi se v igro"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -1005,10 +1070,19 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "Izbriši priljubljeno"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "Vrata strežnika"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1054,8 +1128,9 @@ msgid "Dynamic shadows"
msgstr "Senca pisave"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr ""
+#, fuzzy
+msgid "Dynamic shadows:"
+msgstr "Senca pisave"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1152,7 +1227,7 @@ msgstr "Barvno preslikavanje"
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr "ObÄutljivost dotika (v pikslih):"
#: builtin/mainmenu/tab_settings.lua
@@ -1160,7 +1235,7 @@ msgid "Trilinear Filter"
msgstr "Trilinearni filter"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1179,6 +1254,11 @@ msgstr "Valovanje tekoÄin"
msgid "Waving Plants"
msgstr "Pokaži nihanje rastlin"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Napaka povezave (ali je dejanje Äasovno preteklo?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Povezava je potekla."
@@ -1318,7 +1398,7 @@ msgid "Camera update enabled"
msgstr "Posodabljanje kamere je omogoÄeno"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1450,6 +1530,11 @@ msgid "Enabled unlimited viewing range"
msgstr "OmogoÄen neomejen doseg pogleda"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Ustvarjanje odjemalca ..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Izhod na meni"
@@ -1969,29 +2054,6 @@ msgstr "Prenos $1 je spodletel"
msgid "Opening webpage"
msgstr ""
-#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
-msgid "Passwords do not match!"
-msgstr "Gesli se ne ujemata!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Registriraj in prijavi se"
-
-#: 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 ""
-"PrviÄ se boste prijavili v strežnik z imenom \"%s\".\n"
-"ÄŒe nadaljujete, bo na tem strežniku ustvarjen nov raÄun z vaÅ¡imi prijavnimi "
-"podatki.\n"
-"Prosimo, znova vnesite svoje geslo in kliknite \"Registriraj in prijavi se"
-"\", da potrdite ustvarjanje raÄuna ali kliknite \"PrekliÄi\" za prekinitev."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Nadaljuj"
@@ -2025,7 +2087,7 @@ msgstr ""
msgid "Change camera"
msgstr "Sprememba kamere"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Klepet"
@@ -2078,10 +2140,8 @@ msgid "Key already in use"
msgstr "Tipka je že v uporabi"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Vloge tipk (Äe ta meni preneha delovati, odstranite nastavitve tipk iz "
-"datoteke minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2153,10 +2213,6 @@ msgid "Change"
msgstr "Spremeni"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Potrditev gesla"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Novo geslo"
@@ -2164,6 +2220,10 @@ msgstr "Novo geslo"
msgid "Old Password"
msgstr "Staro geslo"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Gesli se ne ujemata!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Izhod"
@@ -2177,12 +2237,6 @@ msgstr "Utišano"
msgid "Sound Volume: %d%%"
msgstr "Glasnost zvoka: "
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Vpis "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2190,6 +2244,16 @@ msgstr "Vpis "
msgid "LANG_CODE"
msgstr "sl"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Izbrati je treba ime!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2347,6 +2411,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2440,6 +2508,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Dodaj ime elementa"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Naprednejše"
@@ -2454,7 +2527,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr "Vedno leti in bodi hiter (fly and fast mode)"
#: src/settings_translation_file.cpp
@@ -2535,6 +2608,10 @@ msgstr ""
"Navedena vrednost ima enoto 'mapchunk' (16 blokov)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Tipka za avtomatsko premikanje naprej"
@@ -2578,10 +2655,6 @@ msgid "Base terrain height."
msgstr "Višina osnovnega terena."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Osnovno"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Osnovni privilegiji"
@@ -2602,7 +2675,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2615,6 +2688,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Pot do krepke in poševne pisave"
@@ -2641,6 +2718,11 @@ msgstr "Vgrajeno"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Camera"
+msgstr "Sprememba kamere"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
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"
@@ -2817,6 +2899,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Hitrost plezanja"
@@ -2914,6 +3000,10 @@ msgid "Console height"
msgstr "Višina konzole"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2949,8 +3039,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Nadzira hitrost potapljanja v tekoÄinah."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -3016,12 +3108,12 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Tipka za zmanjševanje glasnosti"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
+msgid "Dec. volume key"
+msgstr "Tipka za zmanjševanje glasnosti"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3170,6 +3262,11 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Developer Options"
+msgstr "Dekoracije"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Dig key"
msgstr "Tipka za met predmeta"
@@ -3190,6 +3287,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+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."
@@ -3260,6 +3363,10 @@ msgid "Enable joysticks"
msgstr "OmogoÄi joystick"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3276,19 +3383,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3362,6 +3463,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3380,6 +3485,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3463,8 +3572,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtriranje"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Glajenje:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3531,6 +3641,11 @@ msgid "Fog toggle key"
msgstr "Tipka za preklop na meglo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Velikost pisave"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3684,6 +3799,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Igre"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3711,6 +3839,16 @@ msgid "Graphics"
msgstr "Grafika"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Grafika"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Grafika"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Gravitacija"
@@ -3727,10 +3865,15 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "HUD je prikazan"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr ""
@@ -3967,11 +4110,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "Kako široke naredi reke."
@@ -4040,6 +4190,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -4066,7 +4222,10 @@ msgstr ""
"pri letenju ali plavanju (premikaš se tja, kamor si obrnjen)."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr "ÄŒe je omogoÄeno, se novi igralci ne morejo prijaviti s praznim geslom."
#: src/settings_translation_file.cpp
@@ -4112,10 +4271,6 @@ msgid "Ignore world errors"
msgstr "Prezri napake svetov"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "V igri"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
@@ -4166,15 +4321,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4796,6 +4947,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4851,7 +5006,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4861,15 +5016,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4881,7 +5039,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4909,6 +5068,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Gladko osvetljevanje"
+
+#: 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"
@@ -5294,10 +5458,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5346,6 +5506,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5432,16 +5604,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5454,6 +5626,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Poudarjanje vozliÅ¡Ä"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5491,10 +5668,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5591,10 +5764,6 @@ msgstr ""
"Delovanje zahteva omogoÄeno podporo za »letenje (fly)« na strežniku."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5642,10 +5811,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5815,6 +5980,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Zaslon:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5842,6 +6012,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Posnetek zaslona"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5854,10 +6029,6 @@ 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 ""
@@ -5897,8 +6068,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr ""
+#, fuzzy
+msgid "Server"
+msgstr "Gostiteljski strežnik"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "– Ime strežnika: "
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Vrata strežnika"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5925,10 +6107,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Vrata strežnika"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5939,12 +6130,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5952,7 +6145,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6028,7 +6221,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6235,6 +6428,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Nastavitve"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6437,7 +6635,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6461,10 +6659,19 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Celozaslonski naÄin"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6555,6 +6762,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6792,6 +7003,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6881,6 +7101,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6915,6 +7139,9 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "Nazaj"
+#~ msgid "Basic"
+#~ msgstr "Osnovno"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Biti na piksel (barvna globina) v celozaslonskem naÄinu."
@@ -6942,6 +7169,12 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Nastavi"
+#~ msgid "Connect"
+#~ msgstr "Poveži"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Nadzira hitrost potapljanja v tekoÄinah."
+
#~ msgid "Credits"
#~ msgstr "Zasluge"
@@ -6958,6 +7191,12 @@ msgstr ""
#~ "DoloÄa korak vzorÄenja teksture.\n"
#~ "ViÅ¡ja vrednost povzroÄi bolj gladke normalne zemljevide."
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Prenesi igro, kot na primer Minetest Game, s spletiÅ¡Äa minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Na voljo so na spletiÅ¡Äu minetest.net/customize"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "PrenaÅ¡anje in nameÅ¡Äanje $1, prosimo poÄakajte..."
@@ -6965,15 +7204,33 @@ msgstr ""
#~ msgid "Enable VBO"
#~ msgstr "OmogoÄi VBO"
+#~ msgid "Enter "
+#~ msgstr "Vpis "
+
+#~ msgid "Filtering"
+#~ msgstr "Filtriranje"
+
+#~ msgid "Game"
+#~ msgstr "Igra"
+
#~ msgid "Generate Normal Maps"
#~ msgstr "Generiranje normalnih svetov"
#~ msgid "IPv6 support."
#~ msgstr "IPv6 podpora."
+#~ msgid "In-Game"
+#~ msgstr "V igri"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Namesti: datoteka: »$1«"
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Vloge tipk (Äe ta meni preneha delovati, odstranite nastavitve tipk iz "
+#~ "datoteke minetest.conf)"
+
#~ msgid "Main"
#~ msgstr "Glavni"
@@ -7042,6 +7299,22 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "Da"
+#, 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 ""
+#~ "PrviÄ se boste prijavili v strežnik z imenom \"%s\".\n"
+#~ "ÄŒe nadaljujete, bo na tem strežniku ustvarjen nov raÄun z vaÅ¡imi "
+#~ "prijavnimi podatki.\n"
+#~ "Prosimo, znova vnesite svoje geslo in kliknite \"Registriraj in prijavi "
+#~ "se\", da potrdite ustvarjanje raÄuna ali kliknite \"PrekliÄi\" za "
+#~ "prekinitev."
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "Umrl si"
diff --git a/po/sr_Cyrl/minetest.po b/po/sr_Cyrl/minetest.po
index 1c590fb9d..f50dc7a91 100644
--- a/po/sr_Cyrl/minetest.po
+++ b/po/sr_Cyrl/minetest.po
@@ -2,40 +2,36 @@ msgid ""
msgstr ""
"Project-Id-Version: Serbian (cyrillic) (Minetest)\n"
"Report-Msgid-Bugs-To: \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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-12 16:18+0000\n"
+"Last-Translator: OrbitalPetrol <ccorporation981@gmail.com>\n"
"Language-Team: Serbian (cyrillic) <https://hosted.weblate.org/projects/"
"minetest/minetest/sr_Cyrl/>\n"
"Language: sr_Cyrl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.7.2-dev\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.14-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
msgstr ""
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Empty command."
-msgstr "Чат команде"
+msgstr "Празна команда."
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Exit to main menu"
-msgstr "Изађи у мени"
+msgstr "Врати Ñе на главни мени"
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Invalid command: "
msgstr "Ðеважећа команда: "
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Issued command: "
msgstr "Издата команда: "
@@ -60,9 +56,8 @@ msgid "Respawn"
msgstr "Врати Ñе у живот"
#: builtin/client/death_formspec.lua src/client/game.cpp
-#, fuzzy
msgid "You died"
-msgstr "Умро/ла Ñи."
+msgstr "Умро Ñи"
#: builtin/common/chatcommands.lua
msgid "Available commands:"
@@ -96,16 +91,14 @@ msgid "OK"
msgstr "У реду"
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "<none available>"
-msgstr "Команда није доÑтупна: "
+msgstr "<ни једна није доÑтупна>"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Догодила Ñе грешка у Lua Ñкрипти:"
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred:"
msgstr "Догодила Ñе грешка:"
@@ -122,6 +115,31 @@ msgid "The server has requested a reconnect:"
msgstr "Сервер тражи поновно повезивање:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Одабери Ñвет:"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "ÐеÑлагање верзија протокола. "
@@ -134,6 +152,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Сервер подржава верзије протокола између $1 и $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Ми подржавамо Ñамо $1 верзију протокола."
@@ -141,14 +163,21 @@ msgstr "Ми подржавамо Ñамо $1 верзију протокола.
msgid "We support protocol versions between version $1 and $2."
msgstr "Ми подржавамо верзије протокола између верзије $1 и $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Прекини"
@@ -171,7 +200,7 @@ msgstr "Укључи Ñве"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "Укључи групу модова:"
+msgstr "Укључи групу модова"
#: builtin/mainmenu/dlg_config_world.lua
msgid ""
@@ -288,7 +317,6 @@ msgid "Failed to download $1"
msgstr "ÐеуÑпело преузимање $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Игре"
@@ -307,12 +335,9 @@ msgstr "ИнÑталирај недоÑтајуће завиÑноÑти"
#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
msgid "Install: Unsupported file type or broken archive"
-msgstr ""
-"\n"
-"ИнÑталирај мод: неподржан тип фајла \"$1\" или оштећена архива"
+msgstr "ИнÑталирај мод: неподржан тип фајла \"$1\" или оштећена архива"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Модови"
@@ -349,7 +374,6 @@ msgid "Texture packs"
msgstr "Сетови текÑтура"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Uninstall"
msgstr "ДеинÑталирај"
@@ -406,12 +430,9 @@ msgid "Decorations"
msgstr "УкраÑи"
#: builtin/mainmenu/dlg_create_world.lua
-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"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Упозорење: Минимални развојни теÑÑ‚ је намењен развијачима."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -429,10 +450,6 @@ msgstr "Плутајуће копнене маÑе на небу"
msgid "Floatlands (experimental)"
msgstr "Floatlands (екÑпериментални)"
-#: 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 "Створи нефрактални терен: Океани и подземље"
@@ -442,16 +459,23 @@ msgid "Hills"
msgstr "Брда"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Humid rivers"
msgstr "Влажне реке"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Increases humidity around rivers"
msgstr "Повећава влажноÑÑ‚ око река"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "ИнÑталирај $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Језера"
@@ -553,15 +577,10 @@ 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
-#, fuzzy
msgid "You have no games installed."
msgstr "Ðема инÑталираних подигара."
@@ -587,6 +606,38 @@ msgstr "pkgmgr: локација мода \"$1\" није валидна"
msgid "Delete World \"$1\"?"
msgstr "Обриши Ñвет \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Потврди шифру"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Password"
+msgstr "Ðова шифра"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Шифре Ñе не поклапају!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Прихвати"
@@ -620,6 +671,16 @@ msgstr "< Ðазад на Ñтрану Ñа поÑтавкама"
msgid "Browse"
msgstr "Прегледај"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "ÐаÑтави"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "ÐаÑтави"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Онемогућено"
@@ -634,7 +695,7 @@ msgstr "Омогућено"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Lacunarity"
-msgstr ""
+msgstr "ЛакунарноÑÑ‚"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Octaves"
@@ -651,7 +712,7 @@ 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."
@@ -679,7 +740,7 @@ msgstr "Изаберите фајл мода:"
msgid "Select file"
msgstr "Изаберите фајл мода:"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Прикажи техничка имена"
@@ -842,6 +903,10 @@ msgstr "Предходни Ñарадници"
msgid "Previous Core Developers"
msgstr "Предходни главни развијачи"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -917,10 +982,6 @@ msgstr "Ðаправи Ñервер"
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 "Ðови"
@@ -929,11 +990,6 @@ msgstr "Ðови"
msgid "No world created or selected!"
msgstr "Ðиједан Ñвет није направљен или изабран!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "Ðова шифра"
-
#: builtin/mainmenu/tab_local.lua
#, fuzzy
msgid "Play Game"
@@ -971,10 +1027,6 @@ msgid "Clear"
msgstr "ОчиÑти"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Прикључи Ñе"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Слободни мод"
@@ -985,10 +1037,6 @@ msgid "Damage / PvP"
msgstr "Штета"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Обриши Омиљени"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "Омиљени"
@@ -1003,6 +1051,10 @@ msgid "Join Game"
msgstr "Ðаправи игру"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Одзив"
@@ -1017,10 +1069,19 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "Обриши Омиљени"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "СерверÑки порт"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1067,7 +1128,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1164,7 +1225,7 @@ msgstr "ТонÑко Мапирање"
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr "Праг додиривања (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1172,7 +1233,7 @@ msgid "Trilinear Filter"
msgstr "Трилинеарни филтер"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1192,6 +1253,11 @@ msgstr "Лепршајуће лишће"
msgid "Waving Plants"
msgstr "Лепршајуће биљке"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Грешка у конекцији (иÑтекло време?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Конекцији је иÑтекло време."
@@ -1334,7 +1400,7 @@ msgid "Camera update enabled"
msgstr "Кључ за укључивање/иÑкључивање оÑвежавања камере"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1468,6 +1534,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Правим клијента..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Изађи у мени"
@@ -1984,24 +2055,6 @@ msgstr "ÐеуÑпело преузимање $1"
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 "ÐаÑтави"
@@ -2037,7 +2090,7 @@ msgstr ""
msgid "Change camera"
msgstr "Промени дугмад"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Чет"
@@ -2090,10 +2143,8 @@ msgid "Key already in use"
msgstr "Дугме Ñе већ кориÑти"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Подешавање контрола.(Ðко овај мени нешто поквари, обришите Ñтвари из "
-"minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2170,10 +2221,6 @@ msgid "Change"
msgstr "Промени"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Потврди шифру"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Ðова шифра"
@@ -2181,6 +2228,10 @@ msgstr "Ðова шифра"
msgid "Old Password"
msgstr "Стара шифра"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Шифре Ñе не поклапају!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Изађи"
@@ -2195,12 +2246,6 @@ msgstr "Изкључи звук"
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).
@@ -2208,6 +2253,16 @@ msgstr "Уреду "
msgid "LANG_CODE"
msgstr "sr_Cyrl"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Молим одаберите име!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2349,6 +2404,10 @@ msgstr ""
"- pageflip: Четвородупли буфер 3D."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2439,6 +2498,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Име Ñвета"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Ðапредно"
@@ -2452,7 +2516,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Увек летење и брзина"
#: src/settings_translation_file.cpp
@@ -2532,6 +2597,10 @@ msgstr ""
"ПоÑтављено у мапа-блоковима (16 блокова)"
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Automatic forward key"
msgstr "Кључ за ÑинематÑки мод"
@@ -2574,10 +2643,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "ОÑновно"
-
-#: src/settings_translation_file.cpp
#, fuzzy
msgid "Basic privileges"
msgstr "ОÑновне привилегије"
@@ -2599,7 +2664,8 @@ msgid "Bind address"
msgstr "Вежи адреÑу"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Параметри Ñемена температуре и влажноÑти API-ја за биоме"
#: src/settings_translation_file.cpp
@@ -2611,6 +2677,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2635,6 +2705,11 @@ msgid "Builtin"
msgstr "Уграђено"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+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"
@@ -2799,6 +2874,11 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Модификовање клијента"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Брзина уÑпона"
@@ -2902,6 +2982,10 @@ msgid "Console height"
msgstr "ВиÑина конзоле"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2940,7 +3024,9 @@ msgstr ""
"оÑтаје непромењено."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3009,11 +3095,11 @@ msgid "Debug log level"
msgstr "Ðиво запиÑивања у debug"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3159,6 +3245,11 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "УкраÑи"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -3180,6 +3271,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3250,6 +3347,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3266,19 +3367,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3352,6 +3447,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3370,6 +3469,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3450,8 +3553,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr ""
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Гланчање текÑтура:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3519,6 +3623,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3667,6 +3775,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Игре"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3694,6 +3815,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3711,7 +3840,11 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3952,11 +4085,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -4017,6 +4157,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -4038,7 +4184,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4080,10 +4228,6 @@ 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 ""
@@ -4134,15 +4278,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4763,6 +4903,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4818,7 +4962,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4828,15 +4972,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4848,7 +4995,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4876,6 +5024,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+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"
@@ -5267,10 +5420,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5319,6 +5468,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5405,16 +5566,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5427,6 +5588,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "ИÑтицање блокова"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5464,10 +5630,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5565,10 +5727,6 @@ msgstr ""
"Ово захтева \"fly\" привилегију на Ñерверима."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5616,10 +5774,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5790,6 +5944,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Екран:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5817,6 +5976,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Екран:"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5829,10 +5993,6 @@ 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 ""
@@ -5892,8 +6052,19 @@ msgstr ""
"18 = 4Д \"Mandelbulb\" жулијин Ñкуп."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr ""
+#, fuzzy
+msgid "Server"
+msgstr "Ðаправи Ñервер"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "- Име Ñервера: "
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "СерверÑки порт"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5920,10 +6091,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "СерверÑки порт"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5934,12 +6114,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5947,7 +6129,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6024,7 +6206,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6226,6 +6408,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "ПоÑтавке"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6428,7 +6615,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6453,10 +6640,19 @@ msgid "Touch screen threshold"
msgstr "Граница Ñемена за плаже"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Граница Ñемена за плаже"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6548,6 +6744,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6785,6 +6985,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6876,6 +7085,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6917,6 +7130,9 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "Ðазад"
+#~ msgid "Basic"
+#~ msgstr "ОÑновно"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Битови по пикÑелу (или дубина боје) у моду целог екрана."
@@ -6932,6 +7148,9 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "ПодеÑи"
+#~ msgid "Connect"
+#~ msgstr "Прикључи Ñе"
+
#, fuzzy
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
@@ -6952,14 +7171,32 @@ msgstr ""
#~ msgid "Damage enabled"
#~ msgstr "Оштећење омогућено"
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Преузми подигру, као што је minetest_game, Ñа minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Преузми једну Ñа minetest.net"
+
#, fuzzy
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Преузима Ñе $1, молим Ð²Ð°Ñ Ñачекајте..."
+#~ msgid "Enter "
+#~ msgstr "Уреду "
+
+#~ msgid "Game"
+#~ msgstr "Игра"
+
#, fuzzy
#~ msgid "Install: file: \"$1\""
#~ msgstr "ИнÑталирај мод: фајл: \"$1\""
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Подешавање контрола.(Ðко овај мени нешто поквари, обришите Ñтвари из "
+#~ "minetest.conf)"
+
#~ msgid "Main"
#~ msgstr "Главно"
diff --git a/po/sr_Latn/minetest.po b/po/sr_Latn/minetest.po
index eeb7e9ce2..91a698dba 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: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -16,8 +16,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"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"
#: builtin/client/chatcommands.lua
@@ -119,6 +119,30 @@ msgid "The server has requested a reconnect:"
msgstr "Server je zahtevao ponovno povezivanje:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Protokol verzija neuskladjena. "
@@ -131,6 +155,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Server podrzava protokol verzije izmedju $1 ili $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Mi samo podrzavamo protokol verzije $1."
@@ -138,14 +166,21 @@ msgstr "Mi samo podrzavamo protokol verzije $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Mi podrzavamo protokol verzija izmedju verzije $1 i $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Ponisti"
@@ -283,7 +318,6 @@ msgid "Failed to download $1"
msgstr "Neuspelo preuzimanje $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Igre"
@@ -306,7 +340,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Modovi"
@@ -400,14 +433,10 @@ msgid "Decorations"
msgstr "Dekoracije"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
+msgid "Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Preuzmi jednu sa minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
msgstr "Tamnice"
@@ -423,10 +452,6 @@ msgstr "Lebdece zemaljske mase na nebu"
msgid "Floatlands (experimental)"
msgstr "Lebdece zemlje (eksperimentalno)"
-#: 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 "Stvaranje ne-fraktalnog terena: Okeani i podzemlje"
@@ -444,6 +469,15 @@ msgid "Increases humidity around rivers"
msgstr "Povecana vlaznost oko reka"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Instalirati"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Jezera"
@@ -545,10 +579,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Veoma velike pecine duboko ispod zemlje"
#: 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 ""
@@ -578,6 +608,36 @@ msgstr ""
msgid "Delete World \"$1\"?"
msgstr ""
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr ""
@@ -608,6 +668,14 @@ msgstr ""
msgid "Browse"
msgstr ""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr ""
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
@@ -664,7 +732,7 @@ msgstr ""
msgid "Select file"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr ""
@@ -811,6 +879,10 @@ msgstr ""
msgid "Previous Core Developers"
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -879,10 +951,6 @@ msgstr ""
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 ""
@@ -891,10 +959,6 @@ msgstr ""
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 ""
@@ -928,10 +992,6 @@ msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr ""
@@ -941,10 +1001,6 @@ msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr ""
@@ -957,6 +1013,10 @@ msgid "Join Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
@@ -970,10 +1030,18 @@ msgid "Refresh"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr ""
@@ -1018,7 +1086,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1115,7 +1183,7 @@ msgid "Tone Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1123,7 +1191,7 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1142,6 +1210,10 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr ""
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1276,7 +1348,7 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1380,6 +1452,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr ""
@@ -1885,24 +1962,6 @@ msgstr "Neuspelo preuzimanje $1"
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 ""
@@ -1935,7 +1994,7 @@ msgstr ""
msgid "Change camera"
msgstr ""
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr ""
@@ -1988,7 +2047,7 @@ msgid "Key already in use"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -2060,15 +2119,15 @@ msgid "Change"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
+msgid "New Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "New Password"
+msgid "Old Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Old Password"
+msgid "Passwords do not match!"
msgstr ""
#: src/gui/guiVolumeChange.cpp
@@ -2084,12 +2143,6 @@ msgstr ""
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).
@@ -2097,6 +2150,15 @@ msgstr ""
msgid "LANG_CODE"
msgstr "sr_Latn"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr ""
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2222,6 +2284,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2303,6 +2369,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2316,7 +2386,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2385,6 +2455,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2425,10 +2499,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2449,7 +2519,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2461,6 +2531,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2485,6 +2559,10 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Camera"
+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"
@@ -2641,6 +2719,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2736,6 +2818,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2769,7 +2855,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2836,11 +2924,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2983,6 +3071,11 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Dekoracije"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -3003,6 +3096,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3072,6 +3171,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3088,19 +3191,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3174,6 +3271,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3192,6 +3293,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3269,7 +3374,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
+msgid "Filtering and Antialiasing"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3337,6 +3442,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3485,6 +3594,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Igre"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3512,6 +3634,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3528,7 +3658,11 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3768,11 +3902,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3833,6 +3974,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3854,7 +4001,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3894,10 +4043,6 @@ 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 ""
@@ -3948,15 +4093,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4577,6 +4718,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4632,7 +4777,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4642,15 +4787,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4662,7 +4810,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4690,6 +4839,10 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lighting"
+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"
@@ -5074,10 +5227,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5126,6 +5275,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5212,16 +5373,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5234,6 +5395,10 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5271,10 +5436,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5368,10 +5529,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5418,10 +5575,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5590,6 +5743,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5617,19 +5774,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Seabed noise"
+msgid "Screenshots"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgid "Seabed noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of two 3D noises that together define tunnels."
+msgid "Second of 4 2D noises that together define hill/mountain range height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Security"
+msgid "Second of two 3D noises that together define tunnels."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5672,7 +5829,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
+#, fuzzy
+msgid "Server"
+msgstr "Vlazne reke"
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5700,10 +5866,18 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5714,12 +5888,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5727,7 +5903,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5803,7 +5979,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6003,6 +6179,10 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6205,7 +6385,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6229,10 +6409,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6323,6 +6511,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6556,6 +6748,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6645,6 +6846,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6656,6 +6861,9 @@ msgstr ""
msgid "cURL parallel limit"
msgstr ""
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Preuzmi jednu sa minetest.net"
+
#~ msgid "View"
#~ msgstr "Pogled"
diff --git a/po/sv/minetest.po b/po/sv/minetest.po
index 9c77e9a11..ccf9a1cd3 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: 2022-01-25 23:19+0100\n"
-"PO-Revision-Date: 2021-12-18 21:51+0000\n"
-"Last-Translator: xerxstirb <xerxstirb@gmail.com>\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-24 09:25+0000\n"
+"Last-Translator: ROllerozxa <temporaryemail4meh+github@gmail.com>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/minetest/"
"minetest/sv/>\n"
"Language: sv\n"
@@ -12,7 +12,7 @@ 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.10\n"
+"X-Generator: Weblate 4.14-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -114,6 +114,34 @@ msgid "The server has requested a reconnect:"
msgstr "Servern har begärt en återanslutning:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr "En ny $1version är tillgänglig"
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr "Klientmoddar"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+"Installerad version: $1\n"
+"Ny version: $2\n"
+"Besök $3 och se hur man får den nyaste versionen och håller en uppdaterad "
+"med funktioner och buggfixar."
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr "Senare"
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr "Aldrig"
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Protokollversionen matchar inte. "
@@ -126,6 +154,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Servern stöder protokollversioner mellan $1 och $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr "Besök hemsida"
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Vi stöder endast protokollversion $1."
@@ -133,14 +165,21 @@ msgstr "Vi stöder endast protokollversion $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Vi stöder protokollversioner mellan version $1 och $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr "(Aktiverad, har fel)"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+msgstr "(Ej nöjd)"
+
#: 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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Avbryt"
@@ -279,7 +318,6 @@ msgid "Failed to download $1"
msgstr "Misslyckades ladda ner $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Spel"
@@ -300,7 +338,6 @@ 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
msgid "Mods"
msgstr "Moddar"
@@ -393,12 +430,8 @@ msgid "Decorations"
msgstr "Dekorationer"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Ladda ner ett spel, såsom Minetest Game, från minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Ladda ner ett från minetest.net"
+msgid "Development Test is meant for developers."
+msgstr "Development Test är avsett för utvecklare."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -416,10 +449,6 @@ msgstr "Svävande landmassor i himlen"
msgid "Floatlands (experimental)"
msgstr "Floatlands (experimentellt)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Spel"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Generera icke-fraktal terräng: Oceaner och underjord"
@@ -437,6 +466,14 @@ msgid "Increases humidity around rivers"
msgstr "Ökar luftfuktigheten runt floderna"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr "Installera ett spel"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr "Installera ett annat spel"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Sjöar"
@@ -450,11 +487,11 @@ msgstr "Kartgenerator"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen flags"
-msgstr "Mapgen-flaggor"
+msgstr "Kartgenerator-flaggor"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mapgen-specific flags"
-msgstr "Mapgen-specifika flaggor"
+msgstr "Kartgenerator-specifika flaggor"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
@@ -538,10 +575,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Mycket stora grottor djupt ner i underjorden"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Varning: Utvecklingstestet är avsett för utvecklare."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Världnamn"
@@ -557,7 +590,7 @@ msgstr "Är du säker på att du vill radera \"$1\"?"
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
#: src/client/keycode.cpp
msgid "Delete"
-msgstr "Radera"
+msgstr "Ta bort"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
@@ -571,6 +604,36 @@ msgstr "pkgmgr: ogiltig sökväg \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Radera värld \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Bekräfta Lösenord"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr "Ansluter till $1"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr "Namn saknas"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Namn"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Lösenord"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr "Lösenorden passar inte"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr "Registrera"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Acceptera"
@@ -603,6 +666,14 @@ msgstr "< Tillbaka till inställningssidan"
msgid "Browse"
msgstr "Bläddra"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr "Innehåll: Spel"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr "Innehåll: Moddar"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Inaktiverad"
@@ -659,7 +730,7 @@ msgstr "Välj katalog"
msgid "Select file"
msgstr "Välj fil"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Visa tekniska namn"
@@ -777,7 +848,7 @@ msgstr "Om"
#: builtin/mainmenu/tab_about.lua
msgid "Active Contributors"
-msgstr "Aktiva Bidragande"
+msgstr "Aktiva bidragande"
#: builtin/mainmenu/tab_about.lua
msgid "Active renderer:"
@@ -807,6 +878,10 @@ msgstr "Före detta bidragande"
msgid "Previous Core Developers"
msgstr "Före detta huvudutvecklare"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr "Dela felsökningslogg"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Bläddra bland onlineinnehåll"
@@ -861,24 +936,20 @@ msgstr "Kreativt läge"
#: builtin/mainmenu/tab_local.lua
msgid "Enable Damage"
-msgstr "Aktivera Skada"
+msgstr "Aktivera skada"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
-msgstr "Bilda Spel"
+msgstr "Hosta spel"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
-msgstr "Värdserver"
+msgstr "Hosta server"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
msgstr "Installera spel från ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Namn"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Ny"
@@ -887,13 +958,9 @@ msgstr "Ny"
msgid "No world created or selected!"
msgstr "Ingen värld skapad eller vald!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Password"
-msgstr "Lösenord"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
-msgstr "Starta Spel"
+msgstr "Starta spel"
#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
@@ -913,7 +980,7 @@ msgstr "Serverport"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
-msgstr "Starta Spel"
+msgstr "Starta spel"
#: builtin/mainmenu/tab_online.lua
msgid "Address"
@@ -924,10 +991,6 @@ msgid "Clear"
msgstr "Rensa"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Anslut"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Kreativt läge"
@@ -937,20 +1000,20 @@ msgid "Damage / PvP"
msgstr "Skada / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Radera Favorit"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Favoriter"
#: builtin/mainmenu/tab_online.lua
msgid "Incompatible Servers"
-msgstr "Inkompatibla Servrar"
+msgstr "Inkompatibla servrar"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
-msgstr "Anslut Spel"
+msgstr "Anslut till spel"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr "Logga in"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
@@ -958,17 +1021,25 @@ msgstr "Ping"
#: builtin/mainmenu/tab_online.lua
msgid "Public Servers"
-msgstr "Offentliga Servrar"
+msgstr "Offentliga servrar"
#: builtin/mainmenu/tab_online.lua
msgid "Refresh"
msgstr "Uppdatera"
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr "Radera favorit"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Serverbeskrivning"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr "(kräver spelstöd)"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -986,7 +1057,7 @@ msgstr "8x"
#: builtin/mainmenu/tab_settings.lua
msgid "All Settings"
-msgstr "Alla Inställningar"
+msgstr "Alla inställningar"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
@@ -1006,19 +1077,19 @@ msgstr "Ändra Tangenter"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr "Sammanfogat 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: "
+msgid "Dynamic shadows:"
+msgstr "Dynamiska skuggor:"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
-msgstr "Fina Löv"
+msgstr "Sofistikerade löv"
#: builtin/mainmenu/tab_settings.lua
msgid "High"
@@ -1058,7 +1129,7 @@ msgstr "Nodkontur"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
-msgstr "Ingen"
+msgstr "Inget"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
@@ -1109,16 +1180,16 @@ msgid "Tone Mapping"
msgstr "Tonmappning"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr "Touch-tröskel: (px)"
+msgid "Touch threshold (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"
+msgid "Very High"
+msgstr "Extremt hög"
#: builtin/mainmenu/tab_settings.lua
msgid "Very Low"
@@ -1126,15 +1197,19 @@ msgstr "Väldigt Låg"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr "Vajande Löv"
+msgstr "Vajande löv"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Liquids"
-msgstr "Vajande Vätskor"
+msgstr "Vajande vätskor"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr "Vajande Växter"
+msgstr "Vajande växter"
+
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr "Anslutningsfel (protokollfel?)."
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
@@ -1271,12 +1346,12 @@ msgid "Camera update enabled"
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')"
+msgid "Can't show block bounds (disabled by mod or game)"
+msgstr "Kan inte visa blockgränser (avaktiverad av modd eller spel)"
#: src/client/game.cpp
msgid "Change Password"
-msgstr "Ändra Lösenord"
+msgstr "Ändra lösenord"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
@@ -1401,6 +1476,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Aktiverat obegränsat visningsområde"
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr "Fel vid skapande av klient: %s"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Avsluta till Meny"
@@ -1502,11 +1582,11 @@ msgstr "PÃ¥"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
-msgstr ""
+msgstr "Höjdförändringsläge avaktiverad"
#: src/client/game.cpp
msgid "Pitch move mode enabled"
-msgstr ""
+msgstr "Höjdförändringsläge aktiverad"
#: src/client/game.cpp
msgid "Profiler graph shown"
@@ -1905,30 +1985,6 @@ msgstr "Misslyckades att öppna hemsida"
msgid "Opening webpage"
msgstr "Öppnar hemsida"
-#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
-msgid "Passwords do not match!"
-msgstr "Lösenorden matchar inte!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Registrera och Anslut"
-
-#: 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 ""
-"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"
@@ -1961,7 +2017,7 @@ msgstr "Blockgränser"
msgid "Change camera"
msgstr "Ändra kamera"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Chatta"
@@ -1983,7 +2039,7 @@ msgstr "Sänk volym"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
-msgstr "Dubbeltryck \"hoppa\" för att slå på/av flygande"
+msgstr "Dubbeltr. \"hoppa\" för att växla flygläge"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Drop"
@@ -2014,10 +2070,8 @@ msgid "Key already in use"
msgstr "Tangent används redan"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"Tangentbindningar. (Om den här menyn strular, radera saker från minetest."
-"conf)"
+msgid "Keybindings."
+msgstr "Tagentbordsbindningar."
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2049,35 +2103,35 @@ msgstr "Smyg"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
-msgstr "Slå av/på HUD"
+msgstr "Växla HUD"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle chat log"
-msgstr "Slå av/på chattlog"
+msgstr "Växla chattlog"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
-msgstr "Slå av/på snabb"
+msgstr "Växla snabbläge"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fly"
-msgstr "Slå av/på flygläge"
+msgstr "Växla flygläge"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fog"
-msgstr "Slå av/på dimma"
+msgstr "Växla dimma"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle minimap"
-msgstr "Slå av/på minimapp"
+msgstr "Växla minimapp"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
-msgstr "Slå av/på noclip"
+msgstr "Växla noclip"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle pitchmove"
-msgstr "Slå av/på pitchmove"
+msgstr "Växla höjdförändr."
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
@@ -2088,10 +2142,6 @@ msgid "Change"
msgstr "Ändra"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Bekräfta Lösenord"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nytt Lösenord"
@@ -2099,6 +2149,10 @@ msgstr "Nytt Lösenord"
msgid "Old Password"
msgstr "Gammalt Lösenord"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Lösenorden matchar inte!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Avsluta"
@@ -2112,12 +2166,6 @@ msgstr "Tyst"
msgid "Sound Volume: %d%%"
msgstr "Ljudvolym: %d%%"
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Enter "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2125,6 +2173,17 @@ msgstr "Enter "
msgid "LANG_CODE"
msgstr "sv"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+"Namnet är inte registrerat. För att skapa ett konto på servern, tryck "
+"'Registrera'"
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr "Namnet är redan taget. Var snäll välj ett annat namn"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2289,6 +2348,10 @@ msgstr ""
"Notera att 'interlaced'-läget kräver shaders."
#: src/settings_translation_file.cpp
+msgid "3d"
+msgstr "3D"
+
+#: 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."
@@ -2385,6 +2448,10 @@ msgstr ""
"för att vara säker) skapar ett fast floatlandslager."
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr "Administratörsnamn"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avancerat"
@@ -2404,8 +2471,8 @@ msgstr ""
"naturligt nattljus."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
-msgstr "Alltid flygläge och snabb"
+msgid "Always fly fast"
+msgstr "Flyg alltid snabbt"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
@@ -2487,6 +2554,10 @@ msgstr ""
"Angiven i mapblocks (16 noder)."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr "Ljud"
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Automatisk framåtknapp"
@@ -2527,10 +2598,6 @@ msgid "Base terrain height."
msgstr "Bas för terränghöjd."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Grundläggande"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Grundläggande privilegier"
@@ -2551,7 +2618,7 @@ msgid "Bind address"
msgstr "Bindesadress"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr "API temperatur- och fuktighetsoljudsparametrar för biotoper"
#: src/settings_translation_file.cpp
@@ -2563,6 +2630,10 @@ msgid "Block send optimize distance"
msgstr "Distans för optimering av blockskickning"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr "Guppande"
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Fet och kursiv typsnittssökväg"
@@ -2587,6 +2658,10 @@ msgid "Builtin"
msgstr "Inbyggd"
#: src/settings_translation_file.cpp
+msgid "Camera"
+msgstr "Kamera"
+
+#: 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"
@@ -2609,7 +2684,7 @@ msgstr "Kamerautjämning i filmiskt läge"
#: src/settings_translation_file.cpp
msgid "Camera update toggle key"
-msgstr "Av/på-tangent för kamerauppdatering"
+msgstr "Växeltagent för kamerauppdatering"
#: src/settings_translation_file.cpp
msgid "Cave noise"
@@ -2701,7 +2776,7 @@ msgstr "Högsta längd för chattmeddelande"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
-msgstr "Chattangent Av/PÃ¥"
+msgstr "Tagent för växling av chattangent"
#: src/settings_translation_file.cpp
msgid "Chat weblinks"
@@ -2752,6 +2827,10 @@ msgid "Client side node lookup range restriction"
msgstr "Begränsing av klientsidig nodsökningsområde"
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr "Klientmoddande"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Klätterfart"
@@ -2868,6 +2947,10 @@ msgid "Console height"
msgstr "Konsolhöjd"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr "Innehållsdatabas"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "ContentDB Flaggsvartlista"
@@ -2908,8 +2991,13 @@ msgstr ""
"oförändrat."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Styr sjunkhastigheten i vätska."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
+"Styr hastigheten för sjunkande när man står stilla. Negativa värden leder "
+"till att\n"
+"du flyter upp istället."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2982,12 +3070,12 @@ msgid "Debug log level"
msgstr "Nivå av debuglogg"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Tangent för volymsänkning"
+msgid "Debugging"
+msgstr "Felsökning"
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Minska detta för att öka vätskans motstånd mot rörelser."
+msgid "Dec. volume key"
+msgstr "Tangent för volymsänkning"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3144,6 +3232,10 @@ msgid "Desynchronize block animation"
msgstr "Desynkronisera blockanimation"
#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr "Utvecklarinställningar"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Gräv-knapp"
@@ -3164,6 +3256,12 @@ msgid "Display Density Scaling Factor"
msgstr "Skalningsfaktor för displaytäthet"
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: 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."
@@ -3181,7 +3279,7 @@ msgstr "Släpp objekt-tagent"
#: src/settings_translation_file.cpp
msgid "Dump the mapgen debug information."
-msgstr "Dumpa felsökningsinformation för mapgen."
+msgstr "Dumpa felsökningsinformation för kartgeneratorn."
#: src/settings_translation_file.cpp
msgid "Dungeon maximum Y"
@@ -3242,6 +3340,10 @@ msgid "Enable joysticks"
msgstr "Aktivera joysticks"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Aktivera stöd för mod-kanaler."
@@ -3258,18 +3360,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Aktivera slumpmässig användarinmatning (används endast för testning)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-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."
@@ -3278,6 +3368,10 @@ msgstr ""
"Inaktivera för prestanda eller för ett annat utseende."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3315,6 +3409,8 @@ 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 ""
+"Aktivera guppande och mängden guppande.\n"
+"Till exempel: 0 för inget guppande, 1.0 för normalt, 2.0 för dubbla."
#: src/settings_translation_file.cpp
msgid ""
@@ -3340,7 +3436,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
-msgstr ""
+msgstr "Aktiverar animering av lagerföremål."
#: src/settings_translation_file.cpp
msgid "Enables caching of facedir rotated meshes."
@@ -3367,6 +3463,13 @@ 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 ""
+"Aktiverar kompromisser som reducerar CPU-belastning eller förbättrar "
+"prestanda\n"
+"fast som introducerar små visuella fel som inte påverkar spelbarheten."
+
+#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -3387,6 +3490,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "FPS när ofokuserad eller pausad"
@@ -3468,8 +3575,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtrering"
+msgid "Filtering and Antialiasing"
+msgstr "Filtrering och kantutjämning"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3494,11 +3601,11 @@ msgstr "Floatlanddensitet"
#: src/settings_translation_file.cpp
msgid "Floatland maximum Y"
-msgstr ""
+msgstr "Floatlands högsta Y"
#: src/settings_translation_file.cpp
msgid "Floatland minimum Y"
-msgstr ""
+msgstr "Floatlands minsta Y"
#: src/settings_translation_file.cpp
msgid "Floatland noise"
@@ -3506,15 +3613,15 @@ msgstr "Floatlandbrus"
#: src/settings_translation_file.cpp
msgid "Floatland taper exponent"
-msgstr ""
+msgstr "Floatlands avsmalningsexponent"
#: src/settings_translation_file.cpp
msgid "Floatland tapering distance"
-msgstr ""
+msgstr "Floatlands avsmalningsdistans"
#: src/settings_translation_file.cpp
msgid "Floatland water level"
-msgstr ""
+msgstr "Floatlands vattennivå"
#: src/settings_translation_file.cpp
msgid "Fly key"
@@ -3537,6 +3644,10 @@ msgid "Fog toggle key"
msgstr "Växlingstagent för dimma"
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr "Typsnitt"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Fetstilat typsnitt som standard"
@@ -3558,23 +3669,24 @@ msgstr "Typsnittsstorlek"
#: src/settings_translation_file.cpp
msgid "Font size divisible by"
-msgstr ""
+msgstr "Typsnittsstorlek delbar med"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
-msgstr "Storleken för standardtypsnittet i punkter (pt)."
+msgstr "Storleken för standardtypsnittet där 1 enhet = 1 pixel när DPI är 96"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
-msgstr "Storleken för monospacetypsnittet i punkter (pt)."
+msgstr "Storleken för monospacetypsnittet där 1 enhet = 1 pixel när DPI är 96"
#: 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 ""
+"Typsnittsstorlek för den senaste chattexten och chattprompten i punkter "
+"(pt).\n"
+"Värdet 0 använder standardstorleken."
#: src/settings_translation_file.cpp
msgid ""
@@ -3593,6 +3705,9 @@ msgid ""
"placeholders:\n"
"@name, @message, @timestamp (optional)"
msgstr ""
+"Formatet för spelares chattmeddelanden. De följande strängar är giltiga "
+"platshållare:\n"
+"@name, @message, @timestamp (ej obligatoriskt)"
#: src/settings_translation_file.cpp
msgid "Format of screenshots."
@@ -3690,6 +3805,18 @@ msgid "GUI scaling filter txr2img"
msgstr "Filter för Gränssnittsskalning txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamepads"
+msgstr "Gamepads"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Globala återkallelser"
@@ -3699,24 +3826,40 @@ msgid ""
"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 ""
+"Globala kartgeneratorattribut.\n"
+"I kartgeneratorn v6 kontrollerar 'decorations'-flaggan alla dekorationer "
+"förutom träd\n"
+"och djungelgräd, i alla andra kartgeneratorer styr flaggan alla dekorationer."
#: src/settings_translation_file.cpp
msgid ""
"Gradient of light curve at maximum light level.\n"
"Controls the contrast of the highest light levels."
msgstr ""
+"Gradienten av ljuskurvan vid högsta ljusnivå.\n"
+"Styr kontrasten av de högsta ljusnivåerna."
#: src/settings_translation_file.cpp
msgid ""
"Gradient of light curve at minimum light level.\n"
"Controls the contrast of the lowest light levels."
msgstr ""
+"Gradienten av ljuskurvan vid minsta ljusnivå.\n"
+"Styr kontrasten av de minsta ljusnivåerna."
#: src/settings_translation_file.cpp
msgid "Graphics"
msgstr "Grafik"
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr "Grafikeffekter"
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr "Grafik och ljud"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Gravitation"
@@ -3733,8 +3876,12 @@ msgid "HTTP mods"
msgstr "HTTP-moddar"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "HUD-skalningsfaktor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
+msgstr "HUD-skalning"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -3819,12 +3966,16 @@ msgid ""
"Horizontal and vertical acceleration in fast mode,\n"
"in nodes per second per second."
msgstr ""
+"Horisontell och vertikal acceleration i snabbläge,\n"
+"i noder per sekund per sekund."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration on ground or when climbing,\n"
"in nodes per second per second."
msgstr ""
+"Horisontell och vertikal acceleration på marken eller klättrande\n"
+"i noder per sekund per sekund."
#: src/settings_translation_file.cpp
msgid "Hotbar next key"
@@ -3964,7 +4115,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "How deep to make rivers."
-msgstr ""
+msgstr "Hur djupt floder ska gå."
#: src/settings_translation_file.cpp
msgid ""
@@ -3972,48 +4123,68 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Hur snabbt vätskevågor förflyttas. Högre = snabbare.\n"
+"Om negativt kommer vågorna förflyttas bakåt.\n"
+"Kräver vajande vätskor för att aktiveras."
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
+"Hur länge servern kommer vänta innan den urladdar oanvända mappblock, i "
+"sekunder.\n"
+"Högre värde är smidigare, men använder mer RAM."
#: src/settings_translation_file.cpp
-msgid "How wide to make rivers."
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
msgstr ""
+"Hur mycket du saktas ner när du rör dig genom en vätska.\n"
+"Minska detta för att öka vätskans motstånd mot rörelser."
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers."
+msgstr "Hur bred floder ska vara."
#: src/settings_translation_file.cpp
msgid "Humidity blend noise"
-msgstr ""
+msgstr "Luftfuktighetsblandbrus"
#: src/settings_translation_file.cpp
msgid "Humidity noise"
-msgstr ""
+msgstr "Luftfuktighetsbrus"
#: src/settings_translation_file.cpp
msgid "Humidity variation for biomes."
-msgstr ""
+msgstr "Variationen i luftfuktighet för biotoper."
#: src/settings_translation_file.cpp
msgid "IPv6"
-msgstr ""
+msgstr "IPv6"
#: src/settings_translation_file.cpp
msgid "IPv6 server"
-msgstr ""
+msgstr "IPv6-server"
#: 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 ""
+"Om FPS skulle gå högre än detta begränsas den genom\n"
+"att sova för att inte slösa på resurser utan någon anledning."
#: 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 ""
+"Om avaktiverad används \"Aux1\"-knappen för att flyga snabbt om både flyg- "
+"och snabbläge\n"
+"är aktiverade."
#: src/settings_translation_file.cpp
msgid ""
@@ -4040,6 +4211,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"När aktiverad är kontoregistrering separat från login i gränsnittet.\n"
+"När inaktiverad registreras ett nytt konto automatiskt."
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -4061,7 +4240,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4098,11 +4279,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Ignore world errors"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr ""
+msgstr "Ignorera världfel"
#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
@@ -4155,16 +4332,12 @@ 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 ""
+msgid "Interval of sending time of day to clients, stated in seconds."
+msgstr "Intervall för att skicka tiden på dagen för klienter, i sekunder."
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
@@ -4784,6 +4957,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4839,7 +5016,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4849,15 +5026,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4869,7 +5049,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4897,6 +5078,10 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lighting"
+msgstr "Belysning"
+
+#: 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"
@@ -5281,10 +5466,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5333,6 +5514,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr "Moddsäkerhet"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5419,16 +5612,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5441,6 +5634,10 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr "Nod- och väsenmarkering"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5478,10 +5675,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5575,10 +5768,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5625,10 +5814,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5797,6 +5982,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr "Skärm"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5824,6 +6013,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Screenshots"
+msgstr "Skärmdumpar"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5836,10 +6029,6 @@ 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 ""
@@ -5898,8 +6087,16 @@ msgstr ""
"18 = 4D \"Mandelbulb\" Julia set."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr ""
+msgid "Server"
+msgstr "Server"
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr "Servergameplay"
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
+msgstr "Serversäkerhet"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5926,10 +6123,18 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr "Server/Miljöprestanda"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5940,12 +6145,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5953,7 +6160,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6029,7 +6236,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6229,6 +6436,10 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr "Temporära inställningar"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6431,7 +6642,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6455,10 +6666,18 @@ msgid "Touch screen threshold"
msgstr "Tröskelvärde för pekskärm"
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr "Pekskärm"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6549,6 +6768,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6782,6 +7005,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6871,6 +7103,10 @@ msgid "Y-level of seabed."
msgstr "Y-nivå av sjöbotten."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL filhemladdning tidsgräns"
@@ -6912,6 +7148,9 @@ msgstr "cURL parallellgräns"
#~ msgid "Back"
#~ msgstr "Tillbaka"
+#~ msgid "Basic"
+#~ msgstr "Grundläggande"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Bits per pixel (dvs färgdjup) i fullskärmsläge."
@@ -6927,6 +7166,12 @@ msgstr "cURL parallellgräns"
#~ msgid "Configure"
#~ msgstr "Konfigurera"
+#~ msgid "Connect"
+#~ msgstr "Anslut"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Styr sjunkhastigheten i vätska."
+
#, fuzzy
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
@@ -6969,15 +7214,45 @@ msgstr "cURL parallellgräns"
#~ "Definierar samplingssteg av textur.\n"
#~ "Högre värden resulterar i jämnare normalmappning."
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Ladda ner ett spel, såsom Minetest Game, från minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Ladda ner ett från minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Laddar ner och installerar $1, vänligen vänta..."
+#~ msgid "Enable register confirmation"
+#~ msgstr "Aktivera registreringsbekräftelse"
+
+#~ msgid "Enter "
+#~ msgstr "Enter "
+
+#~ msgid "Filtering"
+#~ msgstr "Filtrering"
+
#~ msgid "FreeType fonts"
#~ msgstr "FreeType-typsnitt"
+#~ msgid "Game"
+#~ msgstr "Spel"
+
+#~ msgid "HUD scale factor"
+#~ msgstr "HUD-skalningsfaktor"
+
+#~ msgid "In-Game"
+#~ msgstr "In-game"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Installera: fil: \"$1\""
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Tangentbindningar. (Om den här menyn strular, radera saker från minetest."
+#~ "conf)"
+
#~ msgid "Main"
#~ msgstr "Huvudsaklig"
@@ -7033,6 +7308,23 @@ msgstr "cURL parallellgräns"
#~ msgid "Yes"
#~ msgstr "Ja"
+#, 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 ""
+#~ "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."
+
#~ msgid "You died."
#~ msgstr "Du dog."
diff --git a/po/sw/minetest.po b/po/sw/minetest.po
index 709937ea0..ef3a237a9 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: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -121,6 +121,31 @@ msgid "The server has requested a reconnect:"
msgstr "Seva imeomba na Unganisha upya:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Teua ulimwengu:"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Itifaki ya toleo haifanani."
@@ -133,6 +158,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Seva inasaidia matoleo ya itifaki kati ya $1 na $2."
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Sisi tu mkono itifaki toleo la $1."
@@ -140,14 +169,21 @@ msgstr "Sisi tu mkono itifaki toleo la $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Tunaunga mkono matoleo ya itifaki kati ya toleo la $1 na $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Katisha"
@@ -295,7 +331,6 @@ msgid "Failed to download $1"
msgstr "Imeshindwa kusakinisha $1 hadi $2"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Michezo"
@@ -321,7 +356,6 @@ msgstr ""
"Sakinisha Moduli: filetype visivyotegemezwa \"$1\" au nyaraka kuvunjwa"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mods"
@@ -424,12 +458,8 @@ msgstr "Instrumentation"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Pakua subgame, kama vile minetest_game, kutoka minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "Pakua moja kutoka minetest.net"
+msgid "Development Test is meant for developers."
+msgstr "Tahadhari: Mtihani wa maendeleo ndogo ni maana kwa watengenezaji."
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
@@ -449,10 +479,6 @@ msgstr ""
msgid "Floatlands (experimental)"
msgstr "Kiwango cha maji"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Mchezo"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr ""
@@ -471,6 +497,15 @@ msgid "Increases humidity around rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "Sakinisha"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr ""
@@ -576,11 +611,6 @@ 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 "Tahadhari: Mtihani wa maendeleo ndogo ni maana kwa watengenezaji."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Jina la ulimwengu"
@@ -613,6 +643,39 @@ msgstr "Modmgr: batili modpath \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Futa ulimwengu \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Thibitisha nywila"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Mwandishi ramani jina"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Password"
+msgstr "Nywila mpya"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "MaNenotambulishi hayaoani!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Kukubali"
@@ -644,6 +707,16 @@ msgstr ""
msgid "Browse"
msgstr "Vinjari"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "Kuendelea"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "Kuendelea"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Walemavu"
@@ -704,7 +777,7 @@ msgstr "Orodha ya ramani"
msgid "Select file"
msgstr "Teua faili ya Moduli:"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Onyesha majina ya kiufundi"
@@ -865,6 +938,11 @@ msgstr "Wachangiaji wa awali"
msgid "Previous Core Developers"
msgstr "Awali msingi watengenezaji"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Onyesha maelezo kuhusu marekebisho"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -943,10 +1021,6 @@ msgstr "Seva"
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 "Mpya"
@@ -955,11 +1029,6 @@ msgstr "Mpya"
msgid "No world created or selected!"
msgstr "Duniani hakuna kuundwa au kuteuliwa!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "Nywila mpya"
-
#: builtin/mainmenu/tab_local.lua
#, fuzzy
msgid "Play Game"
@@ -997,10 +1066,6 @@ msgid "Clear"
msgstr "Wazi"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "Kuunganisha"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Hali ya ubunifu"
@@ -1011,10 +1076,6 @@ msgid "Damage / PvP"
msgstr "Uharibifu"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Del. kipendwa"
-
-#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Favorites"
msgstr "Kipendwa"
@@ -1029,6 +1090,10 @@ msgid "Join Game"
msgstr "Ficha mchezo"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
@@ -1043,10 +1108,19 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "Bandari ya mbali"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Server Description"
msgstr "Maelezo ya seva"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2 x"
@@ -1093,8 +1167,9 @@ msgid "Dynamic shadows"
msgstr "Kivuli cha fonti"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr ""
+#, fuzzy
+msgid "Dynamic shadows:"
+msgstr "Kivuli cha fonti"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1192,7 +1267,7 @@ msgstr "Ramani ya toni"
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr "Touchthreshold (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1200,7 +1275,7 @@ msgid "Trilinear Filter"
msgstr "Kichujio trilinear"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1220,6 +1295,11 @@ msgstr "Waving fundo"
msgid "Waving Plants"
msgstr "Waving mimea"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Kosa la muunganisho (wakati muafaka?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Muunganisho limekatika."
@@ -1366,7 +1446,7 @@ msgid "Camera update enabled"
msgstr "Kibonye guro Usasishaji wa kamera"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1495,6 +1575,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "Inaunda mteja..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Toka kwenye menyu"
@@ -2025,24 +2110,6 @@ msgstr "Imeshindwa kusakinisha $1 hadi $2"
msgid "Opening webpage"
msgstr ""
-#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
-msgid "Passwords do not match!"
-msgstr "MaNenotambulishi hayaoani!"
-
-#: 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 "Kuendelea"
@@ -2078,7 +2145,7 @@ msgstr ""
msgid "Change camera"
msgstr "Badilisha funguo"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Kuzungumza"
@@ -2134,8 +2201,8 @@ msgid "Key already in use"
msgstr "Muhimu tayari katika matumizi"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "Keybindings. (Kama Menyu hii screws, Ondoa vitu kutoka minetest.conf)"
+msgid "Keybindings."
+msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
@@ -2213,10 +2280,6 @@ msgid "Change"
msgstr "Mabadiliko"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Thibitisha nywila"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nywila mpya"
@@ -2224,6 +2287,10 @@ msgstr "Nywila mpya"
msgid "Old Password"
msgstr "Nywila ya zamani"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "MaNenotambulishi hayaoani!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Toka"
@@ -2238,12 +2305,6 @@ msgstr "Ufunguo wa matumizi"
msgid "Sound Volume: %d%%"
msgstr "Kiwango sauti:"
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Ingiza"
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2251,6 +2312,15 @@ msgstr "Ingiza"
msgid "LANG_CODE"
msgstr "sw"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr ""
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2393,6 +2463,10 @@ msgstr ""
"-pageflip: quadbuffer msingi 3d."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2485,6 +2559,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Jina la ulimwengu"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Pevu"
@@ -2498,7 +2577,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Daima kuruka na kufunga"
#: src/settings_translation_file.cpp
@@ -2569,6 +2649,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Automatic forward key"
msgstr "Ufunguo wa mbele"
@@ -2615,10 +2699,6 @@ msgid "Base terrain height."
msgstr "Mandhari ya msingi urefu"
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Msingi"
-
-#: src/settings_translation_file.cpp
#, fuzzy
msgid "Basic privileges"
msgstr "Haki za msingi"
@@ -2641,7 +2721,7 @@ msgstr "Kumfunga anwani"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr "Mwandishi ramani v6 unyevu kelele vigezo"
#: src/settings_translation_file.cpp
@@ -2655,6 +2735,10 @@ msgid "Block send optimize distance"
msgstr "Umbo la Max Tuma umbali"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Bold and italic font path"
msgstr "Monospace njia ya fonti"
@@ -2683,6 +2767,11 @@ msgid "Builtin"
msgstr "Pamoja"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Badilisha funguo"
+
+#: 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"
@@ -2854,6 +2943,11 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Mteja"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Kasi ya upandaji"
@@ -2956,6 +3050,10 @@ msgid "Console height"
msgstr "Muhimu ya Kiweko"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2994,7 +3092,9 @@ msgstr ""
"unchanged."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3064,15 +3164,15 @@ msgid "Debug log level"
msgstr "Rekebisha kiwango cha logi"
#: src/settings_translation_file.cpp
+msgid "Debugging"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Dec. volume key"
msgstr "HUD kibonye"
#: 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 "Hatua ya seva ya kujitolea"
@@ -3221,6 +3321,11 @@ msgstr "Desynchronize umbo la uhuishaji"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Developer Options"
+msgstr "Instrumentation"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Dig key"
msgstr "Ufunguo sahihi"
@@ -3242,6 +3347,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+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."
@@ -3314,6 +3425,10 @@ msgid "Enable joysticks"
msgstr "Wezesha vifimbocheza"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Enable mod channels support."
msgstr "Kuwezesha usalama Moduli"
@@ -3331,16 +3446,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Wezesha ingizo la mtumiaji nasibu (kutumika tu kwa ajili ya kupima)."
#: 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."
@@ -3349,6 +3454,10 @@ msgstr ""
"Lemaza kwa kasi au kwa ajili ya inaonekana tofauti."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3433,6 +3542,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "Maelezo mafupi ya Bonde"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Injini ubainishaji wa data ya uchapaji nafasi"
@@ -3451,6 +3565,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "FPS when unfocused or paused"
msgstr "Ramprogrammen juu wakati mchezo umesitishwa."
@@ -3544,8 +3662,9 @@ msgstr ""
"kusafisha kwamba wakati mzigo, unamu."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Uchujaji"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Antialiasing:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3617,6 +3736,11 @@ msgid "Fog toggle key"
msgstr "Kibonye guro wa ukungu"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Ukubwa wa fonti"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3777,6 +3901,19 @@ msgid "GUI scaling filter txr2img"
msgstr "GUI kipimo Kichujio txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Michezo"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Callbacks ya kimataifa"
@@ -3812,6 +3949,16 @@ msgid "Graphics"
msgstr "Michoro"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Michoro"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Michoro"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Mvutano"
@@ -3831,10 +3978,15 @@ msgid "HTTP mods"
msgstr "HTTP Mods"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "GUI kurekebisha"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr "HUD kibonye"
@@ -4093,14 +4245,22 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"Seva kiasi kusubiri kabla ya kupakua mapblocks zisizotumika.\n"
"Thamani ya juu zaidi ni laini, lakini kutumia RAM zaidi."
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "How wide to make rivers."
msgstr "Upana gani kufanya mito"
@@ -4173,6 +4333,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -4198,7 +4364,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr "Ikiwa imewezeshwa, wachezaji wapya haiwezi kujiunga na nywila wazi."
#: src/settings_translation_file.cpp
@@ -4241,10 +4410,6 @@ msgid "Ignore world errors"
msgstr "Kupuuza makosa ya ulimwengu"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "Katika mchezo"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
"Mazungumzo katika mchezo console mandharinyuma Alfa (opaqueness kati ya 0 na "
@@ -4306,16 +4471,13 @@ msgid "Instrument the methods of entities on registration."
msgstr "Instrument mbinu za vyombo kwenye usajili."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Instrumentation"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""
"Muda wa kuhifadhi mabadiliko muhimu katika ulimwengu, alisema katika sekunde."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "Muda wa kutuma wakati wa siku kwa wateja."
#: src/settings_translation_file.cpp
@@ -5215,6 +5377,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -5276,7 +5442,7 @@ msgstr "Ufunguo wa kushoto"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"Urefu wa alama ya tiki seva na nafasi ambayo vitu ni kwa ujumla kusasaishwa "
"kwenye mtandao."
@@ -5292,19 +5458,24 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr "Urefu wa muda kati ya ABM utekelezaji mizunguko"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "Urefu wa muda kati ya mzunguko wa utekelezaji wa NodeTimer"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "Muda kati ya mizunguko ya usimamizi ya fungu amilifu"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5313,7 +5484,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"Kiwango cha ufunguaji kuandikwa kwa debug.txt:- <nothing>(Hakuna ufunguaji) "
"- Hakuna (ujumbe na hakuna kiwango) - kosa - tahadhari - hatua - taarifa - "
@@ -5344,6 +5516,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Taa laini"
+
+#: 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"
@@ -5802,10 +5979,6 @@ msgid "Maximum users"
msgstr "Watumiaji wa kiwango cha juu"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menyu"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "Kirudufu cha matundu"
@@ -5855,6 +6028,20 @@ msgid "Mipmapping"
msgstr "Mipmapping"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "Profiler"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Usalama"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5953,10 +6140,6 @@ msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "Mtandao"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
@@ -5965,6 +6148,11 @@ msgstr ""
"Thamani hii itakuwa kuuharibu wakati kuanzia Menyu kuu."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "Mtandao"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Watumiaji wapya haja Ingiza nywila hii."
@@ -5977,6 +6165,11 @@ msgid "Noclip key"
msgstr "Ufunguo wa Noclip"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Fundo udhulisho"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Fundo udhulisho"
@@ -6018,10 +6211,6 @@ msgstr ""
"(4096 = 100 MB, kama kanuni ya thumb)."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -6121,10 +6310,6 @@ msgstr ""
"Hii inahitaji upendeleo \"kuruka\" kwenye seva."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Jina la mchezaji"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "Umbali wa uhamisho wa mchezaji"
@@ -6178,10 +6363,6 @@ msgid "Profiler toggle key"
msgstr "Profiler kibonye"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Ubainishaji wa"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -6370,6 +6551,11 @@ msgstr ""
"yamesimamisha na ukubwa wa yasiyo ya takwimu."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Screenshot"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Urefu wa kiwamba"
@@ -6401,6 +6587,11 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Screenshots"
+msgstr "Screenshot"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Seabed noise"
msgstr "Pango kelele #1"
@@ -6413,10 +6604,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Usalama"
-
-#: src/settings_translation_file.cpp
#, fuzzy
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Ona http://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6477,8 +6664,19 @@ msgstr ""
"18 = 4 D seti ya julia \"Mandelbulb\"."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Seva / Singleplayer"
+#, fuzzy
+msgid "Server"
+msgstr "URL ya seva"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Jina la seva"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Maelezo ya seva"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6505,10 +6703,20 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Kituo tarishi cha seva"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "URL ya Serverlist"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "URL ya Serverlist"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Faili ya Serverlist"
@@ -6521,12 +6729,14 @@ msgstr ""
"Kuanza upya inahitajika baada ya kubadilisha hii."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -6534,7 +6744,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6630,7 +6840,7 @@ msgid ""
msgstr "Fonti kivuli Sawazisha, kama 0 basi kivuli itakuwa kuchukuliwa."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6848,6 +7058,11 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Temporary Settings"
+msgstr "Vipimo vya"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Terrain alternative noise"
msgstr "Urefu wa ardhi"
@@ -7083,7 +7298,8 @@ msgid "Time speed"
msgstr "Kasi ya muda"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
"Muda wa kuisha kwa mteja kuondoa data ya ramani zisizotumika kutoka kwa "
"kumbukumbu."
@@ -7113,10 +7329,19 @@ msgid "Touch screen threshold"
msgstr "Touchthreshold (px)"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Touchthreshold (px)"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -7212,6 +7437,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "Tumia uchujaji trilinear wakati upimaji unamu."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7487,6 +7716,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
"Kama kuonyesha mteja Rekebisha taarifa (ina athari sawa kama kupiga F5)."
@@ -7583,6 +7821,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL muda wa upakuzi wa faili"
@@ -7628,6 +7870,9 @@ msgstr "cURL kikomo sambamba"
#~ msgid "Back"
#~ msgstr "Nyuma"
+#~ msgid "Basic"
+#~ msgstr "Msingi"
+
#~ 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."
@@ -7644,6 +7889,9 @@ msgstr "cURL kikomo sambamba"
#~ msgid "Configure"
#~ msgstr "Sanidi"
+#~ msgid "Connect"
+#~ msgstr "Kuunganisha"
+
#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels."
#~ msgstr ""
#~ "Vidhibiti vya upana wa vichuguu, thamani ndogo huunda vichuguu pana."
@@ -7675,6 +7923,16 @@ msgstr "cURL kikomo sambamba"
#~ "Inafasili hatua ya sampuli ya unamu.\n"
#~ "Thamani ya juu zaidi matokeo katika ramani ya laini ya kawaida."
+#~ msgid "Del. Favorite"
+#~ msgstr "Del. kipendwa"
+
+#, fuzzy
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Pakua subgame, kama vile minetest_game, kutoka minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Pakua moja kutoka minetest.net"
+
#, fuzzy
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Inapakua $1, Tafadhali subiri..."
@@ -7709,6 +7967,9 @@ msgstr "cURL kikomo sambamba"
#~ "Huwezesha parallax occlusion uramanishi.\n"
#~ "Inahitaji shaders kwa kuwezeshwa."
+#~ msgid "Enter "
+#~ msgstr "Ingiza"
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7728,6 +7989,9 @@ msgstr "cURL kikomo sambamba"
#~ msgid "Fallback font size"
#~ msgstr "Ukubwa fonti amebadilisha"
+#~ msgid "Filtering"
+#~ msgstr "Uchujaji"
+
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Fonti kivuli Alfa (opaqueness kati ya 0 na 255)."
@@ -7738,6 +8002,9 @@ msgstr "cURL kikomo sambamba"
#~ msgid "Full screen BPP"
#~ msgstr "Skrini BPP"
+#~ msgid "Game"
+#~ msgstr "Mchezo"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7754,10 +8021,21 @@ msgstr "cURL kikomo sambamba"
#~ msgid "IPv6 support."
#~ msgstr "IPv6 msaada."
+#~ msgid "In-Game"
+#~ msgstr "Katika mchezo"
+
#, fuzzy
#~ msgid "Install: file: \"$1\""
#~ msgstr "Sakinisha Moduli: faili: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Instrumentation"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Keybindings. (Kama Menyu hii screws, Ondoa vitu kutoka minetest.conf)"
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "Kina ya pango kubwa"
@@ -7775,6 +8053,9 @@ msgstr "cURL kikomo sambamba"
#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
#~ msgstr "Hufanya DirectX kazi na LuaJIT. Lemaza ikiwa husababisha matatizo."
+#~ msgid "Menus"
+#~ msgstr "Menyu"
+
#~ msgid "Name / Password"
#~ msgstr "Jina / nenosiri"
@@ -7830,6 +8111,12 @@ msgstr "cURL kikomo sambamba"
#~ msgid "Path to save screenshots at."
#~ msgstr "Njia ya kuokoa viwambo katika."
+#~ msgid "Player name"
+#~ msgstr "Jina la mchezaji"
+
+#~ msgid "Profiling"
+#~ msgstr "Ubainishaji wa"
+
#~ msgid "PvP enabled"
#~ msgstr "PvP kuwezeshwa"
@@ -7840,6 +8127,9 @@ msgstr "cURL kikomo sambamba"
#~ msgid "Select Package File:"
#~ msgstr "Teua faili ya Moduli:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Seva / Singleplayer"
+
#, fuzzy
#~ msgid "Shadow limit"
#~ msgstr "Kikomo cha Mapblock"
diff --git a/po/th/minetest.po b/po/th/minetest.po
index b7fb6fbf4..03ce5e44d 100644
--- a/po/th/minetest.po
+++ b/po/th/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Thai (Minetest)\n"
"Report-Msgid-Bugs-To: \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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-03-18 01:05+0000\n"
+"Last-Translator: Thomas Wiegand <weblate.org@wiegand.info>\n"
"Language-Team: Thai <https://hosted.weblate.org/projects/minetest/minetest/"
"th/>\n"
"Language: th\n"
@@ -12,48 +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.2-dev\n"
+"X-Generator: Weblate 4.12-dev\n"
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Clear the out chat queue"
msgstr "ขนาดสูงสุดของคิวà¸à¸²à¸£à¹à¸Šà¸—นอà¸"
#: builtin/client/chatcommands.lua
msgid "Empty command."
-msgstr ""
+msgstr "คำสั่งว่างเปล่า"
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Exit to main menu"
-msgstr "ออà¸à¸ˆà¸²à¸à¹€à¸¡à¸™à¸¹"
+msgstr "ออà¸à¹„ปยังเมนูหลัà¸"
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Invalid command: "
-msgstr "ท้องถิ่นคำสั่ง"
+msgstr "คำสั่งไม่ถูà¸à¸•้อง: "
#: builtin/client/chatcommands.lua
msgid "Issued command: "
-msgstr ""
+msgstr "คำสั่งที่มีปัà¸à¸«à¸²: "
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "List online players"
-msgstr "เล่นคนเดียว"
+msgstr "รายชื่อผู้เล่นที่ออนไลน์"
#: builtin/client/chatcommands.lua
-#, fuzzy
msgid "Online players: "
-msgstr "เล่นคนเดียว"
+msgstr "ผู้เล่นที่ออนไลน์: "
#: builtin/client/chatcommands.lua
msgid "The out chat queue is now empty."
-msgstr ""
+msgstr "คิวนอà¸à¹à¸Šà¸—ว่างเปล่า"
#: builtin/client/chatcommands.lua
msgid "This command is disabled by server."
-msgstr ""
+msgstr "คำสั่งนี้ถูà¸à¸›à¸´à¸”à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹‚ดยเซิร์ฟเวอร์"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -64,44 +59,42 @@ msgid "You died"
msgstr "คุณตายà¹à¸¥à¹‰à¸§"
#: builtin/common/chatcommands.lua
-#, fuzzy
msgid "Available commands:"
-msgstr "ท้องถิ่นคำสั่ง"
+msgstr "คำสั่งที่ใช้ได้:"
#: builtin/common/chatcommands.lua
-#, fuzzy
msgid "Available commands: "
-msgstr "ท้องถิ่นคำสั่ง"
+msgstr "คำสั่งที่ใช้ได้: "
#: builtin/common/chatcommands.lua
msgid "Command not available: "
-msgstr ""
+msgstr "ไม่มีคำสั่ง: "
#: builtin/common/chatcommands.lua
msgid "Get help for commands"
-msgstr ""
+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 ""
+msgstr "[ทั้งหมด | <cmd>]"
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
-msgstr ""
+msgstr "ตà¸à¸¥à¸‡"
#: builtin/fstk/ui.lua
msgid "<none available>"
-msgstr ""
+msgstr "<ไม่มี>"
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred in a Lua script:"
-msgstr "เà¸à¸´à¸”ข้อผิดพลาดในสคริปต์ Lua เช่น mod:"
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในสคริปต์ลูอา เช่น ม็อด:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
@@ -120,6 +113,31 @@ msgid "The server has requested a reconnect:"
msgstr "เซิร์ฟเวอร์ได้ร้องขอà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อใหม่:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "เลือภMods"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "เวอร์ชันโปรโทคอลไม่ตรงà¸à¸±à¸™ "
@@ -132,6 +150,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "เซิร์ฟเวอร์ที่สนับสนุนเวอร์ชันโพรโทคอลระหว่าง $1 à¹à¸¥à¸° $2 "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "เราสนับสนุนโพรโทคอลเวอร์ชัน $1 เท่านั้น"
@@ -139,14 +161,21 @@ msgstr "เราสนับสนุนโพรโทคอลเวอร์
msgid "We support protocol versions between version $1 and $2."
msgstr "เราสนับสนุนโพรโทคอลระหว่างเวอร์ชัน $1 à¹à¸¥à¸° $2"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "ยà¸à¹€à¸¥à¸´à¸"
@@ -181,34 +210,31 @@ msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr ""
+msgstr "ค้นหา Mods เพิ่มเติม"
#: 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
msgid "No game description provided."
msgstr "ไม่มีคำอธิบายของเà¸à¸¡à¸—ี่ให้มา"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No hard dependencies"
-msgstr "ไม่มีà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡."
+msgstr "ไม่มีà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
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:"
@@ -229,59 +255,57 @@ 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
msgid "ContentDB is not available when Minetest was compiled without cURL"
-msgstr ""
+msgstr "ContentDB ไม่พร้อมใช้งานเมื่อรวบรวม Minetest โดยไม่มี cURL"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Downloading..."
msgstr "โหลด ..."
@@ -290,7 +314,6 @@ msgid "Failed to download $1"
msgstr "ไม่สามารถดาวน์โหลด $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "เà¸à¸¡"
@@ -299,22 +322,18 @@ 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 "ติดตั้ง: ชนิดà¹à¸Ÿà¹‰à¸¡à¸—ี่ไม่สนับสนุน \"$1\" หรือเà¸à¸´à¸”à¸à¸²à¸£à¹€à¸ªà¸µà¸¢à¸«à¸²à¸¢"
+msgstr "ติดตั้ง: ประเภทไฟล์ที่ไม่รองรับหรือไฟล์เà¸à¹‡à¸šà¸–าวรที่ใช้งานไม่ได้"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "ม็อด"
@@ -327,26 +346,24 @@ msgid "No results"
msgstr "ไม่มีผลลัพธ์"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "อัปเดต"
+msgstr "ไม่มีà¸à¸²à¸£à¸›à¸£à¸±à¸šà¸›à¸£à¸¸à¸‡"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
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"
@@ -362,11 +379,11 @@ msgstr "อัปเดต"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "อัปเดต All [$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"
@@ -374,119 +391,117 @@ 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
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
-#, fuzzy
msgid "Caves"
-msgstr "ความละเอียดของà¸à¸²à¸£à¸ªà¸¸à¹ˆà¸¡"
+msgstr "ถ้ำ"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "สร้าง"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Decorations"
-msgstr "ข้อมูล:"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "ดาวน์โหลดเà¸à¸¡ อย่างเช่น ไมน์เทสต์เà¸à¸¡ ได้จาภminetest.net"
+msgstr "ของตà¸à¹à¸•่ง"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "ดาวน์โหลดจาภminetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "คำเตือน: à¸à¸²à¸£à¸—ดสอบพัฒนาน้อยที่สุดมีความหมายสำหรับนัà¸à¸žà¸±à¸’นา."
#: builtin/mainmenu/dlg_create_world.lua
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 ""
-
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "เà¸à¸¡"
+msgstr "Floatlands (ทดลอง)"
#: 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
msgid "Increases humidity around rivers"
+msgstr "เพิ่มความชื้นรอบà¹à¸¡à¹ˆà¸™à¹‰à¸³"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "ติดตั้ง $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
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
-#, fuzzy
msgid "Mapgen"
-msgstr "Mapgen"
+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"
-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
msgid "No game selected"
@@ -494,19 +509,19 @@ 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"
-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
@@ -515,50 +530,45 @@ 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 ""
+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 ""
-
-#: 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"
@@ -570,7 +580,7 @@ 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
@@ -588,7 +598,40 @@ msgstr "pkgmgr: พาธของ \"$1\" ไม่ถูà¸à¸•้อง"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr "ลบโลภ\"$1\" หรือไม่"
+msgstr "ลบโลภ\"$1\" หรือไม่ ?"
+
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "ยืนยันรหัสผ่าน"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "ชื่อà¹à¸¡à¸žà¹€à¸à¹‡à¸™"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "ชื่อ"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "รหัสผ่าน"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "รหัสผ่านไม่ตรงà¸à¸±à¸š!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "ลงทะเบียน à¹à¸¥à¸°à¹€à¸‚้าร่วม"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
@@ -620,6 +663,16 @@ msgstr "< à¸à¸¥à¸±à¸šà¹„ปที่หน้าà¸à¸²à¸£à¸•ั้งค่า"
msgid "Browse"
msgstr "เรียà¸à¸”ู"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "เนื้อหา"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "เนื้อหา"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "ปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹à¸¥à¹‰à¸§"
@@ -633,9 +686,8 @@ msgid "Enabled"
msgstr "เปิดใช้งานà¹à¸¥à¹‰à¸§"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Lacunarity"
-msgstr "Lacunarity"
+msgstr "ความไม่ชัดเจน"
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
@@ -647,9 +699,8 @@ msgid "Offset"
msgstr "ค่าชดเชย"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Persistence"
-msgstr "ความมีอยู่"
+msgstr "วิริยะ"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
@@ -679,7 +730,7 @@ msgstr "เลือà¸à¹„ดเรà¸à¸—อรี"
msgid "Select file"
msgstr "เลือà¸à¹„ฟล์"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "à¹à¸ªà¸”งชื่อทางเทคนิค"
@@ -772,7 +823,7 @@ msgstr "ไม่สามารถติดตั้งเà¸à¸¡ $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a mod as a $1"
-msgstr "ไม่สามารถติดตั้ง mod $1"
+msgstr "ไม่สามารถติดตั้ง mod $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a modpack as a $1"
@@ -783,9 +834,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."
@@ -793,7 +843,7 @@ msgstr "ลองเปิดใช้งานเซิร์ฟเวอร์
#: builtin/mainmenu/tab_about.lua
msgid "About"
-msgstr ""
+msgstr "เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š"
#: builtin/mainmenu/tab_about.lua
msgid "Active Contributors"
@@ -801,22 +851,23 @@ msgstr "ผู้ร่วมให้ข้อมูล"
#: builtin/mainmenu/tab_about.lua
msgid "Active renderer:"
-msgstr ""
+msgstr "ตัวà¹à¸ªà¸”งผลที่ใช้งานอยู่:"
#: builtin/mainmenu/tab_about.lua
msgid "Core Developers"
msgstr "นัà¸à¸žà¸±à¸’นาหลัà¸"
#: builtin/mainmenu/tab_about.lua
-#, fuzzy
msgid "Open User Data Directory"
-msgstr "เลือà¸à¹„ดเรà¸à¸—อรี"
+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"
@@ -826,6 +877,11 @@ msgstr "ผู้สนับสนุนà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²"
msgid "Previous Core Developers"
msgstr "นัà¸à¸žà¸±à¸’นาหลัà¸à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "à¹à¸ªà¸”งข้อมูลà¸à¸²à¸£à¸”ีบัà¸"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "เรียà¸à¸”ูเนื้อหาออนไลน์"
@@ -892,11 +948,7 @@ 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 ""
+msgstr "ติดตั้งเà¸à¸¡à¸ˆà¸²à¸ ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -906,11 +958,6 @@ msgstr "ใหม่"
msgid "No world created or selected!"
msgstr "ยังไม่มีà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹‚ลภหรือยังไม่ได้เลือà¸!"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Password"
-msgstr "รหัสผ่านใหม่"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "เล่นเà¸à¸¡"
@@ -920,9 +967,8 @@ msgid "Port"
msgstr "พอร์ต"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "เลือà¸à¹‚ลà¸:"
+msgstr "เลือภMods"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -937,64 +983,64 @@ msgid "Start Game"
msgstr "เริ่มเà¸à¸¡"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Address"
-msgstr "-ที่อยู่: "
+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
-#, fuzzy
msgid "Damage / PvP"
-msgstr "ความเสียหาย"
-
-#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "ลบรายà¸à¸²à¸£à¹‚ปรด"
+msgstr "ดาเมจ / ผู้เล่นผ่านเครื่องเล่น"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Favorites"
-msgstr "ชื่นชอบ"
+msgstr "รายà¸à¸²à¸£à¹‚ปรด"
#: builtin/mainmenu/tab_online.lua
msgid "Incompatible Servers"
-msgstr ""
+msgstr "เซิร์ฟเวอร์ที่เข้าà¸à¸±à¸™à¹„ม่ได้"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
msgstr "เข้าร่วมเà¸à¸¡"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "เวลาตอบสนอง"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Public Servers"
-msgstr "ประà¸à¸²à¸¨ เซิร์ฟเวอร์"
+msgstr "เซิฟเวอร์สาธารณะ"
#: builtin/mainmenu/tab_online.lua
msgid "Refresh"
-msgstr ""
+msgstr "รีเฟรช"
#: builtin/mainmenu/tab_online.lua
#, fuzzy
+msgid "Remove favorite"
+msgstr "รีโมตพอร์ต"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "คำอธิบายเซิร์ฟเวอร์"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1035,13 +1081,13 @@ msgid "Connected Glass"
msgstr "เชื่อมต่อà¹à¸à¹‰à¸§"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
-#, fuzzy
msgid "Dynamic shadows"
-msgstr "เงาตัวอัà¸à¸©à¸£"
+msgstr "เงาà¹à¸šà¸šà¹„ดนามิà¸"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr ""
+#, fuzzy
+msgid "Dynamic shadows:"
+msgstr "เงาà¹à¸šà¸šà¹„ดนามิà¸: "
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1049,15 +1095,15 @@ msgstr "ใบไม้"
#: builtin/mainmenu/tab_settings.lua
msgid "High"
-msgstr ""
+msgstr "สูง"
#: builtin/mainmenu/tab_settings.lua
msgid "Low"
-msgstr ""
+msgstr "ต่ำ"
#: builtin/mainmenu/tab_settings.lua
msgid "Medium"
-msgstr ""
+msgstr "ปานà¸à¸¥à¸²à¸‡"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
@@ -1108,19 +1154,16 @@ msgid "Settings"
msgstr "à¸à¸²à¸£à¸•ั้งค่า"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
-#, fuzzy
msgid "Shaders"
-msgstr "Shaders"
+msgstr "เฉดสี"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Shaders (ไม่พร้อมใช้งาน)"
+msgstr "เฉดสี (ไม่พร้อมใช้งาน)"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (unavailable)"
-msgstr "Shaders (ไม่พร้อมใช้งาน)"
+msgstr "เฉดสี (ไม่พร้อมใช้งาน)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
@@ -1140,34 +1183,39 @@ msgstr "à¸à¸²à¸£à¹à¸¡à¸›à¹‚ทน"
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Touchthreshold: (px)"
-msgstr "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
+msgstr "ขีด จำà¸à¸±à¸”: (px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
msgstr "à¸à¸£à¸­à¸‡ trilinear"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
-msgstr ""
+#, fuzzy
+msgid "Very High"
+msgstr "สูงเป็นพิเศษ"
#: builtin/mainmenu/tab_settings.lua
msgid "Very Low"
-msgstr ""
+msgstr "ต่ำมาà¸"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "ใบโบà¸"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Waving Liquids"
-msgstr "โบà¸à¹‚หนด"
+msgstr "โบà¸à¸‚องเหลว"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
msgstr "โบà¸à¹„ม้"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "ข้อผิดพลาดà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อ (หมดเวลา?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อหมดเวลา"
@@ -1197,9 +1245,8 @@ msgid "Connection error (timed out?)"
msgstr "ข้อผิดพลาดà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อ (หมดเวลา?)"
#: src/client/clientlauncher.cpp
-#, fuzzy
msgid "Could not find or load game: "
-msgstr "ไม่สามารถค้นหา หรือโหลดเà¸à¸¡"
+msgstr "ไม่พบหรือโหลดเà¸à¸¡: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1230,13 +1277,12 @@ msgid "Provided world path doesn't exist: "
msgstr "โลà¸à¸¡à¸µà¹€à¸ªà¹‰à¸™à¹„ม่มี: "
#: src/client/game.cpp
-#, fuzzy
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
-"ตรวจสอบรายละเอียด debug.txt."
+"ตรวจสอบรายละเอียด debug.txt."
#: src/client/game.cpp
msgid "- Address: "
@@ -1256,23 +1302,21 @@ msgstr "-ประชาชน: "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
-#, fuzzy
msgid "- PvP: "
-msgstr "- PvP: "
+msgstr "- ผู้เล่นวีซ่าผู้เล่น: "
#: src/client/game.cpp
msgid "- Server Name: "
msgstr "-ชื่อเซิร์ฟเวอร์: "
#: src/client/game.cpp
-#, fuzzy
msgid "A serialization error occurred:"
-msgstr "เà¸à¸´à¸”ข้อผิดพลาดขึ้น:"
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸—ำให้เป็นอันดับ:"
#: src/client/game.cpp
#, c-format
msgid "Access denied. Reason: %s"
-msgstr ""
+msgstr "ปà¸à¸´à¹€à¸ªà¸˜à¸à¸²à¸£à¹€à¸‚้าใช้. เหตุผล: %s"
#: src/client/game.cpp
msgid "Automatic forward disabled"
@@ -1284,19 +1328,19 @@ msgstr "เปิดใช้งานà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸•่ออัตโน
#: src/client/game.cpp
msgid "Block bounds hidden"
-msgstr ""
+msgstr "บล็อà¸à¸‚อบเขตที่ซ่อนอยู่"
#: src/client/game.cpp
msgid "Block bounds shown for all blocks"
-msgstr ""
+msgstr "à¹à¸ªà¸”งขอบเขตบล็อà¸à¸ªà¸³à¸«à¸£à¸±à¸šà¸šà¸¥à¹‡à¸­à¸à¸—ั้งหมด"
#: src/client/game.cpp
msgid "Block bounds shown for current block"
-msgstr ""
+msgstr "ขอบเขตบล็อà¸à¸—ี่à¹à¸ªà¸”งสำหรับบล็อà¸à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™"
#: src/client/game.cpp
msgid "Block bounds shown for nearby blocks"
-msgstr ""
+msgstr "à¹à¸ªà¸”งขอบเขตบล็อà¸à¸ªà¸³à¸«à¸£à¸±à¸šà¸šà¸¥à¹‡à¸­à¸à¹ƒà¸à¸¥à¹‰à¹€à¸„ียง"
#: src/client/game.cpp
msgid "Camera update disabled"
@@ -1307,8 +1351,9 @@ msgid "Camera update enabled"
msgstr "เปิดใช้งานà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ตà¸à¸¥à¹‰à¸­à¸‡à¹à¸¥à¹‰à¸§"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
-msgstr ""
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
+msgstr "ไม่สามารถà¹à¸ªà¸”งขอบเขตà¸à¸²à¸£à¸šà¸¥à¹‡à¸­à¸ (ต้องà¸à¸²à¸£à¸ªà¸´à¸—ธิ์ 'basic_debug')"
#: src/client/game.cpp
msgid "Change Password"
@@ -1323,9 +1368,8 @@ msgid "Cinematic mode enabled"
msgstr "เปิดใช้งานโหมดภาพยนตร์"
#: src/client/game.cpp
-#, fuzzy
msgid "Client disconnected"
-msgstr "ลูà¸à¸„้า modding"
+msgstr "ไคลเอ็นต์ถูà¸à¸•ัดà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อ"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
@@ -1337,14 +1381,14 @@ msgstr "เชื่อมต่อà¸à¸±à¸šà¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ"
#: src/client/game.cpp
msgid "Connection failed for unknown reason"
-msgstr ""
+msgstr "à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อล้มเหลวโดยไม่ทราบสาเหตุ"
#: src/client/game.cpp
msgid "Continue"
msgstr "ต่อ"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1362,24 +1406,24 @@ msgid ""
"- %s: chat\n"
msgstr ""
"à¸à¸²à¸£à¸„วบคุม:\n"
-"-%s1: เลื่อนไปข้างหน้า\n"
-"-%s2: เลื่อนไปข้างหลัง\n"
-"-%s3: เลื่อนไปทางซ้าย\n"
-"-%s4: เลื่อนไปทางขวา\n"
-"-%s5: à¸à¸£à¸°à¹‚ดด / ปีน\n"
-"-%s6: à¹à¸­à¸šà¸”ู / ลงไป\n"
-"-%s7: วางรายà¸à¸²à¸£\n"
-"-%s8: สินค้าคงคลัง\n"
-"- เมาส์: เลี้ยว / มอง\n"
-"- เมาส์ซ้าย: ขุด / เจาะ\n"
-"- เมาส์ขวา: สถานที่ / à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™\n"
-"- ล้อเมาส์: เลือà¸à¸£à¸²à¸¢à¸à¸²à¸£\n"
-"-%s9: à¹à¸Šà¸—\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
#, c-format
msgid "Couldn't resolve address: %s"
-msgstr ""
+msgstr "ไม่สามารถà¹à¸à¹‰à¹„ขที่อยู่: %s"
#: src/client/game.cpp
msgid "Creating client..."
@@ -1423,11 +1467,11 @@ msgstr ""
"- นิ้วสไลด์: มองไปรอบ ๆ\n"
"เมนู / คลังโฆษณาปราà¸à¸:\n"
"- à¹à¸•ะสองครั้ง (นอà¸):\n"
-" -> ใà¸à¸¥à¹‰\n"
+"-> ใà¸à¸¥à¹‰\n"
"- สà¹à¸•็à¸à¸ªà¸±à¸¡à¸œà¸±à¸ª, สล็อตสัมผัส:\n"
-" -> ย้ายสà¹à¸•็à¸\n"
+"-> ย้ายสà¹à¸•็à¸\n"
"- à¹à¸•ะà¹à¸¥à¹‰à¸§à¸¥à¸²à¸à¹à¸•ะนิ้วที่สอง\n"
-" -> วางรายà¸à¸²à¸£à¹€à¸”ียวไปยังสล็อต\n"
+"-> วางรายà¸à¸²à¸£à¹€à¸”ียวไปยังสล็อต\n"
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
@@ -1438,6 +1482,11 @@ msgid "Enabled unlimited viewing range"
msgstr "เปิดใช้งานช่วงà¸à¸²à¸£à¸”ูที่ไม่ จำà¸à¸±à¸”"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "สร้างไคลเอ็นต์..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "ออà¸à¸ˆà¸²à¸à¹€à¸¡à¸™à¸¹"
@@ -1510,9 +1559,8 @@ msgid "Minimap currently disabled by game or mod"
msgstr "à¹à¸œà¸™à¸—ี่ย่อในปัจจุบันถูà¸à¸›à¸´à¸”ใช้งานโดยเà¸à¸¡à¸«à¸£à¸·à¸­à¸•ัวดัดà¹à¸›à¸¥à¸‡"
#: src/client/game.cpp
-#, fuzzy
msgid "Multiplayer"
-msgstr "เล่นคนเดียว"
+msgstr "ผู้เล่นหลายคน"
#: src/client/game.cpp
msgid "Noclip mode disabled"
@@ -1547,7 +1595,6 @@ msgid "Pitch move mode enabled"
msgstr "สนามย้ายเปิดใช้โหมด"
#: src/client/game.cpp
-#, fuzzy
msgid "Profiler graph shown"
msgstr "à¹à¸ªà¸”งà¸à¸£à¸²à¸Ÿ Profiler"
@@ -1577,11 +1624,11 @@ 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"
@@ -1590,17 +1637,17 @@ msgstr "เสียงไม่ปิดเสียง"
#: src/client/game.cpp
#, c-format
msgid "The server is probably running a different version of %s."
-msgstr ""
+msgstr "เซิร์ฟเวอร์อาจใช้งานเวอร์ชันอื่นของ %s."
#: src/client/game.cpp
#, c-format
msgid "Unable to connect to %s because IPv6 is disabled"
-msgstr ""
+msgstr "ไม่สามารถเชื่อมต่อà¸à¸±à¸š %s เนื่องจาภIPv6 ถูà¸à¸›à¸´à¸”ใช้งาน"
#: src/client/game.cpp
#, c-format
msgid "Unable to listen on %s because IPv6 is disabled"
-msgstr ""
+msgstr "ไม่สามารถฟังบน %s เพราะ IPv6 ถูà¸à¸›à¸´à¸”ใช้งาน"
#: src/client/game.cpp
#, c-format
@@ -1620,7 +1667,7 @@ msgstr "ช่วงà¸à¸²à¸£à¸”ูเป็นอย่างน้อย: %d1"
#: src/client/game.cpp
#, c-format
msgid "Volume changed to %d%%"
-msgstr "ปริมาตรที่เปลี่ยนไป %d1%%2"
+msgstr "ปริมาตรที่เปลี่ยนไป %d1%%2"
#: src/client/game.cpp
msgid "Wireframe shown"
@@ -1643,12 +1690,10 @@ msgid "Chat shown"
msgstr "สนทนาà¹à¸ªà¸”ง"
#: src/client/gameui.cpp
-#, fuzzy
msgid "HUD hidden"
msgstr "ผิวที่ซ่อน"
#: src/client/gameui.cpp
-#, fuzzy
msgid "HUD shown"
msgstr "ผิวà¹à¸ªà¸”ง"
@@ -1666,14 +1711,12 @@ msgid "Apps"
msgstr "à¹à¸­"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Backspace"
-msgstr "Backspace"
+msgstr "à¹à¸šà¹‡à¸„สเปซ"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Caps Lock"
-msgstr "Caps Lock"
+msgstr "à¹à¸„ปล็อค"
#: src/client/keycode.cpp
msgid "Control"
@@ -1744,9 +1787,8 @@ msgid "Left Menu"
msgstr "ด้านซ้าย Menu"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Left Shift"
-msgstr "ด้านซ้าย Shift"
+msgstr "ข้อà¸à¸°"
#: src/client/keycode.cpp
msgid "Left Windows"
@@ -1762,84 +1804,68 @@ msgid "Middle Button"
msgstr "ปุ่มà¸à¸¥à¸²à¸‡"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Num Lock"
-msgstr "Num Lock"
+msgstr "ล็อคหมายเลข"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad *"
-msgstr "Numpad *"
+msgstr "ตัวเลข *"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad +"
-msgstr "Numpad +"
+msgstr "ตัวเลข +"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad -"
-msgstr "Numpad -"
+msgstr "ตัวเลข -"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad ."
-msgstr "Numpad ."
+msgstr "ตัวเลข ."
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad /"
-msgstr "Numpad /"
+msgstr "ตัวเลข /"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad 0"
-msgstr "Numpad 0"
+msgstr "ตัวเลข 0"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad 1"
-msgstr "Numpad 1"
+msgstr "ตัวเลข 1"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad 2"
-msgstr "Numpad 2"
+msgstr "ตัวเลข 2"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad 3"
-msgstr "Numpad 3"
+msgstr "ตัวเลข 3"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad 4"
-msgstr "Numpad 4"
+msgstr "ตัวเลข 4"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad 5"
-msgstr "Numpad 5"
+msgstr "ตัวเลข 5"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad 6"
-msgstr "Numpad 6"
+msgstr "ตัวเลข 6"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad 7"
-msgstr "Numpad 7"
+msgstr "ตัวเลข 7"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad 8"
-msgstr "Numpad 8"
+msgstr "ตัวเลข 8"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad 9"
-msgstr "Numpad 9"
+msgstr "ตัวเลข 9"
#: src/client/keycode.cpp
msgid "OEM Clear"
@@ -1895,9 +1921,8 @@ msgid "Right Windows"
msgstr "หน้าต่างขวา"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Scroll Lock"
-msgstr "Scroll Lock"
+msgstr "ล็อคเลื่อน"
#. ~ Key name
#: src/client/keycode.cpp
@@ -1917,12 +1942,10 @@ msgid "Snapshot"
msgstr "ภาพรวม"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Space"
-msgstr "Space พื้นที่"
+msgstr "ช่องว่าง"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Tab"
msgstr "à¹à¸—็บ"
@@ -1947,64 +1970,38 @@ 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 "à¹à¸œà¸™à¸—ี่ย่อในโหมด surface, ซูม x1"
+msgstr "à¹à¸œà¸™à¸—ี่ย่อในโหมด surface, ซูม x%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "ขนาดพื้นผิวขั้นต่ำ"
+msgstr "à¹à¸œà¸™à¸—ี่ย่อในโหมดพื้นผิว"
#: src/gui/guiChatConsole.cpp
-#, fuzzy
msgid "Failed to open webpage"
-msgstr "ไม่สามารถดาวน์โหลด $1"
+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
-#, fuzzy, 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 ""
-"คุณà¸à¸³à¸¥à¸±à¸‡à¸ˆà¸°à¹€à¸‚้าร่วมเซิร์ฟเวอร์ที่ %1$s1 ด้วยชื่อ '%2$s2' เป็นครั้งà¹à¸£à¸ ถ้าคุณดำเนินà¸à¸²à¸£ "
-"จะมีสร้างบัà¸à¸Šà¸µà¹ƒà¸«à¸¡à¹ˆà¹‚ดยใช้ข้อมูลประจำตัวของคุณบนเซิร์ฟเวอร์นี้ \n"
-"à¸à¸£à¸¸à¸“าพิมพ์รหัสผ่านของคุณ à¹à¸¥à¸°à¸„ลิà¸à¸—ี่ลงทะเบียนà¹à¸¥à¸°à¹€à¸‚้าร่วมเพื่อยืนยันà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸šà¸±à¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰ "
-"หรือคลิà¸à¸¢à¸à¹€à¸¥à¸´à¸à¹€à¸žà¸·à¹ˆà¸­à¸¢à¸à¹€à¸¥à¸´à¸."
+msgstr "เปิดหน้าเว็บ"
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "ดำเนินà¸à¸²à¸£"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "\"Aux1\" = climb down"
-msgstr "\"Special\" = ปีนลง"
+msgstr "\"Aux1\" = ปีนลง"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Autoforward"
-msgstr "Autoforward"
+msgstr "ส่งต่ออัตโนมัติ"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
@@ -2012,7 +2009,7 @@ msgstr "à¸à¸£à¸°à¹‚ดด อัตโนมัติ"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Aux1"
-msgstr ""
+msgstr "Aux1"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
@@ -2020,13 +2017,13 @@ msgstr "ย้อนหลัง"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Block bounds"
-msgstr ""
+msgstr "บล็อà¸à¸‚อบเขต"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "เปลี่ยนà¸à¸¥à¹‰à¸­à¸‡"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "à¹à¸Š"
@@ -2079,8 +2076,8 @@ msgid "Key already in use"
msgstr "คีย์ใช้"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "โหวต. (ถ้าเมนูนี้สà¸à¸£à¸¹à¸‚ึ้น เอาข้อมูลจาภminetest.conf)"
+msgid "Keybindings."
+msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2139,9 +2136,8 @@ msgid "Toggle noclip"
msgstr "สลับ noclip"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle pitchmove"
-msgstr "บันทึà¸à¸ªà¸™à¸—นาสลับ"
+msgstr "สลับ pitchmove"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
@@ -2152,10 +2148,6 @@ msgid "Change"
msgstr "เปลี่ยน"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "ยืนยันรหัสผ่าน"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "รหัสผ่านใหม่"
@@ -2163,6 +2155,10 @@ msgstr "รหัสผ่านใหม่"
msgid "Old Password"
msgstr "รหัสผ่านเà¸à¹ˆà¸²"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "รหัสผ่านไม่ตรงà¸à¸±à¸š!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "ออà¸"
@@ -2172,15 +2168,9 @@ msgid "Muted"
msgstr "เสียง"
#: src/gui/guiVolumeChange.cpp
-#, fuzzy, c-format
+#, 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 "ป้อน "
+msgstr "ระดับเสียง: %d%%"
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
@@ -2189,6 +2179,16 @@ msgstr "ป้อน "
msgid "LANG_CODE"
msgstr "th"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "à¸à¸£à¸¸à¸“าเลือà¸à¸Šà¸·à¹ˆà¸­!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2198,7 +2198,6 @@ msgstr ""
"หาà¸à¸›à¸´à¸”ใช้งานจอยสติà¸à¹€à¸ªà¸¡à¸·à¸­à¸™à¸ˆà¸°à¸­à¸¢à¸¹à¹ˆà¸—ี่ตำà¹à¸«à¸™à¹ˆà¸‡à¹à¸£à¸à¸‚องสัมผัส"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
@@ -2218,6 +2217,14 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
+"(X,Y,Z) ออฟเซ็ตของเศษส่วนจาà¸à¸¨à¸¹à¸™à¸¢à¹Œà¸à¸¥à¸²à¸‡à¹‚ลà¸à¹ƒà¸™à¸«à¸™à¹ˆà¸§à¸¢à¸‚อง 'มาตราส่วน'\n"
+"สามารถใช้เพื่อย้ายจุดที่ต้องà¸à¸²à¸£à¹„ปที่ (0, 0) เพื่อสร้าง a\n"
+"จุดวางไข่ที่เหมาะสม หรือเพื่อให้ 'ซูมเข้า' ได้ตามต้องà¸à¸²à¸£\n"
+"ชี้โดยà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡ 'มาตราส่วน'.\n"
+"ค่าดีฟอลต์ได้รับà¸à¸²à¸£à¸›à¸£à¸±à¸šà¹à¸•่งสำหรับจุดเà¸à¸´à¸”ที่เหมาะสมสำหรับ Mandelbrot\n"
+"ตั้งค่าด้วยพารามิเตอร์เริ่มต้น อาจต้องà¹à¸à¹‰à¹„ขใน other\n"
+"สถานà¸à¸²à¸£à¸“์.\n"
+"ช่วงประมาณ -2 ถึง 2 คูณด้วย 'มาตราส่วน' สำหรับออฟเซ็ตในโหนด."
#: src/settings_translation_file.cpp
msgid ""
@@ -2229,34 +2236,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) มาตราส่วนของเศษส่วนในโหนด.\n"
+"ขนาดà¹à¸Ÿà¸£à¹‡à¸à¸—ัลจริงจะใหà¸à¹ˆà¸à¸§à¹ˆà¸² 2 ถึง 3 เท่า.\n"
+"ตัวเลขเหล่านี้สามารถสร้างได้มาà¸, เศษส่วนทำให้\n"
+"ไม่จำเป็นต้องอยู่ในโลà¸.\n"
+"เพิ่มสิ่งเหล่านี้เพื่อ 'ซูม' เข้าไปในรายละเอียดของเศษส่วน\n"
+"ค่าเริ่มต้นคือสำหรับรูปร่างที่ถูà¸à¸šà¸µà¸šà¸­à¸±à¸”ในà¹à¸™à¸§à¸•ั้งซึ่งเหมาะสำหรับ\n"
+"เà¸à¸²à¸°à¸•ั้งทั้ง 3 ตัว เท่าà¸à¸±à¸šà¸£à¸¹à¸›à¸£à¹ˆà¸²à¸‡à¸”ิบ."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of ridged mountains."
-msgstr ""
+msgstr "เสียง 2D ที่ควบคุมรูปร่าง/ขนาดของสันเขา."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr ""
+msgstr "เสียง 2D ที่ควบคุมรูปร่าง/ขนาดของเนินเขา."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
-msgstr ""
+msgstr "เสียง 2D ที่ควบคุมรูปร่าง/ขนาดของขั้นบันได."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
-msgstr ""
+msgstr "เสียง 2D ที่ควบคุมขนาด/à¸à¸²à¸£à¹€à¸à¸´à¸”ขึ้นของทิวเขาที่เป็นà¹à¸™à¸§à¸ªà¸±à¸™à¹€à¸‚า."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr ""
+msgstr "เสียง 2D ที่ควบคุมขนาด/à¸à¸²à¸£à¹€à¸à¸´à¸”ขึ้นของเนินเขา."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
-msgstr ""
+msgstr "เสียง 2D ที่ควบคุมขนาด/à¸à¸²à¸£à¹€à¸à¸´à¸”ของทิวเขาขั้นบันได."
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
-msgstr ""
+msgstr "เสียง 2D ที่ระบุตำà¹à¸«à¸™à¹ˆà¸‡à¸«à¸¸à¸šà¹€à¸‚าà¹à¸¥à¸°à¸Šà¹ˆà¸­à¸‡à¹à¸„บของà¹à¸¡à¹ˆà¸™à¹‰à¸³."
#: src/settings_translation_file.cpp
msgid "3D clouds"
@@ -2267,19 +2281,20 @@ msgid "3D mode"
msgstr "โหมด 3D"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "3D mode parallax strength"
-msgstr "Normalmaps à¹à¸‚็งà¹à¸£à¸‡"
+msgstr "ความà¹à¸£à¸‡à¸‚องพารัลà¹à¸¥à¸à¸‹à¹Œà¹‚หมด 3 มิติ"
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
-msgstr ""
+msgstr "เสียง 3 มิติที่à¸à¸³à¸«à¸™à¸”ถ้ำยัà¸à¸©à¹Œ."
#: src/settings_translation_file.cpp
msgid ""
"3D noise defining mountain structure and height.\n"
"Also defines structure of floatland mountain terrain."
msgstr ""
+"เสียงรบà¸à¸§à¸™ 3 มิติที่à¸à¸³à¸«à¸™à¸”โครงสร้างà¹à¸¥à¸°à¸„วามสูงของภูเขา\n"
+"ยังà¸à¸³à¸«à¸™à¸”โครงสร้างของภูมิประเทศภูเขาลอย."
#: src/settings_translation_file.cpp
msgid ""
@@ -2288,22 +2303,27 @@ 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 ""
+"โครงสร้างà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”สัà¸à¸à¸²à¸“รบà¸à¸§à¸™ 3 มิติของพื้นที่ลอยน้ำ.\n"
+"หาà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸ˆà¸²à¸à¸„่าเริ่มต้น อาจจำเป็นต้องใช้ 'มาตราส่วน' ของเสียง (0.7 โดยค่าเริ่มต้น)\n"
+"ที่จะปรับเปลี่ยนได้เนื่องจาà¸à¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸§à¸‚องทุ่นลอยน้ำทำงานได้ดีที่สุดเมื่อมีเสียงนี้\n"
+"ช่วงค่าประมาณ -2.0 ถึง 2.0."
#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
-msgstr ""
+msgstr "โครงสร้างà¸à¸³à¸«à¸™à¸”สัà¸à¸à¸²à¸“รบà¸à¸§à¸™ 3 มิติของผนังหุบเขาà¹à¸¡à¹ˆà¸™à¹‰à¸³."
#: src/settings_translation_file.cpp
msgid "3D noise defining terrain."
-msgstr ""
+msgstr "ภูมิประเทศที่à¸à¸³à¸«à¸™à¸”เสียงรบà¸à¸§à¸™ 3 มิติ"
#: src/settings_translation_file.cpp
msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
msgstr ""
+"เสียงรบà¸à¸§à¸™ 3 มิติสำหรับส่วนที่ยื่นออà¸à¸¡à¸²à¸ˆà¸²à¸à¸ à¸¹à¹€à¸‚า หน้าผา ฯลฯ โดยปà¸à¸•ิà¹à¸¥à¹‰à¸§à¸ˆà¸°à¸¡à¸µà¸„วามà¹à¸•à¸à¸•่างเล็à¸à¸™à¹‰à¸­à¸¢."
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr ""
+msgstr "เสียง 3 มิติที่à¸à¸³à¸«à¸™à¸”จำนวนดันเจี้ยนต่อà¹à¸¡à¸›à¸Šà¸±à¸‡à¸„์."
#: src/settings_translation_file.cpp
msgid ""
@@ -2330,6 +2350,10 @@ msgstr ""
"โปรดทราบว่าโหมด interlaced จะต้องเปิดใช้ shaders"
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2347,39 +2371,39 @@ msgstr "ข้อความที่จะà¹à¸ªà¸”งต่อไคลเอ
#: src/settings_translation_file.cpp
msgid "ABM interval"
-msgstr ""
+msgstr "ABM ช่วงเวลา"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "งบประมาณเวลาของ ABM"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
-msgstr ""
+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"
-msgstr ""
+msgstr "ช่วงà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸§à¸±à¸•ถุที่ใช้งานอยู่"
#: src/settings_translation_file.cpp
msgid ""
@@ -2405,7 +2429,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Adjust the detected display density, used for scaling UI elements."
-msgstr ""
+msgstr "ปรับความหนาà¹à¸™à¹ˆà¸™à¸‚องà¸à¸²à¸£à¹à¸ªà¸”งผลที่ตรวจพบ ซึ่งใช้สำหรับปรับขนาดองค์ประà¸à¸­à¸š UI"
#: src/settings_translation_file.cpp
#, c-format
@@ -2416,6 +2440,16 @@ 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
+#, fuzzy
+msgid "Admin name"
+msgstr "ผนวà¸à¸Šà¸·à¹ˆà¸­à¸£à¸²à¸¢à¸à¸²à¸£"
#: src/settings_translation_file.cpp
msgid "Advanced"
@@ -2429,9 +2463,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"
+#, fuzzy
+msgid "Always fly fast"
msgstr "บินเสมอ à¹à¸¥à¸°à¸£à¸§à¸”เร็ว"
#: src/settings_translation_file.cpp
@@ -2440,11 +2480,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"
@@ -2468,7 +2508,7 @@ msgstr "ต่อท้ายชื่อรายà¸à¸²à¸£à¹ƒà¸™à¸„ำà¹à¸™à¸°
#: src/settings_translation_file.cpp
msgid "Apple trees noise"
-msgstr ""
+msgstr "เสียงต้นà¹à¸­à¸›à¹€à¸›à¸´à¹‰à¸¥"
#: src/settings_translation_file.cpp
msgid "Arm inertia"
@@ -2500,6 +2540,18 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
+"ในระยะนี้เซิร์ฟเวอร์จะปรับให้เหมาะสมที่สุดว่าจะส่งบล็อà¸à¹ƒà¸”บ้าง\n"
+"ลูà¸à¸„้า.\n"
+"ค่าเล็à¸à¸™à¹‰à¸­à¸¢à¸­à¸²à¸ˆà¸Šà¹ˆà¸§à¸¢à¸›à¸£à¸±à¸šà¸›à¸£à¸¸à¸‡à¸›à¸£à¸°à¸ªà¸´à¸—ธิภาพได้มาภโดยที่ค่าใช้จ่ายที่มองเห็นได้\n"
+"ข้อผิดพลาดในà¸à¸²à¸£à¹à¸ªà¸”งผล (บางช่วงจะไม่à¹à¸ªà¸”งใต้น้ำà¹à¸¥à¸°à¹ƒà¸™à¸–้ำ\n"
+"à¹à¸¥à¸°à¸šà¸²à¸‡à¸„รั้งบนบà¸).\n"
+"à¸à¸²à¸£à¸•ั้งค่านี้เป็นค่าที่มาà¸à¸à¸§à¹ˆà¸² max_block_send_distance ปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸™à¸µà¹‰\n"
+"à¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸›à¸£à¸°à¸ªà¸´à¸—ธิภาพ.\n"
+"ระบุไว้ใน mapblocks (16 โหนด)."
+
+#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Automatic forward key"
@@ -2522,14 +2574,12 @@ 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 "คีย์พิเศษสำหรับà¸à¸²à¸£à¸›à¸µà¸™à¹€à¸‚า/เรียง"
+msgstr "คีย์พิเศษสำหรับà¸à¸²à¸£à¸›à¸µà¸™à¸‚ึ้น/ลง"
#: src/settings_translation_file.cpp
msgid "Backward key"
@@ -2537,15 +2587,11 @@ msgstr "ปุ่มย้อนà¸à¸¥à¸±à¸š"
#: src/settings_translation_file.cpp
msgid "Base ground level"
-msgstr ""
+msgstr "ระดับพื้นà¸à¸²à¸™"
#: src/settings_translation_file.cpp
msgid "Base terrain height."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "ขั้นพื้นà¸à¸²à¸™"
+msgstr "ความสูงของภูมิประเทศà¸à¸²à¸™."
#: src/settings_translation_file.cpp
msgid "Basic privileges"
@@ -2553,11 +2599,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"
@@ -2568,36 +2614,37 @@ msgid "Bind address"
msgstr "ผูà¸à¸—ี่อยู่"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
-msgstr ""
+#, fuzzy
+msgid "Biome API noise parameters"
+msgstr "พารามิเตอร์เสียงอุณหภูมิà¹à¸¥à¸°à¸„วามชื้นของ Biome API"
#: src/settings_translation_file.cpp
msgid "Biome noise"
-msgstr ""
+msgstr "เสียงไบโอม"
#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
+msgstr "บล็อà¸à¸ªà¹ˆà¸‡à¸£à¸°à¸¢à¸°à¸—างเพิ่มประสิทธิภาพ"
+
+#: src/settings_translation_file.cpp
+msgid "Bobbing"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "เส้นทางฟอนต์ monospace"
+msgstr "ไดเรà¸à¹€à¸•อรีฟอนต์หนาเอียง"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "เส้นทางฟอนต์ monospace"
+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 "เส้นทางฟอนต์ monospace"
+msgstr "ไดเรà¸à¹€à¸•อรีฟอนต์หนาà¹à¸šà¸šà¸‚นาดคงที่"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2605,10 +2652,14 @@ msgstr "สร้างภายในเครื่องเล่น"
#: src/settings_translation_file.cpp
msgid "Builtin"
-msgstr ""
+msgstr "ในตัว"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Camera"
+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"
@@ -2616,9 +2667,9 @@ msgid ""
"0.1 = Default, 0.25 = Good value for weaker tablets."
msgstr ""
"à¸à¸¥à¹‰à¸­à¸‡à¸­à¸¢à¸¹à¹ˆà¹ƒà¸à¸¥à¹‰à¸£à¸°à¸¢à¸°à¸—างระนาบในโหนดระหว่าง 0 ถึง 0.5\n"
-"ผู้ใช้ส่วนใหà¸à¹ˆà¹„ม่จำเป็นต้องเปลี่ยนà¹à¸›à¸¥à¸‡à¸ªà¸´à¹ˆà¸‡à¸™à¸µà¹‰\n"
-"à¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸‚ึ้นสามารถลดสิ่งประดิษà¸à¹Œà¹ƒà¸™ GPU ที่อ่อนà¹à¸­à¸à¸§à¹ˆà¸²à¹„ด้\n"
-"0.1 = ค่าเริ่มต้น, 0.25 = คุ้มค่าสำหรับà¹à¸—็บเล็ตที่อ่อนà¹à¸­à¸à¸§à¹ˆà¸²"
+"ผู้ใช้ส่วนใหà¸à¹ˆà¹„ม่จำเป็นต้องเปลี่ยนà¹à¸›à¸¥à¸‡à¸ªà¸´à¹ˆà¸‡à¸™à¸µà¹‰.\n"
+"à¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸‚ึ้นสามารถลดสิ่งประดิษà¸à¹Œà¹ƒà¸™ GPU ที่อ่อนà¹à¸­à¸à¸§à¹ˆà¸²à¹„ด้.\n"
+"0.1 = ค่าเริ่มต้น, 0.25 = คุ้มค่าสำหรับà¹à¸—็บเล็ตที่อ่อนà¹à¸­à¸à¸§à¹ˆà¸²."
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
@@ -2634,106 +2685,103 @@ 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"
-msgstr ""
+msgstr "ถ้ำเทเปอร์"
#: src/settings_translation_file.cpp
msgid "Cavern threshold"
-msgstr ""
+msgstr "ธรณีประตูถ้ำ"
#: src/settings_translation_file.cpp
msgid "Cavern upper limit"
-msgstr ""
+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 ""
+"ศูนย์à¸à¸¥à¸²à¸‡à¸‚องช่วงเพิ่มส่วนโค้งของà¹à¸ªà¸‡.\n"
+"โดยที่ 0.0 คือระดับà¹à¸ªà¸‡à¸•่ำสุด 1.0 คือระดับà¹à¸ªà¸‡à¸ªà¸¹à¸‡à¸ªà¸¸à¸”."
#: src/settings_translation_file.cpp
msgid "Chat command time message threshold"
-msgstr ""
+msgstr "เà¸à¸“ฑ์ข้อความเวลาคำสั่งà¹à¸Šà¸—"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat commands"
-msgstr "คำสั่ง"
+msgstr "คำสั่งà¹à¸Šà¸—"
#: src/settings_translation_file.cpp
-#, fuzzy
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 "ปุ่มสลับà¸à¸²à¸£à¹à¸Šà¸—"
#: src/settings_translation_file.cpp
msgid "Chat message count limit"
-msgstr ""
+msgstr "ขีด จำà¸à¸±à¸” จำนวนข้อความà¹à¸Šà¸—"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message format"
msgstr "ข้อความขัดข้อง"
#: src/settings_translation_file.cpp
msgid "Chat message kick threshold"
-msgstr ""
+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
-#, fuzzy
msgid "Chat weblinks"
msgstr "สนทนาà¹à¸ªà¸”ง"
#: src/settings_translation_file.cpp
msgid "Chunk size"
-msgstr ""
+msgstr "ขนาดà¸à¹‰à¸­à¸™"
#: src/settings_translation_file.cpp
msgid "Cinematic mode"
@@ -2751,7 +2799,7 @@ msgstr "ทำความสะอาดพื้นผิวโปร่งใ
msgid ""
"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
"output."
-msgstr ""
+msgstr "เว็บลิงà¸à¹Œà¸—ี่คลิà¸à¹„ด้ (คลิà¸à¸à¸¥à¸²à¸‡à¸«à¸£à¸·à¸­ Ctrl+คลิà¸à¸‹à¹‰à¸²à¸¢) เปิดใช้งานในเอาต์พุตคอนโซลà¹à¸Šà¸—."
#: src/settings_translation_file.cpp
msgid "Client"
@@ -2759,7 +2807,7 @@ msgstr "ไคลเอนต์"
#: src/settings_translation_file.cpp
msgid "Client and Server"
-msgstr ""
+msgstr "ไคลเอนต์à¹à¸¥à¸°à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ"
#: src/settings_translation_file.cpp
msgid "Client modding"
@@ -2767,15 +2815,20 @@ msgstr "ลูà¸à¸„้า modding"
#: src/settings_translation_file.cpp
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
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "ลูà¸à¸„้า modding"
#: src/settings_translation_file.cpp
msgid "Climbing speed"
-msgstr ""
+msgstr "ความเร็วในà¸à¸²à¸£à¸›à¸µà¸™à¹€à¸‚า"
#: src/settings_translation_file.cpp
msgid "Cloud radius"
@@ -2798,7 +2851,6 @@ msgid "Colored fog"
msgstr "หมอà¸à¸ªà¸µ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Colored shadows"
msgstr "หมอà¸à¸ªà¸µ"
@@ -2812,18 +2864,29 @@ msgid ""
"These flags are independent from Minetest versions,\n"
"so see a full list at https://content.minetest.net/help/content_flags/"
msgstr ""
+"รายà¸à¸²à¸£à¹à¸Ÿà¸¥à¹‡à¸à¸—ี่คั่นด้วยเครื่องหมายจุลภาคเพื่อซ่อนในที่เà¸à¹‡à¸šà¹€à¸™à¸·à¹‰à¸­à¸«à¸².\n"
+"สามารถใช้ \"nonfree\" เพื่อซ่อนà¹à¸žà¹‡à¸„เà¸à¸ˆà¸—ี่ไม่เข้าข่ายเป็น 'ซอฟต์à¹à¸§à¸£à¹Œà¸Ÿà¸£à¸µ'\n"
+"ตามที่à¸à¸³à¸«à¸™à¸”โดยมูลนิธิซอฟต์à¹à¸§à¸£à¹Œà¹€à¸ªà¸£à¸µ.\n"
+"คุณยังสามารถระบุà¸à¸²à¸£à¸ˆà¸±à¸”ประเภทเนื้อหา.\n"
+"à¹à¸Ÿà¸¥à¹‡à¸à¹€à¸«à¸¥à¹ˆà¸²à¸™à¸µà¹‰à¹„ม่ขึ้นà¸à¸±à¸šà¹€à¸§à¸­à¸£à¹Œà¸Šà¸±à¸™ Minetest\n"
+"เพื่อดูรายà¸à¸²à¸£à¸—ั้งหมดที่ https://content.minetest.net/help/content_flags/"
#: 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 ""
+"รายà¸à¸²à¸£à¸¡à¹‡à¸­à¸”คั่นด้วยเครื่องหมายจุลภาคที่อนุà¸à¸²à¸•ให้เข้าถึง 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"
+"ทำงานà¹à¸¡à¹‰à¹ƒà¸™à¸‚ณะที่à¸à¸²à¸£à¸£à¸±à¸à¸©à¸²à¸„วามปลอดภัย mod เปิดอยู่ (ผ่าน "
+"request_insecure_environment())."
#: src/settings_translation_file.cpp
msgid "Command key"
@@ -2836,6 +2899,10 @@ msgid ""
"0 - least compression, fastest\n"
"9 - best compression, slowest"
msgstr ""
+"ระดับà¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”ที่จะใช้เมื่อบันทึภmapblocks ไปยังดิสà¸à¹Œ.\n"
+"-1 - ใช้ระดับà¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”เริ่มต้น\n"
+"0 - บีบอัดน้อยที่สุด เร็วที่สุด\n"
+"9 - à¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”ที่ดีที่สุด ช้าที่สุด"
#: src/settings_translation_file.cpp
msgid ""
@@ -2844,6 +2911,10 @@ msgid ""
"0 - least compression, fastest\n"
"9 - best compression, slowest"
msgstr ""
+"ระดับà¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”ที่จะใช้เมื่อส่ง mapblock ไปยังไคลเอนต์.\n"
+"-1 - ใช้ระดับà¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”เริ่มต้น\n"
+"0 - บีบอัดน้อยที่สุด เร็วที่สุด\n"
+"9 - à¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”ที่ดีที่สุด ช้าที่สุด"
#: src/settings_translation_file.cpp
msgid "Connect glass"
@@ -2870,16 +2941,21 @@ msgid "Console height"
msgstr "ความสูงของคอนโซล"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+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 Max พร้อมà¸à¸±à¸™"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
-msgstr ""
+msgstr "url à¸à¸²à¸™à¸‚้อมูลเนื้อหา"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
@@ -2903,18 +2979,23 @@ 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."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
-msgstr ""
+msgstr "ควบคุมความชัน/ความลึà¸à¸‚องความà¸à¸”อาà¸à¸²à¸¨à¸•่ำในทะเลสาบ."
#: src/settings_translation_file.cpp
msgid "Controls steepness/height of hills."
-msgstr ""
+msgstr "ควบคุมความชัน/ความสูงของเนินเขา."
#: src/settings_translation_file.cpp
msgid ""
@@ -2922,6 +3003,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"
@@ -2936,11 +3020,12 @@ msgid "Crosshair alpha"
msgstr "Crosshair อัลฟา"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"This also applies to the object crosshair."
-msgstr "Crosshair อัลฟา (ความทึบà¹à¸ªà¸‡à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡ 0 ถึง 255)."
+msgstr ""
+"Crosshair อัลฟา (ความทึบà¹à¸ªà¸‡à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡ 0 ถึง 255).\n"
+"สิ่งนี้ใช้à¸à¸±à¸šà¹€à¸›à¹‰à¸²à¹€à¸¥à¹‡à¸‡à¸‚องวัตถุด้วย"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2951,6 +3036,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"
@@ -2966,10 +3053,14 @@ msgstr "à¹à¸à¹‰à¹„ขคีย์à¸à¸²à¸£à¸ªà¸¥à¸±à¸šà¸‚้อมูล"
#: src/settings_translation_file.cpp
msgid "Debug log file size threshold"
-msgstr ""
+msgstr "เà¸à¸“ฑ์ขนาดไฟล์บันทึà¸à¸à¸²à¸£à¸”ีบัà¸"
#: src/settings_translation_file.cpp
msgid "Debug log level"
+msgstr "ระดับบันทึà¸à¸”ีบัà¸"
+
+#: src/settings_translation_file.cpp
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2977,16 +3068,12 @@ 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 ""
+msgstr "ขั้นตอนเซิร์ฟเวอร์เฉพาะ"
#: src/settings_translation_file.cpp
msgid "Default acceleration"
-msgstr ""
+msgstr "ค่าความเร่งเริ่มต้น"
#: src/settings_translation_file.cpp
msgid "Default game"
@@ -3010,12 +3097,11 @@ 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 ""
@@ -3023,42 +3109,45 @@ msgid ""
"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
"but also uses more resources."
msgstr ""
+"à¸à¸³à¸«à¸™à¸”คุณภาพà¸à¸²à¸£à¸à¸£à¸­à¸‡à¹€à¸‡à¸²\n"
+"สิ่งนี้จำลองเอฟเฟà¸à¸•์เงาอ่อนโดยใช้ PCF หรือดิสà¸à¹Œà¸›à¸±à¸§à¸‹à¸­à¸‡\n"
+"à¹à¸•่ยังใช้ทรัพยาà¸à¸£à¸¡à¸²à¸à¸‚ึ้น"
#: 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."
-msgstr ""
+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)."
@@ -3066,15 +3155,15 @@ msgstr "à¸à¸³à¸«à¸™à¸”ระยะถ่ายโอนผู้เล่นส
#: src/settings_translation_file.cpp
msgid "Defines the width of the river channel."
-msgstr ""
+msgstr "à¸à¸³à¸«à¸™à¸”ความà¸à¸§à¹‰à¸²à¸‡à¸‚องช่องà¹à¸¡à¹ˆà¸™à¹‰à¸³."
#: src/settings_translation_file.cpp
msgid "Defines the width of the river valley."
-msgstr ""
+msgstr "à¸à¸³à¸«à¸™à¸”ความà¸à¸§à¹‰à¸²à¸‡à¸‚องหุบเขาà¹à¸¡à¹ˆà¸™à¹‰à¸³."
#: src/settings_translation_file.cpp
msgid "Defines tree areas and tree density."
-msgstr ""
+msgstr "à¸à¸³à¸«à¸™à¸”พื้นที่ต้นไม้à¹à¸¥à¸°à¸„วามหนาà¹à¸™à¹ˆà¸™à¸‚องต้นไม้."
#: src/settings_translation_file.cpp
msgid ""
@@ -3094,15 +3183,15 @@ msgstr "ความล่าช้าà¹à¸ªà¸”งคำà¹à¸™à¸°à¸™à¸³à¹€à¸„ร
#: src/settings_translation_file.cpp
msgid "Deprecated Lua API handling"
-msgstr ""
+msgstr "à¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¸£ Lua API ที่เลิà¸à¹ƒà¸Šà¹‰à¹à¸¥à¹‰à¸§"
#: 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."
-msgstr ""
+msgstr "ความลึà¸à¸”้านล่างซึ่งคุณจะพบถ้ำขนาดใหà¸à¹ˆ."
#: src/settings_translation_file.cpp
msgid ""
@@ -3112,13 +3201,15 @@ msgstr "คำอธิบายของเซิร์ฟเวอร์ที
#: src/settings_translation_file.cpp
msgid "Desert noise threshold"
-msgstr ""
+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 ""
+"ทะเลทรายเà¸à¸´à¸”ขึ้นเมื่อ np_biome เà¸à¸´à¸™à¸„่านี้.\n"
+"เมื่อเปิดใช้งานà¹à¸Ÿà¸¥à¹‡à¸ 'snowbiomes' สิ่งนี้จะถูà¸à¸¥à¸°à¹€à¸§à¹‰à¸™."
#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
@@ -3126,6 +3217,10 @@ msgstr "Desynchronize บล็อà¸à¸ à¸²à¸žà¹€à¸„ลื่อนไหว"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Developer Options"
+msgstr "ของตà¸à¹à¸•่ง"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "ปุ่มขวา"
@@ -3143,6 +3238,12 @@ msgstr "ไม่อนุà¸à¸²à¸•รหัสผ่านที่ว่าง
#: src/settings_translation_file.cpp
msgid "Display Density Scaling Factor"
+msgstr "ปัจจัยà¸à¸²à¸£à¸›à¸£à¸±à¸šà¸‚นาดความหนาà¹à¸™à¹ˆà¸™à¸‚องจอà¹à¸ªà¸”งผล"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3163,25 +3264,27 @@ msgstr "วางรหัสรายà¸à¸²à¸£"
#: src/settings_translation_file.cpp
msgid "Dump the mapgen debug information."
-msgstr ""
+msgstr "ดัมพ์ข้อมูลà¸à¸²à¸£à¸”ีบัภmapgen."
#: src/settings_translation_file.cpp
msgid "Dungeon maximum Y"
-msgstr ""
+msgstr "ดันเจี้ยนสูงสุด Y"
#: src/settings_translation_file.cpp
msgid "Dungeon minimum Y"
-msgstr ""
+msgstr "ดันเจี้ยนขั้นต่ำ Y"
#: src/settings_translation_file.cpp
msgid "Dungeon noise"
-msgstr ""
+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 ""
+"เปิดใช้งานà¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™ IPv6 (สำหรับทั้งไคลเอนต์à¹à¸¥à¸°à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ).\n"
+"จำเป็นสำหรับà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อ IPv6 เพื่อให้ทำงานได้ทั้งหมด."
#: src/settings_translation_file.cpp
msgid ""
@@ -3197,33 +3300,40 @@ msgid ""
"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
"filtering."
msgstr ""
+"เปิดใช้งานà¸à¸²à¸£à¸à¸£à¸­à¸‡à¸”ิสà¸à¹Œà¸›à¸±à¸§à¸‹à¸­à¸‡.\n"
+"บนทรูใช้ดิสà¸à¹Œà¸›à¸±à¸§à¸‹à¸­à¸‡à¹€à¸žà¸·à¹ˆà¸­à¸ªà¸£à¹‰à¸²à¸‡ \"เงาอ่อน\" มิฉะนั้นจะใช้à¸à¸²à¸£à¸à¸£à¸­à¸‡ 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 "เปิดใช้งานหน้าต่างคอนโซล"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable creative mode for all players"
-msgstr "เปิดใช้งานโหมดสร้างสรรค์สำหรับà¹à¸œà¸™à¸—ี่ที่สร้างขึ้นใหม่."
+msgstr "เปิดใช้งานโหมดสร้างสรรค์สำหรับผู้เล่นทั้งหมด"
#: src/settings_translation_file.cpp
msgid "Enable joysticks"
msgstr "เปิดใช้งานจอยสติ๊à¸"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "เปิดใช้งานà¸à¸²à¸£à¸£à¸­à¸‡à¸£à¸±à¸šà¸Šà¹ˆà¸­à¸‡à¸ªà¸±à¸à¸à¸²à¸“ mod."
#: src/settings_translation_file.cpp
msgid "Enable mod security"
-msgstr ""
+msgstr "เปิดใช้งานà¸à¸²à¸£à¸£à¸±à¸à¸©à¸²à¸„วามปลอดภัยม็อด"
#: src/settings_translation_file.cpp
msgid "Enable players getting damage and dying."
@@ -3234,18 +3344,6 @@ 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 ""
-"เปิดใช้งานà¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¸à¸²à¸£à¸¥à¸‡à¸—ะเบียนเมื่อเชื่อมต่อà¸à¸±à¸šà¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ.\n"
-"หาà¸à¸›à¸´à¸”ใช้งานบัà¸à¸Šà¸µà¹ƒà¸«à¸¡à¹ˆà¸ˆà¸°à¸–ูà¸à¸¥à¸‡à¸—ะเบียนโดยอัตโนมัติ."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3254,6 +3352,10 @@ msgstr ""
"ปิดใช้งานสำหรับความเร็วหรือลัà¸à¸©à¸“ะที่à¹à¸•à¸à¸•่างà¸à¸±à¸™."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3281,6 +3383,8 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"เปิดใช้งานวัตถุบัฟเฟอร์จุดยอด.\n"
+"สิ่งนี้ควรปรับปรุงประสิทธิภาพà¸à¸£à¸²à¸Ÿà¸´à¸à¸­à¸¢à¹ˆà¸²à¸‡à¸¡à¸²à¸."
#: src/settings_translation_file.cpp
msgid ""
@@ -3291,14 +3395,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.\n"
-"ข้ามไปหาà¸à¸•ั้งค่า bind_address."
+"ข้ามไปหาà¸à¸•ั้งค่า bind_address.\n"
+"ต้องà¸à¸²à¸£ enable_ipv6 เพื่อเปิดใช้งาน"
#: src/settings_translation_file.cpp
msgid ""
@@ -3307,6 +3411,10 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"เปิดใช้งานà¸à¸²à¸£à¸ˆà¸±à¸šà¸„ู่โทนภาพยนตร์ 'Uncharted 2' ของ Hable.\n"
+"จำลองเส้นโทนสีของฟิล์มถ่ายภาพà¹à¸¥à¸°à¸„่านี้ใà¸à¸¥à¹‰à¹€à¸„ียงà¸à¸±à¸š\n"
+"ลัà¸à¸©à¸“ะของภาพช่วงไดนามิà¸à¸ªà¸¹à¸‡ ความเปรียบต่างระดับà¸à¸¥à¸²à¸‡à¹€à¸¥à¹‡à¸à¸™à¹‰à¸­à¸¢\n"
+"ปรับปรุง ไฮไลท์à¹à¸¥à¸°à¹€à¸‡à¸²à¸ˆà¸°à¸„่อยๆ บีบอัด."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -3327,20 +3435,31 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"เปิดใช้งานระบบเสียง.\n"
+"หาà¸à¸›à¸´à¸”ใช้งาน จะเป็นà¸à¸²à¸£à¸›à¸´à¸”เสียงทั้งหมดในทุà¸à¸—ี่à¹à¸¥à¸°à¹ƒà¸™à¹€à¸à¸¡\n"
+"à¸à¸²à¸£à¸„วบคุมเสียงจะไม่ทำงาน.\n"
+"à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸à¸²à¸£à¸•ั้งค่านี้ต้องรีสตาร์ท."
#: 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 หรือเพิ่มประสิทธิภาพà¸à¸²à¸£à¹€à¸£à¸™à¹€à¸”อร์\n"
+"เนื่องจาà¸à¸„วามบà¸à¸žà¸£à¹ˆà¸­à¸‡à¸‚องภาพเล็à¸à¸™à¹‰à¸­à¸¢à¸—ี่ไม่ส่งผลต่อà¸à¸²à¸£à¹€à¸¥à¹ˆà¸™à¹€à¸à¸¡."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "โปรไฟล์หุบเขา"
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
-msgstr ""
+msgstr "ช่วงเวลาà¸à¸²à¸£à¸žà¸´à¸¡à¸žà¹Œà¸‚้อมูลโปรไฟล์เครื่องยนต์"
#: src/settings_translation_file.cpp
msgid "Entity methods"
-msgstr ""
+msgstr "วิธีà¸à¸²à¸£à¸™à¸´à¸•ิบุคคล"
#: src/settings_translation_file.cpp
msgid ""
@@ -3351,27 +3470,34 @@ 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 ""
+"เลขชี้à¸à¸³à¸¥à¸±à¸‡à¸‚องà¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸§à¸‚องทุ่นลอยน้ำ เปลี่ยนพฤติà¸à¸£à¸£à¸¡à¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸§.\n"
+"ค่า = 1.0 สร้างà¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸§à¹€à¸Šà¸´à¸‡à¹€à¸ªà¹‰à¸™à¸—ี่สม่ำเสมอ.\n"
+"ค่า > 1.0 สร้างà¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸§à¸—ี่ราบรื่นเหมาะสำหรับà¸à¸²à¸£à¹à¸¢à¸à¸„่าเริ่มต้น\n"
+"ทุ่นลอยน้ำ.\n"
+"ค่า < 1.0 (เช่น 0.25) สร้างระดับพื้นผิวที่à¸à¸³à¸«à¸™à¸”มาà¸à¸‚ึ้นด้วย\n"
+"ที่ราบลุ่มที่ราบเรียบเหมาะสำหรับชั้นทุ่นลอยน้ำที่เป็นของà¹à¸‚็ง."
+
+#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
-msgstr "FPS สูงสุดเมื่อเà¸à¸¡à¸«à¸¢à¸¸à¸”ชั่วคราว"
+msgstr "เฟรมต่อวินาที (FPS) สูงสุดเมื่อเà¸à¸¡à¸«à¸¢à¸¸à¸”ชั่วคราว"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FSAA"
msgstr "FSAA"
#: src/settings_translation_file.cpp
msgid "Factor noise"
-msgstr ""
+msgstr "ปัจจัยเสียง"
#: src/settings_translation_file.cpp
msgid "Fall bobbing factor"
msgstr "ตà¸à¸›à¸±à¸ˆà¸ˆà¸±à¸¢à¸œà¸¥à¸¸à¸šà¹†à¹‚ผล่ๆ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
msgstr "à¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¸ªà¸³à¸£à¸­à¸‡"
@@ -3381,18 +3507,17 @@ msgstr "ปุ่มลัด"
#: src/settings_translation_file.cpp
msgid "Fast mode acceleration"
-msgstr ""
+msgstr "à¸à¸²à¸£à¹€à¸£à¹ˆà¸‡à¸„วามเร็วในโหมดเร็ว"
#: src/settings_translation_file.cpp
msgid "Fast mode speed"
-msgstr ""
+msgstr "ความเร็วโหมดเร็ว"
#: src/settings_translation_file.cpp
msgid "Fast movement"
msgstr "à¸à¸²à¸£à¹€à¸„ลื่อนไหวเร็ว"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
@@ -3419,40 +3544,40 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Filler depth"
-msgstr ""
+msgstr "ความลึà¸à¸‚องฟิลเลอร์"
#: src/settings_translation_file.cpp
msgid "Filler depth noise"
-msgstr ""
+msgstr "เสียงความลึà¸à¸‚องฟิลเลอร์"
#: src/settings_translation_file.cpp
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, 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"
+"พื้นผิวที่ถูà¸à¸à¸£à¸­à¸‡à¸ªà¸²à¸¡à¸²à¸£à¸–ผสมผสานค่า RGB à¸à¸±à¸šà¹€à¸žà¸·à¹ˆà¸­à¸™à¸šà¹‰à¸²à¸™à¸—ี่โปร่งใสได้อย่างสมบูรณ์.\n"
"เครื่องมือเพิ่มประสิทธิภาพ PNG ใดที่มัà¸à¸ˆà¸°à¸¥à¸°à¸—ิ้งซึ่งบางครั้งส่งผลให้มืดหรือ\n"
"ขอบà¹à¸ªà¸‡à¹€à¸›à¹‡à¸™à¸žà¸·à¹‰à¸™à¸œà¸´à¸§à¹‚ปร่งใส ใช้ตัวà¸à¸£à¸­à¸‡à¸™à¸µà¹‰à¹€à¸žà¸·à¹ˆà¸­à¸¥à¹‰à¸²à¸‡à¸‚้อมูล\n"
-"ที่เวลาโหลดพื้นผิว"
+"ที่เวลาโหลดพื้นผิว."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "à¸à¸£à¸­à¸‡"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "ลบรอยหยัà¸:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
-msgstr ""
+msgstr "เสียง 2D à¹à¸£à¸à¸ˆà¸²à¸ 4 เสียงที่ร่วมà¸à¸±à¸™à¸à¸³à¸«à¸™à¸”ความสูงของช่วงเนินเขา/ภูเขา."
#: src/settings_translation_file.cpp
msgid "First of two 3D noises that together define tunnels."
-msgstr ""
+msgstr "เสียง 3D สองรายà¸à¸²à¸£à¹à¸£à¸à¸—ี่à¸à¸³à¸«à¸™à¸”อุโมงค์ร่วมà¸à¸±à¸™."
#: src/settings_translation_file.cpp
msgid "Fixed map seed"
@@ -3464,37 +3589,35 @@ msgstr "à¹à¸à¹‰à¹„ขจอยสติ๊à¸à¹€à¸ªà¸¡à¸·à¸­à¸™à¸ˆà¸£à¸´à¸‡"
#: src/settings_translation_file.cpp
msgid "Floatland density"
-msgstr ""
+msgstr "ความหนาà¹à¸™à¹ˆà¸™à¸‚องพื้นที่ลุ่มน้ำ"
#: src/settings_translation_file.cpp
msgid "Floatland maximum Y"
-msgstr ""
+msgstr "Floatland สูงสุด Y"
#: src/settings_translation_file.cpp
msgid "Floatland minimum Y"
-msgstr ""
+msgstr "Floatland ขั้นต่ำ Y"
#: src/settings_translation_file.cpp
msgid "Floatland noise"
-msgstr ""
+msgstr "เสียงทุ่นลอยน้ำ"
#: src/settings_translation_file.cpp
msgid "Floatland taper exponent"
-msgstr ""
+msgstr "เลขชี้à¸à¸³à¸¥à¸±à¸‡à¸‚อง Floatland Taper"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland tapering distance"
msgstr "ระยะถ่ายโอนผู้เล่น"
#: src/settings_translation_file.cpp
msgid "Floatland water level"
-msgstr ""
+msgstr "ระดับน้ำลอยน้ำ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fly key"
-msgstr "ปุ่ม Fly"
+msgstr "ปุ่มบิน"
#: src/settings_translation_file.cpp
msgid "Flying"
@@ -3513,12 +3636,17 @@ msgid "Fog toggle key"
msgstr "ปุ่มสลับ Fog"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+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"
@@ -3534,21 +3662,23 @@ msgstr "ขนาดตัวอัà¸à¸©à¸£"
#: src/settings_translation_file.cpp
msgid "Font size divisible by"
-msgstr ""
+msgstr "ขนาดตัวอัà¸à¸©à¸£à¸«à¸²à¸£à¸”้วย"
#: src/settings_translation_file.cpp
msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
-msgstr ""
+msgstr "ขนาดà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¸‚องà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¹€à¸£à¸´à¹ˆà¸¡à¸•้นโดยที่ 1 หน่วย = 1 พิà¸à¹€à¸‹à¸¥à¸—ี่ 96 DPI"
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
-msgstr ""
+msgstr "ขนาดà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¸‚องà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£ monospace โดยที่ 1 หน่วย = 1 พิà¸à¹€à¸‹à¸¥à¸—ี่ 96 DPI"
#: 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 ""
+"ขนาดตัวอัà¸à¸©à¸£à¸‚องข้อความà¹à¸Šà¸—ล่าสุดà¹à¸¥à¸°à¸‚้อความà¹à¸ˆà¹‰à¸‡à¸à¸²à¸£à¹à¸Šà¸—ในจุด (pt).\n"
+"ค่า 0 จะใช้ขนาดตัวอัà¸à¸©à¸£à¹€à¸£à¸´à¹ˆà¸¡à¸•้น."
#: src/settings_translation_file.cpp
msgid ""
@@ -3560,6 +3690,10 @@ msgid ""
"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 ""
@@ -3567,6 +3701,8 @@ msgid ""
"placeholders:\n"
"@name, @message, @timestamp (optional)"
msgstr ""
+"รูปà¹à¸šà¸šà¸‚องข้อความà¹à¸Šà¸—ของผู้เล่น สตริงต่อไปนี้เป็นตัวยึดที่ถูà¸à¸•้อง:\n"
+"@name, @message, @timestamp (ไม่บังคับ)"
#: src/settings_translation_file.cpp
msgid "Format of screenshots."
@@ -3610,11 +3746,11 @@ msgstr "ปุ่มส่งต่อ"
#: src/settings_translation_file.cpp
msgid "Fourth of 4 2D noises that together define hill/mountain range height."
-msgstr ""
+msgstr "เสียง 2D ที่สี่จาà¸à¸—ั้งหมด 4 à¹à¸šà¸šà¸—ี่ร่วมà¸à¸±à¸™à¸à¸³à¸«à¸™à¸”ความสูงของช่วงเนินเขา/ภูเขา."
#: src/settings_translation_file.cpp
msgid "Fractal type"
-msgstr ""
+msgstr "ประเภทเศษส่วน"
#: src/settings_translation_file.cpp
msgid "Fraction of the visible distance at which fog starts to be rendered"
@@ -3624,12 +3760,12 @@ msgstr "เศษส่วนของระยะทางที่มองเ
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
-msgstr ""
+msgstr "จาà¸à¸£à¸°à¸¢à¸°à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸šà¸¥à¹‡à¸­à¸„สำหรับไคลเอนต์ ระบุไว้ใน mapblock (16 โหนด)."
#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
-msgstr ""
+msgstr "จาà¸à¸£à¸°à¸¢à¸°à¸—างที่บล็อà¸à¸–ูà¸à¸ªà¹ˆà¸‡à¹„ปยังไคลเอนต์ ระบุไว้ใน mapblock (16 โหนด)."
#: src/settings_translation_file.cpp
msgid ""
@@ -3639,6 +3775,11 @@ 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 ""
+"ไคลเอ็นต์รู้เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸­à¹‡à¸­à¸šà¹€à¸ˆà¹‡à¸à¸•์มาà¸à¹à¸„่ไหน ระบุไว้ใน mapblock (16 โหนด).\n"
+"\n"
+"à¸à¸²à¸£à¸•ั้งค่านี้มีขนาดใหà¸à¹ˆà¸à¸§à¹ˆà¸² active_block_range จะทำให้เซิร์ฟเวอร์\n"
+"เพื่อรัà¸à¸©à¸²à¸§à¸±à¸•ถุออà¸à¸¤à¸—ธิ์ให้อยู่ในระยะนี้ในทิศทางที่\n"
+"ผู้เล่นà¸à¸³à¸¥à¸±à¸‡à¸¡à¸­à¸‡à¸«à¸² (สิ่งนี้สามารถหลีà¸à¹€à¸¥à¸µà¹ˆà¸¢à¸‡à¸à¸¹à¸‡à¸Šà¸™à¸—ี่หายไปจาà¸à¸à¸²à¸£à¸¡à¸­à¸‡à¹€à¸«à¹‡à¸™à¸—ันที)"
#: src/settings_translation_file.cpp
msgid "Full screen"
@@ -3661,53 +3802,86 @@ msgid "GUI scaling filter txr2img"
msgstr "ตัวà¸à¸£à¸­à¸‡à¸à¸²à¸£à¸›à¸£à¸±à¸šà¸‚นาด GUI txr2img"
#: src/settings_translation_file.cpp
-msgid "Global callbacks"
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "เà¸à¸¡"
+
+#: src/settings_translation_file.cpp
+msgid "General"
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 ""
+"คุณลัà¸à¸©à¸“ะà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹à¸œà¸™à¸—ี่โลà¸.\n"
+"ใน Mapgen v6 ธง 'à¸à¸²à¸£à¸•à¸à¹à¸•่ง' จะควบคุมà¸à¸²à¸£à¸•à¸à¹à¸•่งทั้งหมดยà¸à¹€à¸§à¹‰à¸™à¸•้นไม้\n"
+"à¹à¸¥à¸°à¸«à¸à¹‰à¸²à¸›à¹ˆà¸² ในà¹à¸œà¸™à¸—ี่อื่นๆ ธงนี้ควบคุมà¸à¸²à¸£à¸•à¸à¹à¸•่งทั้งหมด."
#: 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 "ความชันของเส้นโค้งà¹à¸ªà¸‡à¸—ี่ระดับà¹à¸ªà¸‡à¸ªà¸¹à¸‡à¸ªà¸¸à¸”."
+msgstr ""
+"à¸à¸²à¸£à¹„ล่ระดับสีของเส้นโค้งà¹à¸ªà¸‡à¸—ี่ระดับà¹à¸ªà¸‡à¸ªà¸¹à¸‡à¸ªà¸¸à¸”\n"
+"ควบคุมคอนทราสต์ของระดับà¹à¸ªà¸‡à¸ªà¸¹à¸‡à¸ªà¸¸à¸”"
#: 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 "ความชันของเส้นโค้งà¹à¸ªà¸‡à¸—ี่ระดับà¹à¸ªà¸‡à¸•่ำสุด."
+msgstr ""
+"à¸à¸²à¸£à¹„ล่ระดับสีของเส้นโค้งà¹à¸ªà¸‡à¸—ี่ระดับà¹à¸ªà¸‡à¸•่ำสุด\n"
+"ควบคุมคอนทราสต์ของระดับà¹à¸ªà¸‡à¸•่ำสุด"
#: src/settings_translation_file.cpp
msgid "Graphics"
msgstr "à¸à¸£à¸²à¸Ÿà¸´à¸"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "à¸à¸£à¸²à¸Ÿà¸´à¸"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "à¸à¸£à¸²à¸Ÿà¸´à¸"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
-msgstr ""
+msgstr "à¹à¸£à¸‡à¹‚น้มถ่วง"
#: src/settings_translation_file.cpp
msgid "Ground level"
-msgstr ""
+msgstr "ระดับพื้นดิน"
#: src/settings_translation_file.cpp
msgid "Ground noise"
-msgstr ""
+msgstr "เสียงดิน"
#: src/settings_translation_file.cpp
msgid "HTTP mods"
+msgstr "ม็อด HTTP"
+
+#: src/settings_translation_file.cpp
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "เครื่องชั่ง HUD"
+#, fuzzy
+msgid "HUD scaling"
+msgstr "à¸à¸²à¸£à¸›à¸£à¸±à¸šà¸‚นาด GUI"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -3720,6 +3894,10 @@ msgid ""
"- log: mimic and log backtrace of deprecated call (default).\n"
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
+"à¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¸£à¸ªà¸³à¸«à¸£à¸±à¸šà¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸ Lua API ที่เลิà¸à¹ƒà¸Šà¹‰à¹à¸¥à¹‰à¸§:\n"
+"- ไม่มี: อย่าบันทึà¸à¸à¸²à¸£à¹‚ทรที่เลิà¸à¹ƒà¸Šà¹‰à¹à¸¥à¹‰à¸§\n"
+"- บันทึà¸: เลียนà¹à¸šà¸šà¹à¸¥à¸°à¸šà¸±à¸™à¸—ึภbacktrace ของà¸à¸²à¸£à¹‚ทรที่เลิà¸à¹ƒà¸Šà¹‰à¹à¸¥à¹‰à¸§ (ค่าเริ่มต้น).\n"
+"- ข้อผิดพลาด: ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸à¸²à¸£à¹‚ทรที่เลิà¸à¹ƒà¸Šà¹‰à¹à¸¥à¹‰à¸§ (à¹à¸™à¸°à¸™à¸³à¸ªà¸³à¸«à¸£à¸±à¸šà¸™à¸±à¸à¸žà¸±à¸’นา mod)."
#: src/settings_translation_file.cpp
msgid ""
@@ -3729,52 +3907,55 @@ msgid ""
"call).\n"
"* Instrument the sampler being used to update the statistics."
msgstr ""
+"มีเครื่องมือสร้างโปรไฟล์เอง:\n"
+"* เครื่องมือฟังà¸à¹Œà¸Šà¸±à¸™à¸§à¹ˆà¸²à¸‡.\n"
+"ค่านี้ประมาณค่าโสหุ้ย ที่เครื่องมือวัดà¸à¸³à¸¥à¸±à¸‡à¹€à¸žà¸´à¹ˆà¸¡ (à¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸à¹ƒà¸Šà¹‰à¸Ÿà¸±à¸‡à¸à¹Œà¸Šà¸±à¸™ +1).\n"
+"* เครื่องมือสุ่มตัวอย่างที่ใช้ในà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ตสถิติ."
#: src/settings_translation_file.cpp
msgid "Heat blend noise"
-msgstr ""
+msgstr "เสียงผสมความร้อน"
#: src/settings_translation_file.cpp
msgid "Heat noise"
-msgstr ""
+msgstr "เสียงความร้อน"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Height component of the initial window size. Ignored in fullscreen mode."
msgstr "องค์ประà¸à¸­à¸šà¸„วามสูงของขนาดหน้าต่างเริ่มต้น"
#: src/settings_translation_file.cpp
msgid "Height noise"
-msgstr ""
+msgstr "เสียงสูง"
#: src/settings_translation_file.cpp
msgid "Height select noise"
-msgstr ""
+msgstr "ความสูงเลือà¸à¹€à¸ªà¸µà¸¢à¸‡"
#: src/settings_translation_file.cpp
msgid "Hill steepness"
-msgstr ""
+msgstr "ลาดชัน"
#: src/settings_translation_file.cpp
msgid "Hill threshold"
-msgstr ""
+msgstr "ธรณีสัณà¸à¸²à¸™ Hill"
#: src/settings_translation_file.cpp
msgid "Hilliness1 noise"
-msgstr ""
+msgstr "Hilliness1 เสียง"
#: src/settings_translation_file.cpp
msgid "Hilliness2 noise"
-msgstr ""
+msgstr "Hilliness2 เสียง"
#: src/settings_translation_file.cpp
msgid "Hilliness3 noise"
-msgstr ""
+msgstr "Hilliness3 เสียง"
#: src/settings_translation_file.cpp
msgid "Hilliness4 noise"
-msgstr ""
+msgstr "Hilliness4 เสียง"
#: src/settings_translation_file.cpp
msgid "Homepage of server, to be displayed in the serverlist."
@@ -3785,18 +3966,24 @@ 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"
@@ -3936,7 +4123,7 @@ msgstr "Hotbar สล็อต 9 สำคัà¸"
#: src/settings_translation_file.cpp
msgid "How deep to make rivers."
-msgstr ""
+msgstr "สร้างà¹à¸¡à¹ˆà¸™à¹‰à¸³à¹„ด้ลึà¸à¹à¸„่ไหน."
#: src/settings_translation_file.cpp
msgid ""
@@ -3944,32 +4131,46 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"คลื่นของเหลวจะเคลื่อนที่เร็วà¹à¸„่ไหน สูงขึ้น = เร็วขึ้น.\n"
+"หาà¸à¹€à¸›à¹‡à¸™à¸¥à¸š คลื่นของเหลวจะเคลื่อนที่ถอยหลัง.\n"
+"ต้องเปิดใช้งานโบà¸à¸‚องเหลว."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
+"เซิร์ฟเวอร์จะรอนานเท่าใดà¸à¹ˆà¸­à¸™à¸—ี่จะยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹‚หลด mapblock ที่ไม่ได้ใช้.\n"
+"ค่าที่สูงà¸à¸§à¹ˆà¸²à¸™à¸±à¹‰à¸™à¸£à¸²à¸šà¸£à¸·à¹ˆà¸™à¸à¸§à¹ˆà¸² à¹à¸•่จะใช้ RAM มาà¸à¸à¸§à¹ˆà¸²."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "ลดค่านี้เพื่อเพิ่มà¹à¸£à¸‡à¸•้านทานของของเหลวต่อà¸à¸²à¸£à¹€à¸„ลื่อนที่"
#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
-msgstr ""
+msgstr "à¸à¸§à¹‰à¸²à¸‡à¹à¸„่ไหนจึงจะสร้างà¹à¸¡à¹ˆà¸™à¹‰à¸³à¹„ด้."
#: src/settings_translation_file.cpp
msgid "Humidity blend noise"
-msgstr ""
+msgstr "เสียงผสมความชื้น"
#: src/settings_translation_file.cpp
msgid "Humidity noise"
-msgstr ""
+msgstr "เสียงความชื้น"
#: src/settings_translation_file.cpp
msgid "Humidity variation for biomes."
-msgstr ""
+msgstr "à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸„วามชื้นของไบโอม."
#: src/settings_translation_file.cpp
msgid "IPv6"
-msgstr ""
+msgstr "IPv6"
#: src/settings_translation_file.cpp
msgid "IPv6 server"
@@ -3984,13 +4185,12 @@ msgstr ""
"เพื่อไม่ให้สิ้นเปลืองพลังงานของ CPU อย่างไม่มีประโยชน์"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
"ถ้าปิดใช้งาน ใช้คีย์ 'พิเศษ' บินถ้าทั้งบิน à¹à¸¥à¸°à¹‚หมดที่รวดเร็วเป็น \n"
-"ใช้งาน"
+"ใช้งาน."
#: src/settings_translation_file.cpp
msgid ""
@@ -4000,6 +4200,10 @@ msgid ""
"invisible\n"
"so that the utility of noclip mode is reduced."
msgstr ""
+"หาà¸à¹€à¸›à¸´à¸”ใช้งานเซิร์ฟเวอร์จะดำเนินà¸à¸²à¸£à¸„ัดà¹à¸¢à¸à¸à¸²à¸£à¸šà¸¥à¹‡à¸­à¸à¹à¸œà¸™à¸—ี่ตาม\n"
+"ในตำà¹à¸«à¸™à¹ˆà¸‡à¸ªà¸²à¸¢à¸•าของผู้เล่น ซึ่งสามารถลดจำนวนบล็อคได้\n"
+"ส่งให้ลูà¸à¸„้า 50-80% ลูà¸à¸„้าจะไม่ได้รับà¸à¸²à¸£à¸¥à¹ˆà¸­à¸‡à¸«à¸™à¸­à¸µà¸à¸•่อไป\n"
+"เพื่อให้อรรถประโยชน์ของโหมด noclip ลดลง."
#: src/settings_translation_file.cpp
msgid ""
@@ -4011,12 +4215,22 @@ msgstr ""
"ต้องมีสิทธิ์ 'noclip' บนเซิร์ฟเวอร์."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
"and\n"
"descending."
-msgstr "ถ้าเปิดใช้งาน ใช้คีย์ 'พิเศษ' à¹à¸—น 'à¹à¸­à¸š' คีย์สำหรับปีนลงà¹à¸¥à¸° จาà¸."
+msgstr ""
+"หาà¸à¹€à¸›à¸´à¸”ใช้งาน ปุ่ม \"Aux1\" à¹à¸—นปุ่ม \"à¹à¸­à¸š\" จะใช้สำหรับà¸à¸²à¸£à¸›à¸µà¸™à¸¥à¸‡à¹à¸¥à¸°\n"
+"จาà¸à¸¡à¸²à¸à¹„ปน้อย"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"เปิดใช้งานà¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¸à¸²à¸£à¸¥à¸‡à¸—ะเบียนเมื่อเชื่อมต่อà¸à¸±à¸šà¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ.\n"
+"หาà¸à¸›à¸´à¸”ใช้งานบัà¸à¸Šà¸µà¹ƒà¸«à¸¡à¹ˆà¸ˆà¸°à¸–ูà¸à¸¥à¸‡à¸—ะเบียนโดยอัตโนมัติ."
#: src/settings_translation_file.cpp
msgid ""
@@ -4035,6 +4249,8 @@ 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"
+"เปิดใช้งานสิ่งนี้à¸à¹‡à¸•่อเมื่อคุณรู้ว่าคุณà¸à¸³à¸¥à¸±à¸‡à¸—ำอะไรอยู่."
#: src/settings_translation_file.cpp
msgid ""
@@ -4043,7 +4259,10 @@ msgid ""
msgstr "ถ้าเปิดใช้งาน ทำให้ย้ายทิศทางสัมพันธ์à¸à¸±à¸šà¸£à¸°à¸¢à¸°à¸«à¹ˆà¸²à¸‡à¸‚องผู้เล่นเมื่อบิน หรือว่ายน้ำ."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr "หาà¸à¹€à¸›à¸´à¸”ใช้งานผู้เล่นใหม่จะไม่สามารถเข้าร่วมด้วยรหัสผ่านที่ว่างเปล่าได้."
#: src/settings_translation_file.cpp
@@ -4061,12 +4280,16 @@ msgid ""
"limited\n"
"to this distance from the player to the node."
msgstr ""
+"หาà¸à¹€à¸›à¸´à¸”ใช้งานข้อจำà¸à¸±à¸” CSM สำหรับช่วงโหนด à¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸ 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 ""
+"หาà¸à¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£à¸„ำสั่งà¹à¸Šà¸—ใช้เวลานานà¸à¸§à¹ˆà¸²à¹€à¸§à¸¥à¸²à¸—ี่ระบุใน\n"
+"วินาที เพิ่มข้อมูลเวลาในข้อความคำสั่งà¹à¸Šà¸—"
#: src/settings_translation_file.cpp
msgid ""
@@ -4075,6 +4298,10 @@ msgid ""
"deleting an older debug.txt.1 if it exists.\n"
"debug.txt is only moved if this setting is positive."
msgstr ""
+"หาà¸à¸‚นาดไฟล์ของ debug.txt เà¸à¸´à¸™à¸ˆà¸³à¸™à¸§à¸™à¹€à¸¡à¸à¸°à¹„บต์ที่ระบุใน\n"
+"เมื่อเปิดà¸à¸²à¸£à¸•ั้งค่านี้ ไฟล์จะถูà¸à¸¢à¹‰à¸²à¸¢à¹„ปยัง debug.txt.1,\n"
+"à¸à¸²à¸£à¸¥à¸š debug.txt.1 ที่เà¸à¹ˆà¸²à¸à¸§à¹ˆà¸² หาà¸à¸¡à¸µ.\n"
+"debug.txt จะถูà¸à¸¢à¹‰à¸²à¸¢à¸à¹‡à¸•่อเมื่อà¸à¸²à¸£à¸•ั้งค่านี้เป็นค่าบวà¸."
#: src/settings_translation_file.cpp
msgid "If this is set, players will always (re)spawn at the given position."
@@ -4082,11 +4309,7 @@ msgstr "หาà¸à¸•ั้งค่าไว้ผู้เล่นจะวา
#: src/settings_translation_file.cpp
msgid "Ignore world errors"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "ในเà¸à¸¡à¸ªà¹Œ"
+msgstr "ละเว้นข้อผิดพลาดของโลà¸"
#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
@@ -4106,49 +4329,50 @@ msgstr "เพิ่มปุ่มปรับระดับเสียง"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
-msgstr ""
+msgstr "ความเร็วà¹à¸™à¸§à¸•ั้งเริ่มต้นเมื่อà¸à¸£à¸°à¹‚ดด เป็นโหนดต่อวินาที."
#: src/settings_translation_file.cpp
msgid ""
"Instrument builtin.\n"
"This is usually only needed by core/builtin contributors"
msgstr ""
+"เครื่องมือในตัว.\n"
+"โดยปà¸à¸•ิà¹à¸¥à¹‰à¸§à¸ªà¸´à¹ˆà¸‡à¸™à¸µà¹‰à¸ˆà¸³à¹€à¸›à¹‡à¸™à¸ªà¸³à¸«à¸£à¸±à¸šà¸œà¸¹à¹‰à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™à¸«à¸¥à¸±à¸/ในตัวเท่านั้น."
#: src/settings_translation_file.cpp
msgid "Instrument chat commands on registration."
-msgstr ""
+msgstr "คำสั่งเครื่องมือà¹à¸Šà¸—ในà¸à¸²à¸£à¸¥à¸‡à¸—ะเบียน."
#: src/settings_translation_file.cpp
msgid ""
"Instrument global callback functions on registration.\n"
"(anything you pass to a minetest.register_*() function)"
msgstr ""
+"ฟังà¸à¹Œà¸Šà¸±à¹ˆà¸™à¹‚ทรà¸à¸¥à¸±à¸šà¸—ั่วโลà¸à¹ƒà¸™à¸à¸²à¸£à¸¥à¸‡à¸—ะเบียน.\n"
+"(ทุà¸à¸ªà¸´à¹ˆà¸‡à¸—ี่คุณส่งผ่านไปยังฟังà¸à¹Œà¸Šà¸±à¸™ minetest.register_*() function)"
#: src/settings_translation_file.cpp
msgid ""
"Instrument the action function of Active Block Modifiers on registration."
-msgstr ""
+msgstr "ควบคุมฟังà¸à¹Œà¸Šà¸±à¸™à¸à¸²à¸£à¸—ำงานของ Active Block Modifiers ในà¸à¸²à¸£à¸¥à¸‡à¸—ะเบียน."
#: src/settings_translation_file.cpp
msgid ""
"Instrument the action function of Loading Block Modifiers on registration."
-msgstr ""
+msgstr "ควบคุมฟังà¸à¹Œà¸Šà¸±à¸™à¸à¸²à¸£à¸—ำงานของ Loading Block Modifiers ในà¸à¸²à¸£à¸¥à¸‡à¸—ะเบียน."
#: src/settings_translation_file.cpp
msgid "Instrument the methods of entities on registration."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr ""
+msgstr "เครื่องมือวิธีà¸à¸²à¸£à¸‚องหน่วยงานในà¸à¸²à¸£à¸¥à¸‡à¸—ะเบียน."
#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
-msgstr ""
+msgstr "ช่วงเวลาของà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸—ี่สำคัà¸à¹ƒà¸™à¹‚ลภระบุเป็นวินาที."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
-msgstr ""
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
+msgstr "ช่วงเวลาในà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸Šà¹ˆà¸§à¸‡à¹€à¸§à¸¥à¸²à¸‚องวันให้à¸à¸±à¸šà¸¥à¸¹à¸à¸„้า."
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
@@ -4167,14 +4391,12 @@ msgid "Invert vertical mouse movement."
msgstr "à¸à¸¥à¸±à¸šà¹€à¸„ลื่อนไหวเมาส์à¹à¸™à¸§à¸•ั้ง."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "เส้นทางฟอนต์ monospace"
+msgstr "ไดเรà¸à¹€à¸•อรีฟอนต์ตัวเอียง"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "เส้นทางฟอนต์ monospace"
+msgstr "ไดเรà¸à¹€à¸•อรีฟอนต์ตัวเอียงà¹à¸šà¸šà¸‚นาดคงที่"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -4182,7 +4404,7 @@ msgstr "รายà¸à¸²à¸£à¸™à¸´à¸•ิบุคคล TTL"
#: src/settings_translation_file.cpp
msgid "Iterations"
-msgstr ""
+msgstr "à¸à¸²à¸£à¸—ำซ้ำ"
#: src/settings_translation_file.cpp
msgid ""
@@ -4191,6 +4413,10 @@ msgid ""
"increases processing load.\n"
"At iterations = 20 this mapgen has a similar load to mapgen V7."
msgstr ""
+"à¸à¸²à¸£à¸§à¸™à¸‹à¹‰à¸³à¸‚องฟังà¸à¹Œà¸Šà¸±à¸™à¹à¸šà¸šà¹€à¸£à¸µà¸¢à¸à¸‹à¹‰à¸³.\n"
+"à¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸ªà¸´à¹ˆà¸‡à¸™à¸µà¹‰à¸ˆà¸°à¹€à¸žà¸´à¹ˆà¸¡à¸›à¸£à¸´à¸¡à¸²à¸“ของรายละเอียดเล็à¸à¹† น้อยๆ à¹à¸•่ยัง\n"
+"เพิ่มภาระà¸à¸²à¸£à¸›à¸£à¸°à¸¡à¸§à¸¥à¸œà¸¥.\n"
+"เมื่อวนซ้ำ = 20 mapgen นี้มีภาระคล้ายà¸à¸±à¸š mapgen V7."
#: src/settings_translation_file.cpp
msgid "Joystick ID"
@@ -4201,7 +4427,6 @@ msgid "Joystick button repetition interval"
msgstr "ช่วงเวลาà¸à¸²à¸£à¸—ำซ้ำปุ่มจอยสติ๊à¸"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick dead zone"
msgstr "ประเภทของจอยสติ๊à¸"
@@ -4221,6 +4446,11 @@ msgid ""
"Has no effect on 3D fractals.\n"
"Range roughly -2 to 2."
msgstr ""
+"จูเลียตั้งเท่านั้น.\n"
+"ส่วนประà¸à¸­à¸š W ของค่าคงที่ไฮเปอร์คอมเพล็à¸à¸‹à¹Œ.\n"
+"เปลี่ยนรูปร่างของเศษส่วน.\n"
+"ไม่มีผลà¸à¸±à¸šà¹à¸Ÿà¸£à¹‡à¸à¸—ัล 3 มิติ.\n"
+"ช่วงประมาณ -2 ถึง 2."
#: src/settings_translation_file.cpp
msgid ""
@@ -4229,6 +4459,10 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
+"จูเลียตั้งเท่านั้น.\n"
+"องค์ประà¸à¸­à¸š X ของค่าคงที่ไฮเปอร์คอมเพล็à¸à¸‹à¹Œ.\n"
+"เปลี่ยนรูปร่างของเศษส่วน.\n"
+"ช่วงประมาณ -2 ถึง 2."
#: src/settings_translation_file.cpp
msgid ""
@@ -4237,6 +4471,10 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
+"จูเลียตั้งเท่านั้น.\n"
+"ส่วนประà¸à¸­à¸š Y ของค่าคงที่ไฮเปอร์คอมเพล็à¸à¸‹à¹Œ.\n"
+"เปลี่ยนรูปร่างของเศษส่วน.\n"
+"ช่วงประมาณ -2 ถึง 2."
#: src/settings_translation_file.cpp
msgid ""
@@ -4245,22 +4483,26 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
+"จูเลียตั้งเท่านั้น\n"
+"ส่วนประà¸à¸­à¸š Z ของค่าคงที่ไฮเปอร์คอมเพล็à¸à¸‹à¹Œ\n"
+"เปลี่ยนรูปร่างของเศษส่วน\n"
+"ช่วงประมาณ -2 ถึง 2"
#: src/settings_translation_file.cpp
msgid "Julia w"
-msgstr ""
+msgstr "Julia w"
#: src/settings_translation_file.cpp
msgid "Julia x"
-msgstr ""
+msgstr "Julia x"
#: src/settings_translation_file.cpp
msgid "Julia y"
-msgstr ""
+msgstr "Julia y"
#: src/settings_translation_file.cpp
msgid "Julia z"
-msgstr ""
+msgstr "Julia z"
#: src/settings_translation_file.cpp
msgid "Jump key"
@@ -4268,7 +4510,7 @@ msgstr "ปุ่มà¸à¸£à¸°à¹‚ดด"
#: src/settings_translation_file.cpp
msgid "Jumping speed"
-msgstr ""
+msgstr "ความเร็วในà¸à¸²à¸£à¸à¸£à¸°à¹‚ดด"
#: src/settings_translation_file.cpp
msgid ""
@@ -4291,7 +4533,6 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
@@ -4444,7 +4685,6 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for placing.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
@@ -4988,36 +5228,40 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-msgid "Kick players who sent more than X messages per 10 seconds."
+msgid "Keyboard and Mouse"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Kick players who sent more than X messages per 10 seconds."
+msgstr "เตะผู้เล่นที่ส่งข้อความมาà¸à¸à¸§à¹ˆà¸² X ต่อ 10 วินาที."
+
+#: src/settings_translation_file.cpp
msgid "Lake steepness"
-msgstr ""
+msgstr "ความชันของทะเลสาบ"
#: src/settings_translation_file.cpp
msgid "Lake threshold"
-msgstr ""
+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"
-msgstr ""
+msgstr "น้ำท่วมสัดส่วนถ้ำใหà¸à¹ˆ"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
@@ -5044,34 +5288,43 @@ msgid "Left key"
msgstr "ปุ่มซ้าย"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
+"ความยาวของขีดเซิร์ฟเวอร์à¹à¸¥à¸°à¸Šà¹ˆà¸§à¸‡à¹€à¸§à¸¥à¸²à¸—ี่อ็อบเจ็à¸à¸•์โดยทั่วไปจะอัปเดตมาà¸à¸à¸§à¹ˆà¸²\n"
+"เครือข่าย"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"ตั้งค่าเป็นจริงช่วยให้ใบโบà¸\n"
-"ต้องมี shaders เพื่อเปิดใช้งาน"
+"ตั้งค่าเป็นจริงช่วยให้ใบโบà¸.\n"
+"ต้องมี shaders เพื่อเปิดใช้งาน."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
-msgstr ""
+#, fuzzy
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
+msgstr "ระยะเวลาระหว่างรอบà¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£ Active Block Modifier (ABM)"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
-msgstr ""
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
+msgstr "ระยะเวลาระหว่างรอบà¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£ NodeTimer"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
-msgstr ""
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
+msgstr "ระยะเวลาระหว่างรอบà¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¸£à¸šà¸¥à¹‡à¸­à¸à¸—ี่ใช้งานอยู่"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5080,45 +5333,56 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
+"ระดับà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¸—ี่จะเขียนไปยัง debug.txt:\n"
+"- <ไม่มีอะไร> (ไม่มีà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸)\n"
+"- ไม่มี (ข้อความที่ไม่มีระดับ)\n"
+"- ข้อผิดพลาด\n"
+"- คำเตือน\n"
+"- หนังบู๊\n"
+"- ข้อมูล\n"
+"- ละเอียด"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost"
msgstr "à¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸„วามโค้งà¸à¸¥à¸²à¸‡à¸‚องà¹à¸ªà¸‡"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost center"
msgstr "ส่วนโค้งของà¹à¸ªà¸‡à¸•รงà¸à¸¥à¸²à¸‡à¹€à¸žà¸´à¹ˆà¸¡"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost spread"
msgstr "ส่วนโค้งเว้าเพิ่มระดับà¸à¸¥à¸²à¸‡à¹à¸ªà¸‡"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve gamma"
msgstr "à¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸„วามโค้งà¸à¸¥à¸²à¸‡à¸‚องà¹à¸ªà¸‡"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve high gradient"
msgstr "à¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸„วามโค้งà¸à¸¥à¸²à¸‡à¸‚องà¹à¸ªà¸‡"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve low gradient"
msgstr "ส่วนโค้งของà¹à¸ªà¸‡à¸•รงà¸à¸¥à¸²à¸‡à¹€à¸žà¸´à¹ˆà¸¡"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+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 ""
+"ขีด จำà¸à¸±à¸” ของà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹à¸œà¸™à¸—ี่ในโหนดทั้ง 6 ทิศทางตั้งà¹à¸•่ (0, 0, 0).\n"
+"สร้างเฉพาะ mapchunks ภายในขีดจำà¸à¸±à¸” mapgen เท่านั้น.\n"
+"ค่าจะถูà¸à¹€à¸à¹‡à¸šà¹„ว้สำหรับà¹à¸•่ละโลà¸."
#: src/settings_translation_file.cpp
msgid ""
@@ -5128,38 +5392,43 @@ msgid ""
"- Downloads performed by main menu (e.g. mod manager).\n"
"Only has an effect if compiled with cURL."
msgstr ""
+"จำà¸à¸±à¸”จำนวนคำขอ HTTP à¹à¸šà¸šà¸‚นาน ส่งผลà¸à¸£à¸°à¸—บต่อ:\n"
+"- ดึงสื่อหาà¸à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œà¹ƒà¸Šà¹‰à¸à¸²à¸£à¸•ั้งค่า remote_media.\n"
+"- ดาวน์โหลดรายชื่อเซิร์ฟเวอร์à¹à¸¥à¸°à¸›à¸£à¸°à¸à¸²à¸¨à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ.\n"
+"- à¸à¸²à¸£à¸”าวน์โหลดดำเนินà¸à¸²à¸£à¹‚ดยเมนูหลัภ(เช่น mod manager).\n"
+"จะมีผลà¸à¹‡à¸•่อเมื่อคอมไพล์ด้วย cURL."
#: src/settings_translation_file.cpp
msgid "Liquid fluidity"
-msgstr ""
+msgstr "สภาพคล่อง"
#: src/settings_translation_file.cpp
msgid "Liquid fluidity smoothing"
-msgstr ""
+msgstr "à¸à¸²à¸£à¸›à¸£à¸±à¸šà¸„วามลื่นไหลของของเหลว"
#: src/settings_translation_file.cpp
msgid "Liquid loop max"
-msgstr ""
+msgstr "ลูปของเหลว max"
#: src/settings_translation_file.cpp
msgid "Liquid queue purge time"
-msgstr ""
+msgstr "เวลาล้างคิวของเหลว"
#: src/settings_translation_file.cpp
msgid "Liquid sinking"
-msgstr ""
+msgstr "ของเหลวจม"
#: src/settings_translation_file.cpp
msgid "Liquid update interval in seconds."
-msgstr ""
+msgstr "ช่วงเวลาà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ตของเหลวในหน่วยวินาที."
#: src/settings_translation_file.cpp
msgid "Liquid update tick"
-msgstr ""
+msgstr "ติ๊à¸à¸­à¸±à¸žà¹€à¸”ทของเหลว"
#: src/settings_translation_file.cpp
msgid "Load the game profiler"
-msgstr ""
+msgstr "โหลดตัวสร้างโปรไฟล์เà¸à¸¡"
#: src/settings_translation_file.cpp
msgid ""
@@ -5167,22 +5436,25 @@ msgid ""
"Provides a /profiler command to access the compiled profile.\n"
"Useful for mod developers and server operators."
msgstr ""
+"โหลดตัวสร้างโปรไฟล์เà¸à¸¡à¹€à¸žà¸·à¹ˆà¸­à¸£à¸§à¸šà¸£à¸§à¸¡à¸‚้อมูลโปรไฟล์เà¸à¸¡.\n"
+"จัดเตรียมคำสั่ง /profiler เพื่อเข้าถึงโปรไฟล์ที่คอมไพล์.\n"
+"มีประโยชน์สำหรับนัà¸à¸žà¸±à¸’นา mod à¹à¸¥à¸°à¸•ัวดำเนินà¸à¸²à¸£à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ."
#: src/settings_translation_file.cpp
msgid "Loading Block Modifiers"
-msgstr ""
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¹‚หลดตัวดัดà¹à¸›à¸¥à¸‡à¸šà¸¥à¹‡à¸­à¸"
#: src/settings_translation_file.cpp
msgid "Lower Y limit of dungeons."
-msgstr ""
+msgstr "ขีด จำà¸à¸±à¸” Y ล่างของดันเจี้ยน."
#: src/settings_translation_file.cpp
msgid "Lower Y limit of floatlands."
-msgstr ""
+msgstr "ขีด จำà¸à¸±à¸” Y ล่างของทุ่นลอยน้ำ."
#: src/settings_translation_file.cpp
msgid "Main menu script"
-msgstr ""
+msgstr "สคริปต์เมนูหลัà¸"
#: src/settings_translation_file.cpp
msgid ""
@@ -5196,11 +5468,11 @@ msgstr "ทำให้ของเหลวทั้งหมดขุ่น"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "ระดับà¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”à¹à¸œà¸™à¸—ี่สำหรับà¸à¸²à¸£à¸ˆà¸±à¸”เà¸à¹‡à¸šà¸”ิสà¸à¹Œ"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "ระดับà¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”à¹à¸œà¸™à¸—ี่สำหรับà¸à¸²à¸£à¸–่ายโอนเครือข่าย"
#: src/settings_translation_file.cpp
msgid "Map directory"
@@ -5208,13 +5480,15 @@ msgstr "ไดเรà¸à¸—อรีà¹à¸œà¸™à¸—ี่"
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen Carpathian."
-msgstr ""
+msgstr "คุณลัà¸à¸©à¸“ะà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹à¸œà¸™à¸—ี่เฉพาะสำหรับ Mapgen Carpathian."
#: 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 ""
+"à¹à¸­à¸•ทริบิวต์à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹à¸œà¸™à¸—ี่เฉพาะสำหรับ Mapgen Flat.\n"
+"สามารถเพิ่มทะเลสาบà¹à¸¥à¸°à¹€à¸™à¸´à¸™à¹€à¸‚าเป็นครั้งคราวในโลà¸à¸—ี่ราบเรียบได้."
#: src/settings_translation_file.cpp
msgid ""
@@ -5222,6 +5496,9 @@ msgid ""
"'terrain' enables the generation of non-fractal terrain:\n"
"ocean, islands and underground."
msgstr ""
+"คุณลัà¸à¸©à¸“ะà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹à¸œà¸™à¸—ี่เฉพาะสำหรับ Mapgen Fractal.\n"
+"'ภูมิประเทศ' ทำให้เà¸à¸´à¸”ภูมิประเทศที่ไม่เป็นเศษส่วน:\n"
+"มหาสมุทร หมู่เà¸à¸²à¸° à¹à¸¥à¸°à¹ƒà¸•้ดิน."
#: src/settings_translation_file.cpp
msgid ""
@@ -5232,10 +5509,16 @@ msgid ""
"to become shallower and occasionally dry.\n"
"'altitude_dry': Reduces humidity with altitude."
msgstr ""
+"คุณลัà¸à¸©à¸“ะà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹à¸œà¸™à¸—ี่เฉพาะสำหรับหุบเขา Mapgen Valleys.\n"
+"'altitude_chill': ลดความร้อนด้วยระดับความสูง.\n"
+"'humid_rivers': เพิ่มความชื้นรอบà¹à¸¡à¹ˆà¸™à¹‰à¸³.\n"
+"'vary_river_depth': หาà¸à¹€à¸›à¸´à¸”ใช้งาน ความชื้นต่ำà¹à¸¥à¸°à¸„วามร้อนสูงจะทำให้เà¸à¸´à¸”à¹à¸¡à¹ˆà¸™à¹‰à¸³.\n"
+"ให้ตื้นขึ้นà¹à¸¥à¸°à¹à¸«à¹‰à¸‡à¹ƒà¸™à¸šà¸²à¸‡à¸„รั้ง.\n"
+"'altitude_dry': ลดความชื้นด้วยระดับความสูง."
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen v5."
-msgstr ""
+msgstr "à¹à¸­à¸•ทริบิวต์à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹à¸œà¸™à¸—ี่เฉพาะสำหรับ Mapgen v5."
#: src/settings_translation_file.cpp
msgid ""
@@ -5244,6 +5527,10 @@ msgid ""
"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
"the 'jungles' flag is ignored."
msgstr ""
+"à¹à¸­à¸•ทริบิวต์à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹à¸œà¸™à¸—ี่เฉพาะสำหรับ Mapgen v6.\n"
+"ธง 'สโนว์ไบโอม' เปิดใช้งาน 5 ระบบไบโอมใหม่.\n"
+"เมื่อเปิดใช้งานà¹à¸Ÿà¸¥à¹‡à¸ 'snowbiomes' ป่าจะถูà¸à¹€à¸›à¸´à¸”ใช้งานโดยอัตโนมัติà¹à¸¥à¸°.\n"
+"ธง 'ป่า' จะถูà¸à¸¥à¸°à¹€à¸§à¹‰à¸™."
#: src/settings_translation_file.cpp
msgid ""
@@ -5252,18 +5539,22 @@ msgid ""
"'floatlands': Floating land masses in the atmosphere.\n"
"'caverns': Giant caves deep underground."
msgstr ""
+"à¹à¸­à¸•ทริบิวต์à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹à¸œà¸™à¸—ี่เฉพาะสำหรับ Mapgen v7.\n"
+"'สันเขา': à¹à¸¡à¹ˆà¸™à¹‰à¸³.\n"
+"'ทุ่นลอยน้ำ': มวลดินที่ลอยอยู่ในชั้นบรรยาà¸à¸²à¸¨.\n"
+"'ถ้ำ': ถ้ำยัà¸à¸©à¹Œà¸—ี่อยู่ลึà¸à¸¥à¸‡à¹„ปใต้ดิน."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
-msgstr ""
+msgstr "ขีด จำà¸à¸±à¸” à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹à¸œà¸™à¸—ี่"
#: src/settings_translation_file.cpp
msgid "Map save interval"
-msgstr ""
+msgstr "ช่วงเวลาà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¹à¸œà¸™à¸—ี่"
#: src/settings_translation_file.cpp
msgid "Map shadows update frames"
-msgstr ""
+msgstr "à¹à¸œà¸™à¸—ี่เงาอัปเดตเฟรม"
#: src/settings_translation_file.cpp
msgid "Mapblock limit"
@@ -5283,83 +5574,83 @@ msgstr "Mapblock ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹‚หลดหมดเวลา"
#: src/settings_translation_file.cpp
msgid "Mapgen Carpathian"
-msgstr ""
+msgstr "à¹à¸¡à¸žà¹€à¸à¹‰à¸™ คาร์พาเทียน (Carpathian)"
#: src/settings_translation_file.cpp
msgid "Mapgen Carpathian specific flags"
-msgstr ""
+msgstr "ธงเฉพาะ Mapgen Carpathian"
#: src/settings_translation_file.cpp
msgid "Mapgen Flat"
-msgstr ""
+msgstr "à¹à¸œà¸™à¸—ี่à¹à¸šà¸™ (Mapgen Flat)"
#: src/settings_translation_file.cpp
msgid "Mapgen Flat specific flags"
-msgstr ""
+msgstr "mapgen à¹à¸šà¸™à¸˜à¸‡à¹€à¸‰à¸žà¸²à¸°"
#: src/settings_translation_file.cpp
msgid "Mapgen Fractal"
-msgstr ""
+msgstr "Mapgen Fractal (à¹à¸œà¸™à¸—ี่สร้างเศษส่วน)"
#: src/settings_translation_file.cpp
msgid "Mapgen Fractal specific flags"
-msgstr ""
+msgstr "à¹à¸Ÿà¸¥à¹‡à¸à¹€à¸‰à¸žà¸²à¸° Mapgen Fractal"
#: src/settings_translation_file.cpp
msgid "Mapgen V5"
-msgstr ""
+msgstr "Mapgen V5"
#: src/settings_translation_file.cpp
msgid "Mapgen V5 specific flags"
-msgstr ""
+msgstr "à¹à¸Ÿà¸¥à¹‡à¸à¹€à¸‰à¸žà¸²à¸° Mapgen V5"
#: src/settings_translation_file.cpp
msgid "Mapgen V6"
-msgstr ""
+msgstr "Mapgen V6"
#: src/settings_translation_file.cpp
msgid "Mapgen V6 specific flags"
-msgstr ""
+msgstr "à¹à¸Ÿà¸¥à¹‡à¸à¹€à¸‰à¸žà¸²à¸° Mapgen V6"
#: src/settings_translation_file.cpp
msgid "Mapgen V7"
-msgstr ""
+msgstr "Mapgen V7"
#: src/settings_translation_file.cpp
msgid "Mapgen V7 specific flags"
-msgstr ""
+msgstr "à¹à¸Ÿà¸¥à¹‡à¸à¹€à¸‰à¸žà¸²à¸° Mapgen V7"
#: src/settings_translation_file.cpp
msgid "Mapgen Valleys"
-msgstr ""
+msgstr "Mapgen หุบเขา (Valleys)"
#: src/settings_translation_file.cpp
msgid "Mapgen Valleys specific flags"
-msgstr ""
+msgstr "ธงเฉพาะหุบเขา Mapgen (Valleys)"
#: src/settings_translation_file.cpp
msgid "Mapgen debug"
-msgstr ""
+msgstr "ดีบัภMapgen"
#: src/settings_translation_file.cpp
msgid "Mapgen name"
-msgstr ""
+msgstr "ชื่อà¹à¸¡à¸žà¹€à¸à¹‡à¸™"
#: src/settings_translation_file.cpp
msgid "Max block generate distance"
-msgstr ""
+msgstr "บล็อà¸à¸ªà¸¹à¸‡à¸ªà¸¸à¸”สร้างระยะทาง"
#: src/settings_translation_file.cpp
msgid "Max block send distance"
-msgstr ""
+msgstr "ระยะà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸šà¸¥à¹‡à¸­à¸„สูงสุด"
#: src/settings_translation_file.cpp
msgid "Max liquids processed per step."
-msgstr ""
+msgstr "ของเหลวสูงสุดที่ประมวลผลต่อขั้นตอน."
#: src/settings_translation_file.cpp
msgid "Max. clearobjects extra blocks"
-msgstr ""
+msgstr "à¹à¸¡à¹‡à¸à¸‹à¹Œ ล้างวัตถุบล็อà¸à¸žà¸´à¹€à¸¨à¸©"
#: src/settings_translation_file.cpp
msgid "Max. packets per iteration"
@@ -5370,17 +5661,16 @@ msgid "Maximum 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 ""
+msgstr "ระยะทางสูงสุดในà¸à¸²à¸£à¹à¸ªà¸”งเงา."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
-msgstr ""
+msgstr "บล็อà¸à¸šà¸±à¸‡à¸„ับสูงสุด"
#: src/settings_translation_file.cpp
msgid "Maximum hotbar width"
@@ -5388,17 +5678,19 @@ msgstr "ความà¸à¸§à¹‰à¸²à¸‡à¸‚องบาร์สูงสุด"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "ขีดจำà¸à¸±à¸”สูงสุดของจำนวนถ้ำขนาดใหà¸à¹ˆà¹à¸šà¸šà¸ªà¸¸à¹ˆà¸¡à¸•่อ mapchunk."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "ขีดจำà¸à¸±à¸”สูงสุดของจำนวนถ้ำขนาดเล็à¸à¹à¸šà¸šà¸ªà¸¸à¹ˆà¸¡à¸•่อ mapchunk."
#: src/settings_translation_file.cpp
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
+"ความต้านทานของเหลวสูงสุด ควบคุมà¸à¸²à¸£à¸Šà¸°à¸¥à¸­à¸•ัวเมื่อเข้าสู่ของเหลวที่\n"
+"ความเร็วสูง."
#: src/settings_translation_file.cpp
msgid ""
@@ -5412,19 +5704,23 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum number of blocks that can be queued for loading."
-msgstr ""
+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 ""
+"จำนวนสูงสุดของบล็อà¸à¸—ี่จะเข้าคิวที่จะสร้าง\n"
+"ขีดจำà¸à¸±à¸”นี้บังคับใช้ต่อผู้เล่น."
#: 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"
+"ขีดจำà¸à¸±à¸”นี้บังคับใช้ต่อผู้เล่น."
#: src/settings_translation_file.cpp
msgid ""
@@ -5432,10 +5728,12 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"จำนวนà¸à¸²à¸£à¸”าวน์โหลดพร้อมà¸à¸±à¸™à¸ªà¸¹à¸‡à¸ªà¸¸à¸” à¸à¸²à¸£à¸”าวน์โหลดที่เà¸à¸´à¸™à¸‚ีดจำà¸à¸±à¸”นี้จะถูà¸à¸ˆà¸±à¸”คิว.\n"
+"ควรต่ำà¸à¸§à¹ˆà¸² curl_parallel_limit."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
-msgstr ""
+msgstr "จำนวนสูงสุดของ mapblock ที่ถูà¸à¸šà¸±à¸‡à¸„ับ."
#: src/settings_translation_file.cpp
msgid ""
@@ -5465,11 +5763,11 @@ msgstr "จำนวนสูงสุดของข้อความà¹à¸Šà¸—
#: src/settings_translation_file.cpp
msgid "Maximum number of statically stored objects in a block."
-msgstr ""
+msgstr "จำนวนสูงสุดของวัตถุที่จัดเà¸à¹‡à¸šà¹à¸šà¸šà¸„งที่ในบล็อà¸."
#: src/settings_translation_file.cpp
msgid "Maximum objects per block"
-msgstr ""
+msgstr "วัตถุสูงสุดต่อบล็อà¸"
#: src/settings_translation_file.cpp
msgid ""
@@ -5500,22 +5798,20 @@ 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 "à¹à¸„ชตาข่าย"
@@ -5533,7 +5829,7 @@ msgstr "วิธีà¸à¸²à¸£à¹ƒà¸Šà¹‰à¹€à¸žà¸·à¹ˆà¸­à¹€à¸™à¹‰à¸™à¸§à¸±à¸•ถุ
#: src/settings_translation_file.cpp
msgid "Minimal level of logging to be written to chat."
-msgstr ""
+msgstr "ระดับà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¸‚ั้นต่ำที่จะเขียนในà¸à¸²à¸£à¹à¸Šà¸—."
#: src/settings_translation_file.cpp
msgid "Minimap"
@@ -5549,27 +5845,39 @@ msgstr "ความสูงà¸à¸²à¸£à¸ªà¹à¸à¸™à¹à¸œà¸™à¸—ี่ขั้น
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "ขีดจำà¸à¸±à¸”ขั้นต่ำของà¸à¸²à¸£à¸ªà¸¸à¹ˆà¸¡à¸ˆà¸³à¸™à¸§à¸™à¸–้ำขนาดใหà¸à¹ˆà¸•่อ mapchunk."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "ขีดจำà¸à¸±à¸”ขั้นต่ำของจำนวนถ้ำขนาดเล็à¸à¹à¸šà¸šà¸ªà¸¸à¹ˆà¸¡à¸•่อ mapchunk."
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
msgstr "ขนาดพื้นผิวขั้นต่ำ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mipmapping"
-msgstr "Mipmapping"
+msgstr "Mipmapping (à¹à¸¡à¸‡à¸›à¹ˆà¸­à¸‡)"
+
+#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "ผู้สร้างโปรไฟล์"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "ความปลอดภัย"
#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "ช่องทาง Mod"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Modifies the size of the HUD elements."
msgstr "ปรับเปลี่ยนขนาดขององค์ประà¸à¸­à¸š Hudbar."
@@ -5582,25 +5890,24 @@ 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 ""
+msgstr "เสียงรบà¸à¸§à¸™à¸ˆà¸²à¸à¸„วามสูงของภูเขา"
#: src/settings_translation_file.cpp
msgid "Mountain noise"
-msgstr ""
+msgstr "เสียงภูเขา"
#: src/settings_translation_file.cpp
msgid "Mountain variation noise"
-msgstr ""
+msgstr "เสียงà¹à¸›à¸£à¸œà¸±à¸™à¸‚องภูเขา"
#: src/settings_translation_file.cpp
msgid "Mountain zero level"
-msgstr ""
+msgstr "ระดับศูนย์ภูเขา"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity"
@@ -5612,7 +5919,7 @@ msgstr "คูณความไวเมาส์."
#: src/settings_translation_file.cpp
msgid "Mud noise"
-msgstr ""
+msgstr "เสียงโคลน"
#: src/settings_translation_file.cpp
msgid ""
@@ -5637,6 +5944,10 @@ msgid ""
"Current mapgens in a highly unstable state:\n"
"- The optional floatlands of v7 (disabled by default)."
msgstr ""
+"ชื่อของตัวสร้างà¹à¸œà¸™à¸—ี่ที่จะใช้ในà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹‚ลà¸à¹ƒà¸«à¸¡à¹ˆ.\n"
+"à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹‚ลà¸à¹ƒà¸™à¹€à¸¡à¸™à¸¹à¸«à¸¥à¸±à¸à¸ˆà¸°à¹à¸—นที่สิ่งนี้\n"
+"mapgens ปัจจุบันอยู่ในสถานะที่ไม่เสถียรสูง:\n"
+"- floatlands เสริมของ v7 (ปิดใช้งานโดยค่าเริ่มต้น)."
#: src/settings_translation_file.cpp
msgid ""
@@ -5644,6 +5955,9 @@ msgid ""
"When running a server, clients connecting with this name are admins.\n"
"When starting from the main menu, this is overridden."
msgstr ""
+"ชื่อผู้เล่น.\n"
+"เมื่อใช้งานเซิร์ฟเวอร์ ไคลเอ็นต์ที่เชื่อมต่อà¸à¸±à¸šà¸Šà¸·à¹ˆà¸­à¸™à¸µà¹‰à¸„ือผู้ดูà¹à¸¥à¸£à¸°à¸šà¸š.\n"
+"เมื่อเริ่มต้นจาà¸à¹€à¸¡à¸™à¸¹à¸«à¸¥à¸±à¸ สิ่งนี้จะถูà¸à¹à¸—นที่."
#: src/settings_translation_file.cpp
msgid ""
@@ -5651,13 +5965,8 @@ msgid ""
msgstr "ชื่อของเซิร์ฟเวอร์ที่จะà¹à¸ªà¸”งเมื่อผู้เล่นเข้าร่วมà¹à¸¥à¸°à¹ƒà¸™à¸£à¸²à¸¢à¸à¸²à¸£à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Near plane"
-msgstr "ใà¸à¸¥à¹‰à¹€à¸„รื่องบิน"
-
-#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "เครือข่าย"
+msgstr "ระนาบใà¸à¸¥à¹‰"
#: src/settings_translation_file.cpp
msgid ""
@@ -5668,33 +5977,42 @@ msgstr ""
"ค่านี้จะถูà¸à¹à¸—นที่เมื่อเริ่มต้นจาà¸à¹€à¸¡à¸™à¸¹à¸«à¸¥à¸±à¸."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "เครือข่าย"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "ผู้ใช้ใหม่ต้องป้อนรหัสผ่านนี้."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Noclip"
-msgstr "Noclip (? คลิปไม่)"
+msgstr "โนคลิป (ทะลุผ่านบล็อà¸)"
#: src/settings_translation_file.cpp
msgid "Noclip key"
msgstr "คีย์ Noclip"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "โหนที่เน้น"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "à¸à¸²à¸£à¹€à¸™à¹‰à¸™à¹‚หนด"
#: src/settings_translation_file.cpp
msgid "NodeTimer interval"
-msgstr ""
+msgstr "ช่วงเวลา NodeTimer"
#: src/settings_translation_file.cpp
msgid "Noises"
-msgstr ""
+msgstr "เสียงรบà¸à¸§à¸™"
#: src/settings_translation_file.cpp
msgid "Number of emerge threads"
-msgstr ""
+msgstr "จำนวนเธรดที่โผล่ออà¸à¸¡à¸²"
#: src/settings_translation_file.cpp
msgid ""
@@ -5709,6 +6027,16 @@ 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 ""
+"จำนวนเธรดที่โผล่ออà¸à¸¡à¸²à¸—ี่จะใช้.\n"
+"ค่า 0:\n"
+"- à¸à¸²à¸£à¹€à¸¥à¸·à¸­à¸à¸­à¸±à¸•โนมัติ จำนวนเธรดที่โผล่ออà¸à¸¡à¸²à¸ˆà¸°à¹€à¸›à¹‡à¸™\n"
+"- 'จำนวนโปรเซสเซอร์ - 2' โดยมีขีดจำà¸à¸±à¸”ล่างที่ 1.\n"
+"ค่าอื่นๆ:\n"
+"- ระบุจำนวนเธรดที่โผล่ออà¸à¸¡à¸² โดยมีขีดจำà¸à¸±à¸”ล่างที่ 1.\n"
+"คำเตือน: à¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸ˆà¸³à¸™à¸§à¸™à¸‚องเธรดที่โผล่ออà¸à¸¡à¸²à¸ˆà¸°à¹€à¸žà¸´à¹ˆà¸¡à¸à¸²à¸£à¹à¸¡à¸›à¸‚องเครื่องยนต์\n"
+"ความเร็ว à¹à¸•่อาจส่งผลเสียต่อประสิทธิภาพของเà¸à¸¡à¹‚ดยà¸à¸²à¸£à¸£à¸šà¸à¸§à¸™à¸œà¸¹à¹‰à¸­à¸·à¹ˆà¸™\n"
+"à¸à¸£à¸°à¸šà¸§à¸™à¸à¸²à¸£ โดยเฉพาะอย่างยิ่งใน singleplayer à¹à¸¥à¸°/หรือเมื่อรันโค้ด Lua ใน\n"
+"'on_generated' สำหรับผู้ใช้หลายคน à¸à¸²à¸£à¸•ั้งค่าที่เหมาะสมที่สุดอาจเป็น '1'."
#: src/settings_translation_file.cpp
msgid ""
@@ -5716,10 +6044,9 @@ msgid ""
"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 ""
+"จำนวนบล็อà¸à¸žà¸´à¹€à¸¨à¸©à¸—ี่สามารถโหลดได้โดย /clear ออบเจ็à¸à¸•์ในครั้งเดียว.\n"
+"นี่คือà¸à¸²à¸£à¹à¸¥à¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¹‚อเวอร์เฮดของธุรà¸à¸£à¸£à¸¡ SQLite à¹à¸¥à¸°\n"
+"à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸«à¸™à¹ˆà¸§à¸¢à¸„วามจำ (4096=100MB ตามหลัà¸à¸à¸²à¸£à¸—ั่วไป)."
#: src/settings_translation_file.cpp
msgid "Opaque liquids"
@@ -5728,18 +6055,20 @@ msgstr "ของเหลวทึบà¹à¸ªà¸‡"
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
-msgstr ""
+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."
-msgstr "เปิดเมนูหยุดชั่วคราวเมื่อโฟà¸à¸±à¸ªà¸‚องหน้าต่างหายไป ไม่หยุดถ้า formspec คือ เปิด."
+msgstr ""
+"เปิดเมนูหยุดชั่วคราวเมื่อโฟà¸à¸±à¸ªà¸‚องหน้าต่างหายไป ไม่หยุดถ้า formspec เป็น\n"
+"เปิด."
#: src/settings_translation_file.cpp
msgid "Optional override for chat weblink color."
-msgstr ""
+msgstr "ตัวเลือà¸à¸à¸²à¸£à¹à¸—นที่สำหรับสีของเว็บลิงค์à¹à¸Šà¸—."
#: src/settings_translation_file.cpp
msgid ""
@@ -5747,12 +6076,16 @@ msgid ""
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"เส้นทางของà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¸—างเลือภต้องเป็นà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£ TrueType.\n"
+"à¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¸™à¸µà¹‰à¸ˆà¸°à¹ƒà¸Šà¹‰à¸ªà¸³à¸«à¸£à¸±à¸šà¸šà¸²à¸‡à¸ à¸²à¸©à¸²à¸«à¸£à¸·à¸­à¸«à¸²à¸à¹„ม่มีà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¹€à¸£à¸´à¹ˆà¸¡à¸•้น."
#: 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 ""
+"เส้นทางบันทึà¸à¸ à¸²à¸žà¸«à¸™à¹‰à¸²à¸ˆà¸­à¹„ด้ที่ สามารถเป็นเส้นทางสัมบูรณ์หรือสัมพัทธ์.\n"
+"โฟลเดอร์จะถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¸‚ึ้นหาà¸à¹„ม่มีอยู่."
#: src/settings_translation_file.cpp
msgid ""
@@ -5769,12 +6102,16 @@ 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 ""
+"เส้นทางไปยังà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¹€à¸£à¸´à¹ˆà¸¡à¸•้น ต้องเป็นà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£ TrueType.\n"
+"ระบบจะใช้à¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¸ªà¸³à¸£à¸­à¸‡à¸«à¸²à¸à¹„ม่สามารถโหลดà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¹„ด้."
#: 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 ""
+"เส้นทางไปยังà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£ monospace ต้องเป็นà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£ TrueType.\n"
+"à¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¸™à¸µà¹‰à¹ƒà¸Šà¹‰à¸ªà¸³à¸«à¸£à¸±à¸šà¹€à¸Šà¹ˆà¸™ หน้าจอคอนโซลà¹à¸¥à¸°à¸•ัวสร้างโปรไฟล์."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
@@ -5782,15 +6119,15 @@ msgstr "หยุดà¸à¸²à¸£à¹‚ฟà¸à¸±à¸ªà¸‚องหน้าต่างท
#: src/settings_translation_file.cpp
msgid "Per-player limit of queued blocks load from disk"
-msgstr ""
+msgstr "ขีด จำà¸à¸±à¸” ต่อผู้เล่นของบล็อà¸à¸—ี่เข้าคิวโหลดจาà¸à¸”ิสà¸à¹Œ"
#: src/settings_translation_file.cpp
msgid "Per-player limit of queued blocks to generate"
-msgstr ""
+msgstr "ขีด จำà¸à¸±à¸” ต่อผู้เล่นของบล็อà¸à¸—ี่เข้าคิวเพื่อสร้าง"
#: src/settings_translation_file.cpp
msgid "Physics"
-msgstr ""
+msgstr "ฟิสิà¸à¸ªà¹Œ"
#: src/settings_translation_file.cpp
msgid "Pitch move key"
@@ -5801,12 +6138,10 @@ msgid "Pitch move mode"
msgstr "โหมดย้ายสนาม"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "ปุ่ม Fly"
+msgstr "ปุ่มวาง"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place repetition interval"
msgstr "à¸à¸£à¸°à¹à¸—à¸à¸‹à¹‰à¸³à¸Šà¹ˆà¸§à¸‡"
@@ -5819,10 +6154,6 @@ msgstr ""
"ต้องมีสิทธิ์ 'บิน' บนเซิร์ฟเวอร์."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "ระยะถ่ายโอนผู้เล่น"
@@ -5831,9 +6162,8 @@ msgid "Player versus player"
msgstr "ผู้เล่นà¸à¸±à¸šà¸œà¸¹à¹‰à¹€à¸¥à¹ˆà¸™"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Poisson filtering"
-msgstr "à¸à¸²à¸£à¸à¸£à¸­à¸‡ Bilinear"
+msgstr "à¸à¸²à¸£à¸à¸£à¸­à¸‡à¸›à¸±à¸§à¸‹à¸­à¸‡"
#: src/settings_translation_file.cpp
msgid ""
@@ -5853,13 +6183,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Prevent mods from doing insecure things like running shell commands."
-msgstr ""
+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 ""
+"พิมพ์ข้อมูลโปรไฟล์ของเครื่องยนต์ในช่วงเวลาปà¸à¸•ิ (เป็นวินาที).\n"
+"0 = ปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ มีประโยชน์สำหรับนัà¸à¸žà¸±à¸’นา."
#: src/settings_translation_file.cpp
msgid "Privileges that players with basic_privs can grant"
@@ -5867,19 +6199,15 @@ msgstr "สิทธิพิเศษที่ผู้เล่นที่ม
#: src/settings_translation_file.cpp
msgid "Profiler"
-msgstr ""
+msgstr "ผู้สร้างโปรไฟล์"
#: src/settings_translation_file.cpp
msgid "Profiler toggle key"
msgstr "ปุ่มสลับ Profiler"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
-msgstr ""
+msgstr "ที่อยู่ผู้ฟัง Prometheus"
#: src/settings_translation_file.cpp
msgid ""
@@ -5888,10 +6216,14 @@ msgid ""
"enable metrics listener for Prometheus on that address.\n"
"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
+"ที่อยู่ผู้ฟังโพรมีธีอุส.\n"
+"หาภMinetest ถูà¸à¸„อมไพล์โดยเปิดใช้งานตัวเลือภENABLE_PROMETHEUS,\n"
+"เปิดใช้งานตัวฟังเมตริà¸à¸ªà¸³à¸«à¸£à¸±à¸š Prometheus บนที่อยู่นั้น.\n"
+"สามารถดึงข้อมูลเมตริà¸à¹„ด้ที่ http://127.0.0.1:30000/metrics"
#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
-msgstr ""
+msgstr "สัดส่วนของถ้ำขนาดใหà¸à¹ˆà¸—ี่มีของเหลว."
#: src/settings_translation_file.cpp
msgid ""
@@ -5904,7 +6236,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Raises terrain to make valleys around the rivers."
-msgstr ""
+msgstr "ยà¸à¸£à¸°à¸”ับภูมิประเทศให้เป็นหุบเขารอบà¹à¸¡à¹ˆà¸™à¹‰à¸³."
#: src/settings_translation_file.cpp
msgid "Random input"
@@ -5919,9 +6251,8 @@ msgid "Recent Chat Messages"
msgstr "ข้อความà¹à¸Šà¸—ล่าสุด"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "เส้นทางà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£"
+msgstr "ไดเรà¸à¹€à¸•อรีฟอนต์à¹à¸šà¸šà¸›à¸à¸•ิ"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -5941,11 +6272,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Replaces the default main menu with a custom one."
-msgstr ""
+msgstr "à¹à¸—นที่เมนูหลัà¸à¸—ี่เป็นค่าเริ่มต้นด้วยเมนูà¹à¸šà¸šà¸à¸³à¸«à¸™à¸”เอง."
#: src/settings_translation_file.cpp
msgid "Report path"
-msgstr ""
+msgstr "รายงานเส้นทาง"
#: src/settings_translation_file.cpp
msgid ""
@@ -5960,22 +6291,32 @@ msgid ""
"csm_restriction_noderange)\n"
"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
msgstr ""
+"จำà¸à¸±à¸”à¸à¸²à¸£à¹€à¸‚้าถึงฟังà¸à¹Œà¸Šà¸±à¸™à¸à¸±à¹ˆà¸‡à¹„คลเอ็นต์บางอย่างบนเซิร์ฟเวอร์.\n"
+"รวม byteflags ด้านล่างเพื่อจำà¸à¸±à¸”คุณลัà¸à¸©à¸“ะà¸à¸±à¹ˆà¸‡à¹„คลเอ็นต์ หรือตั้งค่าเป็น0\n"
+"โดยไม่มีข้อจำà¸à¸±à¸”:\n"
+"LOAD_CLIENT_MODS: 1 (ปิดใช้งานà¸à¸²à¸£à¹‚หลดม็อดที่ไคลเอ็นต์ให้มา)\n"
+"CHAT_MESSAGES: 2 (ปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ send_chat_message โทรà¸à¸±à¹ˆà¸‡à¹„คลเอ็นต์)\n"
+"READ_ITEMDEFS: 4 (ปิดใช้งานà¸à¸²à¸£à¹‚ทรà¸à¸±à¹ˆà¸‡à¹„คลเอ็นต์ get_item_def)\n"
+"READ_NODEDEFS: 8 (ปิดใช้งานà¸à¸²à¸£à¹‚ทรà¸à¸±à¹ˆà¸‡à¹„คลเอ็นต์ get_node_def)\n"
+"LOOKUP_NODES_LIMIT: 16 (จำà¸à¸±à¸” get_node โทรà¸à¸±à¹ˆà¸‡à¹„คลเอ็นต์เป็น\n"
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (ปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ get_player_names โทรà¸à¸±à¹ˆà¸‡à¹„คลเอ็นต์)"
#: src/settings_translation_file.cpp
msgid "Ridge mountain spread noise"
-msgstr ""
+msgstr "สันเขาà¸à¸£à¸°à¸ˆà¸²à¸¢à¹€à¸ªà¸µà¸¢à¸‡"
#: src/settings_translation_file.cpp
msgid "Ridge noise"
-msgstr ""
+msgstr "เสียงสันเขา"
#: src/settings_translation_file.cpp
msgid "Ridge underwater noise"
-msgstr ""
+msgstr "เสียงใต้น้ำของสันเขา"
#: src/settings_translation_file.cpp
msgid "Ridged mountain size noise"
-msgstr ""
+msgstr "เสียงดังขนาดสันเขา"
#: src/settings_translation_file.cpp
msgid "Right key"
@@ -5983,27 +6324,27 @@ msgstr "ปุ่มขวา"
#: src/settings_translation_file.cpp
msgid "River channel depth"
-msgstr ""
+msgstr "ความลึà¸à¸‚องช่องà¹à¸¡à¹ˆà¸™à¹‰à¸³"
#: src/settings_translation_file.cpp
msgid "River channel width"
-msgstr ""
+msgstr "ความà¸à¸§à¹‰à¸²à¸‡à¸‚องช่องà¹à¸¡à¹ˆà¸™à¹‰à¸³"
#: src/settings_translation_file.cpp
msgid "River depth"
-msgstr ""
+msgstr "ความลึà¸à¸‚องà¹à¸¡à¹ˆà¸™à¹‰à¸³"
#: src/settings_translation_file.cpp
msgid "River noise"
-msgstr ""
+msgstr "เสียงà¹à¸¡à¹ˆà¸™à¹‰à¸³"
#: src/settings_translation_file.cpp
msgid "River size"
-msgstr ""
+msgstr "ขนาดà¹à¸¡à¹ˆà¸™à¹‰à¸³"
#: src/settings_translation_file.cpp
msgid "River valley width"
-msgstr ""
+msgstr "ความà¸à¸§à¹‰à¸²à¸‡à¸«à¸¸à¸šà¹€à¸‚าà¹à¸¡à¹ˆà¸™à¹‰à¸³"
#: src/settings_translation_file.cpp
msgid "Rollback recording"
@@ -6011,11 +6352,11 @@ msgstr "บันทึà¸à¸¢à¹‰à¸­à¸™à¸à¸¥à¸±à¸š"
#: src/settings_translation_file.cpp
msgid "Rolling hill size noise"
-msgstr ""
+msgstr "เสียงขนาดเนินà¸à¸¥à¸´à¹‰à¸‡"
#: src/settings_translation_file.cpp
msgid "Rolling hills spread noise"
-msgstr ""
+msgstr "ภูเขาà¸à¸¥à¸´à¹‰à¸‡à¸à¸£à¸°à¸ˆà¸²à¸¢à¹€à¸ªà¸µà¸¢à¸‡"
#: src/settings_translation_file.cpp
msgid "Round minimap"
@@ -6027,7 +6368,7 @@ msgstr "à¸à¸²à¸£à¸‚ุดà¹à¸¥à¸°à¸à¸²à¸£à¸§à¸²à¸‡à¸—ี่ปลอดภั
#: src/settings_translation_file.cpp
msgid "Sandy beaches occur when np_beach exceeds this value."
-msgstr ""
+msgstr "หาดทรายเà¸à¸´à¸”ขึ้นเมื่อ np_beach มีค่าเà¸à¸´à¸™à¸à¸§à¹ˆà¸²à¸™à¸µà¹‰."
#: src/settings_translation_file.cpp
msgid "Save the map received by the client on disk."
@@ -6056,6 +6397,11 @@ msgstr ""
"พิà¸à¹€à¸‹à¸¥à¸‚อบเมื่อปรับขนาดรูปภาพด้วยขนาดที่ไม่ใช่จำนวนเต็ม"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "หน้าจอ:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "ความสูงของหน้าจอ"
@@ -6086,24 +6432,25 @@ msgstr ""
"ใช้ 0 สำหรับคุณภาพเริ่มต้น"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "ภาพหน้าจอ"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
-msgstr ""
+msgstr "เสียงท้องทะเล"
#: src/settings_translation_file.cpp
msgid "Second of 4 2D noises that together define hill/mountain range height."
-msgstr ""
+msgstr "เสียง 2D จาà¸à¸—ั้งหมด 4 เสียงที่ร่วมà¸à¸±à¸™à¸à¸³à¸«à¸™à¸”ความสูงของช่วงเนินเขา/ภูเขา."
#: src/settings_translation_file.cpp
msgid "Second of two 3D noises that together define tunnels."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr ""
+msgstr "เสียง 3D ที่สองจาà¸à¸ªà¸­à¸‡à¹€à¸ªà¸µà¸¢à¸‡à¸—ี่à¸à¸³à¸«à¸™à¸”อุโมงค์ร่วมà¸à¸±à¸™"
#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
-msgstr ""
+msgstr "ดู https://www.sqlite.org/pragma.html#pragma_synchronous"
#: src/settings_translation_file.cpp
msgid "Selection box border color (R,G,B)."
@@ -6139,10 +6486,40 @@ msgid ""
"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
"18 = 4D \"Mandelbulb\" Julia set."
msgstr ""
+"เลือà¸à¸«à¸™à¸¶à¹ˆà¸‡à¹ƒà¸™ 18 ประเภทเศษส่วน\n"
+"1 = 4D ชุด \"Roundy\" Mandelbrot\n"
+"2 = 4D ชุด \"à¸à¸¥à¸¡\" จูเลีย\n"
+"3 = 4D \"Squarry\" ชุด Mandelbrot\n"
+"4 = 4D \"Squarry\" ชุดจูเลีย\n"
+"5 = 4D ชุด \"ลูà¸à¸žà¸µà¹ˆà¸¥à¸¹à¸à¸™à¹‰à¸­à¸‡à¹à¸¡à¸™à¸”ี้\" à¹à¸¡à¸™à¹€à¸”ลบรอต\n"
+"6 = 4D \"ลูà¸à¸žà¸µà¹ˆà¸¥à¸¹à¸à¸™à¹‰à¸­à¸‡à¹à¸¡à¸™à¸”ี้\" จูเลียตั้ง\n"
+"7 = 4D \"รูปà¹à¸šà¸š\" ชุด Mandelbrot\n"
+"8 = 4D \"รูปà¹à¸šà¸š\" ชุดจูเลีย\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" ชุด Mandelbrot\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" ชุดจูเลีย\n"
+"11 = 3D \"ต้นคริสต์มาส\" ชุด Mandelbrot\n"
+"12 = 3D \"ต้นคริสต์มาส\" ชุดจูเลีย\n"
+"13 = 3D \"Mandelbulb\" ชุด Mandelbrot\n"
+"14 = 3D \"Mandelbulb\" ชุดจูเลีย\n"
+"15 = ชุด \"Cosine Mandelbulb\" 3 มิติ Mandelbrot\n"
+"16 = 3D \"Cosine Mandelbulb\" ชุดจูเลีย\n"
+"17 = 4D \"Mandelbulb\" ชุด Mandelbrot\n"
+"18 = 4D \"Mandelbulb\" ชุดจูเลีย"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server"
+msgstr "URL เซิร์ฟเวอร์"
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "เซิร์ฟเวอร์ / ผู้เล่นเดี่ยว"
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "ชื่อเซิร์ฟเวอร์"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "คำอธิบายเซิร์ฟเวอร์"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6166,13 +6543,23 @@ msgstr "พอร์ตเซิร์ฟเวอร์"
#: src/settings_translation_file.cpp
msgid "Server side occlusion culling"
-msgstr ""
+msgstr "à¸à¸²à¸£à¸„ัดà¹à¸¢à¸à¸à¸²à¸£à¸šà¸”เคี้ยวทางà¸à¸±à¹ˆà¸‡à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "เซิร์ฟเวอร์ พอร์ต"
#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "URL รายà¸à¸²à¸£à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "URL รายà¸à¸²à¸£à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "ไฟล์เซิร์ฟเวอร์รายà¸à¸²à¸£"
@@ -6181,23 +6568,35 @@ msgid ""
"Set the language. Leave empty to use the system language.\n"
"A restart is required after changing this."
msgstr ""
+"ตั้งค่าภาษา เว้นว่างไว้เพื่อใช้ภาษาของระบบ.\n"
+"จำเป็นต้องรีสตาร์ทหลังจาà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸ªà¸´à¹ˆà¸‡à¸™à¸µà¹‰."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
-msgstr ""
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
+msgstr "à¸à¸³à¸«à¸™à¸”ความยาวอัà¸à¸‚ระสูงสุดของข้อความà¹à¸Šà¸—ที่ส่งโดยลูà¸à¸„้า."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
+"à¸à¸³à¸«à¸™à¸”ขนาดรัศมีเงาที่นุ่มนวล.\n"
+"ค่าที่ต่ำà¸à¸§à¹ˆà¸²à¸«à¸¡à¸²à¸¢à¸–ึงเงาที่คมชัดà¸à¸§à¹ˆà¸² ค่าที่มาà¸à¸‚ึ้นหมายถึงเงาที่นุ่มนวลà¸à¸§à¹ˆà¸².\n"
+"ค่าต่ำสุด: 1.0; มูลค่าสูงสุด: 10.0"
#: src/settings_translation_file.cpp
msgid ""
@@ -6205,42 +6604,41 @@ msgid ""
"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"
-"ต้องมี shaders เพื่อเปิดใช้งาน"
+"ตั้งค่าเป็นจริงช่วยให้ใบโบà¸.\n"
+"ต้องมี shaders เพื่อเปิดใช้งาน."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
-"ตั้งค่าเป็นจริงช่วยให้ใบโบà¸\n"
-"ต้องมี shaders เพื่อเปิดใช้งาน"
+"ตั้งค่าเป็นจริงช่วยให้ใบโบà¸.\n"
+"ต้องมี shaders เพื่อเปิดใช้งาน."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
-"ตั้งค่าเป็นจริงช่วยให้น้ำโบà¸\n"
-"ต้องมี shaders เพื่อเปิดใช้งาน"
+"ตั้งค่าเป็นจริงช่วยให้น้ำโบà¸.\n"
+"ต้องมี shaders เพื่อเปิดใช้งาน."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
msgstr ""
-"à¸à¸²à¸£à¸•ั้งค่าเป็นจริงช่วยให้พืชโบà¸\n"
-"ต้องมี shaders เพื่อเปิดใช้งาน"
+"à¸à¸²à¸£à¸•ั้งค่าเป็นจริงช่วยให้พืชโบà¸.\n"
+"ต้องมี shaders เพื่อเปิดใช้งาน."
#: src/settings_translation_file.cpp
msgid ""
@@ -6248,6 +6646,9 @@ msgid ""
"On false, 16 bits texture will be used.\n"
"This can cause much more artifacts in the shadow."
msgstr ""
+"ตั้งค่าคุณภาพพื้นผิวเงาเป็น 32 บิต.\n"
+"เท็จจะใช้พื้นผิว 16 บิต.\n"
+"สิ่งนี้สามารถทำให้เà¸à¸´à¸”สิ่งประดิษà¸à¹Œà¸ˆà¸³à¸™à¸§à¸™à¸¡à¸²à¸à¸‚ึ้นในเงามืด."
#: src/settings_translation_file.cpp
msgid "Shader path"
@@ -6265,33 +6666,31 @@ 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 ""
+msgstr "à¹à¸œà¸™à¸—ี่เงาระยะทางสูงสุดในโหนดเพื่อà¹à¸ªà¸”งเงา"
#: src/settings_translation_file.cpp
msgid "Shadow map texture in 32 bits"
-msgstr ""
+msgstr "พื้นผิวà¹à¸œà¸™à¸—ี่เงาใน 32 บิต"
#: 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
-msgid "Shadow strength"
-msgstr ""
+#, fuzzy
+msgid "Shadow strength gamma"
+msgstr "ความà¹à¸‚็งà¹à¸à¸£à¹ˆà¸‡à¸‚องเงา"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6310,10 +6709,12 @@ msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
+"à¹à¸ªà¸”งà¸à¸¥à¹ˆà¸­à¸‡à¸à¸²à¸£à¹€à¸¥à¸·à¸­à¸à¹€à¸­à¸™à¸—ิตี\n"
+"จำเป็นต้องรีสตาร์ทหลังจาà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸ªà¸´à¹ˆà¸‡à¸™à¸µà¹‰."
#: src/settings_translation_file.cpp
msgid "Show name tag backgrounds by default"
-msgstr ""
+msgstr "à¹à¸ªà¸”งพื้นหลังà¹à¸—็à¸à¸Šà¸·à¹ˆà¸­à¹‚ดยค่าเริ่มต้น"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6328,6 +6729,12 @@ msgid ""
"Altering this value is for special usage, leaving it unchanged is\n"
"recommended."
msgstr ""
+"ขนาดของ mapchunks ที่สร้างโดย mapgen ระบุไว้ใน mapblock (16 โหนด).\n"
+"คำเตือน!: ไม่มีประโยชน์à¹à¸¥à¸°à¸¡à¸µà¸­à¸±à¸™à¸•รายหลายประà¸à¸²à¸£à¹ƒà¸™\n"
+"เพิ่มค่านี้ให้สูงà¸à¸§à¹ˆà¸² 5.\n"
+"à¸à¸²à¸£à¸¥à¸”ค่านี้จะเพิ่มความหนาà¹à¸™à¹ˆà¸™à¸‚องถ้ำà¹à¸¥à¸°à¸”ันเจี้ยน.\n"
+"à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸„่านี้มีไว้เพื่อà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸žà¸´à¹€à¸¨à¸© ไม่เปลี่ยนà¹à¸›à¸¥à¸‡à¸„ือ\n"
+"ที่à¹à¸™à¸°à¸™à¸³.."
#: src/settings_translation_file.cpp
msgid ""
@@ -6341,31 +6748,31 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Sky Body Orbit Tilt"
-msgstr ""
+msgstr "วงโคจรของท้องฟ้าเอียง"
#: src/settings_translation_file.cpp
msgid "Slice w"
-msgstr ""
+msgstr "à¸à¸²à¸™ w"
#: src/settings_translation_file.cpp
msgid "Slope and fill work together to modify the heights."
-msgstr ""
+msgstr "ลาดà¹à¸¥à¸°à¹€à¸•ิมทำงานร่วมà¸à¸±à¸™à¹€à¸žà¸·à¹ˆà¸­à¸›à¸£à¸±à¸šà¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸„วามสูง."
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "จำนวนสูงสุดของถ้ำขนาดเล็à¸"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "จำนวนขั้นต่ำของถ้ำขนาดเล็à¸"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
-msgstr ""
+msgstr "à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸„วามชื้นขนาดเล็à¸à¸ªà¸³à¸«à¸£à¸±à¸šà¸à¸²à¸£à¸œà¸ªà¸¡à¹„บโอมบนพรมà¹à¸”น"
#: src/settings_translation_file.cpp
msgid "Small-scale temperature variation for blending biomes on borders."
-msgstr ""
+msgstr "ความà¹à¸›à¸£à¸œà¸±à¸™à¸‚องอุณหภูมิขนาดเล็à¸à¸ªà¸³à¸«à¸£à¸±à¸šà¸à¸²à¸£à¸œà¸ªà¸¡à¹„บโอมบนพรมà¹à¸”น."
#: src/settings_translation_file.cpp
msgid "Smooth lighting"
@@ -6393,14 +6800,13 @@ msgstr "à¸à¸¸à¸à¹à¸ˆà¹à¸­à¸š"
#: src/settings_translation_file.cpp
msgid "Sneaking speed"
-msgstr ""
+msgstr "ด้อมความเร็ว"
#: src/settings_translation_file.cpp
msgid "Sneaking speed, in nodes per second."
-msgstr ""
+msgstr "ความเร็วในà¸à¸²à¸£à¸”้อม ในโหนดต่อวินาที."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Soft shadow radius"
msgstr "ตัวอัà¸à¸©à¸£à¹€à¸‡à¸²à¸­à¸±à¸¥à¸Ÿà¸²"
@@ -6426,6 +6832,8 @@ msgid ""
"Note that mods or games may explicitly set a stack for certain (or all) "
"items."
msgstr ""
+"ระบุขนาดสà¹à¸•็à¸à¹€à¸£à¸´à¹ˆà¸¡à¸•้นของโหนด รายà¸à¸²à¸£ à¹à¸¥à¸°à¹€à¸„รื่องมือ.\n"
+"โปรดทราบว่าม็อดหรือเà¸à¸¡à¸­à¸²à¸ˆà¸•ั้งค่าสà¹à¸•็à¸à¸ªà¸³à¸«à¸£à¸±à¸šà¸šà¸²à¸‡à¸£à¸²à¸¢à¸à¸²à¸£ (หรือทั้งหมด) อย่างชัดเจน."
#: src/settings_translation_file.cpp
msgid ""
@@ -6434,16 +6842,20 @@ msgid ""
"will consume more resources.\n"
"Minimum value: 1; maximum value: 16"
msgstr ""
+"อัปเดตà¹à¸œà¸™à¸—ี่เงาโดยสมบูรณ์ตามจำนวนเฟรมที่à¸à¸³à¸«à¸™à¸”.\n"
+"ค่าที่สูงขึ้นอาจทำให้เงาล้าหลัง ค่าที่ต่ำà¸à¸§à¹ˆà¸²\n"
+"จะใช้ทรัพยาà¸à¸£à¸¡à¸²à¸à¸‚ึ้น.\n"
+"ค่าต่ำสุด: 1; ค่าสูงสุด: 16"
#: 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 ""
-"à¸à¸²à¸£à¹à¸žà¸£à¹ˆà¸à¸£à¸°à¸ˆà¸²à¸¢à¸‚องà¹à¸ªà¸‡à¹‚ค้งà¸à¸¥à¸²à¸‡ - เพิ่ม\n"
-"ค่าเบี่ยงเบนมาตรà¸à¸²à¸™à¸‚อง Gaussian à¸à¸¥à¸²à¸‡à¹€à¸£à¹ˆà¸‡"
+"à¸à¸²à¸£à¹à¸žà¸£à¹ˆà¸à¸£à¸°à¸ˆà¸²à¸¢à¸‚องช่วงà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸‚องเส้นโค้งà¹à¸ªà¸‡\n"
+"ควบคุมความà¸à¸§à¹‰à¸²à¸‡à¸‚องช่วงที่จะขยาย\n"
+"ส่วนเบี่ยงเบนมาตรà¸à¸²à¸™à¸‚องเส้นโค้งà¹à¸ªà¸‡à¹€à¸žà¸´à¹ˆà¸¡à¸„่าเà¸à¸²à¸ªà¹Œà¹€à¸‹à¸µà¸¢à¸™"
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
@@ -6451,20 +6863,19 @@ msgstr "จุดà¸à¸³à¹€à¸™à¸´à¸”à¹à¸šà¸šà¸„งที่"
#: src/settings_translation_file.cpp
msgid "Steepness noise"
-msgstr ""
+msgstr "เสียงสูงชัน"
#: src/settings_translation_file.cpp
msgid "Step mountain size noise"
-msgstr ""
+msgstr "เสียงรบà¸à¸§à¸™à¸‚นาดขั้นบันได"
#: src/settings_translation_file.cpp
msgid "Step mountain spread noise"
-msgstr ""
+msgstr "สเต็ปภูเขาà¸à¸£à¸°à¸ˆà¸²à¸¢à¹€à¸ªà¸µà¸¢à¸‡"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Strength of 3D mode parallax."
-msgstr "ความà¹à¸‚็งà¹à¸à¸£à¹ˆà¸‡à¸‚องพารัลà¹à¸¥à¸à¸‹à¹Œ"
+msgstr "ความà¹à¸‚็งà¹à¸à¸£à¹ˆà¸‡à¸‚องพารัลà¹à¸¥à¸à¸‹à¹Œ."
#: src/settings_translation_file.cpp
msgid ""
@@ -6472,6 +6883,9 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
+"เพิ่มความà¹à¸£à¸‡à¸‚องเส้นโค้งà¹à¸ªà¸‡.\n"
+"พารามิเตอร์ 'บูสต์' 3 ตัวà¸à¸³à¸«à¸™à¸”ช่วงของà¹à¸ªà¸‡\n"
+"เส้นโค้งที่เพิ่มขึ้นในความสว่าง."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -6494,34 +6908,49 @@ msgid ""
"server-intensive extreme water flow and to avoid vast flooding of the\n"
"world surface below."
msgstr ""
+"ระดับพื้นผิวของน้ำเสริมที่วางอยู่บนชั้นลอยตัวที่เป็นของà¹à¸‚็ง.\n"
+"น้ำถูà¸à¸›à¸´à¸”ใช้งานโดยค่าเริ่มต้นà¹à¸¥à¸°à¸ˆà¸°à¸–ูà¸à¸§à¸²à¸‡à¹„ว้à¸à¹‡à¸•่อเมื่อค่านี้ถูà¸à¸•ั้งค่าไว้.\n"
+"ไปด้านบน 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' \n"
+"(จุดเริ่มต้นของà¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸§à¸šà¸™).\n"
+"***คำเตือน อันตรายที่อาจเà¸à¸´à¸”ขึ้นà¸à¸±à¸šà¹‚ลà¸à¹à¸¥à¸°à¸›à¸£à¸°à¸ªà¸´à¸—ธิภาพของเซิร์ฟเวอร์***:\n"
+"เมื่อเปิดใช้งานà¸à¸²à¸£à¸§à¸²à¸‡à¸™à¹‰à¸³à¸ˆà¸°à¸•้องà¸à¸³à¸«à¸™à¸”ค่าà¹à¸¥à¸°à¸—ดสอบพื้นที่ลอยน้ำ\n"
+"ให้เป็นชั้นทึบโดยตั้งค่า 'mgv7_floatland_density' เป็น 2.0 (หรืออื่น ๆ\n"
+"ค่าที่ต้องà¸à¸²à¸£à¸‚ึ้นอยู่à¸à¸±à¸š 'mgv7_np_floatland') เพื่อหลีà¸à¹€à¸¥à¸µà¹ˆà¸¢à¸‡\n"
+"à¸à¸²à¸£à¹„หลของน้ำที่รุนà¹à¸£à¸‡à¹‚ดยเซิร์ฟเวอร์à¹à¸¥à¸°à¹€à¸žà¸·à¹ˆà¸­à¸«à¸¥à¸µà¸à¹€à¸¥à¸µà¹ˆà¸¢à¸‡à¸™à¹‰à¸³à¸—่วมใหà¸à¹ˆà¸‚อง\n"
+"พื้นผิวโลà¸à¸”้านล่าง."
#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
-msgstr ""
+msgstr "SQLite à¹à¸šà¸šà¸‹à¸´à¸‡à¹‚ครนัส"
#: src/settings_translation_file.cpp
msgid "Temperature variation for biomes."
-msgstr ""
+msgstr "à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸­à¸¸à¸“หภูมิสำหรับไบโอม."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "à¸à¸²à¸£à¸•ั้งค่า"
#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
-msgstr ""
+msgstr "เสียงรบà¸à¸§à¸™à¸—างเลือà¸à¸‚องภูมิประเทศ"
#: src/settings_translation_file.cpp
msgid "Terrain base noise"
-msgstr ""
+msgstr "เสียงà¸à¸²à¸™à¸ à¸¹à¸¡à¸´à¸›à¸£à¸°à¹€à¸—ศ"
#: src/settings_translation_file.cpp
msgid "Terrain height"
-msgstr ""
+msgstr "ความสูงของภูมิประเทศ"
#: src/settings_translation_file.cpp
msgid "Terrain higher noise"
-msgstr ""
+msgstr "ภูมิประเทศเสียงที่สูงขึ้น"
#: src/settings_translation_file.cpp
msgid "Terrain noise"
-msgstr ""
+msgstr "เสียงภูมิประเทศ"
#: src/settings_translation_file.cpp
msgid ""
@@ -6529,6 +6958,9 @@ msgid ""
"Controls proportion of world area covered by hills.\n"
"Adjust towards 0.0 for a larger proportion."
msgstr ""
+"ธรณีประตูเสียงภูมิประเทศสำหรับเนินเขา.\n"
+"ควบคุมสัดส่วนพื้นที่โลà¸à¸—ี่ปà¸à¸„ลุมด้วยเนินเขา.\n"
+"ปรับไปที่ 0.0 สำหรับสัดส่วนที่มาà¸à¸‚ึ้น."
#: src/settings_translation_file.cpp
msgid ""
@@ -6536,10 +6968,13 @@ msgid ""
"Controls proportion of world area covered by lakes.\n"
"Adjust towards 0.0 for a larger proportion."
msgstr ""
+"ธรณีประตูเสียงภูมิประเทศสำหรับทะเลสาบ.\n"
+"ควบคุมสัดส่วนพื้นที่โลà¸à¸—ี่ปà¸à¸„ลุมด้วยทะเลสาบ.\n"
+"ปรับไปที่ 0.0 สำหรับสัดส่วนที่มาà¸à¸‚ึ้น."
#: src/settings_translation_file.cpp
msgid "Terrain persistence noise"
-msgstr ""
+msgstr "เสียงคงอยู่ของภูมิประเทศ"
#: src/settings_translation_file.cpp
msgid "Texture path"
@@ -6551,6 +6986,9 @@ msgid ""
"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 ""
@@ -6570,10 +7008,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "The URL for the content repository"
-msgstr ""
+msgstr "URL สำหรับที่เà¸à¹‡à¸šà¹€à¸™à¸·à¹‰à¸­à¸«à¸²"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The dead zone of the joystick"
msgstr "ตัวระบุของจอยสติ๊à¸à¸—ี่จะใช้"
@@ -6582,15 +7019,17 @@ msgid ""
"The default format in which profiles are being saved,\n"
"when calling `/profiler save [format]` without format."
msgstr ""
+"รูปà¹à¸šà¸šà¹€à¸£à¸´à¹ˆà¸¡à¸•้นที่จะบันทึà¸à¹‚ปรไฟล์,\n"
+"เมื่อเรียภ`/profiler save [รูปà¹à¸šà¸š]` โดยไม่มีรูปà¹à¸šà¸š."
#: src/settings_translation_file.cpp
msgid "The depth of dirt or other biome filler node."
-msgstr ""
+msgstr "ความลึà¸à¸‚องสิ่งสà¸à¸›à¸£à¸à¸«à¸£à¸·à¸­à¹‚หนดเติมไบโอมอื่นๆ."
#: src/settings_translation_file.cpp
msgid ""
"The file path relative to your worldpath in which profiles will be saved to."
-msgstr ""
+msgstr "เส้นทางของไฟล์ที่สัมพันธ์à¸à¸±à¸š worldpath ของคุณซึ่งโปรไฟล์จะถูà¸à¸šà¸±à¸™à¸—ึà¸à¹„ว้."
#: src/settings_translation_file.cpp
msgid "The identifier of the joystick to use"
@@ -6608,6 +7047,11 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"ความสูงสูงสุดของพื้นผิวของเหลวโบà¸.\n"
+"4.0 = ความสูงของคลื่นคือสองโหนด.\n"
+"0.0 = คลื่นไม่เคลื่อนที่เลย.\n"
+"ค่าเริ่มต้นคือ 1.0 (1/2 โหนด).\n"
+"ต้องเปิดใช้งานโบà¸à¸‚องเหลว."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
@@ -6631,9 +7075,13 @@ msgid ""
"maintained.\n"
"This should be configured together with active_object_send_range_blocks."
msgstr ""
+"รัศมีของปริมาตรของบล็อครอบ ๆ ผู้เล่นทุà¸à¸„นที่อยู่ภายใต้\n"
+"สิ่งที่บล็อà¸à¸—ี่ใช้งานอยู่ระบุไว้ใน mapblocks (16 โหนด).\n"
+"ในวัตถุบล็อà¸à¸—ี่ใช้งานอยู่จะถูà¸à¹‚หลดà¹à¸¥à¸° ABMs ทำงาน.\n"
+"นี่ยังเป็นช่วงขั้นต่ำที่วัตถุที่ใช้งานอยู่ (ม็อบ) ถูà¸à¸£à¸±à¸à¸©à¸²à¹„ว้.\n"
+"ควรà¸à¸³à¸«à¸™à¸”ค่านี้ร่วมà¸à¸±à¸š active_object_send_range_blocks."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The rendering back-end.\n"
"A restart is required after changing this.\n"
@@ -6642,14 +7090,13 @@ msgid ""
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"à¸à¸²à¸£à¹à¸ªà¸”งผลà¹à¸šà¹‡à¸à¹€à¸­à¸™à¸”์สำหรับ Irrlicht\n"
-"จำเป็นต้องรีสตาร์ทหลังจาà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸ªà¸´à¹ˆà¸‡à¸™à¸µà¹‰\n"
-"หมายเหตุ: สำหรับ Android ให้ใช้ OGLES1 หาà¸à¹„ม่à¹à¸™à¹ˆà¹ƒà¸ˆ! à¹à¸­à¸›à¸­à¸²à¸ˆà¹„ม่สามารถเริ่มต้นได้\n"
-"สำหรับà¹à¸žà¸¥à¸•ฟอร์มอื่น ๆ ขอà¹à¸™à¸°à¸™à¸³à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰ OpenGL à¹à¸¥à¸°à¹€à¸›à¹‡à¸™à¹„ดรเวอร์เดียวที่มี\n"
-"รองรับ shader ในขณะนี้"
+"à¹à¸šà¹‡à¸à¹€à¸­à¸™à¸”์à¸à¸²à¸£à¹€à¸£à¸™à¹€à¸”อร์.\n"
+"จำเป็นต้องรีสตาร์ทหลังจาà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸ªà¸´à¹ˆà¸‡à¸™à¸µà¹‰.\n"
+"หมายเหตุ: บน Android ให้ใช้ OGLES1 หาà¸à¹„ม่à¹à¸™à¹ˆà¹ƒà¸ˆ! à¹à¸­à¸›à¸­à¸²à¸ˆà¹„ม่สามารถเริ่มต้นได้.\n"
+"บนà¹à¸žà¸¥à¸•ฟอร์มอื่น à¹à¸™à¸°à¸™à¸³à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰ OpenGL.\n"
+"Shaders ได้รับà¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™à¹‚ดย OpenGL (เดสà¸à¹Œà¸—็อปเท่านั้น) à¹à¸¥à¸° OGLES2 (ทดลอง)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
"in-game view frustum around."
@@ -6675,12 +7122,17 @@ 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 ""
+"เวลา (เป็นวินาที) ที่คิวของเหลวอาจขยายเà¸à¸´à¸™à¸à¸²à¸£à¸›à¸£à¸°à¸¡à¸§à¸¥à¸œà¸¥.\n"
+"ความจุจนà¸à¸§à¹ˆà¸²à¸ˆà¸°à¸žà¸¢à¸²à¸¢à¸²à¸¡à¸¥à¸”ขนาดโดยà¸à¸²à¸£à¸”ัมพ์คิวเà¸à¹ˆà¸²\n"
+"รายà¸à¸²à¸£ ค่า 0 ปิดใช้งานฟังà¸à¹Œà¸Šà¸±à¸™à¸à¸²à¸£à¸—ำงาน."
#: 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 ""
+"งบประมาณเวลาที่อนุà¸à¸²à¸•ให้ ABM ดำเนินà¸à¸²à¸£à¹ƒà¸™à¹à¸•่ละขั้นตอน\n"
+"(เป็นส่วนหนึ่งของช่วง ABM)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6691,11 +7143,12 @@ msgstr ""
"เมื่อà¸à¸”ปุ่มจอยสติ๊à¸à¸„้างไว้"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
-msgstr "วินาทีเวลาใช้ระหว่างà¸à¸²à¸£à¸‹à¹‰à¸³à¸‚วาเมื่อà¸à¸”ปุ่มเมาส์ขวา"
+msgstr ""
+"เวลาเป็นวินาทีที่ใช้ระหว่างตำà¹à¸«à¸™à¹ˆà¸‡à¹‚หนดที่เà¸à¸´à¸”ซ้ำเมื่อà¸à¸”ค้างไว้\n"
+"ปุ่มสถานที่"
#: src/settings_translation_file.cpp
msgid "The type of joystick"
@@ -6707,10 +7160,13 @@ msgid ""
"enabled. Also the vertical distance over which humidity drops by 10 if\n"
"'altitude_dry' is enabled."
msgstr ""
+"ระยะทางà¹à¸™à¸§à¸•ั้งที่ความร้อนลดลง 20 หาภ'altitude_chill' คือ\n"
+"เปิดใช้งาน ระยะทางà¹à¸™à¸§à¸•ั้งที่ความชื้นลดลง 10 ถ้า\n"
+"'altitude_dry' เปิดใช้งานอยู่."
#: src/settings_translation_file.cpp
msgid "Third of 4 2D noises that together define hill/mountain range height."
-msgstr ""
+msgstr "เสียง 2D จำนวน 3 จาภ4 เสียงที่ร่วมà¸à¸±à¸™à¸à¸³à¸«à¸™à¸”ความสูงของช่วงเนินเขา/ภูเขา."
#: src/settings_translation_file.cpp
msgid ""
@@ -6722,18 +7178,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Time of day when a new world is started, in millihours (0-23999)."
-msgstr ""
+msgstr "เวลาของวันที่เริ่มต้นโลà¸à¹ƒà¸«à¸¡à¹ˆ หน่วยเป็นมิลลิชั่วโมง (0-23999)."
#: 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."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr "หมดเวลาสำหรับไคลเอ็นต์เพื่อลบข้อมูลà¹à¸œà¸™à¸—ี่ที่ไม่ได้ใช้ออà¸à¸ˆà¸²à¸à¸«à¸™à¹ˆà¸§à¸¢à¸„วามจำ."
#: src/settings_translation_file.cpp
@@ -6759,27 +7216,35 @@ msgid "Touch screen threshold"
msgstr "ขีด จำà¸à¸±à¸” หน้าจอสัมผัส"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "ขีด จำà¸à¸±à¸” หน้าจอสัมผัส"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
+msgstr "à¸à¸²à¸£à¸›à¸£à¸°à¸™à¸µà¸›à¸£à¸°à¸™à¸­à¸¡à¹€à¸žà¸·à¹ˆà¸­à¸›à¸£à¸°à¸ªà¸´à¸—ธิภาพ"
+
+#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Trees noise"
-msgstr ""
+msgstr "เสียงต้นไม้"
#: src/settings_translation_file.cpp
msgid "Trilinear filtering"
msgstr "à¸à¸²à¸£à¸à¸£à¸­à¸‡ Trilinear"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"True = 256\n"
"False = 128\n"
"Usable to make minimap smoother on slower machines."
msgstr ""
-"True = 256\n"
-"เท็จ = 128\n"
-"ใช้เพื่อทำให้à¹à¸œà¸™à¸—ี่ย่อเรียบขึ้นบนเครื่องที่ช้าลง"
+"จริง (True) = 256\n"
+"เท็จ (False) = 128\n"
+"ใช้เพื่อทำให้à¹à¸œà¸™à¸—ี่ย่อเรียบขึ้นบนเครื่องที่ช้าลง."
#: src/settings_translation_file.cpp
msgid "Trusted mods"
@@ -6790,12 +7255,10 @@ msgid "URL to the server list displayed in the Multiplayer Tab."
msgstr "URL ไปยังรายà¸à¸²à¸£à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œà¸—ี่à¹à¸ªà¸”งในà¹à¸—็บผู้เล่นหลายคน."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Undersampling"
-msgstr "Undersampling"
+msgstr "สุ่มตัวอย่าง"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Undersampling is similar to using a lower screen resolution, but it applies\n"
"to the game world only, keeping the GUI intact.\n"
@@ -6803,9 +7266,10 @@ msgid ""
"image.\n"
"Higher values result in a less detailed image."
msgstr ""
-"Undersampling คล้ายà¸à¸±à¸šà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸„วามละเอียดหน้าจอต่ำà¸à¸§à¹ˆà¸² à¹à¸•่ใช้\n"
-"สู่โลà¸à¸‚องเà¸à¸¡à¹€à¸—่านั้นทำให้ GUI ยังคงสภาพเดิม\n"
-"ควรเพิ่มประสิทธิภาพที่สำคัà¸à¸”้วยต้นทุนของภาพที่มีรายละเอียดน้อยà¸à¸§à¹ˆà¸²"
+"à¸à¸²à¸£à¸ªà¸¸à¹ˆà¸¡à¸•ัวอย่างต่ำจะคล้ายà¸à¸±à¸šà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸„วามละเอียดหน้าจอที่ต่ำà¸à¸§à¹ˆà¸² à¹à¸•่ใช้ได้\n"
+"ให้à¸à¸±à¸šà¹‚ลà¸à¸‚องเà¸à¸¡à¹€à¸—่านั้น โดยรัà¸à¸©à¸² GUI ไว้เหมือนเดิม\n"
+"ควรเพิ่มประสิทธิภาพอย่างมาà¸à¹‚ดยเสียภาพที่มีรายละเอียดน้อย\n"
+"ค่าที่สูงขึ้นส่งผลให้ภาพมีรายละเอียดน้อยลง"
#: src/settings_translation_file.cpp
msgid "Unlimited player transfer distance"
@@ -6813,15 +7277,15 @@ msgstr "ระยะถ่ายโอนผู้เล่นไม่ จำà¸
#: src/settings_translation_file.cpp
msgid "Unload unused server data"
-msgstr ""
+msgstr "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹‚หลดข้อมูลเซิร์ฟเวอร์ที่ไม่ได้ใช้"
#: src/settings_translation_file.cpp
msgid "Upper Y limit of dungeons."
-msgstr ""
+msgstr "ขีด จำà¸à¸±à¸” Y บนของดันเจี้ยน."
#: src/settings_translation_file.cpp
msgid "Upper Y limit of floatlands."
-msgstr ""
+msgstr "ขีด จำà¸à¸±à¸” Y บนของทุ่นลอยน้ำ."
#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
@@ -6840,15 +7304,14 @@ msgid "Use bilinear filtering when scaling textures."
msgstr "ใช้à¸à¸²à¸£à¸à¸£à¸­à¸‡ bilinear เมื่อปรับขนาดพื้นผิว"
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"ใช้à¸à¸²à¸£à¸—ำà¹à¸œà¸™à¸—ี่ mip เพื่อปรับขนาดพื้นผิว อาจเพิ่มประสิทธิภาพเล็à¸à¸™à¹‰à¸­à¸¢\n"
-"โดยเฉพาะอย่างยิ่งเมื่อใช้à¹à¸žà¹‡à¸„พื้นผิวที่มีความละเอียดสูง\n"
-"ไม่รองรับà¸à¸²à¸£à¸¥à¸”ขนาดà¹à¸à¸¡à¸¡à¸²à¹à¸à¸¡à¸¡à¸²à¸—ี่ถูà¸à¸•้อง"
+"ใช้à¸à¸²à¸£à¸—ำà¹à¸œà¸™à¸—ี่ mip เพื่อปรับขนาดพื้นผิว อาจเพิ่มประสิทธิภาพเล็à¸à¸™à¹‰à¸­à¸¢,\n"
+"โดยเฉพาะอย่างยิ่งเมื่อใช้à¹à¸žà¹‡à¸„พื้นผิวที่มีความละเอียดสูง.\n"
+"ไม่รองรับà¸à¸²à¸£à¸¥à¸”ขนาดà¹à¸à¸¡à¸¡à¸²à¹à¸à¸¡à¸¡à¸²à¸—ี่ถูà¸à¸•้อง."
#: src/settings_translation_file.cpp
msgid ""
@@ -6860,72 +7323,85 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"ใช้à¸à¸²à¸£à¸¥à¸šà¸£à¸­à¸¢à¸«à¸¢à¸±à¸à¸«à¸¥à¸²à¸¢à¸•ัวอย่าง (MSAA) เพื่อทำให้ขอบบล็อà¸à¹€à¸£à¸µà¸¢à¸š.\n"
+"อัลà¸à¸­à¸£à¸´à¸˜à¸¶à¸¡à¸™à¸µà¹‰à¸—ำให้วิวพอร์ต 3 มิติเรียบขึ้นในขณะที่รัà¸à¸©à¸²à¸„วามคมชัดของภาพ,\n"
+"à¹à¸•่ไม่ส่งผลต่อเนื้อใน\n"
+"(ซึ่งเห็นได้ชัดเจนเป็นพิเศษà¸à¸±à¸šà¸žà¸·à¹‰à¸™à¸œà¸´à¸§à¹‚ปร่งใส).\n"
+"ช่องว่างที่มองเห็นได้ปราà¸à¸à¸‚ึ้นระหว่างโหนดเมื่อปิดใช้ shaders.\n"
+"หาà¸à¸•ั้งค่าเป็น 0 MSAA จะถูà¸à¸›à¸´à¸”ใช้งาน.\n"
+"จำเป็นต้องรีสตาร์ทหลังจาà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸•ัวเลือà¸à¸™à¸µà¹‰."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
msgstr "ใช้à¸à¸²à¸£à¸à¸£à¸­à¸‡ trilinear เมื่อปรับขนาดพื้นผิว"
#: src/settings_translation_file.cpp
-#, fuzzy
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "VSync"
-msgstr "VSync"
+msgstr "VSync / à¸à¸²à¸£à¸‹à¸´à¸‡à¹‚ครไนซ์à¹à¸™à¸§à¸•ั้ง"
#: src/settings_translation_file.cpp
msgid "Valley depth"
-msgstr ""
+msgstr "ความลึà¸à¸‚องหุบเขา"
#: src/settings_translation_file.cpp
msgid "Valley fill"
-msgstr ""
+msgstr "เติมหุบเขา"
#: src/settings_translation_file.cpp
msgid "Valley profile"
-msgstr ""
+msgstr "โปรไฟล์หุบเขา"
#: src/settings_translation_file.cpp
msgid "Valley slope"
-msgstr ""
+msgstr "ความลาดชันของหุบเขา"
#: src/settings_translation_file.cpp
msgid "Variation of biome filler depth."
-msgstr ""
+msgstr "à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸„วามลึà¸à¸‚องสารเติมà¹à¸•่งไบโอม."
#: src/settings_translation_file.cpp
msgid "Variation of maximum mountain height (in nodes)."
-msgstr ""
+msgstr "ความสูงของภูเขาสูงสุด (เป็นโหนด)."
#: src/settings_translation_file.cpp
msgid "Variation of number of caves."
-msgstr ""
+msgstr "ความหลาà¸à¸«à¸¥à¸²à¸¢à¸‚องจำนวนถ้ำ."
#: src/settings_translation_file.cpp
msgid ""
"Variation of terrain vertical scale.\n"
"When noise is < -0.55 terrain is near-flat."
msgstr ""
+"à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸‚องมาตราส่วนà¹à¸™à¸§à¸•ั้งของภูมิประเทศ.\n"
+"เมื่อเสียงรบà¸à¸§à¸™ < -0.55 ภูมิประเทศใà¸à¸¥à¹‰à¸ˆà¸°à¸£à¸²à¸šà¹€à¸£à¸µà¸¢à¸š."
#: src/settings_translation_file.cpp
msgid "Varies depth of biome surface nodes."
-msgstr ""
+msgstr "ความลึà¸à¸‚องโหนดพื้นผิวไบโอมà¹à¸•à¸à¸•่างà¸à¸±à¸™."
#: src/settings_translation_file.cpp
msgid ""
"Varies roughness of terrain.\n"
"Defines the 'persistence' value for terrain_base and terrain_alt noises."
msgstr ""
+"ความขรุขระของภูมิประเทศà¹à¸•à¸à¸•่างà¸à¸±à¸™à¹„ป.\n"
+"à¸à¸³à¸«à¸™à¸”ค่า 'à¸à¸²à¸£à¸„งอยู่' สำหรับเสียง terrain_base à¹à¸¥à¸° terrain_alt."
#: src/settings_translation_file.cpp
msgid "Varies steepness of cliffs."
-msgstr ""
+msgstr "ความชันของหน้าผาà¹à¸•à¸à¸•่างà¸à¸±à¸™à¹„ป."
#: src/settings_translation_file.cpp
msgid "Vertical climbing speed, in nodes per second."
-msgstr ""
+msgstr "ความเร็วในà¸à¸²à¸£à¸›à¸µà¸™à¹à¸™à¸§à¸•ั้ง เป็นโหนดต่อวินาที."
#: src/settings_translation_file.cpp
msgid "Vertical screen synchronization."
@@ -6960,7 +7436,6 @@ msgid "Viewing range"
msgstr "ดูช่วง"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Virtual joystick triggers Aux1 button"
msgstr "จอยสติà¸à¹€à¸ªà¸¡à¸·à¸­à¸™à¹€à¸£à¸µà¸¢à¸à¹ƒà¸Šà¹‰à¸›à¸¸à¹ˆà¸¡ aux"
@@ -6969,13 +7444,12 @@ msgid "Volume"
msgstr "ปริมาณ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
-"เปิดใช้งานà¸à¸²à¸£à¹à¸¡à¸›à¸à¸²à¸£à¸šà¸”เคี้ยวของรัลà¹à¸¥à¸à¸‹à¹Œ\n"
-"ต้องมี shaders เพื่อเปิดใช้งาน"
+"เปิดใช้งานà¸à¸²à¸£à¹à¸¡à¸›à¸à¸²à¸£à¸šà¸”เคี้ยวของรัลà¹à¸¥à¸à¸‹à¹Œ.\n"
+"ต้องมี shaders เพื่อเปิดใช้งาน."
#: src/settings_translation_file.cpp
msgid ""
@@ -6985,18 +7459,23 @@ msgid ""
"Has no effect on 3D fractals.\n"
"Range roughly -2 to 2."
msgstr ""
+"พิà¸à¸±à¸” W ของชิ้นส่วน 3D ที่สร้างขึ้นของเศษส่วน 4D.\n"
+"à¸à¸³à¸«à¸™à¸”ส่วน 3D ของรูปร่าง 4D ที่ถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¸‚ึ้น.\n"
+"เปลี่ยนรูปร่างของเศษส่วน.\n"
+"ไม่มีผลà¸à¸±à¸šà¹à¸Ÿà¸£à¹‡à¸à¸—ัล 3 มิติ.\n"
+"ช่วงประมาณ -2 ถึง 2."
#: 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."
-msgstr ""
+msgstr "ความเร็วในà¸à¸²à¸£à¹€à¸”ิน บิน à¹à¸¥à¸°à¸›à¸µà¸™à¹€à¸‚าในโหมดเร็ว ในโหนดต่อวินาที."
#: src/settings_translation_file.cpp
msgid "Water level"
@@ -7015,22 +7494,18 @@ msgid "Waving leaves"
msgstr "โบà¸à¹ƒà¸šà¹„ม้"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids"
msgstr "โบà¸à¹‚หนด"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave height"
msgstr "โบà¸à¸™à¹‰à¸³à¸ªà¸¹à¸‡"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave speed"
msgstr "โบà¸à¸„วามเร็วน้ำ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wavelength"
msgstr "โบà¸à¸¡à¸·à¸­à¸à¸±à¸™à¸¢à¸²à¸§"
@@ -7039,7 +7514,6 @@ msgid "Waving plants"
msgstr "โบà¸à¸•้นไม้"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Weblink color"
msgstr "สีของà¸à¸¥à¹ˆà¸­à¸‡à¸—ี่เลือà¸"
@@ -7066,7 +7540,6 @@ 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"
@@ -7077,21 +7550,22 @@ msgid ""
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
-"เมื่อใช้ตัวà¸à¸£à¸­à¸‡ bilinear / trilinear / anisotropic พื้นผิวที่มีความละเอียดต่ำ\n"
-"สามารถเบลอดังนั้นจึงทำà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸à¸£à¸”โดยอัตโนมัติà¸à¸±à¸šà¹€à¸žà¸·à¹ˆà¸­à¸™à¸šà¹‰à¸²à¸™à¸—ี่ใà¸à¸¥à¹‰à¸—ี่สุด\n"
+"เมื่อใช้ฟิลเตอร์ bilinear/trilinear/anisotropic พื้นผิวความละเอียดต่ำ\n"
+"สามารถเบลอได้ดังนั้นจึงเพิ่มขนาดโดยอัตโนมัติà¸à¸±à¸šà¹€à¸žà¸·à¹ˆà¸­à¸™à¸šà¹‰à¸²à¸™à¸—ี่ใà¸à¸¥à¹‰à¸—ี่สุด\n"
"à¸à¸²à¸£à¹à¸à¹‰à¹„ขเพื่อรัà¸à¸©à¸²à¸žà¸´à¸à¹€à¸‹à¸¥à¸—ี่คมชัด à¸à¸³à¸«à¸™à¸”ขนาดพื้นผิวขั้นต่ำ\n"
-"สำหรับพื้นผิวที่ลดอัตราสเà¸à¸¥; ค่าที่สูงà¸à¸§à¹ˆà¸²à¸ˆà¸°à¸”ูคมชัดขึ้น à¹à¸•่ต้องà¸à¸²à¸£à¸¡à¸²à¸à¸‚ึ้น\n"
-"หน่วยความจำ à¹à¸™à¸°à¸™à¸³à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸à¸³à¸¥à¸±à¸‡ 2 à¸à¸²à¸£à¸•ั้งค่านี้สูงà¸à¸§à¹ˆà¸² 1 อาจไม่\n"
-"มีผลที่มองเห็นได้เว้นà¹à¸•่ว่าà¸à¸²à¸£à¸à¸£à¸­à¸‡ bilinear / trilinear / anisotropic\n"
-"เปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™\n"
-"สิ่งนี้ยังใช้เป็นขนาดพื้นผิวโหนดโหนดสำหรับà¸à¸²à¸£à¸ˆà¸±à¸”ตำà¹à¸«à¸™à¹ˆà¸‡à¹‚ลà¸\n"
-"à¸à¸²à¸£à¸«à¸¡à¸¸à¸™à¸­à¸±à¸•โนมัติของพื้นผิว"
+"สำหรับพื้นผิวที่ยà¸à¸£à¸°à¸”ับ; ค่าที่สูงà¸à¸§à¹ˆà¸²à¸ˆà¸°à¸”ูคมชัดà¸à¸§à¹ˆà¸²à¹à¸•่ต้องà¸à¸²à¸£à¸¡à¸²à¸à¸à¸§à¹ˆà¸²\n"
+"หน่วยความจำ. à¹à¸™à¸°à¸™à¸³à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸à¸³à¸¥à¸±à¸‡ 2 à¸à¸²à¸£à¸•ั้งค่านี้ใช้เฉพาะในà¸à¸£à¸“ีที่\n"
+"เปิดใช้งานà¸à¸²à¸£à¸à¸£à¸­à¸‡ bilinear/trilinear/anisotropic\n"
+"นอà¸à¸ˆà¸²à¸à¸™à¸µà¹‰à¸¢à¸±à¸‡à¹ƒà¸Šà¹‰à¹€à¸›à¹‡à¸™à¸‚นาดพื้นผิวของโหนดà¸à¸²à¸™à¸ªà¸³à¸«à¸£à¸±à¸šà¸à¸²à¸£à¸ˆà¸±à¸”ตำà¹à¸«à¸™à¹ˆà¸‡à¹‚ลà¸\n"
+"à¸à¸²à¸£à¸›à¸£à¸±à¸šà¸‚นาดพื้นผิวอัตโนมัติ"
#: src/settings_translation_file.cpp
msgid ""
"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
+"ควรà¹à¸ªà¸”งพื้นหลังà¹à¸—็à¸à¸Šà¸·à¹ˆà¸­à¹‚ดยค่าเริ่มต้นหรือไม่.\n"
+"Mods อาจยังคงตั้งค่าพื้นหลัง."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -7128,6 +7602,19 @@ 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"
+"ในเà¸à¸¡ คุณสามารถสลับสถานะปิดเสียงด้วยปุ่มปิดเสียงหรือโดยใช้ปุ่ม\n"
+"เมนูหยุดชั่วคราว."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -7135,9 +7622,8 @@ msgid ""
msgstr "ไม่ว่าจะà¹à¸ªà¸”งข้อมูลà¸à¸²à¸£à¹à¸à¹‰à¸›à¸±à¸à¸«à¸²à¸¥à¸¹à¸à¸„้า (มีผลเช่นเดียวà¸à¸±à¸šà¸à¸²à¸£à¸à¸”ปุ่ม F5)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Width component of the initial window size. Ignored in fullscreen mode."
-msgstr "องค์ประà¸à¸­à¸šà¸„วามà¸à¸§à¹‰à¸²à¸‡à¸‚องขนาดหน้าต่างเริ่มต้น"
+msgstr "องค์ประà¸à¸­à¸šà¸„วามà¸à¸§à¹‰à¸²à¸‡à¸‚องขนาดหน้าต่างเริ่มต้น."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7162,7 +7648,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "World start time"
-msgstr ""
+msgstr "เวลาเริ่มต้นของโลà¸"
#: src/settings_translation_file.cpp
msgid ""
@@ -7178,7 +7664,7 @@ msgstr ""
"เทà¸à¸‹à¹Œà¹€à¸ˆà¸­à¸£à¹Œà¹à¸žà¹‡à¸„ที่ออà¸à¹à¸šà¸šà¹€à¸›à¹‡à¸™à¸žà¸´à¹€à¸¨à¸© ด้วยตัวเลือà¸à¸™à¸µà¹‰à¹„คลเอนต์พยายาม\n"
"เพื่อà¸à¸³à¸«à¸™à¸”ขนาดโดยอัตโนมัติตามขนาดเทà¸à¸‹à¹Œà¹€à¸ˆà¸­à¸£à¹Œ\n"
"ดูเพิ่มเติมที่ texture_min_size\n"
-"คำเตือน: ตัวเลือà¸à¸™à¸µà¹‰à¹€à¸›à¹‡à¸™à¸à¸²à¸£à¸—ดลอง"
+"คำเตือน: ตัวเลือà¸à¸™à¸µà¹‰à¹€à¸›à¹‡à¸™à¸à¸²à¸£à¸—ดลอง!"
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
@@ -7186,21 +7672,21 @@ msgstr "โหมดพื้นผิวที่จัดชิดโลà¸"
#: src/settings_translation_file.cpp
msgid "Y of flat ground."
-msgstr ""
+msgstr "Y ของพื้นเรียบ."
#: src/settings_translation_file.cpp
msgid ""
"Y of mountain density gradient zero level. Used to shift mountains "
"vertically."
-msgstr ""
+msgstr "Y ของระดับà¸à¸²à¸£à¹„ล่ระดับความหนาà¹à¸™à¹ˆà¸™à¸‚องภูเขาเป็นศูนย์ ใช้ในà¸à¸²à¸£à¹€à¸¥à¸·à¹ˆà¸­à¸™à¸ à¸¹à¹€à¸‚าในà¹à¸™à¸§à¸•ั้ง."
#: src/settings_translation_file.cpp
msgid "Y of upper limit of large caves."
-msgstr ""
+msgstr "Y ของขอบบนของถ้ำขนาดใหà¸à¹ˆ."
#: src/settings_translation_file.cpp
msgid "Y-distance over which caverns expand to full size."
-msgstr ""
+msgstr "ระยะ Y ซึ่งถ้ำจะขยายเป็นขนาดเต็ม."
#: src/settings_translation_file.cpp
msgid ""
@@ -7209,38 +7695,46 @@ 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 ที่พื้นที่ลอยน้ำลดลงจาà¸à¸„วามหนาà¹à¸™à¹ˆà¸™à¹€à¸•็มที่จนไม่มีเลย.\n"
+"à¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸§à¹€à¸£à¸´à¹ˆà¸¡à¸—ี่ระยะนี้จาà¸à¸‚ีด จำà¸à¸±à¸” Y.\n"
+"สำหรับชั้นทุ่นลอยน้ำที่เป็นของà¹à¸‚็ง สิ่งนี้จะควบคุมความสูงของเนินเขา/ภูเขา.\n"
+"ต้องน้อยà¸à¸§à¹ˆà¸²à¸«à¸£à¸·à¸­à¹€à¸—่าà¸à¸±à¸šà¸„รึ่งหนึ่งของระยะห่างระหว่างขีดจำà¸à¸±à¸” Y."
#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
-msgstr ""
+msgstr "ระดับ Y ของพื้นผิวภูมิประเทศโดยเฉลี่ย."
#: src/settings_translation_file.cpp
msgid "Y-level of cavern upper limit."
-msgstr ""
+msgstr "ระดับ Y ของขีดจำà¸à¸±à¸”บนของถ้ำ."
#: src/settings_translation_file.cpp
msgid "Y-level of higher terrain that creates cliffs."
-msgstr ""
+msgstr "ระดับ Y ของภูมิประเทศที่สูงขึ้นซึ่งทำให้เà¸à¸´à¸”หน้าผา."
#: src/settings_translation_file.cpp
msgid "Y-level of lower terrain and seabed."
-msgstr ""
+msgstr "ระดับ Y ของภูมิประเทศด้านล่างà¹à¸¥à¸°à¸à¹‰à¸™à¸—ะเล."
#: src/settings_translation_file.cpp
msgid "Y-level of seabed."
+msgstr "ระดับ Y ของà¸à¹‰à¸™à¸—ะเล."
+
+#: src/settings_translation_file.cpp
+msgid "cURL"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
-msgstr ""
+msgstr "ไฟล์ cURL หมดเวลาดาวน์โหลดไฟล์"
#: src/settings_translation_file.cpp
msgid "cURL interactive timeout"
-msgstr ""
+msgstr "cURL หมดเวลาโต้ตอบ"
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
-msgstr ""
+msgstr "cURL ขีด จำà¸à¸±à¸” ขนาน"
#~ msgid "- Creative Mode: "
#~ msgstr "-โหมดสร้างสรรค์: "
@@ -7272,6 +7766,9 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "หลัง"
+#~ msgid "Basic"
+#~ msgstr "ขั้นพื้นà¸à¸²à¸™"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "บิตต่อพิà¸à¹€à¸‹à¸¥ (ความลึà¸à¸‚องสี aka) ในโหมดเต็มหน้าจอ."
@@ -7291,6 +7788,12 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "à¸à¸³à¸«à¸™à¸”ค่า"
+#~ msgid "Connect"
+#~ msgstr "เชื่อมต่อ"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "ควบคุมความเร็วà¸à¸²à¸£à¸ˆà¸¡à¹ƒà¸™à¸‚องเหลว."
+
#~ msgid "Credits"
#~ msgstr "เครดิต"
@@ -7310,12 +7813,24 @@ msgstr ""
#~ "à¸à¸³à¸«à¸™à¸”ขั้นตอนà¸à¸²à¸£à¸ªà¸¸à¹ˆà¸¡à¸•ัวอย่างของพื้นผิว\n"
#~ "ค่าที่สูงà¸à¸§à¹ˆà¸²à¸ˆà¸°à¸—ำให้à¹à¸œà¸™à¸—ี่ปà¸à¸•ิราบรื่นขึ้น"
+#~ msgid "Del. Favorite"
+#~ msgstr "ลบรายà¸à¸²à¸£à¹‚ปรด"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "ดาวน์โหลดเà¸à¸¡ อย่างเช่น ไมน์เทสต์เà¸à¸¡ ได้จาภminetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "ดาวน์โหลดจาภminetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "ดาวน์โหลด à¹à¸¥à¸°à¸•ิดตั้ง $1 à¸à¸£à¸¸à¸“ารอสัà¸à¸„รู่..."
#~ msgid "Enable VBO"
#~ msgstr "ทำให้สามารถ VBO"
+#~ msgid "Enable register confirmation"
+#~ msgstr "เปิดใช้งานà¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¸à¸²à¸£à¸¥à¸‡à¸—ะเบียน"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7343,6 +7858,9 @@ msgstr ""
#~ "เปิดใช้งานà¸à¸²à¸£à¹à¸¡à¸›à¸à¸²à¸£à¸šà¸”เคี้ยวของรัลà¹à¸¥à¸à¸‹à¹Œ\n"
#~ "ต้องมี shaders เพื่อเปิดใช้งาน"
+#~ msgid "Enter "
+#~ msgstr "ป้อน "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7362,6 +7880,9 @@ msgstr ""
#~ msgid "Fallback font size"
#~ msgstr "ขนาดตัวอัà¸à¸©à¸£à¸—างเลือà¸"
+#~ msgid "Filtering"
+#~ msgstr "à¸à¸£à¸­à¸‡"
+
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "ตัวอัà¸à¸©à¸£à¹€à¸‡à¸²à¸­à¸±à¸¥à¸Ÿà¸² (ความทึบระหว่าง 0 à¹à¸¥à¸° 255)."
@@ -7371,6 +7892,9 @@ msgstr ""
#~ msgid "Full screen BPP"
#~ msgstr "BPP เต็มหน้าจอ"
+#~ msgid "Game"
+#~ msgstr "เà¸à¸¡"
+
#~ msgid "Gamma"
#~ msgstr "à¹à¸à¸¡à¸¡à¸²"
@@ -7380,15 +7904,31 @@ msgstr ""
#~ msgid "Generate normalmaps"
#~ msgstr "สร้างà¹à¸œà¸™à¸—ี่ปà¸à¸•ิ"
+#~ msgid "HUD scale factor"
+#~ msgstr "เครื่องชั่ง HUD"
+
+#~ msgid "In-Game"
+#~ msgstr "ในเà¸à¸¡à¸ªà¹Œ"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "ติดตั้ง: ไฟล์: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "เครื่องมือวัด"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr "โหวต. (ถ้าเมนูนี้สà¸à¸£à¸¹à¸‚ึ้น เอาข้อมูลจาภminetest.conf)"
+
#~ msgid "Lightness sharpness"
#~ msgstr "ความคมชัดของà¹à¸ªà¸‡"
#~ msgid "Main"
#~ msgstr "หลัà¸"
+#~ msgid "Menus"
+#~ msgstr "เมนู"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "à¹à¸œà¸™à¸—ี่ย่อในโหมดเรดาร์, ซูม x2"
@@ -7458,6 +7998,12 @@ msgstr ""
#~ msgid "Path to save screenshots at."
#~ msgstr "พา ธ เพื่อบันทึà¸à¸ à¸²à¸žà¸«à¸™à¹‰à¸²à¸ˆà¸­à¸—ี่ ..."
+#~ msgid "Player name"
+#~ msgstr "ชื่อผู้เล่น"
+
+#~ msgid "Profiling"
+#~ msgstr "โปรไฟล์"
+
#~ msgid "PvP enabled"
#~ msgstr "PvP เปิดใช้งาน"
@@ -7467,6 +8013,9 @@ msgstr ""
#~ msgid "Select Package File:"
#~ msgstr "เลือà¸à¹à¸Ÿà¹‰à¸¡à¹à¸žà¸„เà¸à¸ˆ:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "เซิร์ฟเวอร์ / ผู้เล่นเดี่ยว"
+
#, fuzzy
#~ msgid ""
#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
@@ -7514,6 +8063,20 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "ใช่"
+#, 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 ""
+#~ "คุณà¸à¸³à¸¥à¸±à¸‡à¸ˆà¸°à¹€à¸‚้าร่วมเซิร์ฟเวอร์นี้ในชื่อ \"%s\" เป็นครั้งà¹à¸£à¸\n"
+#~ "หาà¸à¸„ุณดำเนินà¸à¸²à¸£à¸•่อ บัà¸à¸Šà¸µà¹ƒà¸«à¸¡à¹ˆà¸—ี่ใช้ข้อมูลประจำตัวของคุณจะถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¸‚ึ้นบนเซิร์ฟเวอร์นี้\n"
+#~ "โปรดพิมพ์รหัสผ่านของคุณอีà¸à¸„รั้งà¹à¸¥à¹‰à¸§à¸„ลิภ'ลงทะเบียนà¹à¸¥à¸°à¹€à¸‚้าร่วม' เพื่อยืนยันà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸šà¸±à¸à¸Šà¸µ "
+#~ "หรือคลิภ'ยà¸à¹€à¸¥à¸´à¸' เพื่อยà¸à¹€à¸¥à¸´à¸"
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "คุณตายà¹à¸¥à¹‰à¸§"
diff --git a/po/tr/minetest.po b/po/tr/minetest.po
index e68a75653..bc2b5a9b9 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: 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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-02-01 11:39+0000\n"
+"Last-Translator: Metehan Özyürek <metehanc8s9@yandex.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/minetest/"
"minetest/tr/>\n"
"Language: tr\n"
@@ -114,6 +114,31 @@ msgid "The server has requested a reconnect:"
msgstr "Bu sunucu yeniden baÄŸlanma isteÄŸinde bulundu:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Mod seçin"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Protokol sürümü uyumsuz. "
@@ -126,6 +151,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Bu sunucu $1 ve $2 arası tüm protokol sürümlerini destekler. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Yalnızca $1 protokol sürümü desteklenmektedir."
@@ -133,14 +162,21 @@ msgstr "Yalnızca $1 protokol sürümü desteklenmektedir."
msgid "We support protocol versions between version $1 and $2."
msgstr "Yalnızca $1 ve $2 arası protokol sürümleri desteklenmektedir."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "İptal"
@@ -279,7 +315,6 @@ msgid "Failed to download $1"
msgstr "$1 indirilemedi"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Oyunlar"
@@ -300,7 +335,6 @@ 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"
@@ -393,12 +427,9 @@ msgid "Decorations"
msgstr "Dekorasyonlar"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "minetest.net'den , Minetest Game gibi, bir oyun indirin"
-
-#: builtin/mainmenu/dlg_create_world.lua
-msgid "Download one from minetest.net"
-msgstr "minetest.net adresinden indirin"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "Uyarı : Geliştirici testi geliştiriciler içindir."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -416,10 +447,6 @@ msgstr "Gökyüzünde yüzenkara kütleleri"
msgid "Floatlands (experimental)"
msgstr "Yüzenkaralar (deneysel)"
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
-msgstr "Oyun"
-
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
msgstr "Fraktal olmayan arazi üret: Okyanuslar ve yeraltı"
@@ -437,6 +464,15 @@ msgid "Increases humidity around rivers"
msgstr "Nehirler etrafındaki nemi artırır"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "$1 kur"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Göller"
@@ -538,10 +574,6 @@ msgid "Very large caverns deep in the underground"
msgstr "Yerin derinliklerinde çok büyük oyuklar"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The Development Test is meant for developers."
-msgstr "Uyarı : Geliştirici testi geliştiriciler içindir."
-
-#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Dünya adı"
@@ -571,6 +603,39 @@ msgstr "pkgmgr: \"$1\" konumu geçersiz"
msgid "Delete World \"$1\"?"
msgstr "\"$1\" dünyasını sil?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Parolayı Doğrula"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Mapgen adı"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Ad"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Parola"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "Parolalar eÅŸleÅŸmiyor!"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "Kaydol ve Katıl"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "Kabul et"
@@ -603,6 +668,16 @@ msgstr "< Ayarlar sayfasına geri dön"
msgid "Browse"
msgstr "Gözat"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "İçerik"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "İçerik"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Devre dışı"
@@ -659,7 +734,7 @@ msgstr "Dizin seç"
msgid "Select file"
msgstr "Dosya seç"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Teknik adları göster"
@@ -808,6 +883,11 @@ msgstr "Önceki Katkıda Bulunanlar"
msgid "Previous Core Developers"
msgstr "Önceki Çekirdek Geliştiriciler"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "Hata ayıklama bilgisini göster"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Çevrim içi içeriğe göz at"
@@ -876,10 +956,6 @@ msgstr "Sunucu Barındır"
msgid "Install games from ContentDB"
msgstr "ContentDB'den oyunlar yükle"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Ad"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Yeni"
@@ -888,10 +964,6 @@ 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_online.lua
-msgid "Password"
-msgstr "Parola"
-
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Oyunu Oyna"
@@ -925,10 +997,6 @@ msgid "Clear"
msgstr "Temizle"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "BaÄŸlan"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Yaratıcı kip"
@@ -938,10 +1006,6 @@ msgid "Damage / PvP"
msgstr "Hasar / SavaÅŸ (PvP)"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Sık Kullanılanı Sil"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Sık Kullanılanlar"
@@ -954,6 +1018,10 @@ msgid "Join Game"
msgstr "Oyuna Katıl"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -966,10 +1034,19 @@ msgid "Refresh"
msgstr "Yenile"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "Uzak port"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Sunucu Açıklaması"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1014,7 +1091,8 @@ msgid "Dynamic shadows"
msgstr "Dinamik gölgeler"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "Dinamik gölgeler: "
#: builtin/mainmenu/tab_settings.lua
@@ -1110,7 +1188,8 @@ msgid "Tone Mapping"
msgstr "Ton EÅŸleme"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "DokunuÅŸ eÅŸiÄŸi: (px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1118,7 +1197,8 @@ msgid "Trilinear Filter"
msgstr "Trilineer Filtre"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+#, fuzzy
+msgid "Very High"
msgstr "Çok Yüksek"
#: builtin/mainmenu/tab_settings.lua
@@ -1137,6 +1217,11 @@ msgstr "Dalgalanan Sıvılar"
msgid "Waving Plants"
msgstr "Dalgalanan Bitkiler"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "Bağlantı hatası (zaman aşımı?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Bağlantı zaman aşımına uğradı."
@@ -1272,7 +1357,8 @@ msgid "Camera update enabled"
msgstr "Kamera güncelleme etkin"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr "Blok sınırları gösterilemiyor ('basic_debug' ayrıcalığına ihtiyaç var)"
#: src/client/game.cpp
@@ -1402,6 +1488,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Sınırsız görüntüleme uzaklığı etkin"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "İstemci yaratılıyor..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Menüye Çık"
@@ -1906,29 +1997,6 @@ msgstr "Web sayfası açılamadı"
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!"
-
-#: src/gui/guiConfirmRegistration.cpp
-msgid "Register and Join"
-msgstr "Kaydol ve Katıl"
-
-#: 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 ""
-"Bu sunucuya \"%s\" adıyla ilk kez katılmak üzeresiniz.\n"
-"Devam ederseniz, kimlik bilgilerinizi kullanarak yeni bir hesap bu sunucuda "
-"oluÅŸturulur.\n"
-"Lütfen parolanızı tekrar yazın ve hesap oluşturmayı onaylamak için 'Kayıt Ol "
-"ve Katıl' düğmesini tıklayın veya iptal etmek için 'İptal'i tıklayın."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "İlerle"
@@ -1961,7 +2029,7 @@ msgstr "Blok sınırları"
msgid "Change camera"
msgstr "Kamera deÄŸiÅŸtir"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Sohbet"
@@ -2014,8 +2082,8 @@ msgid "Key already in use"
msgstr "Tuş zaten kullanımda"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "Tuş ayaları. (Eğer bu menü çalışmaz ise, minetest.conf 'tan kaldırın)"
+msgid "Keybindings."
+msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2086,10 +2154,6 @@ msgid "Change"
msgstr "DeÄŸiÅŸtir"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Parolayı Doğrula"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Yeni Parola"
@@ -2097,6 +2161,10 @@ msgstr "Yeni Parola"
msgid "Old Password"
msgstr "Eski Parola"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Parolalar eÅŸleÅŸmiyor!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Çıkış"
@@ -2110,12 +2178,6 @@ msgstr "Ses Kısık"
msgid "Sound Volume: %d%%"
msgstr "Ses Seviyesi: %%%d"
-#. ~ Imperative, as in "Enter/type in text".
-#. Don't forget the space.
-#: src/gui/modalMenu.cpp
-msgid "Enter "
-msgstr "Gir "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2123,6 +2185,16 @@ msgstr "Gir "
msgid "LANG_CODE"
msgstr "tr"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "Lütfen bir ad seçin!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2286,6 +2358,10 @@ msgstr ""
"Unutmayın ki interlaced kipi, gölgelendirmelerin etkin olmasını gerektirir."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2362,6 +2438,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Adjust the detected display density, used for scaling UI elements."
msgstr ""
+"Kullanıcı arayüzü öğelerini ölçeklemek için kullanılan algılanan görüntü "
+"yoğunluğunu ayarlayın."
#: src/settings_translation_file.cpp
#, c-format
@@ -2379,6 +2457,11 @@ msgstr ""
"için her zaman test edin) katı yüzenkara katmanı yaratır."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "Öge adını ekle"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "GeliÅŸmiÅŸ"
@@ -2397,7 +2480,8 @@ msgstr ""
"doğal gece ışığı üzerinde çok az etkisi vardır."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "Daima uçma ve hızlı"
#: src/settings_translation_file.cpp
@@ -2478,6 +2562,10 @@ msgstr ""
"Harita bloÄŸu (16 nod) cinsinden."
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "KendiliÄŸinden ileri tuÅŸu"
@@ -2518,10 +2606,6 @@ msgid "Base terrain height."
msgstr "Taban arazi yüksekliği."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "Temel"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Temel yetkiler"
@@ -2542,7 +2626,8 @@ msgid "Bind address"
msgstr "Bağlı adres"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Biyom API sıcaklık ve nem gürültü parametreleri"
#: src/settings_translation_file.cpp
@@ -2554,6 +2639,10 @@ msgid "Block send optimize distance"
msgstr "Blok gönderme iyileştirme uzaklığı"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "Kalın ve italik yazı tipi konumu"
@@ -2578,6 +2667,11 @@ msgid "Builtin"
msgstr "YerleÅŸik"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+msgstr "Kamera deÄŸiÅŸtir"
+
+#: 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"
@@ -2744,6 +2838,11 @@ msgid "Client side node lookup range restriction"
msgstr "İstemci tarafı nod arama aralığı kısıtlaması"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "İstemci modlama"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "Tırmanma hızı"
@@ -2860,6 +2959,11 @@ msgid "Console height"
msgstr "Konsol yüksekliği"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "Çevrim İçi İçerik Deposu"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "ContentDB: Kara Liste"
@@ -2898,8 +3002,10 @@ msgstr ""
"72 = 20dk, 360 = 4dk, 1 = 24saat, 0 = gündüz/gece/herşey değişmeden kalır."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "Sıvıdaki batma hızını denetler."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2974,12 +3080,12 @@ msgid "Debug log level"
msgstr "Hata ayıklama günlük düzeyi"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Ses alçaltma tuşu"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Harekete karşı sıvı direncini artırmak için bunu azaltın."
+msgid "Dec. volume key"
+msgstr "Ses alçaltma tuşu"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3139,6 +3245,11 @@ msgid "Desynchronize block animation"
msgstr "Blok animasyonlarını eşzamansız yap"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "Dekorasyonlar"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Kazma tuÅŸu"
@@ -3156,6 +3267,12 @@ msgstr "BoÅŸ parolalara izin verme"
#: src/settings_translation_file.cpp
msgid "Display Density Scaling Factor"
+msgstr "Ekran Yoğunluğu Ölçekleme Faktörü"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3238,6 +3355,10 @@ msgid "Enable joysticks"
msgstr "Joystick'leri etkinleÅŸtir"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "Mod kanalları desteğini etkinleştir."
@@ -3254,18 +3375,6 @@ msgid "Enable random user input (only used for testing)."
msgstr "Rastgele kullanıcı girişini etkinleştir (yalnızca test için)."
#: src/settings_translation_file.cpp
-msgid "Enable register confirmation"
-msgstr "Kayıt onayını etkinleştir"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Enable register confirmation when connecting to server.\n"
-"If disabled, new account will be registered automatically."
-msgstr ""
-"Sunucuya bağlanırken kayıt onayını etkinleştir.\n"
-"Devre dışı bırakılırsa, yeni hesap kendiliğinden kaydedilir."
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3274,6 +3383,10 @@ msgstr ""
"Farklı görünüm veya hız için devre dışı bırakın."
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3366,6 +3479,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "Vadi profili"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Motor profilleme veri yazdırma aralığı"
@@ -3391,6 +3509,10 @@ msgstr ""
"seviyesi oluşturur: katı bir yüzenkara katmanı için uygundur."
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "Odaklanmadığında veya duraklatıldığında FPS"
@@ -3479,8 +3601,9 @@ msgstr ""
"otomatik olarak etkinleÅŸtirilir."
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "Filtreleme"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "Düzgünleştirme:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3547,6 +3670,11 @@ msgid "Fog toggle key"
msgstr "Sis açma/kapama tuşu"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "Yazı tipi boyutu"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Öntanımlı kalın yazı tipi"
@@ -3713,6 +3841,19 @@ msgid "GUI scaling filter txr2img"
msgstr "Arayüz boyutlandırma filtresi txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Oyunlar"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "Genel geri çağrılar"
@@ -3749,6 +3890,16 @@ msgid "Graphics"
msgstr "Grafik"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "Grafik"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "Grafik"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "Yerçekimi"
@@ -3765,8 +3916,13 @@ msgid "HTTP mods"
msgstr "HTTP modları"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "HUD boyut çarpanı"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "Arayüz boyutlandırma"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -4025,8 +4181,10 @@ msgstr ""
"Dalgalanan sıvılar etkin kılınmalıdır."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"Sunucunun kullanılmayan harita bloklarını boşaltmadan önce ne kadar "
@@ -4034,6 +4192,13 @@ msgstr ""
"Daha yüksek değer daha düzgün olsa da daha çok RAM kullanır."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "Harekete karşı sıvı direncini artırmak için bunu azaltın."
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "Nehirlerin ne kadar geniş yapılacağı."
@@ -4107,6 +4272,15 @@ msgstr ""
"için kullanılır."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"Sunucuya bağlanırken kayıt onayını etkinleştir.\n"
+"Devre dışı bırakılırsa, yeni hesap kendiliğinden kaydedilir."
+
+#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
@@ -4135,7 +4309,10 @@ msgstr ""
"göre değiştirir."
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr "Etkinleştirilirse, yeni oyuncular boş bir parola ile katılamaz."
#: src/settings_translation_file.cpp
@@ -4188,10 +4365,6 @@ msgid "Ignore world errors"
msgstr "Dünya hatalarını yok say"
#: src/settings_translation_file.cpp
-msgid "In-Game"
-msgstr "Oyun içi"
-
-#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
"Oyun-içi sohbet konsolu arka plan saydamlığı (solukluk, 0 ile 255 arasında)."
@@ -4250,15 +4423,12 @@ msgid "Instrument the methods of entities on registration."
msgstr "Kayıt sırasında varlık yöntemlerini belgele."
#: src/settings_translation_file.cpp
-msgid "Instrumentation"
-msgstr "Belgeleme"
-
-#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr "Dünyadaki önemli değişiklikleri kaydetme aralığı, saniye cinsinden."
#: src/settings_translation_file.cpp
-msgid "Interval of sending time of day to clients."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "Günün saatini istemcilere gönderme aralığı."
#: src/settings_translation_file.cpp
@@ -5116,6 +5286,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr "10 saniyede bir X iletiden çok gönderen oyuncuları at."
@@ -5172,10 +5346,11 @@ msgid "Left key"
msgstr "Sol tuÅŸ"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"Sunucunun tık uzunluğu ve nesnelerin genellikle ağ üzerinden güncelleneceği\n"
"aralık."
@@ -5189,18 +5364,25 @@ msgstr ""
"Dalgalanan sıvılar etkin kılınmalı."
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+#, fuzzy
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr "Etkin Blok Değiştirici (ABM) yürütme döngüleri arasındaki süre"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "NodeTimer yürütme döngüleri arasındaki sürenin uzunluğunu"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "Etkin blok yönetimi döngüleri arasındaki süre"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5209,7 +5391,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"debug.txt'e yazılacak günlük düzeyi:\n"
"- <nothing> (günlük yok)\n"
@@ -5245,6 +5428,11 @@ msgid "Light curve low gradient"
msgstr "Işık eğrisi düşük gradyan"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Yumuşak Aydınlatma"
+
+#: 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"
@@ -5689,10 +5877,6 @@ msgid "Maximum users"
msgstr "Maksimum kullanıcı"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Menüler"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "Kafes önbelleği"
@@ -5741,6 +5925,20 @@ msgid "Mipmapping"
msgstr "Mip eÅŸleme"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "Profilci"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "Güvenlik"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "Mod kanalları"
@@ -5838,10 +6036,6 @@ msgid "Near plane"
msgstr "Yakın kırpma düzlemi"
#: src/settings_translation_file.cpp
-msgid "Network"
-msgstr "AÄŸ"
-
-#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
@@ -5850,6 +6044,11 @@ msgstr ""
"Bu değer ana menüden başlatırken geçersiz kılınır."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "AÄŸ"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "Yeni kullanıcıların bu parolayı girmesi gerekir."
@@ -5862,6 +6061,11 @@ msgid "Noclip key"
msgstr "Hayalet tuÅŸu"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Nod Vurgulama"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "Nod vurgulama"
@@ -5914,10 +6118,6 @@ msgstr ""
"arasında bir dengedir."
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Çevrim İçi İçerik Deposu"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "Opak sıvılar"
@@ -6037,10 +6237,6 @@ msgstr ""
"Bu, sunucuda \"uçma\" yetkisi gerektirir."
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Oyuncu adı"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "Oyuncu transfer uzaklığı"
@@ -6095,10 +6291,6 @@ msgid "Profiler toggle key"
msgstr "Profilciyi açma/kapama tuşu"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "Profilleme"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr "Prometheus dinleyici adresi"
@@ -6292,6 +6484,11 @@ msgstr ""
"ölçeklendiğinde bazı kenar piksellerde bulanıklığa neden olur."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Ekran:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "Ekran yüksekliği"
@@ -6322,6 +6519,11 @@ msgstr ""
"Öntanımlı kalite için 0 kullanın."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Ekran yakala"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "Deniz yatağı gürültüsü"
@@ -6335,10 +6537,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "Birlikte tünelleri belirleyen iki 3D gürültüden ikincisi."
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "Güvenlik"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Bakın: https://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6397,8 +6595,19 @@ msgstr ""
"18 = 4D \"Mandelbulb\" Julia seti."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Sunucu / Tek oyunculu"
+#, fuzzy
+msgid "Server"
+msgstr "Sunucu URL'si"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Sunucu adı"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Sunucu Açıklaması"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6425,10 +6634,20 @@ msgid "Server side occlusion culling"
msgstr "Sunucu tarafı oklüzyon ayırma"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Sunucu Portu"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "Sunucu liste URL'si"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "Sunucu liste URL'si"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Sunucu liste dosyası"
@@ -6441,14 +6660,18 @@ msgstr ""
"Bunu deÄŸiÅŸtirdikten sonra yeniden baÅŸlatmak gerekir."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
"İstemcilerin gönderdiği sohbet iletilerinin maksimum karakter uzunluğunu "
"ayarla."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
"Gölge gücünü ayarla.\n"
@@ -6460,7 +6683,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.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 "
@@ -6560,7 +6783,8 @@ msgstr ""
"Öntanımlı yazı tipinin gölge uzaklığı (piksel olarak). 0 ise, gölge çizilmez."
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+#, fuzzy
+msgid "Shadow strength gamma"
msgstr "Gölge gücü"
#: src/settings_translation_file.cpp
@@ -6800,6 +7024,11 @@ msgid "Temperature variation for biomes."
msgstr "Biyomlar için sıcaklık değişimi."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Ayarlar"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "Arazi alternatif gürültüsü"
@@ -7070,7 +7299,8 @@ msgid "Time speed"
msgstr "Zaman hızı"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
"İstemcinin kullanılmayan harita verilerini bellekten kaldırması için zaman "
"aşımı."
@@ -7100,10 +7330,19 @@ msgid "Touch screen threshold"
msgstr "Dokunmatik ekran eÅŸiÄŸi"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "Dokunmatik ekran eÅŸiÄŸi"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Ağaçlar gürültüsü"
@@ -7214,6 +7453,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "Dokuları boyutlandırırken trilineer filtreleme kullan."
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7496,6 +7739,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
"İstemciye hata ayıklama bilgisinin gösterilip gösterilmeyeceği (F5'e basmak "
@@ -7605,6 +7857,10 @@ msgid "Y-level of seabed."
msgstr "Deniz yatağının Y-seviyesi."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL dosya indirme zaman aşımı"
@@ -7652,6 +7908,9 @@ msgstr "cURL paralel sınırı"
#~ msgid "Back"
#~ msgstr "Geri"
+#~ msgid "Basic"
+#~ msgstr "Temel"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Tam ekran kipinde piksel başına bit (renk derinliği)."
@@ -7684,6 +7943,12 @@ msgstr "cURL paralel sınırı"
#~ msgid "Configure"
#~ msgstr "Yapılandır"
+#~ msgid "Connect"
+#~ msgstr "BaÄŸlan"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "Sıvıdaki batma hızını denetler."
+
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
#~ "Is a noise offset added to the 'mgv7_np_mountain' noise value."
@@ -7729,6 +7994,9 @@ msgstr "cURL paralel sınırı"
#~ "Dokuların örnekleme adımını tanımlar.\n"
#~ "Yüksek bir değer daha yumuşak normal eşlemeler verir."
+#~ msgid "Del. Favorite"
+#~ msgstr "Sık Kullanılanı Sil"
+
#~ msgid ""
#~ "Deprecated, define and locate cave liquids using biome definitions "
#~ "instead.\n"
@@ -7738,12 +8006,21 @@ msgstr "cURL paralel sınırı"
#~ "sıvılarını tanımlayın ve bulun.\n"
#~ "Büyük mağaralarda lav üst sınırının Y'si."
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "minetest.net'den , Minetest Game gibi, bir oyun indirin"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "minetest.net adresinden indirin"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "$1 indiriliyor ve kuruluyor, lütfen bekleyin..."
#~ msgid "Enable VBO"
#~ msgstr "VBO'yu etkinleÅŸtir"
+#~ msgid "Enable register confirmation"
+#~ msgstr "Kayıt onayını etkinleştir"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7772,6 +8049,9 @@ msgstr "cURL paralel sınırı"
#~ "Paralaks oklüzyon eşlemeyi etkinleştirir.\n"
#~ "Gölgelemelerin etkin olmasını gerektirir."
+#~ msgid "Enter "
+#~ msgstr "Gir "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7791,6 +8071,9 @@ msgstr "cURL paralel sınırı"
#~ msgid "Fallback font size"
#~ msgstr "Geri dönüş yazı tipi boyutu"
+#~ msgid "Filtering"
+#~ msgstr "Filtreleme"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Yüzenkara taban yükseklik gürültüsü"
@@ -7809,6 +8092,9 @@ msgstr "cURL paralel sınırı"
#~ msgid "Full screen BPP"
#~ msgstr "Tam ekran BPP"
+#~ msgid "Game"
+#~ msgstr "Oyun"
+
#~ msgid "Gamma"
#~ msgstr "Gama"
@@ -7818,15 +8104,29 @@ msgstr "cURL paralel sınırı"
#~ msgid "Generate normalmaps"
#~ msgstr "Normal eşlemeleri üret"
+#~ msgid "HUD scale factor"
+#~ msgstr "HUD boyut çarpanı"
+
#~ msgid "High-precision FPU"
#~ msgstr "Yüksek hassasiyetli FPU"
#~ msgid "IPv6 support."
#~ msgstr "IPv6 desteÄŸi."
+#~ msgid "In-Game"
+#~ msgstr "Oyun içi"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Kur: dosya: \"$1\""
+#~ msgid "Instrumentation"
+#~ msgstr "Belgeleme"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Tuş ayaları. (Eğer bu menü çalışmaz ise, minetest.conf 'tan kaldırın)"
+
#~ msgid "Lava depth"
#~ msgstr "Lav derinliÄŸi"
@@ -7847,6 +8147,9 @@ msgstr "cURL paralel sınırı"
#~ "DirectX'in LuaJIT ile çalışmasını sağlar. Sorunlara neden olursa devre "
#~ "dışı bırakın."
+#~ msgid "Menus"
+#~ msgstr "Menüler"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Radar kipinde mini harita, Yakınlaştırma x2"
@@ -7920,6 +8223,12 @@ msgstr "cURL paralel sınırı"
#~ msgid "Path to save screenshots at."
#~ msgstr "Ekran yakalamaların kaydedileceği konum."
+#~ msgid "Player name"
+#~ msgstr "Oyuncu adı"
+
+#~ msgid "Profiling"
+#~ msgstr "Profilleme"
+
#~ msgid "Projecting dungeons"
#~ msgstr "İzdüşüm zindanlar"
@@ -7932,6 +8241,9 @@ msgstr "cURL paralel sınırı"
#~ msgid "Select Package File:"
#~ msgstr "Paket Dosyası Seç:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Sunucu / Tek oyunculu"
+
#~ msgid ""
#~ "Set the shadow update time.\n"
#~ "Lower value means shadows and map updates faster, but it consume more "
@@ -8019,6 +8331,21 @@ msgstr "cURL paralel sınırı"
#~ msgid "Yes"
#~ msgstr "Evet"
+#, 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 ""
+#~ "Bu sunucuya \"%s\" adıyla ilk kez katılmak üzeresiniz.\n"
+#~ "Devam ederseniz, kimlik bilgilerinizi kullanarak yeni bir hesap bu "
+#~ "sunucuda oluÅŸturulur.\n"
+#~ "Lütfen parolanızı tekrar yazın ve hesap oluşturmayı onaylamak için 'Kayıt "
+#~ "Ol ve Katıl' düğmesini tıklayın veya iptal etmek için 'İptal'i tıklayın."
+
#~ msgid "You died."
#~ msgstr "Öldün."
diff --git a/po/tt/minetest.po b/po/tt/minetest.po
index 882032232..a755c05bd 100644
--- a/po/tt/minetest.po
+++ b/po/tt/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\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/"
@@ -117,6 +117,30 @@ msgid "The server has requested a reconnect:"
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr ""
@@ -129,6 +153,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr ""
@@ -136,14 +164,21 @@ msgstr ""
msgid "We support protocol versions between version $1 and $2."
msgstr ""
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Баш тарту"
@@ -278,7 +313,6 @@ msgid "Failed to download $1"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr ""
@@ -299,7 +333,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr ""
@@ -392,11 +425,7 @@ 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"
+msgid "Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -415,10 +444,6 @@ msgstr ""
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 ""
@@ -436,6 +461,14 @@ msgid "Increases humidity around rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr ""
@@ -535,10 +568,6 @@ 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 ""
@@ -568,6 +597,36 @@ msgstr ""
msgid "Delete World \"$1\"?"
msgstr ""
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr ""
@@ -598,6 +657,14 @@ msgstr ""
msgid "Browse"
msgstr ""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr ""
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
@@ -654,7 +721,7 @@ msgstr ""
msgid "Select file"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr ""
@@ -799,6 +866,10 @@ msgstr ""
msgid "Previous Core Developers"
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -867,10 +938,6 @@ msgstr ""
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 ""
@@ -879,10 +946,6 @@ msgstr ""
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 ""
@@ -916,10 +979,6 @@ msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr ""
@@ -929,10 +988,6 @@ msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr ""
@@ -945,6 +1000,10 @@ msgid "Join Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
@@ -957,10 +1016,18 @@ msgid "Refresh"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr ""
@@ -1005,7 +1072,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1101,7 +1168,7 @@ msgid "Tone Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1109,7 +1176,7 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1128,6 +1195,10 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr ""
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1261,7 +1332,7 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1365,6 +1436,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr ""
@@ -1869,24 +1945,6 @@ msgstr ""
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 ""
@@ -1919,7 +1977,7 @@ msgstr ""
msgid "Change camera"
msgstr ""
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr ""
@@ -1972,7 +2030,7 @@ msgid "Key already in use"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -2044,15 +2102,15 @@ msgid "Change"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
+msgid "New Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "New Password"
+msgid "Old Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Old Password"
+msgid "Passwords do not match!"
msgstr ""
#: src/gui/guiVolumeChange.cpp
@@ -2068,12 +2126,6 @@ msgstr ""
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).
@@ -2081,6 +2133,15 @@ msgstr ""
msgid "LANG_CODE"
msgstr ""
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr ""
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2206,6 +2267,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2287,6 +2352,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2300,7 +2369,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2369,6 +2438,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2409,10 +2482,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2433,7 +2502,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2445,6 +2514,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2469,6 +2542,10 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Camera"
+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"
@@ -2625,6 +2702,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2720,6 +2801,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2753,7 +2838,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2820,11 +2907,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2967,6 +3054,10 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -2987,6 +3078,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3056,6 +3153,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3072,19 +3173,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3158,6 +3253,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3176,6 +3275,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3253,7 +3356,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
+msgid "Filtering and Antialiasing"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3321,6 +3424,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3469,6 +3576,18 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamepads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3496,6 +3615,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3512,7 +3639,11 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3752,11 +3883,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3817,6 +3955,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3838,7 +3982,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3878,10 +4024,6 @@ 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 ""
@@ -3932,15 +4074,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4561,6 +4699,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4616,7 +4758,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4626,15 +4768,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4646,7 +4791,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4674,6 +4820,10 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lighting"
+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"
@@ -5058,10 +5208,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5110,6 +5256,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5196,16 +5354,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5218,6 +5376,10 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5255,10 +5417,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5352,10 +5510,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5402,10 +5556,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5574,6 +5724,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5601,19 +5755,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Seabed noise"
+msgid "Screenshots"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgid "Seabed noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of two 3D noises that together define tunnels."
+msgid "Second of 4 2D noises that together define hill/mountain range height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Security"
+msgid "Second of two 3D noises that together define tunnels."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5656,7 +5810,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
+msgid "Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5684,10 +5846,18 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5698,12 +5868,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5711,7 +5883,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5787,7 +5959,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5987,6 +6159,10 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6189,7 +6365,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6213,10 +6389,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6307,6 +6491,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6540,6 +6728,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6629,6 +6826,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
diff --git a/po/uk/minetest.po b/po/uk/minetest.po
index aa2928099..b6240e350 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: 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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-31 17:28+0000\n"
+"Last-Translator: Fixer <artem.brz@gmail.com>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/minetest/"
"minetest/uk/>\n"
"Language: uk\n"
@@ -13,7 +13,7 @@ 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.11-dev\n"
+"X-Generator: Weblate 4.14-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -33,7 +33,7 @@ msgstr "Ðеправильна команда: "
#: builtin/client/chatcommands.lua
msgid "Issued command: "
-msgstr "Проблемна команда: "
+msgstr "Введена команда: "
#: builtin/client/chatcommands.lua
msgid "List online players"
@@ -113,6 +113,30 @@ msgid "The server has requested a reconnect:"
msgstr "Сервер запроÑив перезʼєднаннÑ:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr "КлієнтÑькі моди"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "ВерÑÑ–Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ñƒ не Ñпівпадає. "
@@ -125,6 +149,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Сервер підтримує верÑÑ–Ñ— протоколу між $1 Ñ– $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Ми підтримуємо тільки протокол верÑÑ–Ñ— $1."
@@ -132,14 +160,21 @@ msgstr "Ми підтримуємо тільки протокол верÑÑ–Ñ— $
msgid "We support protocol versions between version $1 and $2."
msgstr "Ми підтримуємо протокол між верÑÑ–Ñми $1 Ñ– $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "СкаÑувати"
@@ -278,7 +313,6 @@ msgid "Failed to download $1"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Ігри"
@@ -299,7 +333,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr "УÑтановленнÑ: Ðепідтримуваний тип файлу або пошкоджений архів"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Моди"
@@ -392,12 +425,8 @@ msgid "Decorations"
msgstr "Декорації"
#: builtin/mainmenu/dlg_create_world.lua
-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"
+msgid "Development Test is meant for developers."
+msgstr "Увага: теÑтова розробка призначена Ð´Ð»Ñ Ñ€Ð¾Ð·Ñ€Ð¾Ð±Ð½Ð¸ÐºÑ–Ð²."
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -415,10 +444,6 @@ msgstr "Плаваючі земельні маÑиви в небі"
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 "Òенерувати нефрактальну міÑцевіÑть: океани Ñ– підземеллÑ"
@@ -436,6 +461,14 @@ msgid "Increases humidity around rivers"
msgstr "Підвищує вологіÑть навколо річок"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr "Ð’Ñтановити гру"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Озера"
@@ -537,10 +570,6 @@ 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 "Ðазва Ñвіту"
@@ -570,6 +599,36 @@ msgstr "pkgmgr: недійÑний шлÑÑ… \"$1\""
msgid "Delete World \"$1\"?"
msgstr "Видалити Ñвіт \"$1\"?"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Підтвердіть пароль"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr "ÐедоÑтупна назва"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Ðазва"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Пароль"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr "Паролі не збігаютьÑÑ"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr "ЗареєÑтруватиÑÑ"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "ПрийнÑти"
@@ -601,6 +660,14 @@ msgstr "< Ðазад до налаштувань"
msgid "Browse"
msgstr "ОглÑнути"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr "ВміÑÑ‚: Ігри"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr "ВміÑÑ‚: Моди"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Заборонено"
@@ -657,7 +724,7 @@ msgstr "Виберіть каталог"
msgid "Select file"
msgstr "Виберіть файл"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Показувати технічні назви"
@@ -807,6 +874,10 @@ msgstr "Попередні Ñпіврозробники"
msgid "Previous Core Developers"
msgstr "Попередні оÑновні розробники"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr "ДілитиÑÑ Ð´Ð°Ð½Ð¸Ð¼Ð¸ зневадженнÑ"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "ОглÑнути вміÑÑ‚ у мережі"
@@ -875,10 +946,6 @@ msgstr "Сервер"
msgid "Install games from ContentDB"
msgstr "Ð’Ñтановити ігри з ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Ðазва"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Ðовий"
@@ -887,10 +954,6 @@ msgstr "Ðовий"
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 "Грати гру"
@@ -924,10 +987,6 @@ msgid "Clear"
msgstr "ОчиÑтити"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "ЗʼєднатиÑÑ"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Творчий режим"
@@ -937,10 +996,6 @@ msgid "Damage / PvP"
msgstr "ÐŸÐ¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ / ГпГ"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Видалити зі закладок"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Відібрані"
@@ -953,6 +1008,10 @@ msgid "Join Game"
msgstr "ДолучитиÑÑ Ð´Ð¾ гри"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Пінґ"
@@ -965,10 +1024,18 @@ msgid "Refresh"
msgstr "Оновити"
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr "Видалити улюблений"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "ÐžÐ¿Ð¸Ñ Ñервера"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1013,8 +1080,8 @@ msgid "Dynamic shadows"
msgstr "Динамічні тіні"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
-msgstr "Динамічні тіні: "
+msgid "Dynamic shadows:"
+msgstr "Динамічні тіні:"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -1109,15 +1176,15 @@ msgid "Tone Mapping"
msgstr "Тоновий шейдер"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr "ЧутливіÑть дотику: (пкÑ)"
+msgid "Touch threshold (px):"
+msgstr "ЧутливіÑть дотику (пкÑ):"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
msgstr "Трилінійна фільтраціÑ"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1136,6 +1203,10 @@ msgstr "ХвилÑÑті Рідини"
msgid "Waving Plants"
msgstr "Коливати квіти"
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr "Ð—Ê¼Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·ÑƒÐ¿Ð¸Ð½ÐµÐ½Ð¾ (помилка протоколу?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð¹ÑˆÐ¾Ð²."
@@ -1271,7 +1342,7 @@ msgid "Camera update enabled"
msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ°Ð¼ÐµÑ€Ð¸ увімкнено"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1401,6 +1472,11 @@ msgid "Enabled unlimited viewing range"
msgstr "Ðеобмежена видиміÑть (повільно)"
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr "Помилка ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ»Ñ–Ñ”Ð½Ñ‚Ð°: %s"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Вихід у меню"
@@ -1905,29 +1981,6 @@ msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ вебÑторінку"
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 ""
-"Ви збираєтеÑÑ Ð²Ð¿ÐµÑ€ÑˆÐµ підключитиÑÑ Ð´Ð¾ Ñервера з іменем \"%s\". \n"
-"Якщо ви продовжите, буде Ñтворено новий ігровий профіль на даному Ñервері з "
-"вашим іменем/паролем.\n"
-"Будь-лаÑка введіть повторно ваш пароль Ñ– натиÑніть \"ЗареєÑтруватиÑÑ Ñ– увійти"
-"\", або \"СкаÑувати\", Ñкщо ви проти."
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Далі"
@@ -1960,7 +2013,7 @@ msgstr ""
msgid "Change camera"
msgstr "Змінити камеру"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "Чат"
@@ -2013,10 +2066,8 @@ msgid "Key already in use"
msgstr "Клавіша вже викориÑтовуєтьÑÑ"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
-"Комбінації клавіш. (Якщо це меню зламалоÑÑ, видаліть Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð· minetest."
-"conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2087,10 +2138,6 @@ msgid "Change"
msgstr "Змінити"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "Підтвердіть пароль"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "Ðовий пароль"
@@ -2098,6 +2145,10 @@ msgstr "Ðовий пароль"
msgid "Old Password"
msgstr "Старий пароль"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Паролі не збігаютьÑÑ!"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "Вихід"
@@ -2111,12 +2162,6 @@ msgstr "Звук вимкнено"
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 "Ввід "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2124,6 +2169,15 @@ msgstr "Ввід "
msgid "LANG_CODE"
msgstr "uk"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr "Будь-лаÑка оберіть інше імʼÑ!"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2139,8 +2193,8 @@ msgid ""
"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) ВикориÑтовувати віртуальний джойÑтик Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— кнопки \"Aux1\"."
-"\n"
+"(Android) ВикориÑтовувати віртуальний джойÑтик Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— кнопки "
+"\"Aux1\".\n"
"Якщо ввімкнено, віртуальний джойÑтик також натиÑне \"Aux1\", коли поза "
"межами головного кола."
@@ -2288,6 +2342,10 @@ msgstr ""
"Зверніть увагу що режим interlaced потребує Ð²Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ñ–Ð²."
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2384,6 +2442,10 @@ msgstr ""
"щоб бути певними) Ñтворює твердий шар плавучої землі."
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr "Ім'Ñ Ð°Ð´Ð¼Ñ–Ð½Ñ–Ñтратора"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Додатково"
@@ -2402,8 +2464,8 @@ msgstr ""
"воно мало впливає на природне нічне Ñвітло."
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
-msgstr "Завжди літає і швидко"
+msgid "Always fly fast"
+msgstr "Завжди літати швидко"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
@@ -2473,6 +2535,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "Клавіша автоматичного руху вперед"
@@ -2513,10 +2579,6 @@ msgid "Base terrain height."
msgstr "ВиÑота оÑновної поверхні."
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "ОÑнови"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "Стандартні права"
@@ -2537,7 +2599,7 @@ msgid "Bind address"
msgstr "Ð—Ð°ÐºÑ€Ñ–Ð¿Ð»ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2549,6 +2611,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "ШлÑÑ… до жирного Ñ– курÑивного шрифту"
@@ -2573,6 +2639,10 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Camera"
+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"
@@ -2729,6 +2799,11 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "Клієнт-моди"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2824,6 +2899,10 @@ msgid "Console height"
msgstr "ВиÑота конÑолі"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr "Репозиторій додатків"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2857,7 +2936,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2924,12 +3005,12 @@ msgid "Debug log level"
msgstr "Рівень журналу зневадженнÑ"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "Клавіша зменш. гучноÑті"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
+msgid "Dec. volume key"
+msgstr "Клавіша зменш. гучноÑті"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3073,6 +3154,10 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ€Ð¾Ð·Ñ€Ð¾Ð±Ð½Ð¸ÐºÑ–Ð²"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "Клавіша Копати"
@@ -3093,6 +3178,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Доменне ім'Ñ Ñервера, Ñке буде показуватиÑÑ Ñƒ ÑпиÑку Ñерверів."
@@ -3162,6 +3253,10 @@ msgid "Enable joysticks"
msgstr "Увімкнути джойÑтики"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3178,19 +3273,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3264,6 +3353,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3282,6 +3375,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "FPS, коли призупинено або поза фокуÑом"
@@ -3359,8 +3456,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "ФільтраціÑ"
+msgid "Filtering and Antialiasing"
+msgstr "Ð¤Ñ–Ð»ÑŒÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ– ЗгладжуваннÑ:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3427,6 +3524,10 @@ msgid "Fog toggle key"
msgstr "Клавіша Ð²Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ñ‚ÑƒÐ¼Ð°Ð½Ñƒ"
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr "Шрифт"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "Типовий грубий шрифт"
@@ -3575,6 +3676,18 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamepads"
+msgstr "Контролер"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3602,6 +3715,14 @@ msgid "Graphics"
msgstr "Графіка"
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr "Графічні ефекти"
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr "Графіка та Ðудіо"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "ГравітаціÑ"
@@ -3618,10 +3739,14 @@ msgid "HTTP mods"
msgstr "HTTP модифікації"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "HUD scaling"
+msgstr "МаÑштаб інтерфейÑу"
+
+#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr "Клавіша Ð²Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ HUD"
@@ -3858,11 +3983,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "Як широко робити ріки."
@@ -3923,6 +4055,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3944,7 +4082,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3984,10 +4124,6 @@ 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 ""
@@ -4038,15 +4174,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4751,6 +4883,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4806,7 +4942,7 @@ msgstr "Ліва клавіша"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4816,15 +4952,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4836,7 +4975,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4864,6 +5004,10 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lighting"
+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"
@@ -5248,10 +5392,6 @@ msgid "Maximum users"
msgstr "Ðайбільше кориÑтувачів"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "Меню"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5300,6 +5440,18 @@ msgid "Mipmapping"
msgstr "Mіп-текÑтуруваннÑ"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr "Безпека модів"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5386,16 +5538,16 @@ 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 "Networking"
+msgstr "Мережа"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5408,6 +5560,10 @@ msgid "Noclip key"
msgstr "Клавіша проходу крізь Ñтіни"
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr "ПідÑÐ²Ñ–Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ð»Ð¾ÐºÑ–Ð² Ñ– предметів"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5445,10 +5601,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "Репозиторій мережевого вміÑту"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5542,10 +5694,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "Ð†Ð¼Ê¼Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5592,10 +5740,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5764,6 +5908,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr "Екран"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "ВиÑота екрана"
@@ -5791,6 +5939,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Screenshots"
+msgstr "Знімки екрана"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5803,10 +5955,6 @@ 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 ""
@@ -5846,8 +5994,17 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "Сервер / Одиночна гра"
+msgid "Server"
+msgstr "Сервер"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "Геймплей Сервера"
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
+msgstr "Безпека Сервера"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5874,10 +6031,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "ШвидкіÑть Сервера/Env"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "ÐдреÑа ÑпиÑку Ñерверів"
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr "СпиÑок Ñерверів Ñ– ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð”Ð½Ñ"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "Файл ÑпиÑку Ñерверів"
@@ -5890,12 +6056,14 @@ msgstr ""
"Потрібен перезапуÑк піÑÐ»Ñ Ñ†Ñ–Ñ”Ñ— зміни."
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5903,7 +6071,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5979,7 +6147,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6181,6 +6349,10 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr "ТимчаÑові ÐалаштуваннÑ"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6383,7 +6555,7 @@ msgid "Time speed"
msgstr "ШвидкіÑть чаÑу"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6407,10 +6579,18 @@ msgid "Touch screen threshold"
msgstr "Межа чутливоÑті дотику"
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr "СенÑорний екран"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Шум дерев"
@@ -6501,6 +6681,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6736,6 +6920,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6825,6 +7018,10 @@ msgid "Y-level of seabed."
msgstr "Y-Рівень морÑького дна."
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
@@ -6858,6 +7055,9 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "Ðазад"
+#~ msgid "Basic"
+#~ msgstr "ОÑнови"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "Бітів на пікÑель (глибина кольору) в повноекранному режимі."
@@ -6873,6 +7073,9 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Ðалаштувати"
+#~ msgid "Connect"
+#~ msgstr "ЗʼєднатиÑÑ"
+
#~ msgid "Content Store"
#~ msgstr "Додатки"
@@ -6882,12 +7085,30 @@ msgstr ""
#~ msgid "Damage enabled"
#~ msgstr "Ð£ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð²Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾"
+#~ msgid "Del. Favorite"
+#~ msgstr "Видалити зі закладок"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "Завантажте гру, наприклад, Minetest Game з minetest.net"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Завантажте з minetest.net"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ– вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ $1, зачекайте..."
#~ msgid "Enable VBO"
#~ msgstr "Увімкнути VBO"
+#~ msgid "Enter "
+#~ msgstr "Ввід "
+
+#~ msgid "Filtering"
+#~ msgstr "ФільтраціÑ"
+
+#~ msgid "Game"
+#~ msgstr "Гра"
+
#~ msgid "Generate Normal Maps"
#~ msgstr "Генерувати мапи нормалів"
@@ -6897,9 +7118,18 @@ msgstr ""
#~ msgid "IPv6 support."
#~ msgstr "Підтримка IPv6."
+#~ msgid "In-Game"
+#~ msgstr "У грі"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "Ð’ÑтановленнÑ: файл: \"$1\""
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr ""
+#~ "Комбінації клавіш. (Якщо це меню зламалоÑÑ, видаліть Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð· "
+#~ "minetest.conf)"
+
#~ msgid "Lava depth"
#~ msgstr "Глибина лави"
@@ -6909,6 +7139,9 @@ msgstr ""
#~ msgid "Main menu style"
#~ msgstr "Стиль головного меню"
+#~ msgid "Menus"
+#~ msgstr "Меню"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Мінімапа в режимі радар. ÐÐ°Ð±Ð»Ð¸Ð¶ÐµÐ½Ð½Ñ Ñ…2"
@@ -6942,6 +7175,9 @@ msgstr ""
#~ msgid "Parallax occlusion scale"
#~ msgstr "Ступінь паралакÑової оклюзії"
+#~ msgid "Player name"
+#~ msgstr "Ð†Ð¼Ê¼Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ"
+
#~ msgid "PvP enabled"
#~ msgstr "Бої увімкнено"
@@ -6951,6 +7187,9 @@ msgstr ""
#~ msgid "Select Package File:"
#~ msgstr "Виберіть файл пакунку:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "Сервер / Одиночна гра"
+
#~ msgid "Special"
#~ msgstr "Спеціальна"
@@ -6972,6 +7211,21 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "Так"
+#, 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 ""
+#~ "Ви збираєтеÑÑ Ð²Ð¿ÐµÑ€ÑˆÐµ підключитиÑÑ Ð´Ð¾ Ñервера з іменем \"%s\". \n"
+#~ "Якщо ви продовжите, буде Ñтворено новий ігровий профіль на даному Ñервері "
+#~ "з вашим іменем/паролем.\n"
+#~ "Будь-лаÑка введіть повторно ваш пароль Ñ– натиÑніть \"ЗареєÑтруватиÑÑ Ñ– "
+#~ "увійти\", або \"СкаÑувати\", Ñкщо ви проти."
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "Ви загинули"
diff --git a/po/vi/minetest.po b/po/vi/minetest.po
index 4f6f41eb0..aaaf891bf 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: 2022-01-25 23:19+0100\n"
-"PO-Revision-Date: 2022-01-04 06:53+0000\n"
-"Last-Translator: IAmOlive <nhathungtran2011@gmail.com>\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-07-31 17:28+0000\n"
+"Last-Translator: Hùng Nguyễn <www.thuphan@gmail.com>\n"
"Language-Team: Vietnamese <https://hosted.weblate.org/projects/minetest/"
"minetest/vi/>\n"
"Language: vi\n"
@@ -12,7 +12,7 @@ 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.10.1\n"
+"X-Generator: Weblate 4.14-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -36,11 +36,11 @@ 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"
+msgstr "Liệt kê ngưá»i chÆ¡i Ä‘ang trá»±c tuyến"
#: builtin/client/chatcommands.lua
msgid "Online players: "
-msgstr "Những ngưá»i Ä‘ang chÆ¡i trá»±c tuyến: "
+msgstr "Ngưá»i chÆ¡i Ä‘ang trá»±c tuyến: "
#: builtin/client/chatcommands.lua
msgid "The out chat queue is now empty."
@@ -48,7 +48,7 @@ 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."
+msgstr "Lệnh này đã bị cấm bởi máy chủ."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -114,6 +114,35 @@ msgid "The server has requested a reconnect:"
msgstr "Máy chủ đã yêu cầu kết nối lại:"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr "Phiên bản mới $1 hiện có sẵn"
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "Mod đã chá»n"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+"Phiên bản đã cài đặt: $1\n"
+"Phiên bản mới: $2\n"
+"Truy cập $3 để biết cách tải phiên bản mới nhất với các tính năng mới và bản "
+"sá»­a lá»—i."
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr "Äể sau"
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr "Không bao giá»"
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "Phiên bản giao thức không khớp. "
@@ -126,6 +155,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "Máy chủ hỗ trợ các phiên bản giao thức trong khoảng từ $1 đến $2. "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr "Truy cập website"
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "Chúng tôi chỉ hỗ trợ phiên bản giao thức $1."
@@ -133,14 +166,21 @@ msgstr "Chúng tôi chỉ hỗ trợ phiên bản giao thức $1."
msgid "We support protocol versions between version $1 and $2."
msgstr "Chúng tôi hỗ trợ các phiên bản giao thức giữa phiên bản $1 đến $2."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr "(Äã kích hoạt, có lá»—i)"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "Há»§y bá»"
@@ -155,7 +195,7 @@ msgstr "Vô hiệu hóa tất cả"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "Vô hiệu hóa gói mod"
+msgstr "Vô hiệu hóa modpack"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
@@ -170,8 +210,8 @@ 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ự Latinh; chữ số và ký tự \"_\"."
+"Không thể kích hoạt mod \"$1\" vì chứa các ký tự không được phép. Các ký tự "
+"được phép bao gồm chữ cái Latin, chữ số và ký tự \"_\"."
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
@@ -183,7 +223,7 @@ msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr "Không có phần phụ thuộc bắt buộc nào"
+msgstr "Không có phần phụ thuá»™c (tùy chá»n) nào"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
@@ -191,11 +231,11 @@ msgstr "Không có mô tả trò chơi được cung cấp."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr "Không có phần phụ thuộc khó nào"
+msgstr "Không có phần phụ thuộc bắt buộc nào"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "Không có mô tả mod được cung cấp."
+msgstr "Không có mô tả modpack được cung cấp."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
@@ -208,7 +248,7 @@ 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
msgid "Save"
-msgstr "Tiết kiệm"
+msgstr "Lưu"
#: builtin/mainmenu/dlg_config_world.lua
msgid "World:"
@@ -220,7 +260,7 @@ msgstr "đã kích hoạt"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr "Äã có \"$1\". Bạn có muốn ghi đè nó không?"
+msgstr "\"$1\" đã tồn tại. Bạn có muốn ghi đè nó không?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
@@ -235,8 +275,8 @@ msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
-"$1 đang cài đặt,\n"
-"$2 đã được xếp vào hàng đợi"
+"$1 đang tải xuống,\n"
+"$2 đã thêm vào hàng chá»"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 downloading..."
@@ -244,11 +284,11 @@ msgstr "Äang tải xuống $1..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr "Không thể tìm thấy phần phụ thuộc $1 (cần thiết)."
+msgstr "Không tìm thấy phần phụ thuộc cần cho $1."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr "$1 sẽ được cài, phần phụ thuộc $2 sẽ được bỠqua."
+msgstr "$1 sẽ được cài đặt, phần phụ thuộc $2 sẽ bị bỠqua."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
@@ -256,7 +296,7 @@ msgstr "Tất cả các gói"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Already installed"
-msgstr "Äã được cài"
+msgstr "Äã được cài đặt"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
@@ -268,7 +308,7 @@ msgstr "Trò chơi cơ bản:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
-msgstr "ContentDB không có sẵn khi Minetest được cài mà không có cURL"
+msgstr "ContentDB không có sẵn khi Minetest được biên dịch mà không có cURL"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Downloading..."
@@ -276,10 +316,9 @@ msgstr "Äang tải xuống..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr "Không tải xuống được $1"
+msgstr "Äã xảy ra lá»—i khi tải xuống $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "Trò chơi"
@@ -293,14 +332,13 @@ msgstr "Cài đặt $1"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install missing dependencies"
-msgstr "Cài phần phụ thuộc bị thiếu"
+msgstr "Cài đặt 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
msgid "Mods"
msgstr "Mod"
@@ -330,11 +368,11 @@ 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 "Äã xếp vào hàng đợi"
+msgstr "Äã thêm vào hàng chá»"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
-msgstr "Gói cấu hình khối"
+msgstr "Gói kết cấu"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
@@ -354,7 +392,7 @@ 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 "Thế giới \"$1\" đã tồn tại"
+msgstr "Thế giới với tên \"$1\" đã tồn tại"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Additional terrain"
@@ -370,15 +408,15 @@ msgstr "Äá»™ cao khô ráo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biome blending"
-msgstr "Các khu vá»±c sinh há»c Ä‘ang trá»™n lại vá»›i nhau"
+msgstr "Pha trộn quần xã"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biomes"
-msgstr "Khu sinh há»c"
+msgstr "Quần xã"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caverns"
-msgstr "Hang động"
+msgstr "Hang động lớn"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caves"
@@ -393,13 +431,9 @@ msgid "Decorations"
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 "Tải xuống một trò chơi từ minetest.net"
+#, fuzzy
+msgid "Development Test is meant for developers."
+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 "Dungeons"
@@ -415,11 +449,7 @@ msgstr "Vùng đất lÆ¡ lá»­ng trên trá»i"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-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 "Trò chơi"
+msgstr "Vùng đất lơ lửng (thử nghiệm)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
@@ -438,6 +468,14 @@ msgid "Increases humidity around rivers"
msgstr "Tăng độ ẩm xung quanh sông"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr "Cài đặt một trò chơi"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr "Cài đặt một trò chơi khác"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "Hồ nước"
@@ -447,13 +485,15 @@ 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"
-msgstr ""
+msgstr "Thế hệ bản đồ"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+#, fuzzy
msgid "Mapgen flags"
msgstr "Cá» cá»§a Mapgen"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Mapgen-specific flags"
msgstr "CỠcụ thể của Mapgen"
@@ -492,11 +532,11 @@ msgstr "Sông theo mực nước biển"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
-msgstr ""
+msgstr "Mã khởi tạo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
-msgstr "Chuyển đổi suôn sẻ giữa các khu sinh há»c"
+msgstr "Chuyển đổi mượt mà giữa các quần xã"
#: builtin/mainmenu/dlg_create_world.lua
msgid ""
@@ -539,10 +579,6 @@ msgid "Very large caverns deep in the underground"
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 "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 "Tên thế giới"
@@ -562,7 +598,7 @@ msgstr "Xóa"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "pkgmgr: không xóa được \"$1\""
+msgstr "pkgmgr: đã xảy ra lỗi khi xóa \"$1\""
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
@@ -570,7 +606,37 @@ msgstr "pkgmgr: đưá»ng dẫn \"$1\" không hợp lệ"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr "Xóa thế giới \"$ 1\"?"
+msgstr "Xóa thế giới \"$1\"?"
+
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Xác nhận mật khẩu"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr "Äang tham gia $1"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr "Thiếu tên"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "Tên"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "Mật khẩu"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr "Mật khẩu không khớp"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr "Äăng kí"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
@@ -585,8 +651,8 @@ 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."
+"Modpack 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)"
@@ -594,7 +660,7 @@ 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 "Âm thanh 2D"
+msgstr "Nhiá»…u 2D"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
@@ -604,9 +670,17 @@ msgstr "< VỠtrang Cài đặt"
msgid "Browse"
msgstr "Duyệt"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr "Nội dung: Trò chơi"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr "Ná»™i dung: Mod"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
-msgstr ""
+msgstr "Äã vô hiệu"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Edit"
@@ -614,7 +688,7 @@ msgstr "Chỉnh sửa"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
-msgstr ""
+msgstr "Äã kích hoạt"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Lacunarity"
@@ -625,8 +699,9 @@ msgid "Octaves"
msgstr "Quãng tám"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+#, fuzzy
msgid "Offset"
-msgstr ""
+msgstr "Äá»™ bù"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Persistence"
@@ -660,7 +735,7 @@ msgstr "Chá»n thư mục"
msgid "Select file"
msgstr "Chá»n tệp"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "Hiển thị tên kỹ thuật"
@@ -674,7 +749,7 @@ msgstr "Giá trị không được lớn hơn $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
-msgstr ""
+msgstr "X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X spread"
@@ -682,7 +757,7 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y"
-msgstr ""
+msgstr "Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y spread"
@@ -690,7 +765,7 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z"
-msgstr ""
+msgstr "Z"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z spread"
@@ -721,15 +796,15 @@ msgstr "Ná»›i lá»ng"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
-msgstr "$1 (đã bật)"
+msgstr "$1 (đã kích hoạt)"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
-msgstr ""
+msgstr "$1 mod"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "Không cài đặt được $1 đến $2"
+msgstr "Äã xảy ra lá»—i khi cài đặt $1 đến $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
@@ -737,15 +812,15 @@ 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 "Cài đặt mod: Không thể tìm thấy tên thư mục phù hợp cho gói mod $1"
+msgstr "Cài đặt mod: Không thể tìm thấy tên thư mục phù hợp cho modpack $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr "Không tìm thấy một mod hoặc gói mod hợp lệ"
+msgstr "Không thể tìm thấy một mod hoặc modpack hợp lệ"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
-msgstr "Không thể cài đặt $1 dưới dạng gói kết cấu địa hình"
+msgstr "Không thể cài đặt $1 dưới dạng gói kết cấu"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
@@ -757,7 +832,7 @@ 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 "Không thể cài đặt gói mod dưới dạng $1"
+msgstr "Không thể cài đặt modpack dưới dạng $1"
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
msgid "Loading..."
@@ -765,7 +840,7 @@ msgstr "Äang tải..."
#: builtin/mainmenu/serverlistmgr.lua
msgid "Public server list is disabled"
-msgstr "Danh sách máy chủ công cộng bị tắt"
+msgstr "Danh sách máy chủ công cộng đã bị vô hiệu"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
@@ -799,7 +874,7 @@ msgid ""
"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."
+"và các gói kết cấu trong trình quản lý tệp."
#: builtin/mainmenu/tab_about.lua
msgid "Previous Contributors"
@@ -809,6 +884,10 @@ msgstr "Những ngưá»i đóng góp trước đây"
msgid "Previous Core Developers"
msgstr "Các nhà phát triển cốt lõi trước đây"
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr "Chia sẻ nhật kí gỡ lỗi"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Duyệt nội dung trực tuyến"
@@ -819,7 +898,7 @@ msgstr "Ná»™i dung"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
-msgstr "Tắt tất cả gói kết cấu"
+msgstr "Vô hiệu gói kết cấu"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
@@ -847,7 +926,7 @@ msgstr "Gỡ cài đặt gói"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
-msgstr "Dùng gói cấu hình này"
+msgstr "Dùng gói kết cấu này"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
@@ -877,21 +956,13 @@ msgstr "Lưu trữ máy chủ"
msgid "Install games from ContentDB"
msgstr "Cài đặt trò chơi từ ContentDB"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "Tên"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "Má»›i"
#: builtin/mainmenu/tab_local.lua
msgid "No world created or selected!"
-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_online.lua
-msgid "Password"
-msgstr "Mật khẩu"
+msgstr "Không có thế giá»›i nào được tạo hoặc được chá»n."
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -903,11 +974,11 @@ msgstr "Cổng"
#: builtin/mainmenu/tab_local.lua
msgid "Select Mods"
-msgstr "Mod đã chá»n"
+msgstr "Chá»n Mod"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
-msgstr "Thế giá»›i đã chá»n:"
+msgstr "Chá»n thế giá»›i:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
@@ -922,15 +993,10 @@ 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 "Kết nối"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "Chế độ sáng tạo"
@@ -940,10 +1006,6 @@ msgid "Damage / PvP"
msgstr "Sát thương / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "Xóa yêu thích"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "Yêu thích"
@@ -956,8 +1018,12 @@ msgid "Join Game"
msgstr "Tham gia trò chơi"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr "Äăng nhập"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
-msgstr ""
+msgstr "Ping"
#: builtin/mainmenu/tab_online.lua
msgid "Public Servers"
@@ -968,24 +1034,32 @@ msgid "Refresh"
msgstr "Làm mới"
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr "Xóa yêu thích"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "Mô tả Máy chủ"
#: builtin/mainmenu/tab_settings.lua
-msgid "2x"
+msgid "(game support required)"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "3D Clouds"
-msgstr "Mây 3D"
+msgstr "Mây dạng 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"
@@ -993,7 +1067,7 @@ msgstr "Tất cả cài đặt"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
-msgstr ""
+msgstr "Khử răng cưa:"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
@@ -1009,19 +1083,19 @@ msgstr "Thay đổi khóa"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr "Kính đã kết nối"
+msgstr "Kính kết nối với nhau"
#: 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: "
+msgid "Dynamic shadows:"
+msgstr "Bóng kiểu động lá»±c há»c:"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
-msgstr "Lá lạ mắt"
+msgstr "Lá đẹp"
#: builtin/mainmenu/tab_settings.lua
msgid "High"
@@ -1037,21 +1111,19 @@ msgstr "Trung bình"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr ""
+msgstr "Mipmap"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Mipmap + Aniso. Filter"
-msgstr "Mipmap + Bá»™ lá»c Aniso."
+msgstr "Mipmap + Bá»™ lá»c bất đẳng hướng"
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr "Không bá»™ lá»c"
+msgstr "Không dùng bá»™ lá»c"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "No Mipmap"
-msgstr "Không Mipmap"
+msgstr "Không dùng Mipmap"
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
@@ -1065,7 +1137,7 @@ msgstr "Phác thảo node"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
-msgstr ""
+msgstr "Không"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
@@ -1076,9 +1148,8 @@ msgid "Opaque Water"
msgstr "Nước đục"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Particles"
-msgstr "Vật rất nhá»"
+msgstr "Hạt hiệu ứng"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
@@ -1090,15 +1161,15 @@ msgstr "Cài đặt"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
-msgstr "Trình tạo bóng"
+msgstr "Trình đổ bóng"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (experimental)"
-msgstr "Trình tạo bóng (đang trong thử nghiệm)"
+msgstr "Trình đổ bóng (thử nghiệm)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr "Trình tạo bóng (không tồn tại)"
+msgstr "Trình đổ bóng (không tồn tại)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
@@ -1110,22 +1181,22 @@ msgstr "Ãnh sáng mịn"
#: builtin/mainmenu/tab_settings.lua
msgid "Texturing:"
-msgstr "Cấu hình địa hình:"
+msgstr "Kết cấu:"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
-msgstr ""
+msgstr "Tông màu"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
-msgstr ""
+msgid "Touch threshold (px):"
+msgstr "Ngưỡng chạm (px):"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
msgstr "Bá»™ lá»c tam song"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr "Cá»±c cao"
#: builtin/mainmenu/tab_settings.lua
@@ -1134,19 +1205,23 @@ msgstr "Cực thấp"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr "Lá sóng"
+msgstr "Lá đung đưa"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Liquids"
-msgstr "Nước chuyển động như sóng"
+msgstr "Sóng"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr "Sinh vật chuyển động như sóng"
+msgstr "Thực vật đung đưa"
+
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr "Lỗi kết nối (vấn đỠvới giao thức?)."
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
-msgstr "Kết nối quá hạn."
+msgstr "Hết thá»i gian chá» kết nối."
#: src/client/client.cpp
msgid "Done!"
@@ -1164,11 +1239,11 @@ msgstr "Äang khởi tạo các node..."
#: src/client/client.cpp
msgid "Loading textures..."
-msgstr "Äang tải cấu hình địa hình..."
+msgstr "Äang tải kết cấu..."
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-msgstr "Äang xây dá»±ng lại trình tạo bóng..."
+msgstr "Äang xây dá»±ng lại trình đổ bóng..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
@@ -1191,7 +1266,7 @@ msgstr "Màn hình chính"
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."
+"có gì để thực hiên."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
@@ -1199,7 +1274,7 @@ msgstr "Tên ngưá»i chÆ¡i quá dài."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr "Xin vui lòng chá»n má»™t tên ngưá»i chÆ¡i!"
+msgstr "Vui lòng chá»n má»™t tên!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
@@ -1284,8 +1359,8 @@ msgid "Camera update enabled"
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')"
+msgid "Can't show block bounds (disabled by mod or game)"
+msgstr "Không thể hiển thị ranh giới khối (bị tắt bởi mod hoặc trò chơi)"
#: src/client/game.cpp
msgid "Change Password"
@@ -1304,8 +1379,9 @@ msgid "Client disconnected"
msgstr "Máy khách đã ngắt kết nối"
#: src/client/game.cpp
+#, fuzzy
msgid "Client side scripting is disabled"
-msgstr "Lập trình phía máy khách đã tắt"
+msgstr "Chạy kịch bản phía máy khách đã tắt"
#: src/client/game.cpp
msgid "Connecting to server..."
@@ -1339,17 +1415,17 @@ msgid ""
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: lùi xuống\n"
+"- %s: sang trái\n"
+"- %s: sang phải\n"
+"- %s: nhảy / 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: đặt khối / sử dụng\n"
+"- %s: đi rón rén / leo xuống\n"
+"- %s: thả vật phẩm\n"
+"- %s: túi đồ\n"
+"- Di chuột: xoay / nhìn\n"
+"- Lăn chuá»™t: chá»n vật phẩm\n"
"- %s: trò chuyện\n"
#: src/client/game.cpp
@@ -1378,6 +1454,7 @@ msgid "Debug info, profiler graph, and wireframe hidden"
msgstr "Thông tin gỡ lỗi, biểu đồ hồ sơ và khung dây đã ẩn"
#: src/client/game.cpp
+#, fuzzy
msgid ""
"Default Controls:\n"
"No menu visible:\n"
@@ -1393,14 +1470,14 @@ msgid ""
" --> 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"
+"Khi menu không 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"
+"- nhấn đúp: đặt khối / 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"
+"Khi Menu / Túi đồ 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"
+"- chạm ngăn xếp, chạm ô:\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"
@@ -1414,12 +1491,17 @@ msgid "Enabled unlimited viewing range"
msgstr "Äã bật phạm vi nhìn không giá»›i hạn"
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr "Äã xảy ra lá»—i khi tạo máy khách: %s"
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "Thoát ra màn hình chính"
#: src/client/game.cpp
msgid "Exit to OS"
-msgstr "Tắt Minetest"
+msgstr "Thoát Minetest"
#: src/client/game.cpp
msgid "Fast mode disabled"
@@ -1467,7 +1549,7 @@ msgstr "Äang tải máy chá»§"
#: src/client/game.cpp
msgid "Item definitions..."
-msgstr ""
+msgstr "Äịnh nghÄ©a vật phẩm..."
#: src/client/game.cpp
msgid "KiB/s"
@@ -1479,15 +1561,15 @@ msgstr ""
#: src/client/game.cpp
msgid "MiB/s"
-msgstr ""
+msgstr "MiB/s"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr ""
+msgstr "Minimap đã bị vô hiệu bởi trò chơi hoặc mod"
#: src/client/game.cpp
msgid "Multiplayer"
-msgstr ""
+msgstr "Chơi mạng"
#: src/client/game.cpp
msgid "Noclip mode disabled"
@@ -1507,11 +1589,11 @@ msgstr ""
#: src/client/game.cpp
msgid "Off"
-msgstr ""
+msgstr "Tắt"
#: src/client/game.cpp
msgid "On"
-msgstr ""
+msgstr "Bật"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
@@ -1523,53 +1605,53 @@ msgstr ""
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr ""
+msgstr "Biểu đồ hồ sơ đã hiện"
#: src/client/game.cpp
msgid "Remote server"
-msgstr ""
+msgstr "Máy chủ từ xa"
#: src/client/game.cpp
msgid "Resolving address..."
-msgstr ""
+msgstr "Äang giải mã địa chỉ..."
#: src/client/game.cpp
msgid "Shutting down..."
-msgstr ""
+msgstr "Äang thoát..."
#: src/client/game.cpp
msgid "Singleplayer"
-msgstr ""
+msgstr "Chơi đơn"
#: src/client/game.cpp
msgid "Sound Volume"
-msgstr ""
+msgstr "Âm lượng"
#: src/client/game.cpp
msgid "Sound muted"
-msgstr ""
+msgstr "Äã tắt tiếng"
#: src/client/game.cpp
msgid "Sound system is disabled"
-msgstr ""
+msgstr "Hệ thống âm thanh đã bị vô hiệu"
#: src/client/game.cpp
msgid "Sound system is not supported on this build"
-msgstr ""
+msgstr "Hệ thống âm thanh không được hỗ trợ trong bản dựng này"
#: src/client/game.cpp
msgid "Sound unmuted"
-msgstr ""
+msgstr "Äã bật tiếng"
#: src/client/game.cpp
#, c-format
msgid "The server is probably running a different version of %s."
-msgstr ""
+msgstr "Có vẻ như máy chủ đang chạy một phiên bản khác của %s."
#: src/client/game.cpp
#, c-format
msgid "Unable to connect to %s because IPv6 is disabled"
-msgstr ""
+msgstr "Không thể kết nối đến %s vì IPv6 đã bị vô hiệu"
#: src/client/game.cpp
#, c-format
@@ -1579,99 +1661,99 @@ msgstr ""
#: src/client/game.cpp
#, c-format
msgid "Viewing range changed to %d"
-msgstr ""
+msgstr "Phạm vi nhìn được đặt thành %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at maximum: %d"
-msgstr ""
+msgstr "Phạm vi nhìn đang ở mức tối đa: %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at minimum: %d"
-msgstr ""
+msgstr "Phạm vi nhìn đang ở mức tối thiểu: %d"
#: src/client/game.cpp
#, c-format
msgid "Volume changed to %d%%"
-msgstr ""
+msgstr "Âm lượng được đặt thành %d%%"
#: src/client/game.cpp
msgid "Wireframe shown"
-msgstr ""
+msgstr "Hiện khung dây"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr ""
+msgstr "Thu phóng đã bị vô hiệu bởi trò chơi hoặc mod"
#: src/client/game.cpp
msgid "ok"
-msgstr ""
+msgstr "OK"
#: src/client/gameui.cpp
msgid "Chat hidden"
-msgstr ""
+msgstr "Trò chuyện đã bị ẩn"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr ""
+msgstr "Trò chuyện đã được hiển thị"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr ""
+msgstr "HUD đã bị ẩn"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr ""
+msgstr "HUD đã được hiển thị"
#: src/client/gameui.cpp
msgid "Profiler hidden"
-msgstr ""
+msgstr "Hồ sơ đã bị ẩn"
#: src/client/gameui.cpp
#, c-format
msgid "Profiler shown (page %d of %d)"
-msgstr ""
+msgstr "Hồ sơ đã được hiển thị (trang thứ %d trên %d)"
#: src/client/keycode.cpp
msgid "Apps"
-msgstr ""
+msgstr "Ứng dụng"
#: src/client/keycode.cpp
msgid "Backspace"
-msgstr ""
+msgstr "Backspace"
#: src/client/keycode.cpp
msgid "Caps Lock"
-msgstr ""
+msgstr "Caps Lock"
#: src/client/keycode.cpp
msgid "Control"
-msgstr ""
+msgstr "Control"
#: src/client/keycode.cpp
msgid "Down"
-msgstr ""
+msgstr "Xuống"
#: src/client/keycode.cpp
msgid "End"
-msgstr ""
+msgstr "End"
#: src/client/keycode.cpp
msgid "Erase EOF"
-msgstr ""
+msgstr "Xóa bỠEOF"
#: src/client/keycode.cpp
msgid "Execute"
-msgstr ""
+msgstr "Thá»±c thi"
#: src/client/keycode.cpp
msgid "Help"
-msgstr ""
+msgstr "Trợ giúp"
#: src/client/keycode.cpp
msgid "Home"
-msgstr ""
+msgstr "Trang chá»§"
#: src/client/keycode.cpp
msgid "IME Accept"
@@ -1695,104 +1777,104 @@ msgstr ""
#: src/client/keycode.cpp
msgid "Insert"
-msgstr ""
+msgstr "Chèn"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Left"
-msgstr ""
+msgstr "Sang trái"
#: src/client/keycode.cpp
msgid "Left Button"
-msgstr ""
+msgstr "Nút trái"
#: src/client/keycode.cpp
msgid "Left Control"
-msgstr ""
+msgstr "Control trái"
#: src/client/keycode.cpp
msgid "Left Menu"
-msgstr ""
+msgstr "Menu trái"
#: src/client/keycode.cpp
msgid "Left Shift"
-msgstr ""
+msgstr "Shift trái"
#: src/client/keycode.cpp
msgid "Left Windows"
-msgstr ""
+msgstr "Windows trái"
#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
-msgstr ""
+msgstr "Menu"
#: src/client/keycode.cpp
msgid "Middle Button"
-msgstr ""
+msgstr "Nút giữa"
#: src/client/keycode.cpp
msgid "Num Lock"
-msgstr ""
+msgstr "Num Lock"
#: src/client/keycode.cpp
msgid "Numpad *"
-msgstr ""
+msgstr "* trên b.phím số"
#: src/client/keycode.cpp
msgid "Numpad +"
-msgstr ""
+msgstr "+ trên b.phím số"
#: src/client/keycode.cpp
msgid "Numpad -"
-msgstr ""
+msgstr "- trên b.phím số"
#: src/client/keycode.cpp
msgid "Numpad ."
-msgstr ""
+msgstr ". trên b.phím số"
#: src/client/keycode.cpp
msgid "Numpad /"
-msgstr ""
+msgstr "/ trên b.phím số"
#: src/client/keycode.cpp
msgid "Numpad 0"
-msgstr ""
+msgstr "0 trên b.phím số"
#: src/client/keycode.cpp
msgid "Numpad 1"
-msgstr ""
+msgstr "1 trên b.phím số"
#: src/client/keycode.cpp
msgid "Numpad 2"
-msgstr ""
+msgstr "2 trên b.phím số"
#: src/client/keycode.cpp
msgid "Numpad 3"
-msgstr ""
+msgstr "3 trên b.phím số"
#: src/client/keycode.cpp
msgid "Numpad 4"
-msgstr ""
+msgstr "4 trên b.phím số"
#: src/client/keycode.cpp
msgid "Numpad 5"
-msgstr ""
+msgstr "5 trên b.phím số"
#: src/client/keycode.cpp
msgid "Numpad 6"
-msgstr ""
+msgstr "6 trên b.phím số"
#: src/client/keycode.cpp
msgid "Numpad 7"
-msgstr ""
+msgstr "7 trên b.phím số"
#: src/client/keycode.cpp
msgid "Numpad 8"
-msgstr ""
+msgstr "8 trên b.phím số"
#: src/client/keycode.cpp
msgid "Numpad 9"
-msgstr ""
+msgstr "9 trên b.phím số"
#: src/client/keycode.cpp
msgid "OEM Clear"
@@ -1800,56 +1882,56 @@ msgstr ""
#: src/client/keycode.cpp
msgid "Page down"
-msgstr ""
+msgstr "Page down"
#: src/client/keycode.cpp
msgid "Page up"
-msgstr ""
+msgstr "Page up"
#: src/client/keycode.cpp
msgid "Pause"
-msgstr ""
+msgstr "Pause"
#: src/client/keycode.cpp
msgid "Play"
-msgstr ""
+msgstr "Play"
#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
-msgstr ""
+msgstr "Print Screen"
#: src/client/keycode.cpp
msgid "Return"
-msgstr ""
+msgstr "Return"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Right"
-msgstr ""
+msgstr "Sang phải"
#: src/client/keycode.cpp
msgid "Right Button"
-msgstr ""
+msgstr "Nút phải"
#: src/client/keycode.cpp
msgid "Right Control"
-msgstr ""
+msgstr "Control phải"
#: src/client/keycode.cpp
msgid "Right Menu"
-msgstr ""
+msgstr "Menu phải"
#: src/client/keycode.cpp
msgid "Right Shift"
-msgstr ""
+msgstr "Shift phải"
#: src/client/keycode.cpp
msgid "Right Windows"
-msgstr ""
+msgstr "Windows phải"
#: src/client/keycode.cpp
msgid "Scroll Lock"
-msgstr ""
+msgstr "Scroll Lock"
#. ~ Key name
#: src/client/keycode.cpp
@@ -1858,123 +1940,105 @@ msgstr ""
#: src/client/keycode.cpp
msgid "Shift"
-msgstr ""
+msgstr "Shift"
#: src/client/keycode.cpp
msgid "Sleep"
-msgstr ""
+msgstr "Ngá»§"
#: src/client/keycode.cpp
msgid "Snapshot"
-msgstr ""
+msgstr "Ảnh chụp nhanh"
#: src/client/keycode.cpp
msgid "Space"
-msgstr ""
+msgstr "Phím cách"
#: src/client/keycode.cpp
msgid "Tab"
-msgstr ""
+msgstr "Tab"
#: src/client/keycode.cpp
msgid "Up"
-msgstr ""
+msgstr "Lên"
#: src/client/keycode.cpp
msgid "X Button 1"
-msgstr ""
+msgstr "Nút X 1"
#: src/client/keycode.cpp
msgid "X Button 2"
-msgstr ""
+msgstr "Nút X 2"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Zoom"
-msgstr ""
+msgstr "Thu phóng"
#: src/client/minimap.cpp
msgid "Minimap hidden"
-msgstr ""
+msgstr "Ẩn Minimap"
#: src/client/minimap.cpp
#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr ""
+msgstr "Minimap ở chế độ ra-đa, mức thu phóng %dx"
#: src/client/minimap.cpp
#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr ""
+msgstr "Minimap ở chế độ mặt ná»n, mức thu phóng %dx"
#: src/client/minimap.cpp
msgid "Minimap in texture mode"
-msgstr ""
+msgstr "Minimap ở chế độ kết cấu"
#: src/gui/guiChatConsole.cpp
msgid "Failed to open webpage"
-msgstr ""
+msgstr "Äã xảy ra lá»—i khi mở trang web"
#: 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 ""
+msgstr "Äang mở trang web"
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
-msgstr ""
+msgstr "Tiến hành"
#: src/gui/guiKeyChangeMenu.cpp
msgid "\"Aux1\" = climb down"
-msgstr ""
+msgstr "\"Aux1\" = leo xuống"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
-msgstr ""
+msgstr "Tự động tiến"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
-msgstr ""
+msgstr "Tự động nhảy"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Aux1"
-msgstr ""
+msgstr "Aux1"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
-msgstr ""
+msgstr "Lùi xuống"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Block bounds"
-msgstr ""
+msgstr "Ranh giới khối"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
-msgstr ""
+msgstr "Thay đổi camera"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
-msgstr ""
+msgstr "Trò chuyện"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Command"
-msgstr ""
+msgstr "Lệnh"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Console"
@@ -1982,99 +2046,99 @@ msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. range"
-msgstr ""
+msgstr "Giảm phạm vi"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
-msgstr ""
+msgstr "Giảm âm lượng"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
-msgstr ""
+msgstr "Nhấn đúp nút \"nhảy\" để chuyển đổi chế độ bay"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Drop"
-msgstr ""
+msgstr "Thả"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Forward"
-msgstr ""
+msgstr "Tiến lên"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. range"
-msgstr ""
+msgstr "Tăng phạm vi"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. volume"
-msgstr ""
+msgstr "Tăng âm lượng"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inventory"
-msgstr ""
+msgstr "Túi đồ"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Jump"
-msgstr ""
+msgstr "Nhảy"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Key already in use"
-msgstr ""
+msgstr "Phím đã được sử dụng"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
+msgid "Keybindings."
+msgstr "Liên kết phím."
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
-msgstr ""
+msgstr "Lệnh cục bộ"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Mute"
-msgstr ""
+msgstr "Tắt tiếng"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Next item"
-msgstr ""
+msgstr "Vật phẩm tiếp theo"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Prev. item"
-msgstr ""
+msgstr "Vật phẩm trước"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Range select"
-msgstr ""
+msgstr "Lá»±a chá»n phạm vi"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Screenshot"
-msgstr ""
+msgstr "Chụp màn hình"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Sneak"
-msgstr ""
+msgstr "Äi rón rén"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
-msgstr ""
+msgstr "Chuyển đổi HUD"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle chat log"
-msgstr ""
+msgstr "Chuyển đổi nhật kí trò chuyện"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
-msgstr ""
+msgstr "Chuyển đổi chạy nhanh"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fly"
-msgstr ""
+msgstr "Chuyển đổi bay"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fog"
-msgstr ""
+msgstr "Chuyển đổi sương mù"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle minimap"
-msgstr ""
+msgstr "Chuyển đổi minimap"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
@@ -2086,42 +2150,36 @@ msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
-msgstr ""
+msgstr "bấm phím"
#: src/gui/guiPasswordChange.cpp
msgid "Change"
-msgstr ""
-
-#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr ""
+msgstr "Thay đổi"
#: src/gui/guiPasswordChange.cpp
msgid "New Password"
-msgstr ""
+msgstr "Mật khẩu mới"
#: src/gui/guiPasswordChange.cpp
msgid "Old Password"
-msgstr ""
+msgstr "Mật khẩu cũ"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Mật khẩu không khớp!"
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
-msgstr ""
+msgstr "Thoát"
#: src/gui/guiVolumeChange.cpp
msgid "Muted"
-msgstr ""
+msgstr "Äã tắt tiếng"
#: 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 ""
+msgstr "Âm lượng: %d%%"
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
@@ -2130,11 +2188,24 @@ msgstr ""
msgid "LANG_CODE"
msgstr "vi"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+"Tên chưa được đăng kí. Äể tạo má»™t tài khoản trên máy chá»§ này, hãy bấm \"Äăng "
+"kí\""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr "Tên đã được sá»­ dụng. Vui lòng chá»n má»™t tên khác"
+
#: 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 ""
+"(Android) Sửa vị trí của joystick ảo.\n"
+"Nếu vô hiệu, joystick ảo sẽ ở vị trị giữa của lần chạm đầu tiên."
#: src/settings_translation_file.cpp
msgid ""
@@ -2142,6 +2213,9 @@ msgid ""
"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
+"(Android) Dùng joystick ảo để kích hoạt nút \"Aux1\".\n"
+"Khi kích hoạt, joystick ảo cÅ©ng sẽ nhấn nút \"Aux1\" khi ra khá»i vòng tròn "
+"chính."
#: src/settings_translation_file.cpp
msgid ""
@@ -2168,53 +2242,57 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of ridged mountains."
-msgstr ""
+msgstr "Nhiá»…u 2D Ä‘iá»u khiển hình dạng / kích thước cá»§a các sống núi."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr ""
+msgstr "Nhiá»…u 2D Ä‘iá»u khiển hình dạng / kích thước cá»§a các ngá»n đồi."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
-msgstr ""
+msgstr "Nhiá»…u 2D Ä‘iá»u khiển hình dạng / kích thước cá»§a các núi bậc thang."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
msgstr ""
+"Nhiá»…u 2D Ä‘iá»u khiển hình dạng / tần suất xuất hiện cá»§a các dãy sống núi."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr ""
+msgstr "Nhiá»…u 2D Ä‘iá»u khiển hình dạng / tần suất xuất hiện cá»§a các ngá»n đồi."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
msgstr ""
+"Nhiá»…u 2D Ä‘iá»u khiển hình dạng / tần suất xuất hiện cá»§a các dãy núi bậc thang."
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
-msgstr ""
+msgstr "Nhiễu 2D tạo vị trí cho các sông, thung lũng và kênh mương."
#: src/settings_translation_file.cpp
msgid "3D clouds"
-msgstr ""
+msgstr "Mây dạng 3D"
#: src/settings_translation_file.cpp
msgid "3D mode"
-msgstr ""
+msgstr "Chế độ 3D"
#: src/settings_translation_file.cpp
msgid "3D mode parallax strength"
-msgstr ""
+msgstr "Cưá»ng độ thị sai cá»§a Chế độ 3D"
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
-msgstr ""
+msgstr "Nhiễu 3D tạo ra các hang động lớn."
#: src/settings_translation_file.cpp
msgid ""
"3D noise defining mountain structure and height.\n"
"Also defines structure of floatland mountain terrain."
msgstr ""
+"Nhiễu 3D xác địch cấu trúc và độ cao của núi.\n"
+"Nó cũng xác định cấu trúc của các địa hình đảo lơ lửng."
#: src/settings_translation_file.cpp
msgid ""
@@ -2255,18 +2333,24 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+msgstr "3D"
+
+#: 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 ""
+"Má»™t mã được chá»n để tạo má»™t thế giá»›i má»›i, để trống để tạo mã ngẫu nhiên.\n"
+"Nó sẽ được ghi đè khi tạo một thế giới mới trong màn hình chính."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
-msgstr ""
+msgstr "Một tin nhắn được hiển thị ở các máy khách khi máy chủ gặp sự cố."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
-msgstr ""
+msgstr "Một tin nhắn được hiển thị ở các máy khách khi máy chủ tắt."
#: src/settings_translation_file.cpp
msgid "ABM interval"
@@ -2278,11 +2362,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
-msgstr ""
+msgstr "Giới hạn tuyệt đối của các khối ở hàng chỠđể xuất hiện"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
-msgstr ""
+msgstr "Tăng tốc trong không trung"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
@@ -2320,10 +2404,13 @@ msgid ""
"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
"screens."
msgstr ""
+"Äiá»u chỉnh cấu hình DPI cho màn hình cá»§a bạn (chỉ cho Android/không phải X11)"
+", VD: cho màn hình 4K."
#: src/settings_translation_file.cpp
msgid "Adjust the detected display density, used for scaling UI elements."
msgstr ""
+"Äiá»u chỉnh mật độ Ä‘iểm ảnh đã phát hiện, sá»­ dụng để thu phóng các yếu tố UI."
#: src/settings_translation_file.cpp
#, c-format
@@ -2336,8 +2423,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr "Tên quản trị viên"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
-msgstr ""
+msgstr "Nâng cao"
#: src/settings_translation_file.cpp
msgid ""
@@ -2349,8 +2440,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
-msgstr ""
+msgid "Always fly fast"
+msgstr "Luôn bay nhanh"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
@@ -2358,23 +2449,23 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr ""
+msgstr "Số lượng tin nhắn cá»§a má»™t ngưá»i chÆ¡i có thể gá»­i trong 10 giây."
#: src/settings_translation_file.cpp
msgid "Amplifies the valleys."
-msgstr ""
+msgstr "Khuếch đại các thung lũng."
#: src/settings_translation_file.cpp
msgid "Anisotropic filtering"
-msgstr ""
+msgstr "Lá»c bất đẳng hướng"
#: src/settings_translation_file.cpp
msgid "Announce server"
-msgstr ""
+msgstr "Thông báo máy chủ"
#: src/settings_translation_file.cpp
msgid "Announce to this serverlist."
-msgstr ""
+msgstr "Thông báo đến danh sách máy chủ này."
#: src/settings_translation_file.cpp
msgid "Append item name"
@@ -2386,21 +2477,23 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Apple trees noise"
-msgstr ""
+msgstr "Nhiễu cho các cây táo"
#: src/settings_translation_file.cpp
msgid "Arm inertia"
-msgstr ""
+msgstr "Quán tính của cánh tay"
#: src/settings_translation_file.cpp
msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
msgstr ""
+"Quán tính của cánh tay, mang lại chuyển động\n"
+"chân thực hơn cho cánh tay khi máy ảnh di chuyển."
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
-msgstr ""
+msgstr "Há»i để kết nối lại sau khi gặp sá»± cố"
#: src/settings_translation_file.cpp
msgid ""
@@ -2418,8 +2511,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr "Âm thanh"
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
-msgstr ""
+msgstr "Phím tự động tiến"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
@@ -2427,27 +2524,27 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
-msgstr ""
+msgstr "Tự động báo cáo đến danh sách máy chủ."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
-msgstr ""
+msgstr "Tự động lưu kích thước màn hình"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
-msgstr ""
+msgstr "Chế độ tự động thay đổi tỉ lệ"
#: src/settings_translation_file.cpp
msgid "Aux1 key"
-msgstr ""
+msgstr "Phím Aux1"
#: src/settings_translation_file.cpp
msgid "Aux1 key for climbing/descending"
-msgstr ""
+msgstr "Phím Aux1 cho việc leo lên/leo xuống"
#: src/settings_translation_file.cpp
msgid "Backward key"
-msgstr ""
+msgstr "Phím lùi"
#: src/settings_translation_file.cpp
msgid "Base ground level"
@@ -2455,19 +2552,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Base terrain height."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
+msgstr "Äá»™ cao cá»§a địa hình cÆ¡ bản."
#: src/settings_translation_file.cpp
msgid "Basic privileges"
-msgstr ""
+msgstr "Các quyá»n cÆ¡ bản"
#: src/settings_translation_file.cpp
msgid "Beach noise"
-msgstr ""
+msgstr "Nhiễu cho biển"
#: src/settings_translation_file.cpp
msgid "Beach noise threshold"
@@ -2475,27 +2568,31 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Bilinear filtering"
-msgstr ""
+msgstr "Lá»c song tuyến"
#: src/settings_translation_file.cpp
msgid "Bind address"
-msgstr ""
+msgstr "Liên kết địa chỉ"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Biome noise"
-msgstr ""
+msgstr "Nhiễu quần xã"
#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr "Lay động"
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
-msgstr ""
+msgstr "ÄÆ°á»ng dẫn đến phông đậm và nghiêng"
#: src/settings_translation_file.cpp
msgid "Bold and italic monospace font path"
@@ -2503,7 +2600,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Bold font path"
-msgstr ""
+msgstr "ÄÆ°á»ng dẫn đến phông đậm"
#: src/settings_translation_file.cpp
msgid "Bold monospace font path"
@@ -2515,7 +2612,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Builtin"
-msgstr ""
+msgstr "ÄÆ°á»£c dá»±ng sẵn"
+
+#: src/settings_translation_file.cpp
+msgid "Camera"
+msgstr "Máy ảnh"
#: src/settings_translation_file.cpp
msgid ""
@@ -2527,39 +2628,39 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
-msgstr ""
+msgstr "Máy ảnh mượt mà"
#: src/settings_translation_file.cpp
msgid "Camera smoothing in cinematic mode"
-msgstr ""
+msgstr "Máy ảnh mượt mà trong chế độ điện ảnh"
#: src/settings_translation_file.cpp
msgid "Camera update toggle key"
-msgstr ""
+msgstr "Nút chuyển đổi cập nhật máy ảnh"
#: src/settings_translation_file.cpp
msgid "Cave noise"
-msgstr ""
+msgstr "Nhiễu hang động"
#: src/settings_translation_file.cpp
msgid "Cave noise #1"
-msgstr ""
+msgstr "Nhiễu hang động #1"
#: src/settings_translation_file.cpp
msgid "Cave noise #2"
-msgstr ""
+msgstr "Nhiễu hang động #2"
#: src/settings_translation_file.cpp
msgid "Cave width"
-msgstr ""
+msgstr "Äá»™ rá»™ng cá»§a hang"
#: src/settings_translation_file.cpp
msgid "Cave1 noise"
-msgstr ""
+msgstr "Nhiá»…u Hang 1"
#: src/settings_translation_file.cpp
msgid "Cave2 noise"
-msgstr ""
+msgstr "Nhiá»…u Hang 2"
#: src/settings_translation_file.cpp
msgid "Cavern limit"
@@ -2593,15 +2694,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Chat commands"
-msgstr ""
+msgstr "Lệnh trò chuyện"
#: src/settings_translation_file.cpp
msgid "Chat font size"
-msgstr ""
+msgstr "K.thước phông chữ tr.chuyện"
#: src/settings_translation_file.cpp
msgid "Chat key"
-msgstr ""
+msgstr "Phím trò chuyện"
#: src/settings_translation_file.cpp
msgid "Chat log level"
@@ -2613,7 +2714,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Chat message format"
-msgstr ""
+msgstr "Äịnh dạng tin nhắn trò chuyện"
#: src/settings_translation_file.cpp
msgid "Chat message kick threshold"
@@ -2621,11 +2722,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Chat message max length"
-msgstr ""
+msgstr "Äá»™ dài tin nhắn trò chuyện tối Ä‘a"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
-msgstr ""
+msgstr "Phím chuyển đổi trò chuyện"
#: src/settings_translation_file.cpp
msgid "Chat weblinks"
@@ -2633,19 +2734,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Chunk size"
-msgstr ""
+msgstr "Kích thước đoạn khúc"
#: src/settings_translation_file.cpp
msgid "Cinematic mode"
-msgstr ""
+msgstr "Chế độ điện ảnh"
#: src/settings_translation_file.cpp
msgid "Cinematic mode key"
-msgstr ""
+msgstr "Phím chế độ điện ảnh"
#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
-msgstr ""
+msgstr "Xóa các kết cấu trong suốt"
#: src/settings_translation_file.cpp
msgid ""
@@ -2655,11 +2756,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Client"
-msgstr ""
+msgstr "Máy khách"
#: src/settings_translation_file.cpp
msgid "Client and Server"
-msgstr ""
+msgstr "Máy khách và máy chủ"
#: src/settings_translation_file.cpp
msgid "Client modding"
@@ -2674,32 +2775,36 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Climbing speed"
+msgid "Client-side Modding"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "Tốc độ leo"
+
+#: src/settings_translation_file.cpp
msgid "Cloud radius"
-msgstr ""
+msgstr "Bán kính mây"
#: src/settings_translation_file.cpp
msgid "Clouds"
-msgstr ""
+msgstr "Mây"
#: src/settings_translation_file.cpp
msgid "Clouds are a client side effect."
-msgstr ""
+msgstr "Mây là một hiệu ứng ở máy khách."
#: src/settings_translation_file.cpp
msgid "Clouds in menu"
-msgstr ""
+msgstr "Mây trong menu"
#: src/settings_translation_file.cpp
msgid "Colored fog"
-msgstr ""
+msgstr "Sương mù có màu"
#: src/settings_translation_file.cpp
msgid "Colored shadows"
-msgstr ""
+msgstr "Bóng có màu"
#: src/settings_translation_file.cpp
msgid ""
@@ -2726,7 +2831,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Command key"
-msgstr ""
+msgstr "Phím lệnh"
#: src/settings_translation_file.cpp
msgid ""
@@ -2746,11 +2851,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Connect glass"
-msgstr ""
+msgstr "Kính kết nối với nhau"
#: src/settings_translation_file.cpp
msgid "Connect to external media server"
-msgstr ""
+msgstr "Kết nối đến máy chủ phương tiện bên ngoài"
#: src/settings_translation_file.cpp
msgid "Connects glass if supported by node."
@@ -2769,6 +2874,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr "Kho lưu trữ nội dung"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2792,18 +2901,27 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls"
-msgstr ""
+msgstr "Äiá»u khiể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 ""
+"Äiá»u chỉnh độ dài vòng lặp ngày/đêm.\n"
+"Ví dụ:\n"
+"72 = 20 phút, 360 = 4 phút, 1 = 24 giá», 0 = day/night/whatever stays "
+"unchanged."
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
+"Kiểm soát tốc độ chìm trong chất lá»ng khi bạn đứng im. Trong khi đó,\n"
+"giá trị âm sẽ làm bạn nổi lên."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2822,15 +2940,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Crash message"
-msgstr ""
+msgstr "Tin nhắn sự cố"
#: src/settings_translation_file.cpp
msgid "Creative"
-msgstr ""
+msgstr "Sáng tạo"
#: src/settings_translation_file.cpp
msgid "Crosshair alpha"
-msgstr ""
+msgstr "Äá»™ trong suốt cá»§a tâm"
#: src/settings_translation_file.cpp
msgid ""
@@ -2840,7 +2958,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Crosshair color"
-msgstr ""
+msgstr "Màu tâm"
#: src/settings_translation_file.cpp
msgid ""
@@ -2850,7 +2968,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "DPI"
-msgstr ""
+msgstr "DPI"
#: src/settings_translation_file.cpp
msgid "Damage"
@@ -2858,7 +2976,7 @@ msgstr "Sát thương"
#: src/settings_translation_file.cpp
msgid "Debug info toggle key"
-msgstr ""
+msgstr "Phím chuyển đổi thông tin gỡ lỗi"
#: src/settings_translation_file.cpp
msgid "Debug log file size threshold"
@@ -2869,12 +2987,12 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr ""
+msgid "Debugging"
+msgstr "Gỡ lỗi"
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
+msgid "Dec. volume key"
+msgstr "Phím giảm âm lượng"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -2886,25 +3004,27 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Default game"
-msgstr ""
+msgstr "Trò chơi mặc định"
#: 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 ""
+"Trò chơi mặc định khi tạo thế giới mới.\n"
+"Nó sẽ bị ghi đè khi tạo một thế giới từ màn hình chính."
#: src/settings_translation_file.cpp
msgid "Default password"
-msgstr ""
+msgstr "Mật khẩu mặc định"
#: src/settings_translation_file.cpp
msgid "Default privileges"
-msgstr ""
+msgstr "Quyá»n mặc định"
#: src/settings_translation_file.cpp
msgid "Default report format"
-msgstr ""
+msgstr "Äịnh dạng báo cáo mặc định"
#: src/settings_translation_file.cpp
msgid "Default stack size"
@@ -3000,6 +3120,8 @@ msgid ""
"Description of server, to be displayed when players join and in the "
"serverlist."
msgstr ""
+"Mô tả cá»§a máy chú, để hiển thị khi ngưá»i chÆ¡i tham gia hay trong danh sách "
+"máy chủ."
#: src/settings_translation_file.cpp
msgid "Desert noise threshold"
@@ -3013,43 +3135,53 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
-msgstr ""
+msgstr "Không đồng bộ hoạt ảnh khối"
+
+#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr "Tùy chá»n nhà phát triển"
#: src/settings_translation_file.cpp
msgid "Dig key"
-msgstr ""
+msgstr "Phím đào"
#: src/settings_translation_file.cpp
msgid "Digging particles"
-msgstr ""
+msgstr "Hạt hiệu ứng khi đào"
#: src/settings_translation_file.cpp
msgid "Disable anticheat"
-msgstr ""
+msgstr "Vô hiệu trình chống gian lận"
#: src/settings_translation_file.cpp
msgid "Disallow empty passwords"
-msgstr ""
+msgstr "Không cho phép mật khẩu trống"
#: 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."
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr "Tên miá»n cá»§a máy chá»§, để hiển thị trong danh sách máy chá»§."
+
+#: src/settings_translation_file.cpp
msgid "Double tap jump for fly"
-msgstr ""
+msgstr "Nhấn đúp nút nhảy để bay"
#: src/settings_translation_file.cpp
msgid "Double-tapping the jump key toggles fly mode."
-msgstr ""
+msgstr "Nhấn đúp phím nhảy để chuyển đổi chế độ bay."
#: src/settings_translation_file.cpp
msgid "Drop item key"
-msgstr ""
+msgstr "Phím thả vật phẩm"
#: src/settings_translation_file.cpp
msgid "Dump the mapgen debug information."
@@ -3057,27 +3189,31 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Dungeon maximum Y"
-msgstr ""
+msgstr "Y lớn nhất của ngục tối"
#: src/settings_translation_file.cpp
msgid "Dungeon minimum Y"
-msgstr ""
+msgstr "Y nhỠnhất của ngục tối"
#: src/settings_translation_file.cpp
msgid "Dungeon noise"
-msgstr ""
+msgstr "Nhiễu ngục tối"
#: src/settings_translation_file.cpp
msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"Kích hoạt hỗ trợ IPv6 (cho cả máy khách và máy chủ).\n"
+"Cần để việc kết nối IPv6 hoạt động."
#: src/settings_translation_file.cpp
msgid ""
"Enable Lua modding support on client.\n"
"This support is experimental and API can change."
msgstr ""
+"Kích hoạt hỗ trợ mod bằng Lua.\n"
+"Äấy là tính năng thá»­ nghiệm và API có thể sẽ thay đổi."
#: src/settings_translation_file.cpp
msgid ""
@@ -3098,11 +3234,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Enable creative mode for all players"
-msgstr ""
+msgstr "Kích hoạt chế độ sáng tạo cho tất cả ngưá»i chÆ¡i"
#: src/settings_translation_file.cpp
msgid "Enable joysticks"
-msgstr ""
+msgstr "Kích hoạt joystick"
+
+#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr "Kích hoạt joystick. Cần khởi động lại để có hiệu lực"
#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
@@ -3110,7 +3250,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Enable mod security"
-msgstr ""
+msgstr "Kích hoạt bảo mật mod"
#: src/settings_translation_file.cpp
msgid "Enable players getting damage and dying."
@@ -3118,17 +3258,7 @@ 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)."
-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 ""
+msgstr "Kích hoạt dữ liệu nhập ngẫu nhiên (chỉ cho việc thử nghiệm)."
#: src/settings_translation_file.cpp
msgid ""
@@ -3137,6 +3267,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+msgstr "Kích hoạt đăng nhập / đăng kí riêng lẻ"
+
+#: 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 "
@@ -3144,6 +3278,12 @@ msgid ""
"to new servers, but they may not support all new features that you are "
"expecting."
msgstr ""
+"Kích hoạt để ngăn các máy khách sử dụng phiên bản cũ kết nối. Các máy khách "
+"\n"
+"cÅ© hÆ¡n tương thích trong trưá»ng hợp chúng không gặp sá»± cố khi kết nối vàomáy "
+"chá»§ má»›i,\n"
+"tuy nhiên chúng có thể không hỗ trợ tất cả các tính năng mới như bạn mong "
+"đợi."
#: src/settings_translation_file.cpp
msgid ""
@@ -3182,7 +3322,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
-msgstr ""
+msgstr "Kích hoạt hoạt ảnh của các vật phẩm trong túi đồ."
#: src/settings_translation_file.cpp
msgid "Enables caching of facedir rotated meshes."
@@ -3190,7 +3330,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Enables minimap."
-msgstr ""
+msgstr "Kích hoạt minimap."
#: src/settings_translation_file.cpp
msgid ""
@@ -3199,6 +3339,10 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Kích hoạt hệ thống âm thanh.\n"
+"Nếu vô hiệu hóa, Ä‘iá»u này sẽ tắt hoàn toàn tất cả âm thanh trong trò chÆ¡i\n"
+"Ä‘iá»u khiển âm thanh sẽ không có tác dụng.\n"
+"Thay đổi cài đặt này sẽ cần khởi động lại."
#: src/settings_translation_file.cpp
msgid ""
@@ -3207,12 +3351,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Entity methods"
-msgstr ""
+msgstr "Phương thức thực thể"
#: src/settings_translation_file.cpp
msgid ""
@@ -3225,12 +3373,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr "FPS"
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
-msgstr ""
+msgstr "FPS khi cửa sổ đang hiện hoạt hoặc tạm dừng"
#: src/settings_translation_file.cpp
msgid "FSAA"
-msgstr ""
+msgstr "FSAA"
#: src/settings_translation_file.cpp
msgid "Factor noise"
@@ -3258,7 +3410,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Fast movement"
-msgstr ""
+msgstr "Äi nhanh"
#: src/settings_translation_file.cpp
msgid ""
@@ -3302,7 +3454,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
+msgid "Filtering and Antialiasing"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3355,7 +3507,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Flying"
-msgstr ""
+msgstr "Bay"
#: src/settings_translation_file.cpp
msgid "Fog"
@@ -3370,6 +3522,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3518,6 +3674,19 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "Trò chơi"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3542,6 +3711,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Graphics"
+msgstr "Äồ há»a"
+
+#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3561,7 +3738,11 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3801,11 +3982,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3866,6 +4054,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3887,7 +4081,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3927,10 +4123,6 @@ 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 ""
@@ -3944,7 +4136,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Inc. volume key"
-msgstr ""
+msgstr "Phím tăng âm lượng"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
@@ -3981,15 +4173,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4002,7 +4190,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Invert mouse"
-msgstr ""
+msgstr "Äảo ngược chuá»™t"
#: src/settings_translation_file.cpp
msgid "Invert vertical mouse movement."
@@ -4610,6 +4798,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4665,7 +4857,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4675,15 +4867,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4695,7 +4890,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4723,6 +4919,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+msgstr "Ãnh sáng mịn"
+
+#: 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"
@@ -5110,10 +5311,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5162,6 +5359,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5199,7 +5408,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity"
-msgstr ""
+msgstr "Äá»™ nhạy chuá»™t"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity multiplier."
@@ -5248,16 +5457,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5270,6 +5479,11 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "Äánh dấu node"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5307,10 +5521,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5404,10 +5614,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5454,10 +5660,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5626,6 +5828,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "Màn hình:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5653,6 +5860,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "Màn hình:"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr ""
@@ -5665,10 +5877,6 @@ 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 ""
@@ -5708,8 +5916,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr ""
+#, fuzzy
+msgid "Server"
+msgstr "Lưu trữ máy chủ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "- Tên máy chủ: "
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "Mô tả Máy chủ"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5736,10 +5955,19 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "Cổng máy chủ"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5750,12 +5978,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5763,7 +5993,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5839,7 +6069,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6043,6 +6273,11 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "Cài đặt"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6245,7 +6480,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6269,10 +6504,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6363,6 +6606,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6596,6 +6843,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6622,7 +6878,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "World start time"
-msgstr ""
+msgstr "Thá»i gian khởi động thế giá»›i"
#: src/settings_translation_file.cpp
msgid ""
@@ -6685,6 +6941,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr "cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Hết thá»i gian chá» tải xuống tệp trong cURL"
@@ -6702,6 +6962,19 @@ msgstr "Gặp giới hạn số lượng tệp tải xuống trong cURL"
#~ msgid "- Damage: "
#~ msgstr "- Tổn hại: "
+#~ msgid "Connect"
+#~ msgstr "Kết nối"
+
+#~ 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"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "Tải xuống một trò chơi từ minetest.net"
+
+#~ msgid "Game"
+#~ msgstr "Trò chơi"
+
#~ msgid "Ok"
#~ msgstr "ÄÆ°á»£c"
diff --git a/po/yue/minetest.po b/po/yue/minetest.po
index 45631b422..536ba0e2f 100644
--- a/po/yue/minetest.po
+++ b/po/yue/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -114,6 +114,30 @@ msgid "The server has requested a reconnect:"
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Client Mods"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr ""
@@ -126,6 +150,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr ""
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr ""
@@ -133,14 +161,21 @@ msgstr ""
msgid "We support protocol versions between version $1 and $2."
msgstr ""
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr ""
@@ -275,7 +310,6 @@ msgid "Failed to download $1"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr ""
@@ -296,7 +330,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr ""
@@ -389,11 +422,7 @@ 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"
+msgid "Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -412,10 +441,6 @@ msgstr ""
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 ""
@@ -433,6 +458,14 @@ msgid "Increases humidity around rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install a game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr ""
@@ -532,10 +565,6 @@ 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 ""
@@ -565,6 +594,36 @@ msgstr ""
msgid "Delete World \"$1\"?"
msgstr ""
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Missing name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Passwords do not match"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+msgid "Register"
+msgstr ""
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr ""
@@ -595,6 +654,14 @@ msgstr ""
msgid "Browse"
msgstr ""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Content: Mods"
+msgstr ""
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
@@ -651,7 +718,7 @@ msgstr ""
msgid "Select file"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr ""
@@ -796,6 +863,10 @@ msgstr ""
msgid "Previous Core Developers"
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "Share debug log"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -864,10 +935,6 @@ msgstr ""
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 ""
@@ -876,10 +943,6 @@ msgstr ""
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 ""
@@ -913,10 +976,6 @@ msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr ""
@@ -926,10 +985,6 @@ msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr ""
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr ""
@@ -942,6 +997,10 @@ msgid "Join Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
@@ -954,10 +1013,18 @@ msgid "Refresh"
msgstr ""
#: builtin/mainmenu/tab_online.lua
+msgid "Remove favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr ""
@@ -1002,7 +1069,7 @@ msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+msgid "Dynamic shadows:"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1098,7 +1165,7 @@ msgid "Tone Mapping"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+msgid "Touch threshold (px):"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1106,7 +1173,7 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+msgid "Very High"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -1125,6 +1192,10 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
+#: src/client/client.cpp
+msgid "Connection aborted (protocol error?)."
+msgstr ""
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1258,7 +1329,7 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr ""
#: src/client/game.cpp
@@ -1362,6 +1433,11 @@ msgid "Enabled unlimited viewing range"
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Error creating client: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr ""
@@ -1866,24 +1942,6 @@ msgstr ""
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 ""
@@ -1916,7 +1974,7 @@ msgstr ""
msgid "Change camera"
msgstr ""
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr ""
@@ -1969,7 +2027,7 @@ msgid "Key already in use"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgid "Keybindings."
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -2041,15 +2099,15 @@ msgid "Change"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
+msgid "New Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "New Password"
+msgid "Old Password"
msgstr ""
#: src/gui/guiPasswordChange.cpp
-msgid "Old Password"
+msgid "Passwords do not match!"
msgstr ""
#: src/gui/guiVolumeChange.cpp
@@ -2065,12 +2123,6 @@ msgstr ""
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).
@@ -2078,6 +2130,15 @@ msgstr ""
msgid "LANG_CODE"
msgstr ""
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+msgid "Name is taken. Please choose another name"
+msgstr ""
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2203,6 +2264,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2284,6 +2349,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Admin name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2297,7 +2366,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+msgid "Always fly fast"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2366,6 +2435,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr ""
@@ -2406,10 +2479,6 @@ msgid "Base terrain height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr ""
@@ -2430,7 +2499,7 @@ msgid "Bind address"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+msgid "Biome API noise parameters"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2442,6 +2511,10 @@ msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr ""
@@ -2466,6 +2539,10 @@ msgid "Builtin"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Camera"
+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"
@@ -2622,6 +2699,10 @@ msgid "Client side node lookup range restriction"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client-side Modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""
@@ -2717,6 +2798,10 @@ msgid "Console height"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr ""
@@ -2750,7 +2835,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2817,11 +2904,11 @@ msgid "Debug log level"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
+msgid "Debugging"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
+msgid "Dec. volume key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2964,6 +3051,10 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Developer Options"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr ""
@@ -2984,6 +3075,12 @@ msgid "Display Density Scaling Factor"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3053,6 +3150,10 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr ""
@@ -3069,19 +3170,13 @@ 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."
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Enable smooth lighting with simple ambient occlusion.\n"
-"Disable for speed or for different looks."
+msgid "Enable split login/register"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3155,6 +3250,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3173,6 +3272,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr ""
@@ -3250,7 +3353,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Filtering"
+msgid "Filtering and Antialiasing"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3318,6 +3421,10 @@ msgid "Fog toggle key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3466,6 +3573,18 @@ msgid "GUI scaling filter txr2img"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamepads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""
@@ -3493,6 +3612,14 @@ msgid "Graphics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Graphics Effects"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics and Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""
@@ -3509,7 +3636,11 @@ msgid "HTTP mods"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scaling"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3749,11 +3880,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr ""
@@ -3814,6 +3952,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
@@ -3835,7 +3979,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3875,10 +4021,6 @@ 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 ""
@@ -3929,15 +4071,11 @@ 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."
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4558,6 +4696,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -4613,7 +4755,7 @@ msgstr ""
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4623,15 +4765,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4643,7 +4788,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4671,6 +4817,10 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lighting"
+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"
@@ -5055,10 +5205,6 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""
@@ -5107,6 +5253,18 @@ msgid "Mipmapping"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5193,16 +5351,16 @@ 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 "Networking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""
@@ -5215,6 +5373,10 @@ msgid "Noclip key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Node and Entity Highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""
@@ -5252,10 +5414,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr ""
@@ -5349,10 +5507,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""
@@ -5399,10 +5553,6 @@ msgid "Profiler toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -5571,6 +5721,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr ""
@@ -5598,19 +5752,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Seabed noise"
+msgid "Screenshots"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgid "Seabed noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Second of two 3D noises that together define tunnels."
+msgid "Second of 4 2D noises that together define hill/mountain range height."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Security"
+msgid "Second of two 3D noises that together define tunnels."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5653,7 +5807,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
+msgid "Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server Gameplay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server Security"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5681,10 +5843,18 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Server/Env Performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Serverlist and MOTD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr ""
@@ -5695,12 +5865,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -5708,7 +5880,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5784,7 +5956,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5984,6 +6156,10 @@ msgid "Temperature variation for biomes."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Temporary Settings"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -6186,7 +6362,7 @@ msgid "Time speed"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6210,10 +6386,18 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Touchscreen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6304,6 +6488,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -6537,6 +6725,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
@@ -6626,6 +6823,10 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po
index 1b9e17f8e..9bca847ff 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: 2022-01-25 23:19+0100\n"
-"PO-Revision-Date: 2022-01-30 18:51+0000\n"
-"Last-Translator: poi <erbaotao@outlook.com>\n"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-05-19 18:13+0000\n"
+"Last-Translator: GT-610 <myddz1005@163.com>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"minetest/minetest/zh_Hans/>\n"
"Language: zh_CN\n"
@@ -12,7 +12,7 @@ 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.11-dev\n"
+"X-Generator: Weblate 4.13-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -40,7 +40,7 @@ msgstr "åˆ—å‡ºè”æœºçީ家"
#: builtin/client/chatcommands.lua
msgid "Online players: "
-msgstr "在线玩家: "
+msgstr "在线玩家: "
#: builtin/client/chatcommands.lua
msgid "The out chat queue is now empty."
@@ -56,7 +56,7 @@ msgstr "é‡ç”Ÿ"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
-msgstr "æ‚¨å·²ç»æ­»äº¡"
+msgstr "您已死亡"
#: builtin/common/chatcommands.lua
msgid "Available commands:"
@@ -89,9 +89,8 @@ msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "<none available>"
-msgstr "命令ä¸å¯ç”¨ï¼š"
+msgstr "<æ— å¯ç”¨å‘½ä»¤>"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
@@ -114,6 +113,31 @@ msgid "The server has requested a reconnect:"
msgstr "æœåŠ¡å™¨å·²è¯·æ±‚é‡æ–°è¿žæŽ¥ï¼š"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "选择Mod"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "å议版本ä¸åŒ¹é…。 "
@@ -126,6 +150,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "æœåŠ¡å™¨æ”¯æŒå议版本为 $1 至 $2。 "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "æˆ‘ä»¬åªæ”¯æŒå议版本 $1。"
@@ -133,14 +161,21 @@ msgstr "æˆ‘ä»¬åªæ”¯æŒå议版本 $1。"
msgid "We support protocol versions between version $1 and $2."
msgstr "我们支æŒçš„å议版本为 $1 至 $2。"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "å–æ¶ˆ"
@@ -277,9 +312,8 @@ msgid "Failed to download $1"
msgstr "下载 $1 失败"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
-msgstr "游æˆ"
+msgstr "å­æ¸¸æˆ"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install"
@@ -299,7 +333,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr "å®‰è£…ï¼šæ–‡ä»¶ç±»åž‹ä¸æ”¯æŒæˆ–档案已æŸå"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mod"
@@ -392,12 +425,9 @@ 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 下载一个"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "è­¦å‘Šï¼šå¼€å‘æµ‹è¯•是为开å‘者æä¾›çš„。"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -415,10 +445,6 @@ msgstr "空中漂浮的陆地"
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 "生æˆéžåˆ†å½¢åœ°å½¢ï¼šæµ·æ´‹å’Œåœ°åº•"
@@ -436,6 +462,15 @@ msgid "Increases humidity around rivers"
msgstr "增加河æµå‘¨è¾¹æ¹¿åº¦"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "安装$1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "æ¹–"
@@ -535,10 +570,6 @@ 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 "世界åç§°"
@@ -568,6 +599,39 @@ msgstr "pkgmgr:MOD 路径 “$1†无效"
msgid "Delete World \"$1\"?"
msgstr "删除世界“$1â€ï¼Ÿ"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "确认密ç "
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "地图生æˆå™¨åç§°"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "åç§°"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "密ç "
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "密ç ä¸åŒ¹é…ï¼"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "注册并加入"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "接å—"
@@ -599,6 +663,16 @@ msgstr "< 返回设置页é¢"
msgid "Browse"
msgstr "æµè§ˆ"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "内容"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "内容"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "ç¦ç”¨"
@@ -656,7 +730,7 @@ msgstr "选择目录"
msgid "Select file"
msgstr "选择文件"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "显示高级åç§°"
@@ -803,6 +877,11 @@ msgstr "å‰è´¡çŒ®è€…"
msgid "Previous Core Developers"
msgstr "剿 ¸å¿ƒå¼€å‘者"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "显示调试信æ¯"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "æµè§ˆåœ¨çº¿å†…容"
@@ -871,10 +950,6 @@ msgstr "建立æœåС噍"
msgid "Install games from ContentDB"
msgstr "从 ContentDB 安装游æˆ"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "åç§°"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "新建"
@@ -883,10 +958,6 @@ msgstr "新建"
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 "开始游æˆ"
@@ -920,10 +991,6 @@ msgid "Clear"
msgstr "Clearé”®"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "连接"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "创造模å¼"
@@ -933,10 +1000,6 @@ msgid "Damage / PvP"
msgstr "伤害 / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "删除收è—项"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "我的收è—"
@@ -949,6 +1012,10 @@ msgid "Join Game"
msgstr "加入游æˆ"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "应答速度"
@@ -961,10 +1028,19 @@ msgid "Refresh"
msgstr "刷新"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "远程端å£"
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "æœåС噍æè¿°"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "两å€"
@@ -1009,7 +1085,8 @@ msgid "Dynamic shadows"
msgstr "动æ€é˜´å½±"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "动æ€é˜´å½±: "
#: builtin/mainmenu/tab_settings.lua
@@ -1105,7 +1182,8 @@ msgid "Tone Mapping"
msgstr "色调映射"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "触控阈值:(px)"
#: builtin/mainmenu/tab_settings.lua
@@ -1113,7 +1191,8 @@ msgid "Trilinear Filter"
msgstr "三线性过滤"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+#, fuzzy
+msgid "Very High"
msgstr "超出高度é™åˆ¶"
#: builtin/mainmenu/tab_settings.lua
@@ -1132,6 +1211,11 @@ msgstr "摇动æµä½“"
msgid "Waving Plants"
msgstr "摇摆æ¤ç‰©"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "连接出错(超时?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "连接超时。"
@@ -1243,21 +1327,20 @@ msgid "Automatic forward enabled"
msgstr "自动å‰è¿›å·²å¯ç”¨"
#: src/client/game.cpp
-#, fuzzy
msgid "Block bounds hidden"
-msgstr "地图å—边界"
+msgstr "å·²éšè—æ–¹å—边界"
#: src/client/game.cpp
msgid "Block bounds shown for all blocks"
-msgstr ""
+msgstr "å·²ä¸ºæ‰€æœ‰æ–¹å—æè¾¹"
#: src/client/game.cpp
msgid "Block bounds shown for current block"
-msgstr ""
+msgstr "å·²ä¸ºå½“å‰æ–¹å—æè¾¹"
#: src/client/game.cpp
msgid "Block bounds shown for nearby blocks"
-msgstr ""
+msgstr "å·²ä¸ºå‘¨å›´æ–¹å—æè¾¹"
#: src/client/game.cpp
msgid "Camera update disabled"
@@ -1268,8 +1351,9 @@ msgid "Camera update enabled"
msgstr "å·²å¯ç”¨é•œå¤´æ›´æ–°"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
-msgstr ""
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
+msgstr "无法显示方å—的边界 (需è¦â€œbasic_debugâ€æƒé™ï¼‰"
#: src/client/game.cpp
msgid "Change Password"
@@ -1398,6 +1482,11 @@ msgid "Enabled unlimited viewing range"
msgstr "å¯ç”¨æ— é™è§†é‡Ž"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "正在建立客户端..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "退出至èœå•"
@@ -1902,27 +1991,6 @@ msgstr "网页打ä¸å¼€"
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 ""
-"这是你第一次用“%sâ€åŠ å…¥æœåŠ¡å™¨ã€‚\n"
-"如果è¦ç»§ç»­ï¼Œä¸€ä¸ªæ–°çš„用户将在æœåŠ¡å™¨ä¸Šåˆ›å»ºã€‚\n"
-"è¯·é‡æ–°è¾“入你的密ç ç„¶åŽç‚¹å‡»â€œæ³¨å†Œâ€æ¥åˆ›å»ºç”¨æˆ·æˆ–ç‚¹å‡»â€œå–æ¶ˆâ€é€€å‡ºã€‚"
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "ç»§ç»­"
@@ -1955,7 +2023,7 @@ msgstr "地图å—边界"
msgid "Change camera"
msgstr "改å˜ç›¸æœº"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "èŠå¤©"
@@ -2008,8 +2076,8 @@ msgid "Key already in use"
msgstr "按键已被å ç”¨"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "é”®ä½é…置。(如果这个èœå•被弄乱,从 minetest.conf 中删掉点东西)"
+msgid "Keybindings."
+msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2080,10 +2148,6 @@ msgid "Change"
msgstr "更改"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "确认密ç "
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "新密ç "
@@ -2091,6 +2155,10 @@ msgstr "新密ç "
msgid "Old Password"
msgstr "旧密ç "
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "密ç ä¸åŒ¹é…ï¼"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "退出"
@@ -2104,12 +2172,6 @@ msgstr "é™éŸ³"
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 "输入 "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2117,6 +2179,16 @@ msgstr "输入 "
msgid "LANG_CODE"
msgstr "zh_CN"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "请选择åç§°ï¼"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2277,6 +2349,10 @@ msgstr ""
"注æ„交错模å¼éœ€è¦å¯ç”¨ç€è‰²å™¨ã€‚"
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2369,6 +2445,11 @@ msgstr ""
"创建一个密实的悬空岛层。"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "添加物å“åç§°"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "高级"
@@ -2387,7 +2468,8 @@ msgstr ""
"在夜晚的自然光照下作用很å°ã€‚"
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "ä¿æŒé£žè¡Œå’Œå¿«é€Ÿæ¨¡å¼"
#: src/settings_translation_file.cpp
@@ -2466,6 +2548,10 @@ msgstr ""
"在 mapblocks中声明(16 个节点)。"
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "自动å‰è¿›é”®"
@@ -2506,10 +2592,6 @@ msgid "Base terrain height."
msgstr "基础地形高度。"
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "基础"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "基本æƒé™"
@@ -2530,7 +2612,8 @@ msgid "Bind address"
msgstr "绑定地å€"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "生物群系 API æ¸©åº¦å’Œæ¹¿åº¦å™ªå£°å‚æ•°"
#: src/settings_translation_file.cpp
@@ -2542,6 +2625,10 @@ msgid "Block send optimize distance"
msgstr "最优方å—å‘é€è·ç¦»"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "粗斜体字体路径"
@@ -2566,6 +2653,11 @@ msgid "Builtin"
msgstr "内置"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+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"
@@ -2729,6 +2821,11 @@ msgid "Client side node lookup range restriction"
msgstr "å®¢æˆ·ç«¯æ–¹å—æŸ¥è¯¢èŒƒå›´é™åˆ¶"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "客户端mod"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "攀登速度"
@@ -2800,6 +2897,10 @@ msgid ""
"0 - least compression, fastest\n"
"9 - best compression, slowest"
msgstr ""
+"欲用æ¥èŠ‚çº¦åœ°å›¾å—å ç”¨çš„ç£ç›˜ç©ºé—´ï¼Œæ‰€è¦ä½¿ç”¨çš„压缩等级。\n"
+"-1 - 使用默认值\n"
+"0 - 最å°åŽ‹ç¼©ï¼Œæœ€å¿«\n"
+"9 - 最佳压缩,最慢"
#: src/settings_translation_file.cpp
msgid ""
@@ -2834,6 +2935,11 @@ msgid "Console height"
msgstr "控制å°é«˜åº¦"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Content Repository"
+msgstr "在线内容仓库(ContentDB)"
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "ContentDB标签黑åå•"
@@ -2872,8 +2978,10 @@ msgstr ""
"72 = 20分钟,360 = 4分钟,1 = 24å°æ—¶ï¼Œ0 = é”定日夜循环。"
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "控制在液体中的下沉速度。"
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2947,12 +3055,12 @@ msgid "Debug log level"
msgstr "调试日志级别"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "音é‡å‡å°é”®"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "å‡å°æ­¤å€¼ä»¥å¢žåŠ æ¶²ä½“å¯¹è¿åŠ¨çš„é˜»åŠ›ã€‚"
+msgid "Dec. volume key"
+msgstr "音é‡å‡å°é”®"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3103,6 +3211,11 @@ msgid "Desynchronize block animation"
msgstr "åŽ»åŒæ­¥å—动画"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "装饰"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "挖掘键"
@@ -3123,6 +3236,12 @@ msgid "Display Density Scaling Factor"
msgstr "显示密度比例系数"
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "æœåŠ¡å™¨åŸŸå,将显示在æœåŠ¡å™¨åˆ—è¡¨ã€‚"
@@ -3201,6 +3320,10 @@ msgid "Enable joysticks"
msgstr "å¯ç”¨æ‘‡æ†"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "å¯ç”¨ mod 频铿”¯æŒã€‚"
@@ -3217,18 +3340,6 @@ 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 ""
-"在连接到æœåŠ¡å™¨æ—¶å¯ç”¨æ³¨å†Œç¡®è®¤ã€‚\n"
-"如果ç¦ç”¨ï¼Œæ–°è´¦å·ä¼šè‡ªåŠ¨æ³¨å†Œã€‚"
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3237,6 +3348,10 @@ msgstr ""
"ç¦ç”¨å¯å½±å“速度或得到ä¸åŒå¤–观。"
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3328,6 +3443,11 @@ msgid ""
msgstr "å…许ä¸å½±å“å¯çŽ©æ€§çš„è½»å¾®è§†è§‰é”™è¯¯ï¼Œä»¥æ­¤å‡å°‘ CPU 负载,或æé«˜æ¸²æŸ“性能。"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "山谷轮廓"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "打å°å¼•æ“Žæ€§èƒ½åˆ†æžæ•°æ®é—´éš”"
@@ -3351,6 +3471,10 @@ msgstr ""
"适用于固体悬空岛层。"
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
msgstr "æ¸¸æˆæš‚åœæ—¶æœ€é«˜ FPS"
@@ -3436,8 +3560,9 @@ msgstr ""
"该过滤器将在å¯ç”¨mipmapping的时候被自动应用。"
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "过滤"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "抗锯齿:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3504,6 +3629,11 @@ msgid "Fog toggle key"
msgstr "雾å¯ç”¨/ç¦ç”¨é”®"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "字体大å°"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr "默认粗体"
@@ -3663,6 +3793,19 @@ msgid "GUI scaling filter txr2img"
msgstr "GUI缩放过滤器 txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "å­æ¸¸æˆ"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "全局回调"
@@ -3698,6 +3841,16 @@ msgid "Graphics"
msgstr "图形"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "图形"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "图形"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "é‡åŠ›"
@@ -3714,8 +3867,13 @@ msgid "HTTP mods"
msgstr "HTTP Mods"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "HUD 缩放比例系数"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "GUI缩放"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -3970,14 +4128,23 @@ msgstr ""
"éœ€è¦æ³¢åŠ¨æ¶²ä½“å¯ç”¨ã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"在å¸è½½ä¸ä½¿ç”¨çš„地图区å—å‰ï¼ŒæœåС噍è¦ç­‰å¾…多少时间。\n"
"值越高越平滑,但是会使用更多内存。"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "å‡å°æ­¤å€¼ä»¥å¢žåŠ æ¶²ä½“å¯¹è¿åŠ¨çš„é˜»åŠ›ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
msgstr "ç”Ÿæˆæ²³æµå¤šå®½ã€‚"
@@ -4047,6 +4214,15 @@ msgstr ""
"下é™ã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"在连接到æœåŠ¡å™¨æ—¶å¯ç”¨æ³¨å†Œç¡®è®¤ã€‚\n"
+"如果ç¦ç”¨ï¼Œæ–°è´¦å·ä¼šè‡ªåŠ¨æ³¨å†Œã€‚"
+
+#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
@@ -4073,7 +4249,10 @@ msgid ""
msgstr "如果å¯ç”¨ï¼Œåˆ™åœ¨é£žè¡Œæˆ–游泳时相对于玩家的仰角æ¥ç§»åŠ¨æ–¹å‘。"
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr "如果å¯ç”¨ï¼Œæ–°çŽ©å®¶å°†æ— æ³•ä½¿ç”¨ç©ºå¯†ç åŠ å…¥ã€‚"
#: src/settings_translation_file.cpp
@@ -4123,10 +4302,6 @@ 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 "游æˆå†…èŠå¤©æŽ§åˆ¶å°èƒŒæ™¯ alpha 值(ä¸é€æ˜Žåº¦ï¼Œ0~255)。"
@@ -4182,15 +4357,12 @@ 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."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "å‘客户端å‘逿—¶é—´çš„间隔。"
#: src/settings_translation_file.cpp
@@ -5050,6 +5222,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr "æå‡ºåœ¨10秒内å‘é€è¶…过Xæ¡æ¶ˆæ¯çš„玩家。"
@@ -5106,10 +5282,11 @@ msgid "Left key"
msgstr "左方å‘é”®"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr ""
"æœåŠ¡å™¨æ—¶é’ŸèŠ‚æ‹é•¿åº¦ï¼Œé€šå¸¸ä¹Ÿæ˜¯å¯¹è±¡é€šè¿‡ç½‘络更新的\n"
"时间间隔。"
@@ -5123,18 +5300,25 @@ msgstr ""
"éœ€è¦æ³¢åŠ¨æ¶²ä½“å¯ç”¨ã€‚"
#: src/settings_translation_file.cpp
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+#, fuzzy
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr "ABM执行循环时长"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "NodeTimer执行循环时长"
#: src/settings_translation_file.cpp
-msgid "Length of time between active block management cycles"
+#, fuzzy
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "活动方å—管ç†å¾ªçŽ¯æ—¶é•¿"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5143,7 +5327,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"写入debug.txt的日志等级:\n"
"- <无>(无日志)\n"
@@ -5179,6 +5364,11 @@ msgid "Light curve low gradient"
msgstr "亮度曲线低梯度"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+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"
@@ -5615,10 +5805,6 @@ msgid "Maximum users"
msgstr "最大用户数"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "èœå•"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "Mesh 缓存"
@@ -5667,6 +5853,20 @@ msgid "Mipmapping"
msgstr "Mip 贴图"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "性能分æž"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "安全"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "mod频é“"
@@ -5764,10 +5964,6 @@ 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."
@@ -5776,6 +5972,11 @@ msgstr ""
"从主èœå•开始时此值将被覆盖。"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "网络"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "新用户需è¦è¾“入此密ç ã€‚"
@@ -5788,6 +5989,11 @@ msgid "Noclip key"
msgstr "穿墙键"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "æ–¹å—高亮"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "æ–¹å—高亮"
@@ -5839,10 +6045,6 @@ msgstr ""
"(4096=100MB,按ç»éªŒæ³•则)。"
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr "在线内容仓库(ContentDB)"
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "ä¸é€æ˜Žæ¶²ä½“"
@@ -5958,10 +6160,6 @@ msgstr ""
"è¿™éœ€è¦æœåŠ¡å™¨çš„â€œflyâ€æƒé™ã€‚"
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "玩家åç§°"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "玩家转移è·ç¦»"
@@ -6015,10 +6213,6 @@ msgid "Profiler toggle key"
msgstr "性能分æžå¯ç”¨/ç¦ç”¨é”®"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "性能分æž"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr "Prometheus 监å¬å™¨åœ°å€"
@@ -6194,7 +6388,7 @@ msgstr "当窗å£å¤§å°æ”¹å˜æ—¶è‡ªåЍä¿å­˜ã€‚"
#: src/settings_translation_file.cpp
msgid "Saving map received from server"
-msgstr "ä¿å­˜ä»ŽæœåŠ¡å™¨æ”¶åˆ°çš„åœ°å›¾"
+msgstr "正在ä¿å­˜ä»ŽæœåŠ¡å™¨æ”¶åˆ°çš„åœ°å›¾"
#: src/settings_translation_file.cpp
msgid ""
@@ -6211,6 +6405,11 @@ msgstr ""
"为代价混åˆåƒç´ ã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "å±å¹•:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "å±å¹•高度"
@@ -6241,6 +6440,11 @@ msgstr ""
"使用 0 æ¥ä½¿ç”¨é¢„设å“质。"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "截图"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "海底噪声"
@@ -6253,10 +6457,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "定义通é“çš„2个3D噪音的第二项。"
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "安全"
-
-#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "è§ https://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6315,8 +6515,19 @@ msgstr ""
"18 = 4D \"Mandelbulb\" 朱利亚集."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "æœåС噍 / å•人游æˆ"
+#, fuzzy
+msgid "Server"
+msgstr "æœåС噍 URL"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "æœåС噍åç§°"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "æœåС噍æè¿°"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6343,10 +6554,20 @@ msgid "Server side occlusion culling"
msgstr "æœåŠ¡å™¨ç«¯é®æŒ¡åˆ é™¤"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "æœåŠ¡å™¨ç«¯å£"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "æœåŠ¡å™¨åˆ—è¡¨ URL"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "æœåŠ¡å™¨åˆ—è¡¨ URL"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "æœåŠ¡å™¨åˆ—è¡¨æ–‡ä»¶"
@@ -6359,12 +6580,16 @@ msgstr ""
"å˜æ›´åŽé¡»é‡æ–°å¯åŠ¨ã€‚"
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr "设定客户端传é€çš„èŠå¤©è®¯æ¯çš„æœ€å¤§å­—符长度。"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
"设置阴影强度。\n"
@@ -6375,7 +6600,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
"设置软阴影åŠå¾„大å°ã€‚\n"
"较低的值æ„å‘³ç€æ›´æ¸…晰的阴影更大的值更柔和。\n"
@@ -6475,7 +6700,8 @@ msgid ""
msgstr "默认字体阴影å移(å•ä½ä¸ºåƒç´ ï¼‰ï¼Œ0 表示ä¸ç»˜åˆ¶é˜´å½±ã€‚"
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+#, fuzzy
+msgid "Shadow strength gamma"
msgstr "阴影强度"
#: src/settings_translation_file.cpp
@@ -6717,6 +6943,11 @@ msgid "Temperature variation for biomes."
msgstr "生物群系的温度å˜åŒ–。"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "设置"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "地形替代噪声"
@@ -6940,7 +7171,8 @@ msgid "Time speed"
msgstr "速度时间"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr "客户端从内存中移除未用地图数æ®çš„超时。"
#: src/settings_translation_file.cpp
@@ -6964,10 +7196,19 @@ msgid "Touch screen threshold"
msgstr "触å±é˜ˆå€¼"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "触å±é˜ˆå€¼"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr "性能æƒè¡¡"
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "树木噪声"
@@ -7061,6 +7302,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "缩放æè´¨æ—¶ä½¿ç”¨ä¸‰çº¿è¿‡æ»¤ã€‚"
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7303,6 +7548,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr "æ˜¯å¦æ˜¾ç¤ºå®¢æˆ·ç«¯è°ƒè¯•ä¿¡æ¯ï¼ˆä¸ŽæŒ‰ F5 的效果相åŒï¼‰ã€‚"
@@ -7397,6 +7651,10 @@ msgid "Y-level of seabed."
msgstr "海底的Yåæ ‡ã€‚"
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL 文件下载超时"
@@ -7439,6 +7697,9 @@ msgstr "cURL å¹¶å‘é™åˆ¶"
#~ msgid "Back"
#~ msgstr "åŽé€€"
+#~ msgid "Basic"
+#~ msgstr "基础"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "免屿¨¡å¼ä¸­çš„使¯åƒç´ ï¼ˆåˆç§°è‰²å½©æ·±åº¦ï¼‰ã€‚"
@@ -7467,6 +7728,12 @@ msgstr "cURL å¹¶å‘é™åˆ¶"
#~ msgid "Configure"
#~ msgstr "é…ç½®"
+#~ msgid "Connect"
+#~ msgstr "连接"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "控制在液体中的下沉速度。"
+
#, fuzzy
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
@@ -7512,12 +7779,24 @@ msgstr "cURL å¹¶å‘é™åˆ¶"
#~ "定义æè´¨é‡‡æ ·æ­¥éª¤ã€‚\n"
#~ "数值越高常æ€è´´å›¾è¶Šå¹³æ»‘。"
+#~ msgid "Del. Favorite"
+#~ msgstr "删除收è—项"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "从 minetest.net ä¸‹è½½ä¸€ä¸ªå­æ¸¸æˆï¼Œä¾‹å¦‚ minetest_game"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "从 minetest.net 下载一个"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "正在下载和安装 $1,请ç¨ç­‰..."
#~ msgid "Enable VBO"
#~ msgstr "å¯ç”¨ VBO"
+#~ msgid "Enable register confirmation"
+#~ msgstr "å¯ç”¨æ³¨å†Œç¡®è®¤"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7545,6 +7824,9 @@ msgstr "cURL å¹¶å‘é™åˆ¶"
#~ "å¯ç”¨è§†å·®é®è”½è´´å›¾ã€‚\n"
#~ "需è¦å¯ç”¨ç€è‰²å™¨ã€‚"
+#~ msgid "Enter "
+#~ msgstr "输入 "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7564,6 +7846,9 @@ msgstr "cURL å¹¶å‘é™åˆ¶"
#~ msgid "Fallback font size"
#~ msgstr "åŽå¤‡å­—体大å°"
+#~ msgid "Filtering"
+#~ msgstr "过滤"
+
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "字体阴影ä¸é€æ˜Žåº¦ï¼ˆ0-255)。"
@@ -7576,6 +7861,9 @@ msgstr "cURL å¹¶å‘é™åˆ¶"
#~ msgid "Full screen BPP"
#~ msgstr "å…¨å± BPP"
+#~ msgid "Game"
+#~ msgstr "å­æ¸¸æˆ"
+
#~ msgid "Gamma"
#~ msgstr "伽马"
@@ -7585,15 +7873,28 @@ msgstr "cURL å¹¶å‘é™åˆ¶"
#~ msgid "Generate normalmaps"
#~ msgstr "生æˆå‘现贴图"
+#~ msgid "HUD scale factor"
+#~ msgstr "HUD 缩放比例系数"
+
#~ msgid "High-precision FPU"
#~ msgstr "高精度 FPU"
#~ msgid "IPv6 support."
#~ msgstr "IPv6 支æŒã€‚"
+#~ msgid "In-Game"
+#~ msgstr "游æˆä¸­"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "安装:文件:â€$1“"
+#~ msgid "Instrumentation"
+#~ msgstr "计数器"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr "é”®ä½é…置。(如果这个èœå•被弄乱,从 minetest.conf 中删掉点东西)"
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "巨大洞穴深度"
@@ -7610,6 +7911,9 @@ msgstr "cURL å¹¶å‘é™åˆ¶"
#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
#~ msgstr "使DirectXå’ŒLuaJIT一起工作。如果这导致了问题ç¦ç”¨å®ƒã€‚"
+#~ msgid "Menus"
+#~ msgstr "èœå•"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "é›·è¾¾å°åœ°å›¾ï¼Œæ”¾å¤§è‡³ä¸¤å€"
@@ -7681,6 +7985,12 @@ msgstr "cURL å¹¶å‘é™åˆ¶"
#~ msgid "Path to save screenshots at."
#~ msgstr "å±å¹•截图ä¿å­˜è·¯å¾„。"
+#~ msgid "Player name"
+#~ msgstr "玩家åç§°"
+
+#~ msgid "Profiling"
+#~ msgstr "性能分æž"
+
#~ msgid "PvP enabled"
#~ msgstr "å¯ç”¨çŽ©å®¶å¯¹æˆ˜"
@@ -7690,6 +8000,9 @@ msgstr "cURL å¹¶å‘é™åˆ¶"
#~ msgid "Select Package File:"
#~ msgstr "选择包文件:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "æœåС噍 / å•人游æˆ"
+
#~ msgid ""
#~ "Set the shadow update time.\n"
#~ "Lower value means shadows and map updates faster, but it consume more "
@@ -7746,6 +8059,19 @@ msgstr "cURL å¹¶å‘é™åˆ¶"
#~ msgid "Yes"
#~ msgstr "是"
+#, 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 ""
+#~ "这是你第一次用“%sâ€åŠ å…¥æœåŠ¡å™¨ã€‚\n"
+#~ "如果è¦ç»§ç»­ï¼Œä¸€ä¸ªæ–°çš„用户将在æœåŠ¡å™¨ä¸Šåˆ›å»ºã€‚\n"
+#~ "è¯·é‡æ–°è¾“入你的密ç ç„¶åŽç‚¹å‡»â€œæ³¨å†Œâ€æ¥åˆ›å»ºç”¨æˆ·æˆ–ç‚¹å‡»â€œå–æ¶ˆâ€é€€å‡ºã€‚"
+
#~ msgid "You died."
#~ msgstr "æ‚¨å·²ç»æ­»äº¡."
diff --git a/po/zh_TW/minetest.po b/po/zh_TW/minetest.po
index ae10a17ff..0c7081ace 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: 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"
+"POT-Creation-Date: 2022-07-20 21:43+0200\n"
+"PO-Revision-Date: 2022-06-20 09:52+0000\n"
+"Last-Translator: Ivon Huang <qj985n2@protonmail.com>\n"
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
"minetest/minetest/zh_Hant/>\n"
"Language: zh_TW\n"
@@ -12,7 +12,7 @@ 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.10.1\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: builtin/client/chatcommands.lua
msgid "Clear the out chat queue"
@@ -112,6 +112,31 @@ msgid "The server has requested a reconnect:"
msgstr "伺æœå™¨å·²è¦æ±‚釿–°é€£ç·šï¼š"
#: builtin/mainmenu/common.lua
+msgid "A new $1 version is available"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Client Mods"
+msgstr "鏿“‡æ¨¡çµ„:"
+
+#: builtin/mainmenu/common.lua
+msgid ""
+"Installed version: $1\n"
+"New version: $2\n"
+"Visit $3 to find out how to get the newest version and stay up to date with "
+"features and bugfixes."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Later"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Never"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "å”定版本ä¸ç¬¦åˆã€‚ "
@@ -124,6 +149,10 @@ msgid "Server supports protocol versions between $1 and $2. "
msgstr "伺æœå™¨æ”¯æ´å”定版本 $1 到 $2。 "
#: builtin/mainmenu/common.lua
+msgid "Visit website"
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "æˆ‘å€‘åªæ”¯æ´å”定版本 $1。"
@@ -131,14 +160,21 @@ msgstr "æˆ‘å€‘åªæ”¯æ´å”定版本 $1。"
msgid "We support protocol versions between version $1 and $2."
msgstr "我們支æ´å”定版本 $1 到 $2。"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Enabled, has error)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "(Unsatisfied)"
+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_delete_world.lua builtin/mainmenu/dlg_register.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
+#: src/gui/guiKeyChangeMenu.cpp src/gui/guiPasswordChange.cpp
msgid "Cancel"
msgstr "å–æ¶ˆ"
@@ -275,7 +311,6 @@ msgid "Failed to download $1"
msgstr "無法下載 $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "éŠæˆ²"
@@ -296,7 +331,6 @@ msgid "Install: Unsupported file type or broken archive"
msgstr "安è£ï¼šæª”æ¡ˆé¡žåž‹ä¸æ”¯æ´ï¼Œæˆ–是å°å­˜æª”æå£ž"
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mods"
@@ -392,12 +426,9 @@ 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 下載一個"
+#, fuzzy
+msgid "Development Test is meant for developers."
+msgstr "警告:Development Test 僅供開發者使用。"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -416,13 +447,9 @@ msgstr "浮地山密度"
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 ""
+msgstr "生æˆéžç ´ç¢Žåœ°å½¢: 海洋與地底"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
@@ -437,6 +464,15 @@ msgid "Increases humidity around rivers"
msgstr "增加河æµå‘¨åœçš„æ¿•度"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Install a game"
+msgstr "å®‰è£ $1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Install another game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
msgstr "æ²³æµ"
@@ -536,10 +572,6 @@ 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 "世界å稱"
@@ -569,6 +601,39 @@ msgstr "pkgmgr:「$1ã€è·¯å¾‘無效"
msgid "Delete World \"$1\"?"
msgstr "刪除世界「$1ã€ï¼Ÿ"
+#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "確èªå¯†ç¢¼"
+
+#: builtin/mainmenu/dlg_register.lua
+msgid "Joining $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Missing name"
+msgstr "Mapgen å稱"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr "åå­—"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr "密碼"
+
+#: builtin/mainmenu/dlg_register.lua
+#, fuzzy
+msgid "Passwords do not match"
+msgstr "密碼ä¸ç¬¦åˆï¼"
+
+#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Register"
+msgstr "註冊並加入"
+
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
msgstr "接å—"
@@ -599,6 +664,16 @@ msgstr "< 回到設定é é¢"
msgid "Browse"
msgstr "ç€è¦½"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Games"
+msgstr "內容"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Content: Mods"
+msgstr "內容"
+
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "å·²åœç”¨"
@@ -656,7 +731,7 @@ msgstr "鏿“‡ç›®éŒ„"
msgid "Select file"
msgstr "鏿“‡æª”案"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Show technical names"
msgstr "顯示技術å稱"
@@ -804,6 +879,11 @@ msgstr "å…ˆå‰çš„è²¢ç»è€…"
msgid "Previous Core Developers"
msgstr "å…ˆå‰çš„æ ¸å¿ƒé–‹ç™¼è€…"
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Share debug log"
+msgstr "顯示除錯資訊"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "ç€è¦½ç·šä¸Šå…§å®¹"
@@ -872,10 +952,6 @@ msgstr "主機伺æœå™¨"
msgid "Install games from ContentDB"
msgstr "從 ContentDB 安è£éŠæˆ²"
-#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
-msgid "Name"
-msgstr "åå­—"
-
#: builtin/mainmenu/tab_local.lua
msgid "New"
msgstr "新增"
@@ -884,10 +960,6 @@ msgstr "新增"
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 "éŠçŽ©éŠæˆ²"
@@ -921,10 +993,6 @@ msgid "Clear"
msgstr "清除"
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
-msgstr "連線"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
msgstr "創造模å¼"
@@ -934,10 +1002,6 @@ msgid "Damage / PvP"
msgstr "傷害 / PvP"
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
-msgstr "刪除收è—"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Favorites"
msgstr "æ”¶è—"
@@ -950,6 +1014,10 @@ msgid "Join Game"
msgstr "åŠ å…¥éŠæˆ²"
#: builtin/mainmenu/tab_online.lua
+msgid "Login"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
@@ -962,10 +1030,19 @@ msgid "Refresh"
msgstr "釿–°æ•´ç†"
#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Remove favorite"
+msgstr "é ç«¯åŸ "
+
+#: builtin/mainmenu/tab_online.lua
msgid "Server Description"
msgstr "伺æœå™¨æè¿°"
#: builtin/mainmenu/tab_settings.lua
+msgid "(game support required)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr "2x"
@@ -1010,7 +1087,8 @@ msgid "Dynamic shadows"
msgstr "å‹•æ…‹é™°å½±"
#: builtin/mainmenu/tab_settings.lua
-msgid "Dynamic shadows: "
+#, fuzzy
+msgid "Dynamic shadows:"
msgstr "å‹•æ…‹é™°å½±: "
#: builtin/mainmenu/tab_settings.lua
@@ -1106,7 +1184,8 @@ msgid "Tone Mapping"
msgstr "色調映射"
#: builtin/mainmenu/tab_settings.lua
-msgid "Touchthreshold: (px)"
+#, fuzzy
+msgid "Touch threshold (px):"
msgstr "觸控閾值:(åƒç´ ï¼‰"
#: builtin/mainmenu/tab_settings.lua
@@ -1114,7 +1193,8 @@ msgid "Trilinear Filter"
msgstr "ä¸‰ç·šæ€§éŽæ¿¾å™¨"
#: builtin/mainmenu/tab_settings.lua
-msgid "Ultra High"
+#, fuzzy
+msgid "Very High"
msgstr "超高"
#: builtin/mainmenu/tab_settings.lua
@@ -1133,6 +1213,11 @@ msgstr "擺動液體"
msgid "Waving Plants"
msgstr "æ¤ç‰©æ“ºå‹•"
+#: src/client/client.cpp
+#, fuzzy
+msgid "Connection aborted (protocol error?)."
+msgstr "連線錯誤(逾時?)"
+
#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "連線逾時。"
@@ -1268,7 +1353,8 @@ msgid "Camera update enabled"
msgstr "已啟用相機更新"
#: src/client/game.cpp
-msgid "Can't show block bounds (need 'basic_debug' privilege)"
+#, fuzzy
+msgid "Can't show block bounds (disabled by mod or game)"
msgstr "ä¸èƒ½é¡¯ç¤ºå€å¡Šé‚Šç•Œ (需è¦ã€Œbasic_debugã€æ¬Šé™)"
#: src/client/game.cpp
@@ -1398,6 +1484,11 @@ msgid "Enabled unlimited viewing range"
msgstr "已啟用無é™è¦–野"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Error creating client: %s"
+msgstr "正在建立用戶端..."
+
+#: src/client/game.cpp
msgid "Exit to Menu"
msgstr "離開,回到é¸å–®"
@@ -1902,27 +1993,6 @@ msgstr "無法開啟網é "
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 ""
-"您第一次使用「%sã€å稱加入這個伺æœå™¨ã€‚\n"
-"å¦‚æ‚¨ç¹¼çºŒï¼Œå³æœƒåœ¨é€™å°ä¼ºæœå™¨ä½¿ç”¨ä½ çš„æ†‘證建立新帳戶。\n"
-"è«‹é‡æ–°è¼¸å…¥æ‚¨çš„密碼,後按下「註冊並加入ã€ç¢ºèªå¸³æˆ¶å»ºç«‹ï¼Œæˆ–æŒ‰ã€Œå–æ¶ˆã€ä¸­æ­¢ã€‚"
-
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "繼續"
@@ -1955,7 +2025,7 @@ msgstr "å€å¡Šé‚Šç•Œ"
msgid "Change camera"
msgstr "變更相機"
-#: src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Chat"
msgstr "èŠå¤©"
@@ -2008,8 +2078,8 @@ msgid "Key already in use"
msgstr "已使用此按éµ"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "按éµç¶å®šã€‚(若此é¸å–®éŽ–ä½äº†ï¼Œå¾ž minetest.conf ç§»é™¤ç›¸é—œåƒæ•¸ï¼‰"
+msgid "Keybindings."
+msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -2080,10 +2150,6 @@ msgid "Change"
msgstr "變更"
#: src/gui/guiPasswordChange.cpp
-msgid "Confirm Password"
-msgstr "確èªå¯†ç¢¼"
-
-#: src/gui/guiPasswordChange.cpp
msgid "New Password"
msgstr "新密碼"
@@ -2091,6 +2157,10 @@ msgstr "新密碼"
msgid "Old Password"
msgstr "舊密碼"
+#: src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "密碼ä¸ç¬¦åˆï¼"
+
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
msgstr "離開"
@@ -2104,12 +2174,6 @@ msgstr "å·²éœéŸ³"
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 "輸入 "
-
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
#. language code (e.g. "de" for German).
@@ -2117,6 +2181,16 @@ msgstr "輸入 "
msgid "LANG_CODE"
msgstr "zh_TW"
+#: src/network/clientpackethandler.cpp
+msgid ""
+"Name is not registered. To create an account on this server, click 'Register'"
+msgstr ""
+
+#: src/network/clientpackethandler.cpp
+#, fuzzy
+msgid "Name is taken. Please choose another name"
+msgstr "è«‹é¸æ“‡å稱ï¼"
+
#: src/settings_translation_file.cpp
msgid ""
"(Android) Fixes the position of virtual joystick.\n"
@@ -2265,6 +2339,10 @@ msgstr ""
"註:interlaced 模å¼éœ€è¦å•Ÿç”¨è‘—色器。"
#: src/settings_translation_file.cpp
+msgid "3d"
+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."
@@ -2352,6 +2430,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Admin name"
+msgstr "將物å“å稱加至末尾"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "進階"
@@ -2365,7 +2448,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Always fly and fast"
+#, fuzzy
+msgid "Always fly fast"
msgstr "總是啟用飛行與快速模å¼"
#: src/settings_translation_file.cpp
@@ -2442,6 +2526,10 @@ msgstr ""
"在地圖å€å¡Šä¸­é¡¯ç¤ºï¼ˆ16 個節點)"
#: src/settings_translation_file.cpp
+msgid "Audio"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Automatic forward key"
msgstr "自動å‰é€²éµ"
@@ -2482,10 +2570,6 @@ msgid "Base terrain height."
msgstr "基礎地形高度。"
#: src/settings_translation_file.cpp
-msgid "Basic"
-msgstr "基礎"
-
-#: src/settings_translation_file.cpp
msgid "Basic privileges"
msgstr "基礎特權"
@@ -2506,7 +2590,8 @@ msgid "Bind address"
msgstr "ç¶å®šåœ°å€"
#: src/settings_translation_file.cpp
-msgid "Biome API temperature and humidity noise parameters"
+#, fuzzy
+msgid "Biome API noise parameters"
msgstr "Biome API 溫度與濕度 雜訊 åƒæ•¸"
#: src/settings_translation_file.cpp
@@ -2518,6 +2603,10 @@ msgid "Block send optimize distance"
msgstr "å€å¡Šå‚³é€æœ€ä½³åŒ–è·é›¢"
#: src/settings_translation_file.cpp
+msgid "Bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
msgstr "粗體與斜體字型路徑"
@@ -2542,6 +2631,11 @@ msgid "Builtin"
msgstr "內建"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera"
+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"
@@ -2699,6 +2793,11 @@ msgid "Client side node lookup range restriction"
msgstr "用戶端節點查詢範åœé™åˆ¶"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Client-side Modding"
+msgstr "用戶端修改"
+
+#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr "攀爬速度"
@@ -2798,6 +2897,10 @@ msgid "Console height"
msgstr "終端機高度"
#: src/settings_translation_file.cpp
+msgid "Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
msgstr "ContentDB 旗標黑å單列表"
@@ -2836,8 +2939,10 @@ msgstr ""
"72 = 20分é˜ï¼Œ360 = 4分é˜ï¼Œ1 = 24å°æ™‚,0 = æ—¥ï¼å¤œï¼ä¸€åˆ‡ä¿æŒä¸è®Šã€‚"
#: src/settings_translation_file.cpp
-msgid "Controls sinking speed in liquid."
-msgstr "控制在液體中的下沉速度。"
+msgid ""
+"Controls sinking speed in liquid when idling. Negative values will cause\n"
+"you to rise instead."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2910,12 +3015,12 @@ msgid "Debug log level"
msgstr "除錯記錄等級"
#: src/settings_translation_file.cpp
-msgid "Dec. volume key"
-msgstr "éŸ³é‡æ¸›å°‘éµ"
+msgid "Debugging"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Decrease this to increase liquid resistance to movement."
-msgstr "減少此值å¯å¢žåŠ æ¶²é«”çš„é‹å‹•阻力。"
+msgid "Dec. volume key"
+msgstr "éŸ³é‡æ¸›å°‘éµ"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3066,6 +3171,11 @@ msgid "Desynchronize block animation"
msgstr "異步化方塊動畫"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Developer Options"
+msgstr "è£é£¾ç‰©"
+
+#: src/settings_translation_file.cpp
msgid "Dig key"
msgstr "挖掘éµ"
@@ -3086,6 +3196,12 @@ msgid "Display Density Scaling Factor"
msgstr "顯示密度縮放因å­"
#: src/settings_translation_file.cpp
+msgid ""
+"Distance in nodes at which transparency depth sorting is enabled\n"
+"Use this to limit the performance impact of transparency depth sorting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "伺æœå™¨çš„域å,將會在伺æœå™¨åˆ—表中顯示。"
@@ -3160,6 +3276,10 @@ msgid "Enable joysticks"
msgstr "å•Ÿç”¨æ–æ¡¿"
#: src/settings_translation_file.cpp
+msgid "Enable joysticks. Requires a restart to take effect"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
msgstr "啟用 mod 頻铿”¯æ´ã€‚"
@@ -3176,18 +3296,6 @@ 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 ""
-"連線到伺æœå™¨æ™‚啟用註冊確èªã€‚\n"
-"如果åœç”¨ï¼Œæœƒè‡ªå‹•註冊新的帳號。"
-
-#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
@@ -3196,6 +3304,10 @@ msgstr ""
"åœç”¨ä»¥å–得速度或ä¸åŒçš„外觀。"
#: src/settings_translation_file.cpp
+msgid "Enable split login/register"
+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 "
@@ -3277,6 +3389,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Engine profiler"
+msgstr "山谷分æž"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "引擎性能資料å°å‡ºé–“éš”"
@@ -3295,6 +3412,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "FPS when unfocused or paused"
msgstr "ç•¶éŠæˆ²æš«åœæ™‚的最高 FPS。"
@@ -3385,8 +3506,9 @@ msgstr ""
"清ç†é€™äº›æ±è¥¿ã€‚"
#: src/settings_translation_file.cpp
-msgid "Filtering"
-msgstr "éŽæ¿¾å™¨"
+#, fuzzy
+msgid "Filtering and Antialiasing"
+msgstr "å鋸齒:"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3460,6 +3582,11 @@ msgid "Fog toggle key"
msgstr "霧氣切æ›éµ"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font"
+msgstr "字型大å°"
+
+#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3614,6 +3741,19 @@ msgid "GUI scaling filter txr2img"
msgstr "圖形使用者介é¢ç¸®æ”¾æ¯”ä¾‹éŽæ¿¾å™¨ txr2img"
#: src/settings_translation_file.cpp
+msgid "GUIs"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Gamepads"
+msgstr "éŠæˆ²"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr "全域回呼"
@@ -3647,6 +3787,16 @@ msgid "Graphics"
msgstr "圖形"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics Effects"
+msgstr "圖形"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Graphics and Audio"
+msgstr "圖形"
+
+#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr "é‡åŠ›"
@@ -3664,8 +3814,13 @@ msgid "HTTP mods"
msgstr "HTTP Mod"
#: src/settings_translation_file.cpp
-msgid "HUD scale factor"
-msgstr "HUD 縮放係數"
+msgid "HUD"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HUD scaling"
+msgstr "圖形使用者介é¢ç¸®æ”¾æ¯”例"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -3914,8 +4069,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"How much the server will wait before unloading unused mapblocks.\n"
+"How long the server will wait before unloading unused mapblocks, stated in "
+"seconds.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
"åœ¨å–æ¶ˆè¼‰å…¥å‰è¦æœ‰å¤šå°‘未使用的地圖å€å¡Šã€‚\n"
@@ -3923,6 +4080,13 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid ""
+"How much you are slowed down when moving inside a liquid.\n"
+"Decrease this to increase liquid resistance to movement."
+msgstr "減少此值å¯å¢žåŠ æ¶²é«”çš„é‹å‹•阻力。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "How wide to make rivers."
msgstr "æ²³æµå¤šå¯¬"
@@ -3992,6 +4156,15 @@ msgid ""
msgstr "若啟用,å‘下爬與下é™å°‡ä½¿ç”¨ã€Œä½¿ç”¨ã€éµè€Œéžã€Œæ½›è¡Œã€éµã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If enabled, account registration is separate from login in the UI.\n"
+"If disabled, new accounts will be registered automatically when logging in."
+msgstr ""
+"連線到伺æœå™¨æ™‚啟用註冊確èªã€‚\n"
+"如果åœç”¨ï¼Œæœƒè‡ªå‹•註冊新的帳號。"
+
+#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
@@ -4018,7 +4191,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "If enabled, new players cannot join with an empty password."
+#, fuzzy
+msgid ""
+"If enabled, players cannot join without a password or change theirs to an "
+"empty password."
msgstr "若啟用,新玩家將無法以空密碼加入。"
#: src/settings_translation_file.cpp
@@ -4060,10 +4236,6 @@ 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 "éŠæˆ²å…§èŠå¤©è¦–窗背景 alpha 值(ä¸é€æ˜Žåº¦ï¼Œä»‹æ–¼ 0 到 255 間)。"
@@ -4119,15 +4291,12 @@ 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."
+#, fuzzy
+msgid "Interval of sending time of day to clients, stated in seconds."
msgstr "傳é€ç•¶æ—¥æ™‚間至用戶端的間隔。"
#: src/settings_translation_file.cpp
@@ -4986,6 +5155,10 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
+msgid "Keyboard and Mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
@@ -5046,7 +5219,7 @@ msgstr "å·¦éµ"
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
-"network."
+"network, stated in seconds."
msgstr "伺æœå™¨ tick 的長度與相關物件的間隔通常é€éŽç¶²è·¯æ›´æ–°ã€‚"
#: src/settings_translation_file.cpp
@@ -5060,19 +5233,24 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgid ""
+"Length of time between Active Block Modifier (ABM) execution cycles, stated "
+"in seconds."
msgstr "在 ABM 執行循環間的時間長度"
#: src/settings_translation_file.cpp
-msgid "Length of time between NodeTimer execution cycles"
+#, fuzzy
+msgid "Length of time between NodeTimer execution cycles, stated in seconds."
msgstr "在 Node 計時器執行循環間的時間長度"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Length of time between active block management cycles"
+msgid ""
+"Length of time between active block management cycles, stated in seconds."
msgstr "åœ¨æ´»èºæ–¹å¡Šç®¡ç†å¾ªç’°çš„æ™‚間中間"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -5081,7 +5259,8 @@ msgid ""
"- warning\n"
"- action\n"
"- info\n"
-"- verbose"
+"- verbose\n"
+"- trace"
msgstr ""
"è¦è¢«å¯«å…¥åˆ° debug.txt 的紀錄等級:\n"
"- <nothing> (ä¸è¨˜éŒ„)\n"
@@ -5117,6 +5296,11 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lighting"
+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"
@@ -5567,10 +5751,6 @@ msgid "Maximum users"
msgstr "最多使用者"
#: src/settings_translation_file.cpp
-msgid "Menus"
-msgstr "é¸å–®"
-
-#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr "網狀快å–"
@@ -5620,6 +5800,20 @@ msgid "Mipmapping"
msgstr "映射貼圖"
#: src/settings_translation_file.cpp
+msgid "Misc"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Profiler"
+msgstr "分æžå™¨"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mod Security"
+msgstr "安全"
+
+#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr ""
@@ -5714,10 +5908,6 @@ 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."
@@ -5726,6 +5916,11 @@ msgstr ""
"當從主é¸å–®å•Ÿå‹•時,這個值將會被覆寫。"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Networking"
+msgstr "網路"
+
+#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr "新使用這需è¦è¼¸å…¥é€™å€‹å¯†ç¢¼ã€‚"
@@ -5738,6 +5933,11 @@ msgid "Noclip key"
msgstr "穿牆按éµ"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node and Entity Highlighting"
+msgstr "çªé¡¯æ–¹å¡Š"
+
+#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr "çªé¡¯ç¯€é»ž"
@@ -5779,10 +5979,6 @@ msgstr ""
"記憶體耗費(根據經驗,4096=100MB)。"
#: src/settings_translation_file.cpp
-msgid "Online Content Repository"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Opaque liquids"
msgstr "ä¸é€æ˜Žæ¶²é«”"
@@ -5882,10 +6078,6 @@ msgstr ""
"這需è¦åœ¨ä¼ºæœå™¨ä¸Šå•Ÿç”¨ã€Œé£›è¡Œã€ç‰¹æ¬Šã€‚"
#: src/settings_translation_file.cpp
-msgid "Player name"
-msgstr "玩家å稱"
-
-#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr "玩家傳é€è·é›¢"
@@ -5937,10 +6129,6 @@ msgid "Profiler toggle key"
msgstr "分æžå™¨åˆ‡æ›éµ"
#: src/settings_translation_file.cpp
-msgid "Profiling"
-msgstr "分æž"
-
-#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
msgstr ""
@@ -6126,6 +6314,11 @@ msgstr ""
"邊緣的åƒç´ æ™‚æœƒä»¥éžæ•´æ•¸çš„大å°ç¸®æ”¾ã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screen"
+msgstr "螢幕:"
+
+#: src/settings_translation_file.cpp
msgid "Screen height"
msgstr "螢幕高度"
@@ -6156,6 +6349,11 @@ msgstr ""
"使用 0 來使用é è¨­å“質。"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshots"
+msgstr "螢幕擷å–"
+
+#: src/settings_translation_file.cpp
msgid "Seabed noise"
msgstr "海底雜訊"
@@ -6168,10 +6366,6 @@ msgid "Second of two 3D noises that together define tunnels."
msgstr "二之二 一åŒå®šç¾©éš§é“çš„ 3D 雜訊。"
#: src/settings_translation_file.cpp
-msgid "Security"
-msgstr "安全"
-
-#: src/settings_translation_file.cpp
#, fuzzy
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "請見 http://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -6232,8 +6426,19 @@ msgstr ""
"18 = 4D \"Mandelbulb\" julia set."
#: src/settings_translation_file.cpp
-msgid "Server / Singleplayer"
-msgstr "伺æœå™¨ï¼å–®äººéŠæˆ²"
+#, fuzzy
+msgid "Server"
+msgstr "伺æœå™¨ URL"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Gameplay"
+msgstr "伺æœå™¨å稱"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server Security"
+msgstr "伺æœå™¨æè¿°"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -6260,10 +6465,20 @@ msgid "Server side occlusion culling"
msgstr "伺æœå™¨ç«¯é®æ“‹å‰”除"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server/Env Performance"
+msgstr "伺æœå™¨åŸ "
+
+#: src/settings_translation_file.cpp
msgid "Serverlist URL"
msgstr "伺æœå™¨æ¸…å–® URL"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist and MOTD"
+msgstr "伺æœå™¨æ¸…å–® URL"
+
+#: src/settings_translation_file.cpp
msgid "Serverlist file"
msgstr "伺æœå™¨æ¸…單檔"
@@ -6276,12 +6491,15 @@ msgstr ""
"è®Šæ›´å¾Œå¿…é ˆé‡æ–°å•Ÿå‹•以使其生效。"
#: src/settings_translation_file.cpp
-msgid "Set the maximum character length of a chat message sent by clients."
+#, fuzzy
+msgid ""
+"Set the maximum length of a chat message (in characters) sent by clients."
msgstr "設定用戶端傳é€ä¹‹èŠå¤©è¨Šæ¯çš„æœ€å¤§å­—元長度。"
#: src/settings_translation_file.cpp
msgid ""
-"Set the shadow strength.\n"
+"Set the shadow strength gamma.\n"
+"Adjusts the intensity of in-game dynamic shadows.\n"
"Lower value means lighter shadows, higher value means darker shadows."
msgstr ""
@@ -6289,7 +6507,7 @@ msgstr ""
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"
+"Minimum value: 1.0; maximum value: 15.0"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6383,7 +6601,7 @@ msgid ""
msgstr "字型陰影å移,若為 0 則陰影將䏿œƒè¢«ç¹ªè£½ã€‚"
#: src/settings_translation_file.cpp
-msgid "Shadow strength"
+msgid "Shadow strength gamma"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6601,6 +6819,11 @@ msgid "Temperature variation for biomes."
msgstr "生態的溫度變化。"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Temporary Settings"
+msgstr "設定"
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr "地形替代雜訊"
@@ -6831,7 +7054,8 @@ msgid "Time speed"
msgstr "時間速度"
#: src/settings_translation_file.cpp
-msgid "Timeout for client to remove unused map data from memory."
+#, fuzzy
+msgid "Timeout for client to remove unused map data from memory, in seconds."
msgstr "用戶端從記憶體移除未使用的地圖資料的逾時時間。"
#: src/settings_translation_file.cpp
@@ -6858,10 +7082,19 @@ msgid "Touch screen threshold"
msgstr "æµ·ç˜é›œè¨Šé–¾å€¼"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Touchscreen"
+msgstr "æµ·ç˜é›œè¨Šé–¾å€¼"
+
+#: src/settings_translation_file.cpp
msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Transparency Sorting Distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "樹林雜訊"
@@ -6961,6 +7194,10 @@ msgid "Use trilinear filtering when scaling textures."
msgstr "當縮放æè³ªæ™‚ä½¿ç”¨ä¸‰ç·šæ€§éŽæ¿¾ã€‚"
#: src/settings_translation_file.cpp
+msgid "User Interfaces"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr "VBO"
@@ -7235,6 +7472,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Whether to show technical names.\n"
+"Affects mods and texture packs in the Content and Select Mods menus, as well "
+"as\n"
+"setting names in All Settings.\n"
+"Controlled by the checkbox in the \"All settings\" menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr "是å¦é¡¯ç¤ºç”¨æˆ¶ç«¯é™¤éŒ¯è³‡è¨Šï¼ˆèˆ‡æŒ‰ä¸‹ F5 æœ‰åŒæ¨£çš„æ•ˆæžœï¼‰ã€‚"
@@ -7334,6 +7580,10 @@ msgid "Y-level of seabed."
msgstr "海底的 Y 高度。"
#: src/settings_translation_file.cpp
+msgid "cURL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL 檔案下載逾時"
@@ -7376,6 +7626,9 @@ msgstr "cURL 並行é™åˆ¶"
#~ msgid "Back"
#~ msgstr "返回"
+#~ msgid "Basic"
+#~ msgstr "基礎"
+
#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
#~ msgstr "全螢幕模å¼ä¸­çš„ä½å…ƒï¼åƒç´ ï¼ˆåˆç¨±è‰²å½©æ·±åº¦ï¼‰ã€‚"
@@ -7391,6 +7644,12 @@ msgstr "cURL 並行é™åˆ¶"
#~ msgid "Configure"
#~ msgstr "設定"
+#~ msgid "Connect"
+#~ msgstr "連線"
+
+#~ msgid "Controls sinking speed in liquid."
+#~ msgstr "控制在液體中的下沉速度。"
+
#, fuzzy
#~ msgid ""
#~ "Controls the density of mountain-type floatlands.\n"
@@ -7436,12 +7695,24 @@ msgstr "cURL 並行é™åˆ¶"
#~ "定義æè³ªçš„æŽ¡æ¨£æ­¥é©Ÿã€‚\n"
#~ "較高的值會有較平滑的一般地圖。"
+#~ msgid "Del. Favorite"
+#~ msgstr "刪除收è—"
+
+#~ msgid "Download a game, such as Minetest Game, from minetest.net"
+#~ msgstr "從 minetest.net ä¸‹è¼‰éŠæˆ²ï¼Œä¾‹å¦‚ Minetest Game"
+
+#~ msgid "Download one from minetest.net"
+#~ msgstr "從 minetest.net 下載一個"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "æ­£åœ¨ä¸‹è¼‰ä¸¦å®‰è£ $1,請ç¨å€™â€¦â€¦"
#~ msgid "Enable VBO"
#~ msgstr "啟用 VBO"
+#~ msgid "Enable register confirmation"
+#~ msgstr "啟用註冊確èª"
+
#~ msgid ""
#~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the "
#~ "texture pack\n"
@@ -7469,6 +7740,9 @@ msgstr "cURL 並行é™åˆ¶"
#~ "啟用視差é®è”½è²¼åœ–。\n"
#~ "必須啟用著色器。"
+#~ msgid "Enter "
+#~ msgstr "輸入 "
+
#~ msgid ""
#~ "Experimental option, might cause visible spaces between blocks\n"
#~ "when set to higher number than 0."
@@ -7488,6 +7762,9 @@ msgstr "cURL 並行é™åˆ¶"
#~ msgid "Fallback font size"
#~ msgstr "後備字型大å°"
+#~ msgid "Filtering"
+#~ msgstr "éŽæ¿¾å™¨"
+
#~ msgid "Floatland base height noise"
#~ msgstr "浮地基礎高度噪音"
@@ -7501,6 +7778,9 @@ msgstr "cURL 並行é™åˆ¶"
#~ msgid "Full screen BPP"
#~ msgstr "全螢幕 BPP"
+#~ msgid "Game"
+#~ msgstr "éŠæˆ²"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7510,15 +7790,28 @@ msgstr "cURL 並行é™åˆ¶"
#~ msgid "Generate normalmaps"
#~ msgstr "生æˆä¸€èˆ¬åœ°åœ–"
+#~ msgid "HUD scale factor"
+#~ msgstr "HUD 縮放係數"
+
#~ msgid "High-precision FPU"
#~ msgstr "高精度 FPU"
#~ msgid "IPv6 support."
#~ msgstr "IPv6 支æ´ã€‚"
+#~ msgid "In-Game"
+#~ msgstr "éŠæˆ²ä¸­"
+
#~ msgid "Install: file: \"$1\""
#~ msgstr "安è£ï¼šæª”案:「$1ã€"
+#~ msgid "Instrumentation"
+#~ msgstr "儀表"
+
+#~ msgid ""
+#~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#~ msgstr "按éµç¶å®šã€‚(若此é¸å–®éŽ–ä½äº†ï¼Œå¾ž minetest.conf ç§»é™¤ç›¸é—œåƒæ•¸ï¼‰"
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "大型洞穴深度"
@@ -7536,6 +7829,9 @@ msgstr "cURL 並行é™åˆ¶"
#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
#~ msgstr "讓 DirectX 與 LuaJIT 一åŒé‹ä½œã€‚若其造æˆéº»ç…©å‰‡è«‹åœç”¨ã€‚"
+#~ msgid "Menus"
+#~ msgstr "é¸å–®"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "雷锿¨¡å¼çš„迷你地圖,放大 2 å€"
@@ -7603,6 +7899,12 @@ msgstr "cURL 並行é™åˆ¶"
#~ msgid "Path to save screenshots at."
#~ msgstr "儲存螢幕截圖的路徑。"
+#~ msgid "Player name"
+#~ msgstr "玩家å稱"
+
+#~ msgid "Profiling"
+#~ msgstr "分æž"
+
#~ msgid "PvP enabled"
#~ msgstr "å·²å•Ÿç”¨çŽ©å®¶å°æˆ°"
@@ -7613,6 +7915,9 @@ msgstr "cURL 並行é™åˆ¶"
#~ msgid "Select Package File:"
#~ msgstr "é¸å– Mod 檔案:"
+#~ msgid "Server / Singleplayer"
+#~ msgstr "伺æœå™¨ï¼å–®äººéŠæˆ²"
+
#~ msgid "Shadow limit"
#~ msgstr "é™°å½±é™åˆ¶"
@@ -7681,6 +7986,19 @@ msgstr "cURL 並行é™åˆ¶"
#~ msgid "Yes"
#~ msgstr "是"
+#, 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 ""
+#~ "您第一次使用「%sã€å稱加入這個伺æœå™¨ã€‚\n"
+#~ "å¦‚æ‚¨ç¹¼çºŒï¼Œå³æœƒåœ¨é€™å°ä¼ºæœå™¨ä½¿ç”¨ä½ çš„æ†‘證建立新帳戶。\n"
+#~ "è«‹é‡æ–°è¼¸å…¥æ‚¨çš„密碼,後按下「註冊並加入ã€ç¢ºèªå¸³æˆ¶å»ºç«‹ï¼Œæˆ–æŒ‰ã€Œå–æ¶ˆã€ä¸­æ­¢ã€‚"
+
#, fuzzy
#~ msgid "You died."
#~ msgstr "您已死亡"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7f207244c..c068be575 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -98,8 +98,8 @@ if(BUILD_CLIENT AND ENABLE_SOUND)
endif()
endif()
-
-option(ENABLE_GLES "Use OpenGL ES instead of OpenGL" FALSE)
+# TODO: this should be removed one day, we can enable it unconditionally
+option(ENABLE_GLES "Enable extra support code for OpenGL ES" FALSE)
mark_as_advanced(ENABLE_GLES)
option(ENABLE_TOUCH "Enable Touchscreen support" FALSE)
@@ -108,21 +108,6 @@ if(ENABLE_TOUCH)
endif()
if(BUILD_CLIENT)
- # 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})
-
- find_package(OpenGL REQUIRED)
- endif()
- endif()
-endif()
-
-if(BUILD_CLIENT)
find_package(Freetype REQUIRED)
endif()
@@ -151,6 +136,7 @@ if(ENABLE_POSTGRESQL)
if(PostgreSQL_INCLUDE_DIR AND PostgreSQL_LIBRARY)
set(PostgreSQL_FOUND TRUE)
set(PostgreSQL_INCLUDE_DIRS ${PostgreSQL_INCLUDE_DIR})
+ set(PostgreSQL_LIBRARIES ${PostgreSQL_LIBRARY})
endif()
else()
find_package(PostgreSQL)
@@ -345,6 +331,7 @@ add_subdirectory(mapgen)
add_subdirectory(network)
add_subdirectory(script)
add_subdirectory(unittest)
+add_subdirectory(benchmark)
add_subdirectory(util)
add_subdirectory(irrlicht_changes)
add_subdirectory(server)
@@ -427,6 +414,9 @@ if(BUILD_UNITTESTS)
set(common_SRCS ${common_SRCS} ${UNITTEST_SRCS})
endif()
+if(BUILD_BENCHMARKS)
+ set(common_SRCS ${common_SRCS} ${BENCHMARK_SRCS})
+endif()
# This gives us the icon and file version information
if(WIN32)
@@ -467,6 +457,10 @@ if(BUILD_UNITTESTS)
set(client_SRCS ${client_SRCS} ${UNITTEST_CLIENT_SRCS})
endif()
+if(BUILD_BENCHMARKS)
+ set(client_SRCS ${client_SRCS} ${BENCHMARK_CLIENT_SRCS})
+endif()
+
list(SORT client_SRCS)
# Server sources
@@ -485,6 +479,9 @@ endif()
include_directories(
${PROJECT_BINARY_DIR}
${PROJECT_SOURCE_DIR}
+ ${PROJECT_SOURCE_DIR}/script
+)
+include_directories(SYSTEM
${ZLIB_INCLUDE_DIR}
${ZSTD_INCLUDE_DIR}
${SQLITE3_INCLUDE_DIR}
@@ -492,7 +489,6 @@ include_directories(
${GMP_INCLUDE_DIR}
${JSON_INCLUDE_DIR}
${LUA_BIT_INCLUDE_DIR}
- ${PROJECT_SOURCE_DIR}/script
)
if(USE_GETTEXT)
@@ -500,7 +496,7 @@ if(USE_GETTEXT)
endif()
if(BUILD_CLIENT)
- include_directories(
+ include_directories(SYSTEM
${FREETYPE_INCLUDE_DIRS}
${SOUND_INCLUDE_DIRS}
${X11_INCLUDE_DIR}
@@ -544,18 +540,6 @@ if(BUILD_CLIENT)
)
endif()
- if(ENABLE_GLES)
- target_link_libraries(
- ${PROJECT_NAME}
- ${OPENGLES2_LIBRARIES}
- ${EGL_LIBRARIES}
- )
- else()
- target_link_libraries(
- ${PROJECT_NAME}
- ${OPENGL_LIBRARIES}
- )
- endif()
if(USE_GETTEXT)
target_link_libraries(
${PROJECT_NAME}
@@ -592,6 +576,9 @@ if(BUILD_CLIENT)
if (USE_SPATIAL)
target_link_libraries(${PROJECT_NAME} ${SPATIAL_LIBRARY})
endif()
+ if(BUILD_BENCHMARKS)
+ target_link_libraries(${PROJECT_NAME} catch2)
+ endif()
endif(BUILD_CLIENT)
@@ -651,6 +638,9 @@ if(BUILD_SERVER)
${CURL_LIBRARY}
)
endif()
+ if(BUILD_BENCHMARKS)
+ target_link_libraries(${PROJECT_NAME}server catch2)
+ endif()
endif(BUILD_SERVER)
# Blacklisted locales that don't work.
@@ -718,15 +708,13 @@ if(MSVC)
endif()
else()
# GCC or compatible compilers such as Clang
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+ set(WARNING_FLAGS "-Wall -Wextra")
+ set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-parameter -Wno-implicit-fallthrough")
if(WARN_ALL)
- set(RELEASE_WARNING_FLAGS "-Wall")
+ set(RELEASE_WARNING_FLAGS "${WARNING_FLAGS}")
else()
set(RELEASE_WARNING_FLAGS "")
endif()
- if(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?Clang")
- set(WARNING_FLAGS "${WARNING_FLAGS} -Wsign-compare")
- endif()
if(APPLE AND USE_LUAJIT)
# required per http://luajit.org/install.html
@@ -737,7 +725,7 @@ else()
# Move text segment below LuaJIT's 47-bit limit (see issue #9367)
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
+ # --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
@@ -768,7 +756,7 @@ else()
endif()
endif()
- set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -Wall -pipe -funroll-loops")
+ set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${OTHER_FLAGS} -pipe -funroll-loops")
if(CMAKE_SYSTEM_NAME MATCHES "(Darwin|BSD|DragonFly)")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os")
else()
@@ -781,8 +769,9 @@ else()
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MATH_FLAGS}")
endif()
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}")
+ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} -g")
+ set(CMAKE_CXX_FLAGS_SEMIDEBUG "-g -O1 ${WARNING_FLAGS} ${OTHER_FLAGS}")
+ set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 ${WARNING_FLAGS} ${OTHER_FLAGS}")
if(USE_GPROF)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
@@ -852,13 +841,14 @@ 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()
+
+ if(BUILD_CLIENT AND IRRLICHT_DLL)
+ install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
+ endif()
endif()
if(BUILD_CLIENT)
diff --git a/src/benchmark/CMakeLists.txt b/src/benchmark/CMakeLists.txt
new file mode 100644
index 000000000..5feba345b
--- /dev/null
+++ b/src/benchmark/CMakeLists.txt
@@ -0,0 +1,7 @@
+set (BENCHMARK_SRCS
+ ${CMAKE_CURRENT_SOURCE_DIR}/benchmark.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/benchmark_serialize.cpp
+ PARENT_SCOPE)
+
+set (BENCHMARK_CLIENT_SRCS
+ PARENT_SCOPE)
diff --git a/src/benchmark/benchmark.cpp b/src/benchmark/benchmark.cpp
new file mode 100644
index 000000000..0bc2af368
--- /dev/null
+++ b/src/benchmark/benchmark.cpp
@@ -0,0 +1,32 @@
+/*
+Minetest
+Copyright (C) 2022 Minetest Authors
+
+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 "benchmark/benchmark.h"
+
+// This must be set in just this file
+#define CATCH_CONFIG_RUNNER
+#include "benchmark_setup.h"
+
+int run_benchmarks()
+{
+ int argc = 1;
+ const char *argv[] = { "MinetestBenchmark", NULL };
+ int errCount = Catch::Session().run(argc, argv);
+ return errCount ? 1 : 0;
+}
diff --git a/src/benchmark/benchmark.h b/src/benchmark/benchmark.h
new file mode 100644
index 000000000..45dd9b6a4
--- /dev/null
+++ b/src/benchmark/benchmark.h
@@ -0,0 +1,26 @@
+/*
+Minetest
+Copyright (C) 2022 Minetest Authors
+
+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 "config.h"
+
+#if BUILD_BENCHMARKS
+extern int run_benchmarks();
+#endif
diff --git a/src/benchmark/benchmark_serialize.cpp b/src/benchmark/benchmark_serialize.cpp
new file mode 100644
index 000000000..97cc7d59d
--- /dev/null
+++ b/src/benchmark/benchmark_serialize.cpp
@@ -0,0 +1,71 @@
+/*
+Minetest
+Copyright (C) 2022 Minetest Authors
+
+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 "benchmark_setup.h"
+#include "util/serialize.h"
+#include <sstream>
+#include <ios>
+
+// Builds a string of exactly `length` characters by repeating `s` (rest cut off)
+static std::string makeRepeatTo(const std::string &s, size_t length)
+{
+ std::string v;
+ v.reserve(length + s.size());
+ for (size_t i = 0; i < length; i += s.size()) {
+ v += s;
+ }
+ v.resize(length);
+ return v;
+}
+
+#define BENCH3(_label, _chars, _length, _lengthlabel) \
+ BENCHMARK_ADVANCED("serializeJsonStringIfNeeded_" _lengthlabel "_" _label)(Catch::Benchmark::Chronometer meter) { \
+ std::string s = makeRepeatTo(_chars, _length); \
+ meter.measure([&] { return serializeJsonStringIfNeeded(s); }); \
+ }; \
+ BENCHMARK_ADVANCED("deSerializeJsonStringIfNeeded_" _lengthlabel "_" _label)(Catch::Benchmark::Chronometer meter) { \
+ std::string s = makeRepeatTo(_chars, _length); \
+ std::string serialized = serializeJsonStringIfNeeded(s); \
+ std::istringstream is(serialized, std::ios::binary); \
+ meter.measure([&] { \
+ is.clear(); \
+ is.seekg(0, std::ios::beg); \
+ return deSerializeJsonStringIfNeeded(is); \
+ }); \
+ };
+
+/* Both with and without a space character (' ') */
+#define BENCH2(_label, _chars, _length, _lengthlabel) \
+ BENCH3(_label, _chars, _length, _lengthlabel) \
+ BENCH3(_label "_with_space", " " _chars, _length, _lengthlabel) \
+
+/* Iterate over input lengths */
+#define BENCH1(_label, _chars) \
+ BENCH2(_label, _chars, 10, "small") \
+ BENCH2(_label, _chars, 10000, "large")
+
+/* Iterate over character sets */
+#define BENCH_ALL() \
+ BENCH1("alpha", "abcdefghijklmnopqrstuvwxyz") \
+ BENCH1("escaped", "\"\\/\b\f\n\r\t") \
+ BENCH1("nonascii", "\xf0\xff")
+
+TEST_CASE("benchmark_serialize") {
+ BENCH_ALL()
+}
diff --git a/src/benchmark/benchmark_setup.h b/src/benchmark/benchmark_setup.h
new file mode 100644
index 000000000..34a4eca4c
--- /dev/null
+++ b/src/benchmark/benchmark_setup.h
@@ -0,0 +1,22 @@
+/*
+Minetest
+Copyright (C) 2022 Minetest Authors
+
+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.
+*/
+
+#define CATCH_CONFIG_ENABLE_BENCHMARKING
+#define CATCH_CONFIG_CONSOLE_WIDTH 160
+#include <catch.hpp>
diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt
index 8d058852a..656ad45ce 100644
--- a/src/client/CMakeLists.txt
+++ b/src/client/CMakeLists.txt
@@ -60,7 +60,7 @@ set(client_SRCS
${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
+ ${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 d1f19adb3..df75c52d6 100644
--- a/src/client/camera.cpp
+++ b/src/client/camera.cpp
@@ -47,7 +47,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Camera::Camera(MapDrawControl &draw_control, Client *client, RenderingEngine *rendering_engine):
m_draw_control(draw_control),
- m_client(client)
+ m_client(client),
+ m_player_light_color(0xFFFFFFFF)
{
auto smgr = rendering_engine->get_scene_manager();
// note: making the camera node a child of the player node
@@ -74,11 +75,11 @@ Camera::Camera(MapDrawControl &draw_control, Client *client, RenderingEngine *re
* (as opposed to the this local caching). This can be addressed in
* a later release.
*/
- m_cache_fall_bobbing_amount = g_settings->getFloat("fall_bobbing_amount");
- m_cache_view_bobbing_amount = g_settings->getFloat("view_bobbing_amount");
+ m_cache_fall_bobbing_amount = g_settings->getFloat("fall_bobbing_amount", 0.0f, 100.0f);
+ m_cache_view_bobbing_amount = g_settings->getFloat("view_bobbing_amount", 0.0f, 7.9f);
// 45 degrees is the lowest FOV that doesn't cause the server to treat this
// as a zoom FOV and load world beyond the set server limits.
- m_cache_fov = std::fmax(g_settings->getFloat("fov"), 45.0f);
+ m_cache_fov = g_settings->getFloat("fov", 45.0f, 160.0f);
m_arm_inertia = g_settings->getBool("arm_inertia");
m_nametags.clear();
m_show_nametag_backgrounds = g_settings->getBool("show_nametag_backgrounds");
@@ -153,8 +154,10 @@ void Camera::step(f32 dtime)
bool was_under_zero = m_wield_change_timer < 0;
m_wield_change_timer = MYMIN(m_wield_change_timer + dtime, 0.125);
- if (m_wield_change_timer >= 0 && was_under_zero)
+ if (m_wield_change_timer >= 0 && was_under_zero) {
m_wieldnode->setItem(m_wield_item_next, m_client);
+ m_wieldnode->setNodeLightColor(m_player_light_color);
+ }
if (m_view_bobbing_state != 0)
{
@@ -555,7 +558,8 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 tool_reload_ratio)
m_wieldnode->setPosition(wield_position);
m_wieldnode->setRotation(wield_rotation);
- m_wieldnode->setNodeLightColor(player->light_color);
+ m_player_light_color = player->light_color;
+ m_wieldnode->setNodeLightColor(m_player_light_color);
// Set render distance
updateViewingRange();
diff --git a/src/client/camera.h b/src/client/camera.h
index 403d6024c..cbf248d97 100644
--- a/src/client/camera.h
+++ b/src/client/camera.h
@@ -264,4 +264,7 @@ private:
std::list<Nametag *> m_nametags;
bool m_show_nametag_backgrounds;
+
+ // Last known light color of the player
+ video::SColor m_player_light_color;
};
diff --git a/src/client/client.cpp b/src/client/client.cpp
index 0dd8a61d2..31bbf2463 100644
--- a/src/client/client.cpp
+++ b/src/client/client.cpp
@@ -58,6 +58,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "game.h"
#include "chatmessage.h"
#include "translation.h"
+#include "content/mod_configuration.h"
extern gui::IGUIEnvironment* guienv;
@@ -100,7 +101,8 @@ Client::Client(
MtEventManager *event,
RenderingEngine *rendering_engine,
bool ipv6,
- GameUI *game_ui
+ GameUI *game_ui,
+ ELoginRegister allow_login_or_register
):
m_tsrc(tsrc),
m_shsrc(shsrc),
@@ -117,6 +119,7 @@ Client::Client(
m_particle_manager(&m_env),
m_con(new con::Connection(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this)),
m_address_name(address_name),
+ m_allow_login_or_register(allow_login_or_register),
m_server_ser_ver(SER_FMT_VER_INVALID),
m_last_chat_message_sent(time(NULL)),
m_password(password),
@@ -194,7 +197,21 @@ void Client::loadMods()
scanModIntoMemory(BUILTIN_MOD_NAME, getBuiltinLuaPath());
m_script->loadModFromMemory(BUILTIN_MOD_NAME);
- ClientModConfiguration modconf(getClientModsLuaPath());
+ ModConfiguration modconf;
+ {
+ std::unordered_map<std::string, std::string> paths;
+ std::string path_user = porting::path_user + DIR_DELIM + "clientmods";
+ const auto modsPath = getClientModsLuaPath();
+ if (modsPath != path_user) {
+ paths["share"] = modsPath;
+ }
+ paths["mods"] = path_user;
+
+ std::string settings_path = path_user + DIR_DELIM + "mods.conf";
+ modconf.addModsFromConfig(settings_path, paths);
+ modconf.checkConflictsAndDeps();
+ }
+
m_mods = modconf.getMods();
// complain about mods with unsatisfied dependencies
if (!modconf.isConsistent()) {
@@ -396,10 +413,6 @@ void Client::step(float dtime)
initial_step = false;
}
else if(m_state == LC_Created) {
- if (m_is_registration_confirmation_state) {
- // Waiting confirmation
- return;
- }
float &counter = m_connection_reinit_timer;
counter -= dtime;
if(counter <= 0.0) {
@@ -426,7 +439,7 @@ void Client::step(float dtime)
if(m_map_timer_and_unload_interval.step(dtime, map_timer_and_unload_dtime)) {
std::vector<v3s16> deleted_blocks;
m_env.getMap().timerUpdate(map_timer_and_unload_dtime,
- g_settings->getFloat("client_unload_unused_data_timeout"),
+ std::max(g_settings->getFloat("client_unload_unused_data_timeout"), 0.0f),
g_settings->getS32("client_mapblock_limit"),
&deleted_blocks);
@@ -495,6 +508,7 @@ void Client::step(float dtime)
ClientEvent *event = new ClientEvent();
event->type = CE_PLAYER_DAMAGE;
event->player_damage.amount = damage;
+ event->player_damage.effect = true;
m_client_event_queue.push(event);
}
}
@@ -530,6 +544,7 @@ void Client::step(float dtime)
{
int num_processed_meshes = 0;
std::vector<v3s16> blocks_to_ack;
+ bool force_update_shadows = false;
while (!m_mesh_update_thread.m_queue_out.empty())
{
num_processed_meshes++;
@@ -556,9 +571,11 @@ void Client::step(float dtime)
if (is_empty)
delete r.mesh;
- else
+ else {
// Replace with the new mesh
block->mesh = r.mesh;
+ force_update_shadows = true;
+ }
}
} else {
delete r.mesh;
@@ -583,6 +600,10 @@ void Client::step(float dtime)
if (num_processed_meshes > 0)
g_profiler->graphAdd("num_processed_meshes", num_processed_meshes);
+
+ auto shadow_renderer = RenderingEngine::get_shadow_renderer();
+ if (shadow_renderer && force_update_shadows)
+ shadow_renderer->setForceUpdateShadowMap();
}
/*
@@ -786,16 +807,18 @@ void Client::peerAdded(con::Peer *peer)
infostream << "Client::peerAdded(): peer->id="
<< peer->id << std::endl;
}
+
void Client::deletingPeer(con::Peer *peer, bool timeout)
{
infostream << "Client::deletingPeer(): "
"Server Peer is getting deleted "
<< "(timeout=" << timeout << ")" << std::endl;
- if (timeout) {
- m_access_denied = true;
+ m_access_denied = true;
+ if (timeout)
m_access_denied_reason = gettext("Connection timed out.");
- }
+ else if (m_access_denied_reason.empty())
+ m_access_denied_reason = gettext("Connection aborted (protocol error?).");
}
/*
@@ -1069,18 +1092,6 @@ void Client::sendInit(const std::string &playerName)
Send(&pkt);
}
-void Client::promptConfirmRegistration(AuthMechanism chosen_auth_mechanism)
-{
- m_chosen_auth_mech = chosen_auth_mechanism;
- m_is_registration_confirmation_state = true;
-}
-
-void Client::confirmRegistration()
-{
- m_is_registration_confirmation_state = false;
- startAuth(m_chosen_auth_mech);
-}
-
void Client::startAuth(AuthMechanism chosen_auth_mechanism)
{
m_chosen_auth_mech = chosen_auth_mechanism;
@@ -1258,7 +1269,7 @@ void Client::sendChatMessage(const std::wstring &message)
pkt << message;
Send(&pkt);
- } else if (m_out_chat_queue.size() < (u16) max_queue_size || max_queue_size == -1) {
+ } else if (m_out_chat_queue.size() < (u16) max_queue_size || max_queue_size < 0) {
m_out_chat_queue.push(message);
} else {
infostream << "Could not queue chat message because maximum out chat queue size ("
@@ -1812,11 +1823,10 @@ void Client::makeScreenshot()
if (!raw_image)
return;
- time_t t = time(NULL);
- struct tm *tm = localtime(&t);
+ const struct tm tm = mt_localtime();
char timetstamp_c[64];
- strftime(timetstamp_c, sizeof(timetstamp_c), "%Y%m%d_%H%M%S", tm);
+ strftime(timetstamp_c, sizeof(timetstamp_c), "%Y%m%d_%H%M%S", &tm);
std::string screenshot_dir;
diff --git a/src/client/client.h b/src/client/client.h
index 84c85471d..bdcc2a3dd 100644
--- a/src/client/client.h
+++ b/src/client/client.h
@@ -37,6 +37,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mesh_generator_thread.h"
#include "network/address.h"
#include "network/peerhandler.h"
+#include "gameparams.h"
#include <fstream>
#define CLIENT_CHAT_MESSAGE_LIMIT_PER_10S 10.0f
@@ -127,7 +128,8 @@ public:
MtEventManager *event,
RenderingEngine *rendering_engine,
bool ipv6,
- GameUI *game_ui
+ GameUI *game_ui,
+ ELoginRegister allow_login_or_register
);
~Client();
@@ -227,6 +229,7 @@ public:
void handleCommand_PlayerSpeed(NetworkPacket *pkt);
void handleCommand_MediaPush(NetworkPacket *pkt);
void handleCommand_MinimapModes(NetworkPacket *pkt);
+ void handleCommand_SetLighting(NetworkPacket *pkt);
void ProcessData(NetworkPacket *pkt);
@@ -346,8 +349,6 @@ public:
u16 getProtoVersion()
{ return m_proto_ver; }
- void confirmRegistration();
- bool m_is_registration_confirmation_state = false;
bool m_simple_singleplayer_mode;
float mediaReceiveProgress();
@@ -406,7 +407,7 @@ public:
}
ClientScripting *getScript() { return m_script; }
- const bool modsLoaded() const { return m_mods_loaded; }
+ bool modsLoaded() const { return m_mods_loaded; }
void pushToEventQueue(ClientEvent *event);
@@ -459,7 +460,6 @@ private:
static AuthMechanism choseAuthMech(const u32 mechs);
void sendInit(const std::string &playerName);
- void promptConfirmRegistration(AuthMechanism chosen_auth_mechanism);
void startAuth(AuthMechanism chosen_auth_mechanism);
void sendDeletedBlocks(std::vector<v3s16> &blocks);
void sendGotBlocks(const std::vector<v3s16> &blocks);
@@ -491,6 +491,7 @@ private:
ParticleManager m_particle_manager;
std::unique_ptr<con::Connection> m_con;
std::string m_address_name;
+ ELoginRegister m_allow_login_or_register = ELoginRegister::Any;
Camera *m_camera = nullptr;
Minimap *m_minimap = nullptr;
bool m_minimap_disabled_by_server = false;
diff --git a/src/client/clientenvironment.cpp b/src/client/clientenvironment.cpp
index 448af36c6..183a95007 100644
--- a/src/client/clientenvironment.cpp
+++ b/src/client/clientenvironment.cpp
@@ -305,6 +305,7 @@ void ClientEnvironment::step(float dtime)
node_at_lplayer = m_map->getNode(p);
u16 light = getInteriorLight(node_at_lplayer, 0, m_client->ndef());
+ lplayer->light_color = encode_light(light, 0); // this transfers light.alpha
final_color_blend(&lplayer->light_color, light, day_night_ratio);
}
diff --git a/src/client/clientevent.h b/src/client/clientevent.h
index 17d3aedd6..243a94596 100644
--- a/src/client/clientevent.h
+++ b/src/client/clientevent.h
@@ -87,6 +87,7 @@ struct ClientEvent
struct
{
u16 amount;
+ bool effect;
} player_damage;
struct
{
diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp
index 063154316..60c9525f3 100644
--- a/src/client/clientlauncher.cpp
+++ b/src/client/clientlauncher.cpp
@@ -451,6 +451,7 @@ bool ClientLauncher::launch_game(std::string &error_message,
start_data.name = menudata.name;
start_data.password = menudata.password;
start_data.address = std::move(menudata.address);
+ start_data.allow_login_or_register = menudata.allow_login_or_register;
server_name = menudata.servername;
server_description = menudata.serverdescription;
@@ -564,6 +565,8 @@ void ClientLauncher::speed_tests()
// volatile to avoid some potential compiler optimisations
volatile static s16 temp16;
volatile static f32 tempf;
+ // Silence compiler warning
+ (void)temp16;
static v3f tempv3f1;
static v3f tempv3f2;
static std::string tempstring;
diff --git a/src/client/clientmap.cpp b/src/client/clientmap.cpp
index 1a024e464..c5ba98ff6 100644
--- a/src/client/clientmap.cpp
+++ b/src/client/clientmap.cpp
@@ -97,9 +97,32 @@ ClientMap::ClientMap(
m_cache_trilinear_filter = g_settings->getBool("trilinear_filter");
m_cache_bilinear_filter = g_settings->getBool("bilinear_filter");
m_cache_anistropic_filter = g_settings->getBool("anisotropic_filter");
+ m_cache_transparency_sorting_distance = g_settings->getU16("transparency_sorting_distance");
}
+void ClientMap::updateCamera(v3f pos, v3f dir, f32 fov, v3s16 offset)
+{
+ v3s16 previous_node = floatToInt(m_camera_position, BS) + m_camera_offset;
+ v3s16 previous_block = getContainerPos(previous_node, MAP_BLOCKSIZE);
+
+ m_camera_position = pos;
+ m_camera_direction = dir;
+ m_camera_fov = fov;
+ m_camera_offset = offset;
+
+ v3s16 current_node = floatToInt(m_camera_position, BS) + m_camera_offset;
+ v3s16 current_block = getContainerPos(current_node, MAP_BLOCKSIZE);
+
+ // reorder the blocks when camera crosses block boundary
+ if (previous_block != current_block)
+ m_needs_update_drawlist = true;
+
+ // reorder transparent meshes when camera crosses node boundary
+ if (previous_node != current_node)
+ m_needs_update_transparent_meshes = true;
+}
+
MapSector * ClientMap::emergeSector(v2s16 p2d)
{
// Check that it doesn't exist already
@@ -196,13 +219,11 @@ void ClientMap::updateDrawList()
// Number of blocks occlusion culled
u32 blocks_occlusion_culled = 0;
- // No occlusion culling when free_move is on and camera is
- // inside ground
+ // No occlusion culling when free_move is on and camera is inside ground
bool occlusion_culling_enabled = true;
- if (g_settings->getBool("free_move") && g_settings->getBool("noclip")) {
+ if (m_control.allow_noclip) {
MapNode n = getNode(cam_pos_nodes);
- if (n.getContent() == CONTENT_IGNORE ||
- m_nodedef->get(n).solidness == 2)
+ if (n.getContent() == CONTENT_IGNORE || m_nodedef->get(n).solidness == 2)
occlusion_culling_enabled = false;
}
@@ -324,21 +345,16 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
//u32 mesh_animate_count_far = 0;
/*
+ Update transparent meshes
+ */
+ if (is_transparent_pass)
+ updateTransparentMeshBuffers();
+
+ /*
Draw the selected MapBlocks
*/
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;
@@ -375,7 +391,15 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
/*
Get the meshbuffers of the block
*/
- {
+ if (is_transparent_pass) {
+ // In transparent pass, the mesh will give us
+ // the partial buffers in the correct order
+ for (auto &buffer : block->mesh->getTransparentBuffers())
+ draw_order.emplace_back(block_pos, &buffer);
+ }
+ else {
+ // otherwise, group buffers across meshes
+ // using MeshBufListList
MapBlockMesh *mapBlockMesh = block->mesh;
assert(mapBlockMesh);
@@ -389,35 +413,14 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
video::SMaterial& material = buf->getMaterial();
video::IMaterialRenderer* rnd =
- driver->getMaterialRenderer(material.MaterialType);
+ driver->getMaterialRenderer(material.MaterialType);
bool transparent = (rnd && rnd->isTransparent());
- if (transparent == is_transparent_pass) {
+ if (!transparent) {
if (buf->getVertexCount() == 0)
errorstream << "Block [" << analyze_block(block)
- << "] contains an empty meshbuf" << std::endl;
-
- material.setFlag(video::EMF_TRILINEAR_FILTER,
- m_cache_trilinear_filter);
- material.setFlag(video::EMF_BILINEAR_FILTER,
- m_cache_bilinear_filter);
- material.setFlag(video::EMF_ANISOTROPIC_FILTER,
- m_cache_anistropic_filter);
- material.setFlag(video::EMF_WIREFRAME,
- m_control.show_wireframe);
-
- 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);
- }
+ << "] contains an empty meshbuf" << std::endl;
+
+ grouped_buffers.add(buf, block_pos, layer);
}
}
}
@@ -442,8 +445,9 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
// Render all mesh buffers in order
drawcall_count += draw_order.size();
+
for (auto &descriptor : draw_order) {
- scene::IMeshBuffer *buf = descriptor.m_buffer;
+ scene::IMeshBuffer *buf = descriptor.getBuffer();
// Check and abort if the machine is swapping a lot
if (draw.getTimerTime() > 2000) {
@@ -454,28 +458,42 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
if (!descriptor.m_reuse_material) {
auto &material = buf->getMaterial();
+
+ // Apply filter settings
+ material.setFlag(video::EMF_TRILINEAR_FILTER,
+ m_cache_trilinear_filter);
+ material.setFlag(video::EMF_BILINEAR_FILTER,
+ m_cache_bilinear_filter);
+ material.setFlag(video::EMF_ANISOTROPIC_FILTER,
+ m_cache_anistropic_filter);
+ material.setFlag(video::EMF_WIREFRAME,
+ m_control.show_wireframe);
+
// 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];
+ auto &layer = material.TextureLayer[ShadowRenderer::TEXTURE_LAYER_SHADOW];
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.BilinearFilter = false;
+ layer.AnisotropicFilter = false;
layer.TrilinearFilter = false;
}
driver->setMaterial(material);
++material_swaps;
+ material.TextureLayer[ShadowRenderer::TEXTURE_LAYER_SHADOW].Texture = nullptr;
}
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();
+ descriptor.draw(driver);
+ vertex_count += buf->getIndexCount();
}
g_profiler->avg(prefix + "draw meshes [ms]", draw.stop(true));
@@ -659,19 +677,17 @@ void ClientMap::renderPostFx(CameraMode cam_mode)
MapNode n = getNode(floatToInt(m_camera_position, BS));
- // - If the player is in a solid node, make everything black.
- // - If the player is in liquid, draw a semi-transparent overlay.
- // - Do not if player is in third person mode
const ContentFeatures& features = m_nodedef->get(n);
video::SColor post_effect_color = features.post_effect_color;
- if(features.solidness == 2 && !(g_settings->getBool("noclip") &&
- m_client->checkLocalPrivilege("noclip")) &&
- cam_mode == CAMERA_MODE_FIRST)
- {
+
+ // If the camera is in a solid node, make everything black.
+ // (first person mode only)
+ if (features.solidness == 2 && cam_mode == CAMERA_MODE_FIRST &&
+ !m_control.allow_noclip) {
post_effect_color = video::SColor(255, 0, 0, 0);
}
- if (post_effect_color.getAlpha() != 0)
- {
+
+ if (post_effect_color.getAlpha() != 0) {
// Draw a full-screen rectangle
video::IVideoDriver* driver = SceneManager->getVideoDriver();
v2u32 ss = driver->getScreenSize();
@@ -698,7 +714,9 @@ void ClientMap::renderMapShadows(video::IVideoDriver *driver,
u32 drawcall_count = 0;
u32 vertex_count = 0;
- MeshBufListList drawbufs;
+ MeshBufListList grouped_buffers;
+ std::vector<DrawDescriptor> draw_order;
+
int count = 0;
int low_bound = is_transparent_pass ? 0 : m_drawlist_shadow.size() / total_frames * frame;
@@ -727,7 +745,15 @@ void ClientMap::renderMapShadows(video::IVideoDriver *driver,
/*
Get the meshbuffers of the block
*/
- {
+ if (is_transparent_pass) {
+ // In transparent pass, the mesh will give us
+ // the partial buffers in the correct order
+ for (auto &buffer : block->mesh->getTransparentBuffers())
+ draw_order.emplace_back(block_pos, &buffer);
+ }
+ else {
+ // otherwise, group buffers across meshes
+ // using MeshBufListList
MapBlockMesh *mapBlockMesh = block->mesh;
assert(mapBlockMesh);
@@ -742,79 +768,91 @@ void ClientMap::renderMapShadows(video::IVideoDriver *driver,
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);
+ if (!transparent)
+ grouped_buffers.add(buf, block_pos, layer);
}
}
}
}
+ u32 buffer_count = 0;
+ for (auto &lists : grouped_buffers.lists)
+ for (MeshBufList &list : lists)
+ buffer_count += list.bufs.size();
+
+ draw_order.reserve(draw_order.size() + buffer_count);
+
+ // 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 shadow 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() > 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();
- }
+ // Render all mesh buffers in order
+ drawcall_count += draw_order.size();
+
+ for (auto &descriptor : draw_order) {
+ scene::IMeshBuffer *buf = descriptor.getBuffer();
- drawcall_count += list.bufs.size();
+ // Check and abort if the machine is swapping a lot
+ if (draw.getTimerTime() > 1000) {
+ infostream << "ClientMap::renderMapShadows(): Rendering "
+ "took >1s, returning." << std::endl;
+ break;
+ }
+
+ if (!descriptor.m_reuse_material) {
+ // 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);
+ ++material_swaps;
}
+
+ v3f block_wpos = intToFloat(descriptor.m_pos * MAP_BLOCKSIZE, BS);
+ m.setTranslation(block_wpos - offset);
+
+ driver->setTransform(video::ETS_WORLD, m);
+ descriptor.draw(driver);
+ vertex_count += buf->getIndexCount();
}
- // restore the driver material state
+ // 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);
+ g_profiler->avg(prefix + "material swaps [#]", material_swaps);
}
/*
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)
+void ClientMap::updateDrawListShadow(v3f shadow_light_pos, v3f shadow_light_dir, float radius, float length)
{
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 cam_pos_nodes = floatToInt(shadow_light_pos, BS);
v3s16 p_blocks_min;
v3s16 p_blocks_max;
- getBlocksInViewRange(cam_pos_nodes, &p_blocks_min, &p_blocks_max, shadow_range);
+ getBlocksInViewRange(cam_pos_nodes, &p_blocks_min, &p_blocks_max, radius + length);
std::vector<v2s16> blocks_in_range;
@@ -824,15 +862,6 @@ void ClientMap::updateDrawListShadow(const v3f &shadow_light_pos, const v3f &sha
}
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
@@ -858,23 +887,13 @@ void ClientMap::updateDrawListShadow(const v3f &shadow_light_pos, const v3f &sha
continue;
}
- float range = shadow_range;
-
- float d = 0.0;
- if (!isBlockInSight(block->getPos(), camera_position,
- camera_direction, camera_fov, range, &d))
+ v3f block_pos = intToFloat(block->getPos() * MAP_BLOCKSIZE, BS);
+ v3f projection = shadow_light_pos + shadow_light_dir * shadow_light_dir.dotProduct(block_pos - shadow_light_pos);
+ if (projection.getDistanceFrom(block_pos) > radius)
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();
@@ -891,3 +910,55 @@ void ClientMap::updateDrawListShadow(const v3f &shadow_light_pos, const v3f &sha
g_profiler->avg("SHADOW MapBlocks drawn [#]", m_drawlist_shadow.size());
g_profiler->avg("SHADOW MapBlocks loaded [#]", blocks_loaded);
}
+
+void ClientMap::updateTransparentMeshBuffers()
+{
+ ScopeProfiler sp(g_profiler, "CM::updateTransparentMeshBuffers", SPT_AVG);
+ u32 sorted_blocks = 0;
+ u32 unsorted_blocks = 0;
+ f32 sorting_distance_sq = pow(m_cache_transparency_sorting_distance * BS, 2.0f);
+
+
+ // Update the order of transparent mesh buffers in each mesh
+ for (auto it = m_drawlist.begin(); it != m_drawlist.end(); it++) {
+ MapBlock* block = it->second;
+ if (!block->mesh)
+ continue;
+
+ if (m_needs_update_transparent_meshes ||
+ block->mesh->getTransparentBuffers().size() == 0) {
+
+ v3s16 block_pos = block->getPos();
+ v3f block_pos_f = intToFloat(block_pos * MAP_BLOCKSIZE + MAP_BLOCKSIZE / 2, BS);
+ f32 distance = m_camera_position.getDistanceFromSQ(block_pos_f);
+ if (distance <= sorting_distance_sq) {
+ block->mesh->updateTransparentBuffers(m_camera_position, block_pos);
+ ++sorted_blocks;
+ }
+ else {
+ block->mesh->consolidateTransparentBuffers();
+ ++unsorted_blocks;
+ }
+ }
+ }
+
+ g_profiler->avg("CM::Transparent Buffers - Sorted", sorted_blocks);
+ g_profiler->avg("CM::Transparent Buffers - Unsorted", unsorted_blocks);
+ m_needs_update_transparent_meshes = false;
+}
+
+scene::IMeshBuffer* ClientMap::DrawDescriptor::getBuffer()
+{
+ return m_use_partial_buffer ? m_partial_buffer->getBuffer() : m_buffer;
+}
+
+void ClientMap::DrawDescriptor::draw(video::IVideoDriver* driver)
+{
+ if (m_use_partial_buffer) {
+ m_partial_buffer->beforeDraw();
+ driver->drawMeshBuffer(m_partial_buffer->getBuffer());
+ m_partial_buffer->afterDraw();
+ } else {
+ driver->drawMeshBuffer(m_buffer);
+ }
+}
diff --git a/src/client/clientmap.h b/src/client/clientmap.h
index b4dc42395..8c45b5382 100644
--- a/src/client/clientmap.h
+++ b/src/client/clientmap.h
@@ -27,10 +27,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
struct MapDrawControl
{
- // Overrides limits by drawing everything
- bool range_all = false;
// Wanted drawing range
float wanted_range = 0.0f;
+ // Overrides limits by drawing everything
+ bool range_all = false;
+ // Allow rendering out of bounds
+ bool allow_noclip = false;
// show a wire frame for debugging
bool show_wireframe = false;
};
@@ -56,6 +58,7 @@ struct MeshBufListList
class Client;
class ITextureSource;
+class PartialMeshBuffer;
/*
ClientMap
@@ -75,53 +78,37 @@ public:
virtual ~ClientMap() = default;
- s32 mapType() const
+ bool maySaveBlocks() override
{
- return MAPTYPE_CLIENT;
+ return false;
}
- void drop()
+ void drop() override
{
- ISceneNode::drop();
+ ISceneNode::drop(); // calls destructor
}
- 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;
- }
+ void updateCamera(v3f pos, v3f dir, f32 fov, v3s16 offset);
/*
Forcefully get a sector from somewhere
*/
- MapSector * emergeSector(v2s16 p);
-
- //void deSerializeSector(v2s16 p2d, std::istream &is);
+ MapSector * emergeSector(v2s16 p) override;
/*
ISceneNode methods
*/
- virtual void OnRegisterSceneNode();
+ virtual void OnRegisterSceneNode() override;
- virtual void render()
+ virtual void render() override
{
video::IVideoDriver* driver = SceneManager->getVideoDriver();
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation);
renderMap(driver, SceneManager->getSceneNodeRenderPass());
}
- virtual const aabb3f &getBoundingBox() const
+ virtual const aabb3f &getBoundingBox() const override
{
return m_box;
}
@@ -129,7 +116,7 @@ public:
void getBlocksInViewRange(v3s16 cam_pos_nodes,
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);
+ void updateDrawListShadow(v3f shadow_light_pos, v3f shadow_light_dir, float radius, float length);
// 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);
@@ -143,13 +130,17 @@ public:
void renderPostFx(CameraMode cam_mode);
// For debug printing
- virtual void PrintInfo(std::ostream &out);
+ void PrintInfo(std::ostream &out) override;
const MapDrawControl & getControl() const { return m_control; }
f32 getWantedRange() const { return m_control.wanted_range; }
f32 getCameraFov() const { return m_camera_fov; }
private:
+
+ // update the vertex order in transparent mesh buffers
+ void updateTransparentMeshBuffers();
+
// Orders blocks by distance to the camera
class MapBlockComparer
{
@@ -167,6 +158,29 @@ private:
v3s16 m_camera_block;
};
+
+ // reference to a mesh buffer used when rendering the map.
+ struct DrawDescriptor {
+ v3s16 m_pos;
+ union {
+ scene::IMeshBuffer *m_buffer;
+ const PartialMeshBuffer *m_partial_buffer;
+ };
+ bool m_reuse_material:1;
+ bool m_use_partial_buffer:1;
+
+ DrawDescriptor(v3s16 pos, scene::IMeshBuffer *buffer, bool reuse_material) :
+ m_pos(pos), m_buffer(buffer), m_reuse_material(reuse_material), m_use_partial_buffer(false)
+ {}
+
+ DrawDescriptor(v3s16 pos, const PartialMeshBuffer *buffer) :
+ m_pos(pos), m_partial_buffer(buffer), m_reuse_material(false), m_use_partial_buffer(true)
+ {}
+
+ scene::IMeshBuffer* getBuffer();
+ void draw(video::IVideoDriver* driver);
+ };
+
Client *m_client;
RenderingEngine *m_rendering_engine;
@@ -179,6 +193,7 @@ private:
v3f m_camera_direction = v3f(0,0,1);
f32 m_camera_fov = M_PI;
v3s16 m_camera_offset;
+ bool m_needs_update_transparent_meshes = true;
std::map<v3s16, MapBlock*, MapBlockComparer> m_drawlist;
std::map<v3s16, MapBlock*> m_drawlist_shadow;
@@ -190,4 +205,5 @@ private:
bool m_cache_bilinear_filter;
bool m_cache_anistropic_filter;
bool m_added_to_shadow_renderer{false};
+ u16 m_cache_transparency_sorting_distance;
};
diff --git a/src/client/clouds.cpp b/src/client/clouds.cpp
index 383a1d799..c84c03034 100644
--- a/src/client/clouds.cpp
+++ b/src/client/clouds.cpp
@@ -366,7 +366,8 @@ void Clouds::update(const v3f &camera_p, const video::SColorf &color_diffuse)
void Clouds::readSettings()
{
- m_cloud_radius_i = g_settings->getU16("cloud_radius");
+ // Upper limit was chosen due to posible render bugs
+ m_cloud_radius_i = rangelim(g_settings->getU16("cloud_radius"), 1, 62);
m_enable_3d = g_settings->getBool("enable_3d_clouds");
}
diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp
index 1d4636a08..568d25fb7 100644
--- a/src/client/content_cao.cpp
+++ b/src/client/content_cao.cpp
@@ -38,9 +38,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "map.h"
#include "mesh.h"
#include "nodedef.h"
-#include "serialization.h" // For decompressZlib
#include "settings.h"
-#include "sound.h"
#include "tool.h"
#include "wieldmesh.h"
#include <algorithm>
@@ -435,7 +433,7 @@ const v3f GenericCAO::getPosition() const
return m_position;
}
-const bool GenericCAO::isImmortal()
+bool GenericCAO::isImmortal() const
{
return itemgroup_get(getGroups(), "immortal");
}
@@ -745,9 +743,6 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
m_meshnode = m_smgr->addMeshSceneNode(mesh, m_matrixnode);
m_meshnode->grab();
mesh->drop();
- // Set it to use the materials of the meshbuffers directly.
- // This is needed for changing the texture in the future
- m_meshnode->setReadOnlyMaterials(true);
} else if (m_prop.visual == "cube") {
grabMatrixNode();
scene::IMesh *mesh = createCubeMesh(v3f(BS,BS,BS));
@@ -861,10 +856,11 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
void GenericCAO::updateLight(u32 day_night_ratio)
{
- if (m_glow < 0)
+ if (m_prop.glow < 0)
return;
- u8 light_at_pos = 0;
+ u16 light_at_pos = 0;
+ u8 light_at_pos_intensity = 0;
bool pos_ok = false;
v3s16 pos[3];
@@ -873,28 +869,33 @@ void GenericCAO::updateLight(u32 day_night_ratio)
bool this_ok;
MapNode n = m_env->getMap().getNode(pos[i], &this_ok);
if (this_ok) {
- u8 this_light = n.getLightBlend(day_night_ratio, m_client->ndef());
- light_at_pos = MYMAX(light_at_pos, this_light);
+ u16 this_light = getInteriorLight(n, 0, m_client->ndef());
+ u8 this_light_intensity = MYMAX(this_light & 0xFF, this_light >> 8);
+ if (this_light_intensity > light_at_pos_intensity) {
+ light_at_pos = this_light;
+ light_at_pos_intensity = this_light_intensity;
+ }
pos_ok = true;
}
}
if (!pos_ok)
- light_at_pos = blend_light(day_night_ratio, LIGHT_SUN, 0);
+ light_at_pos = LIGHT_SUN;
+
+ video::SColor light = encode_light(light_at_pos, m_prop.glow);
+ if (!m_enable_shaders)
+ final_color_blend(&light, light_at_pos, day_night_ratio);
- u8 light = decode_light(light_at_pos + m_glow);
if (light != m_last_light) {
m_last_light = light;
setNodeLight(light);
}
}
-void GenericCAO::setNodeLight(u8 light)
+void GenericCAO::setNodeLight(const video::SColor &light_color)
{
- video::SColor color(255, light, light, light);
-
if (m_prop.visual == "wielditem" || m_prop.visual == "item") {
if (m_wield_meshnode)
- m_wield_meshnode->setNodeLightColor(color);
+ m_wield_meshnode->setNodeLightColor(light_color);
return;
}
@@ -902,12 +903,8 @@ void GenericCAO::setNodeLight(u8 light)
if (m_prop.visual == "upright_sprite") {
if (!m_meshnode)
return;
-
- scene::IMesh *mesh = m_meshnode->getMesh();
- for (u32 i = 0; i < mesh->getMeshBufferCount(); ++i) {
- scene::IMeshBuffer *buf = mesh->getMeshBuffer(i);
- buf->getMaterial().EmissiveColor = color;
- }
+ for (u32 i = 0; i < m_meshnode->getMaterialCount(); ++i)
+ m_meshnode->getMaterial(i).EmissiveColor = light_color;
} else {
scene::ISceneNode *node = getSceneNode();
if (!node)
@@ -915,16 +912,16 @@ void GenericCAO::setNodeLight(u8 light)
for (u32 i = 0; i < node->getMaterialCount(); ++i) {
video::SMaterial &material = node->getMaterial(i);
- material.EmissiveColor = color;
+ material.EmissiveColor = light_color;
}
}
} else {
if (m_meshnode) {
- setMeshColor(m_meshnode->getMesh(), color);
+ setMeshColor(m_meshnode->getMesh(), light_color);
} else if (m_animated_meshnode) {
- setAnimatedMeshColor(m_animated_meshnode, color);
+ setAnimatedMeshColor(m_animated_meshnode, light_color);
} else if (m_spritenode) {
- m_spritenode->setColor(color);
+ m_spritenode->setColor(light_color);
}
}
}
@@ -1175,7 +1172,7 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
// Reduce footstep gain, as non-local-player footsteps are
// somehow louder.
spec.gain *= 0.6f;
- m_client->sound()->playSoundAt(spec, false, getPosition());
+ m_client->sound()->playSoundAt(spec, getPosition());
}
}
}
@@ -1200,7 +1197,7 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
}
}
- if (!getParent() && node && fabs(m_prop.automatic_rotate) > 0.001f) {
+ if (node && fabs(m_prop.automatic_rotate) > 0.001f) {
// This is the child node's rotation. It is only used for automatic_rotate.
v3f local_rot = node->getRotation();
local_rot.Y = modulo360f(local_rot.Y - dtime * core::RADTODEG *
@@ -1320,7 +1317,6 @@ void GenericCAO::updateTextures(std::string mod)
m_previous_texture_modifier = m_current_texture_modifier;
m_current_texture_modifier = mod;
- m_glow = m_prop.glow;
if (m_spritenode) {
if (m_prop.visual == "sprite") {
@@ -1440,22 +1436,22 @@ void GenericCAO::updateTextures(std::string mod)
if (!m_prop.textures.empty())
tname = m_prop.textures[0];
tname += mod;
- scene::IMeshBuffer *buf = mesh->getMeshBuffer(0);
- buf->getMaterial().setTexture(0,
+ auto& material = m_meshnode->getMaterial(0);
+ material.setTexture(0,
tsrc->getTextureForMesh(tname));
// This allows setting per-material colors. However, until a real lighting
// system is added, the code below will have no effect. Once MineTest
// has directional lighting, it should work automatically.
if(!m_prop.colors.empty()) {
- buf->getMaterial().AmbientColor = m_prop.colors[0];
- buf->getMaterial().DiffuseColor = m_prop.colors[0];
- buf->getMaterial().SpecularColor = m_prop.colors[0];
+ material.AmbientColor = m_prop.colors[0];
+ material.DiffuseColor = m_prop.colors[0];
+ material.SpecularColor = m_prop.colors[0];
}
- buf->getMaterial().setFlag(video::EMF_TRILINEAR_FILTER, use_trilinear_filter);
- buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, use_bilinear_filter);
- buf->getMaterial().setFlag(video::EMF_ANISOTROPIC_FILTER, use_anisotropic_filter);
+ material.setFlag(video::EMF_TRILINEAR_FILTER, use_trilinear_filter);
+ material.setFlag(video::EMF_BILINEAR_FILTER, use_bilinear_filter);
+ material.setFlag(video::EMF_ANISOTROPIC_FILTER, use_anisotropic_filter);
}
{
std::string tname = "no_texture.png";
@@ -1464,29 +1460,29 @@ void GenericCAO::updateTextures(std::string mod)
else if (!m_prop.textures.empty())
tname = m_prop.textures[0];
tname += mod;
- scene::IMeshBuffer *buf = mesh->getMeshBuffer(1);
- buf->getMaterial().setTexture(0,
+ auto& material = m_meshnode->getMaterial(1);
+ material.setTexture(0,
tsrc->getTextureForMesh(tname));
// This allows setting per-material colors. However, until a real lighting
// system is added, the code below will have no effect. Once MineTest
// has directional lighting, it should work automatically.
if (m_prop.colors.size() >= 2) {
- buf->getMaterial().AmbientColor = m_prop.colors[1];
- buf->getMaterial().DiffuseColor = m_prop.colors[1];
- buf->getMaterial().SpecularColor = m_prop.colors[1];
+ material.AmbientColor = m_prop.colors[1];
+ material.DiffuseColor = m_prop.colors[1];
+ material.SpecularColor = m_prop.colors[1];
} else if (!m_prop.colors.empty()) {
- buf->getMaterial().AmbientColor = m_prop.colors[0];
- buf->getMaterial().DiffuseColor = m_prop.colors[0];
- buf->getMaterial().SpecularColor = m_prop.colors[0];
+ material.AmbientColor = m_prop.colors[0];
+ material.DiffuseColor = m_prop.colors[0];
+ material.SpecularColor = m_prop.colors[0];
}
- buf->getMaterial().setFlag(video::EMF_TRILINEAR_FILTER, use_trilinear_filter);
- buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, use_bilinear_filter);
- buf->getMaterial().setFlag(video::EMF_ANISOTROPIC_FILTER, use_anisotropic_filter);
+ material.setFlag(video::EMF_TRILINEAR_FILTER, use_trilinear_filter);
+ material.setFlag(video::EMF_BILINEAR_FILTER, use_bilinear_filter);
+ material.setFlag(video::EMF_ANISOTROPIC_FILTER, use_anisotropic_filter);
}
// Set mesh color (only if lighting is disabled)
- if (!m_prop.colors.empty() && m_glow < 0)
+ if (!m_prop.colors.empty() && m_prop.glow < 0)
setMeshColor(mesh, m_prop.colors[0]);
}
}
@@ -1960,20 +1956,17 @@ void GenericCAO::updateMeshCulling()
const bool hidden = m_client->getCamera()->getCameraMode() == CAMERA_MODE_FIRST;
- if (m_meshnode && m_prop.visual == "upright_sprite") {
- u32 buffers = m_meshnode->getMesh()->getMeshBufferCount();
- for (u32 i = 0; i < buffers; i++) {
- video::SMaterial &mat = m_meshnode->getMesh()->getMeshBuffer(i)->getMaterial();
- // upright sprite has no backface culling
- mat.setFlag(video::EMF_FRONT_FACE_CULLING, hidden);
- }
- return;
- }
-
scene::ISceneNode *node = getSceneNode();
+
if (!node)
return;
+ if (m_prop.visual == "upright_sprite") {
+ // upright sprite has no backface culling
+ node->setMaterialFlag(video::EMF_FRONT_FACE_CULLING, hidden);
+ return;
+ }
+
if (hidden) {
// Hide the mesh by culling both front and
// back faces. Serious hackyness but it works for our
diff --git a/src/client/content_cao.h b/src/client/content_cao.h
index 4bbba9134..5a8116c71 100644
--- a/src/client/content_cao.h
+++ b/src/client/content_cao.h
@@ -125,9 +125,8 @@ private:
std::string m_current_texture_modifier = "";
bool m_visuals_expired = false;
float m_step_distance_counter = 0.0f;
- u8 m_last_light = 255;
+ video::SColor m_last_light = video::SColor(0xFFFFFFFF);
bool m_is_visible = false;
- s8 m_glow = 0;
// Material
video::E_MATERIAL_TYPE m_material_type;
// Settings
@@ -165,14 +164,9 @@ public:
const v3f getPosition() const;
- void setPosition(const v3f &pos)
- {
- pos_translator.val_current = pos;
- }
-
inline const v3f &getRotation() const { return m_rotation; }
- const bool isImmortal();
+ bool isImmortal() const;
inline const ObjectProperties &getProperties() const { return m_prop; }
@@ -245,7 +239,7 @@ public:
void updateLight(u32 day_night_ratio);
- void setNodeLight(u8 light);
+ void setNodeLight(const video::SColor &light);
/* Get light position(s).
* returns number of positions written into pos[], which must have space
diff --git a/src/client/content_mapblock.cpp b/src/client/content_mapblock.cpp
index bb2d6398f..0bac5e827 100644
--- a/src/client/content_mapblock.cpp
+++ b/src/client/content_mapblock.cpp
@@ -150,8 +150,10 @@ void MapblockMeshGenerator::drawQuad(v3f *coords, const v3s16 &normal,
// should be (2+2)*6=24 values in the list. The order of
// the faces in the list is up-down-right-left-back-front
// (compatible with ContentFeatures).
+// mask - a bit mask that suppresses drawing of tiles.
+// tile i will not be drawn if mask & (1 << i) is 1
void MapblockMeshGenerator::drawCuboid(const aabb3f &box,
- TileSpec *tiles, int tilecount, const LightInfo *lights, const f32 *txc)
+ TileSpec *tiles, int tilecount, const LightInfo *lights, const f32 *txc, u8 mask)
{
assert(tilecount >= 1 && tilecount <= 6); // pre-condition
@@ -274,6 +276,8 @@ void MapblockMeshGenerator::drawCuboid(const aabb3f &box,
// Add to mesh collector
for (int k = 0; k < 6; ++k) {
+ if (mask & (1 << k))
+ continue;
int tileindex = MYMIN(k, tilecount - 1);
collector->append(tiles[tileindex], vertices + 4 * k, 4, quad_indices, 6);
}
@@ -363,7 +367,7 @@ void MapblockMeshGenerator::generateCuboidTextureCoords(const aabb3f &box, f32 *
}
void MapblockMeshGenerator::drawAutoLightedCuboid(aabb3f box, const f32 *txc,
- TileSpec *tiles, int tile_count)
+ TileSpec *tiles, int tile_count, u8 mask)
{
bool scale = std::fabs(f->visual_scale - 1.0f) > 1e-3f;
f32 texture_coord_buf[24];
@@ -400,12 +404,49 @@ void MapblockMeshGenerator::drawAutoLightedCuboid(aabb3f box, const f32 *txc,
d.Z = (j & 1) ? dz2 : dz1;
lights[j] = blendLight(d);
}
- drawCuboid(box, tiles, tile_count, lights, txc);
+ drawCuboid(box, tiles, tile_count, lights, txc, mask);
} else {
- drawCuboid(box, tiles, tile_count, nullptr, txc);
+ drawCuboid(box, tiles, tile_count, nullptr, txc, mask);
}
}
+u8 MapblockMeshGenerator::getNodeBoxMask(aabb3f box, u8 solid_neighbors, u8 sametype_neighbors) const
+{
+ const f32 NODE_BOUNDARY = 0.5 * BS;
+
+ // For an oversized nodebox, return immediately
+ if (box.MaxEdge.X > NODE_BOUNDARY ||
+ box.MinEdge.X < -NODE_BOUNDARY ||
+ box.MaxEdge.Y > NODE_BOUNDARY ||
+ box.MinEdge.Y < -NODE_BOUNDARY ||
+ box.MaxEdge.Z > NODE_BOUNDARY ||
+ box.MinEdge.Z < -NODE_BOUNDARY)
+ return 0;
+
+ // We can skip faces at node boundary if the matching neighbor is solid
+ u8 solid_mask =
+ (box.MaxEdge.Y == NODE_BOUNDARY ? 1 : 0) |
+ (box.MinEdge.Y == -NODE_BOUNDARY ? 2 : 0) |
+ (box.MaxEdge.X == NODE_BOUNDARY ? 4 : 0) |
+ (box.MinEdge.X == -NODE_BOUNDARY ? 8 : 0) |
+ (box.MaxEdge.Z == NODE_BOUNDARY ? 16 : 0) |
+ (box.MinEdge.Z == -NODE_BOUNDARY ? 32 : 0);
+
+ u8 sametype_mask = 0;
+ if (f->alpha == AlphaMode::ALPHAMODE_OPAQUE) {
+ // In opaque nodeboxes, faces on opposite sides can cancel
+ // each other out if there is a matching neighbor of the same type
+ sametype_mask =
+ ((solid_mask & 3) == 3 ? 3 : 0) |
+ ((solid_mask & 12) == 12 ? 12 : 0) |
+ ((solid_mask & 48) == 48 ? 48 : 0);
+ }
+
+ // Combine masks with actual neighbors to get the faces to be skipped
+ return (solid_mask & solid_neighbors) | (sametype_mask & sametype_neighbors);
+}
+
+
void MapblockMeshGenerator::prepareLiquidNodeDrawing()
{
getSpecialTile(0, &tile_liquid_top);
@@ -1363,13 +1404,38 @@ void MapblockMeshGenerator::drawNodeboxNode()
getTile(nodebox_tile_dirs[face], &tiles[face]);
}
+ bool param2_is_rotation =
+ f->param_type_2 == CPT2_COLORED_FACEDIR ||
+ f->param_type_2 == CPT2_COLORED_WALLMOUNTED ||
+ f->param_type_2 == CPT2_FACEDIR ||
+ f->param_type_2 == CPT2_WALLMOUNTED;
+
+ bool param2_is_level =
+ f->param_type_2 == CPT2_LEVELED;
+
// locate possible neighboring nodes to connect to
u8 neighbors_set = 0;
- if (f->node_box.type == NODEBOX_CONNECTED) {
- for (int dir = 0; dir != 6; dir++) {
- u8 flag = 1 << dir;
- v3s16 p2 = blockpos_nodes + p + nodebox_connection_dirs[dir];
- MapNode n2 = data->m_vmanip.getNodeNoEx(p2);
+ u8 solid_neighbors = 0;
+ u8 sametype_neighbors = 0;
+ for (int dir = 0; dir != 6; dir++) {
+ u8 flag = 1 << dir;
+ v3s16 p2 = blockpos_nodes + p + nodebox_tile_dirs[dir];
+ MapNode n2 = data->m_vmanip.getNodeNoEx(p2);
+
+ // mark neighbors that are the same node type
+ // and have the same rotation or higher level stored as param2
+ if (n2.param0 == n.param0 &&
+ (!param2_is_rotation || n.param2 == n2.param2) &&
+ (!param2_is_level || n.param2 <= n2.param2))
+ sametype_neighbors |= flag;
+
+ // mark neighbors that are simple solid blocks
+ if (nodedef->get(n2).drawtype == NDT_NORMAL)
+ solid_neighbors |= flag;
+
+ if (f->node_box.type == NODEBOX_CONNECTED) {
+ p2 = blockpos_nodes + p + nodebox_connection_dirs[dir];
+ n2 = data->m_vmanip.getNodeNoEx(p2);
if (nodedef->nodeboxConnects(n, n2, flag))
neighbors_set |= flag;
}
@@ -1377,8 +1443,63 @@ void MapblockMeshGenerator::drawNodeboxNode()
std::vector<aabb3f> boxes;
n.getNodeBoxes(nodedef, &boxes, neighbors_set);
- for (auto &box : boxes)
- drawAutoLightedCuboid(box, nullptr, tiles, 6);
+
+ bool isTransparent = false;
+
+ for (const TileSpec &tile : tiles) {
+ if (tile.layers[0].isTransparent()) {
+ isTransparent = true;
+ break;
+ }
+ }
+
+ if (isTransparent) {
+ std::vector<float> sections;
+ // Preallocate 8 default splits + Min&Max for each nodebox
+ sections.reserve(8 + 2 * boxes.size());
+
+ for (int axis = 0; axis < 3; axis++) {
+ // identify sections
+
+ if (axis == 0) {
+ // Default split at node bounds, up to 3 nodes in each direction
+ for (float s = -3.5f * BS; s < 4.0f * BS; s += 1.0f * BS)
+ sections.push_back(s);
+ }
+ else {
+ // Avoid readding the same 8 default splits for Y and Z
+ sections.resize(8);
+ }
+
+ // Add edges of existing node boxes, rounded to 1E-3
+ for (size_t i = 0; i < boxes.size(); i++) {
+ sections.push_back(std::floor(boxes[i].MinEdge[axis] * 1E3) * 1E-3);
+ sections.push_back(std::floor(boxes[i].MaxEdge[axis] * 1E3) * 1E-3);
+ }
+
+ // split the boxes at recorded sections
+ // limit splits to avoid runaway crash if inner loop adds infinite splits
+ // due to e.g. precision problems.
+ // 100 is just an arbitrary, reasonably high number.
+ for (size_t i = 0; i < boxes.size() && i < 100; i++) {
+ aabb3f *box = &boxes[i];
+ for (float section : sections) {
+ if (box->MinEdge[axis] < section && box->MaxEdge[axis] > section) {
+ aabb3f copy(*box);
+ copy.MinEdge[axis] = section;
+ box->MaxEdge[axis] = section;
+ boxes.push_back(copy);
+ box = &boxes[i]; // find new address of the box in case of reallocation
+ }
+ }
+ }
+ }
+ }
+
+ for (auto &box : boxes) {
+ u8 mask = getNodeBoxMask(box, solid_neighbors, sametype_neighbors);
+ drawAutoLightedCuboid(box, nullptr, tiles, 6, mask);
+ }
}
void MapblockMeshGenerator::drawMeshNode()
diff --git a/src/client/content_mapblock.h b/src/client/content_mapblock.h
index 7344f05ee..b13748cbc 100644
--- a/src/client/content_mapblock.h
+++ b/src/client/content_mapblock.h
@@ -100,10 +100,11 @@ public:
// cuboid drawing!
void drawCuboid(const aabb3f &box, TileSpec *tiles, int tilecount,
- const LightInfo *lights , const f32 *txc);
+ const LightInfo *lights , const f32 *txc, u8 mask = 0);
void generateCuboidTextureCoords(aabb3f const &box, f32 *coords);
void drawAutoLightedCuboid(aabb3f box, const f32 *txc = NULL,
- TileSpec *tiles = NULL, int tile_count = 0);
+ TileSpec *tiles = NULL, int tile_count = 0, u8 mask = 0);
+ u8 getNodeBoxMask(aabb3f box, u8 solid_neighbors, u8 sametype_neighbors) const;
// liquid-specific
bool top_is_same_liquid;
diff --git a/src/client/fontengine.cpp b/src/client/fontengine.cpp
index ad8305b45..0ae50dfe2 100644
--- a/src/client/fontengine.cpp
+++ b/src/client/fontengine.cpp
@@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "filesys.h"
#include "gettext.h"
#include "irrlicht_changes/CGUITTFont.h"
+#include "util/numeric.h" // rangelim
/** maximum size distance for getting a "similar" font size */
#define MAX_FONT_SIZE_OFFSET 10
@@ -172,9 +173,9 @@ unsigned int FontEngine::getFontSize(FontMode mode)
/******************************************************************************/
void FontEngine::readSettings()
{
- 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_Standard] = rangelim(g_settings->getU16("font_size"), 5, 72);
+ m_default_size[_FM_Fallback] = m_default_size[FM_Standard];
+ m_default_size[FM_Mono] = rangelim(g_settings->getU16("mono_font_size"), 5, 72);
m_default_bold = g_settings->getBool("font_bold");
m_default_italic = g_settings->getBool("font_italic");
@@ -217,8 +218,9 @@ gui::IGUIFont *FontEngine::initFont(const FontSpec &spec)
if (spec.italic)
setting_suffix.append("_italic");
- u32 size = std::max<u32>(spec.size * RenderingEngine::getDisplayDensity() *
- g_settings->getFloat("gui_scaling"), 1);
+ // Font size in pixels for FreeType
+ u32 size = rangelim(spec.size * RenderingEngine::getDisplayDensity() *
+ g_settings->getFloat("gui_scaling"), 1U, 500U);
// Constrain the font size to a certain multiple, if necessary
u16 divisible_by = g_settings->getU16(setting_prefix + "font_size_divisible_by");
diff --git a/src/client/game.cpp b/src/client/game.cpp
index 768b1abad..c34e3a415 100644
--- a/src/client/game.cpp
+++ b/src/client/game.cpp
@@ -43,7 +43,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "gameparams.h"
#include "gettext.h"
#include "gui/guiChatConsole.h"
-#include "gui/guiConfirmRegistration.h"
#include "gui/guiFormSpecMenu.h"
#include "gui/guiKeyChangeMenu.h"
#include "gui/guiPasswordChange.h"
@@ -283,7 +282,7 @@ public:
if (m_player_step_timer <= 0 && m_player_step_sound.exists()) {
m_player_step_timer = 0.03;
if (makes_footstep_sound)
- m_sound->playSound(m_player_step_sound, false);
+ m_sound->playSound(m_player_step_sound);
}
}
@@ -291,7 +290,7 @@ public:
{
if (m_player_jump_timer <= 0.0f) {
m_player_jump_timer = 0.2f;
- m_sound->playSound(SimpleSoundSpec("player_jump", 0.5f), false);
+ m_sound->playSound(SimpleSoundSpec("player_jump", 0.5f));
}
}
@@ -316,32 +315,32 @@ public:
static void cameraPunchLeft(MtEvent *e, void *data)
{
SoundMaker *sm = (SoundMaker *)data;
- sm->m_sound->playSound(sm->m_player_leftpunch_sound, false);
+ sm->m_sound->playSound(sm->m_player_leftpunch_sound);
}
static void cameraPunchRight(MtEvent *e, void *data)
{
SoundMaker *sm = (SoundMaker *)data;
- sm->m_sound->playSound(sm->m_player_rightpunch_sound, false);
+ sm->m_sound->playSound(sm->m_player_rightpunch_sound);
}
static void nodeDug(MtEvent *e, void *data)
{
SoundMaker *sm = (SoundMaker *)data;
NodeDugEvent *nde = (NodeDugEvent *)e;
- sm->m_sound->playSound(sm->m_ndef->get(nde->n).sound_dug, false);
+ sm->m_sound->playSound(sm->m_ndef->get(nde->n).sound_dug);
}
static void playerDamage(MtEvent *e, void *data)
{
SoundMaker *sm = (SoundMaker *)data;
- sm->m_sound->playSound(SimpleSoundSpec("player_damage", 0.5), false);
+ sm->m_sound->playSound(SimpleSoundSpec("player_damage", 0.5));
}
static void playerFallingDamage(MtEvent *e, void *data)
{
SoundMaker *sm = (SoundMaker *)data;
- sm->m_sound->playSound(SimpleSoundSpec("player_falling_damage", 0.5), false);
+ sm->m_sound->playSound(SimpleSoundSpec("player_falling_damage", 0.5));
}
void registerReceiver(MtEventManager *mgr)
@@ -422,6 +421,7 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
CachedPixelShaderSetting<float, 3> m_camera_offset_vertex;
CachedPixelShaderSetting<SamplerLayer_t> m_base_texture;
CachedPixelShaderSetting<SamplerLayer_t> m_normal_texture;
+ CachedPixelShaderSetting<SamplerLayer_t> m_texture_flags;
Client *m_client;
public:
@@ -456,6 +456,7 @@ public:
m_camera_offset_vertex("cameraOffset"),
m_base_texture("baseTexture"),
m_normal_texture("normalTexture"),
+ m_texture_flags("textureFlags"),
m_client(client)
{
g_settings->registerChangedCallback("enable_fog", settingsCallback, this);
@@ -525,9 +526,12 @@ public:
m_camera_offset_pixel.set(camera_offset_array, services);
m_camera_offset_vertex.set(camera_offset_array, services);
- SamplerLayer_t base_tex = 0, normal_tex = 1;
+ SamplerLayer_t base_tex = 0,
+ normal_tex = 1,
+ flags_tex = 2;
m_base_texture.set(&base_tex, services);
m_normal_texture.set(&normal_tex, services);
+ m_texture_flags.set(&flags_tex, services);
}
};
@@ -723,7 +727,7 @@ protected:
void processClientEvents(CameraOrientation *cam);
void updateCamera(f32 dtime);
void updateSound(f32 dtime);
- void processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug);
+ void processPlayerInteraction(f32 dtime, bool show_hud);
/*!
* Returns the object or node the player is pointing at.
* Also updates the selected thing in the Hud.
@@ -842,7 +846,6 @@ private:
EventManager *eventmgr = nullptr;
QuicktuneShortcutter *quicktune = nullptr;
- bool registration_confirmation_shown = false;
std::unique_ptr<GameUI> m_game_ui;
GUIChatConsole *gui_chat_console = nullptr; // Free using ->Drop()
@@ -1063,9 +1066,9 @@ bool Game::startup(bool *kill,
void Game::run()
{
ProfilerGraph graph;
- RunStats stats = { 0 };
- CameraOrientation cam_view_target = { 0 };
- CameraOrientation cam_view = { 0 };
+ RunStats stats = {};
+ CameraOrientation cam_view_target = {};
+ CameraOrientation cam_view = {};
FpsControl draw_times;
f32 dtime; // in seconds
@@ -1137,8 +1140,7 @@ void Game::run()
updateDebugState();
updateCamera(dtime);
updateSound(dtime);
- processPlayerInteraction(dtime, m_game_ui->m_flags.show_hud,
- m_game_ui->m_flags.show_basic_debug);
+ processPlayerInteraction(dtime, m_game_ui->m_flags.show_hud);
updateFrame(&graph, &stats, dtime, cam_view);
updateProfilerGraphs(&graph);
@@ -1481,7 +1483,8 @@ bool Game::connectToServer(const GameStartData &start_data,
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());
+ m_rendering_engine, connect_address.isIPv6(), m_game_ui.get(),
+ start_data.allow_login_or_register);
client->migrateModStorage();
} catch (const BaseException &e) {
*error_message = fmtgettext("Error creating client: %s", e.what());
@@ -1492,7 +1495,7 @@ bool Game::connectToServer(const GameStartData &start_data,
client->m_simple_singleplayer_mode = simple_singleplayer_mode;
infostream << "Connecting to server at ";
- connect_address.print(&infostream);
+ connect_address.print(infostream);
infostream << std::endl;
client->connect(connect_address,
@@ -1544,28 +1547,16 @@ bool Game::connectToServer(const GameStartData &start_data,
break;
}
- if (client->m_is_registration_confirmation_state) {
- if (registration_confirmation_shown) {
- // Keep drawing the GUI
- m_rendering_engine->draw_menu_scene(guienv, dtime, true);
- } else {
- registration_confirmation_shown = true;
- (new GUIConfirmRegistration(guienv, guienv->getRootGUIElement(), -1,
- &g_menumgr, client, start_data.name, start_data.password,
- connection_aborted, texture_src))->drop();
- }
- } else {
- 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 = gettext("Connection timed out.");
- errorstream << *error_message << std::endl;
- break;
- }
-
- // Update status
- showOverlayMessage(N_("Connecting to server..."), dtime, 20);
+ 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 = gettext("Connection timed out.");
+ errorstream << *error_message << std::endl;
+ break;
}
+
+ // Update status
+ showOverlayMessage(N_("Connecting to server..."), dtime, 20);
}
} catch (con::PeerNotFoundException &e) {
// TODO: Should something be done here? At least an info/error
@@ -1743,22 +1734,26 @@ void Game::processQueues()
void Game::updateDebugState()
{
- const bool has_basic_debug = true;
+ LocalPlayer *player = client->getEnv().getLocalPlayer();
+
+ // debug UI and wireframe
bool has_debug = client->checkPrivilege("debug");
+ bool has_basic_debug = has_debug || (player->hud_flags & HUD_FLAG_BASIC_DEBUG);
if (m_game_ui->m_flags.show_basic_debug) {
- if (!has_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) {
+ 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;
+
+ // noclip
+ draw_control->allow_noclip = m_cache_enable_noclip && client->checkPrivilege("noclip");
}
void Game::updateProfilers(const RunStats &stats, const FpsControl &draw_times,
@@ -1914,7 +1909,7 @@ void Game::processKeyInput()
if (client->modsLoaded())
openConsole(0.2, L".");
else
- m_game_ui->showStatusText(wgettext("Client side scripting is disabled"));
+ m_game_ui->showTranslatedStatusText("Client side scripting is disabled");
} else if (wasKeyDown(KeyType::CONSOLE)) {
openConsole(core::clamp(g_settings->getFloat("console_height"), 0.1f, 1.0f));
} else if (wasKeyDown(KeyType::FREEMOVE)) {
@@ -1941,7 +1936,7 @@ 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);
+ float new_volume = g_settings->getFloat("sound_volume", 0.0f, 0.9f) + 0.1f;
g_settings->setFloat("sound_volume", new_volume);
std::wstring msg = fwgettext("Volume changed to %d%%", myround(new_volume * 100));
m_game_ui->showStatusText(msg);
@@ -1950,7 +1945,7 @@ void Game::processKeyInput()
}
} 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);
+ float new_volume = g_settings->getFloat("sound_volume", 0.1f, 1.0f) - 0.1f;
g_settings->setFloat("sound_volume", new_volume);
std::wstring msg = fwgettext("Volume changed to %d%%", myround(new_volume * 100));
m_game_ui->showStatusText(msg);
@@ -2214,27 +2209,27 @@ void Game::toggleCinematic()
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)");
+ LocalPlayer *player = client->getEnv().getLocalPlayer();
+ if (!(client->checkPrivilege("debug") || (player->hud_flags & HUD_FLAG_BASIC_DEBUG))) {
+ m_game_ui->showTranslatedStatusText("Can't show block bounds (disabled by mod or game)");
+ return;
+ }
+ 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;
}
}
@@ -2301,6 +2296,9 @@ void Game::toggleFog()
void Game::toggleDebug()
{
+ LocalPlayer *player = client->getEnv().getLocalPlayer();
+ bool has_debug = client->checkPrivilege("debug");
+ bool has_basic_debug = has_debug || (player->hud_flags & HUD_FLAG_BASIC_DEBUG);
// Initial: No debug info
// 1x toggle: Debug text
// 2x toggle: Debug text with profiler graph
@@ -2310,9 +2308,8 @@ void Game::toggleDebug()
// 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;
+ // Basic mode is used when player has the debug HUD flag set,
+ // otherwise the Minimal mode is used.
if (!m_game_ui->m_flags.show_minimal_debug) {
m_game_ui->m_flags.show_minimal_debug = true;
if (has_basic_debug)
@@ -2336,7 +2333,7 @@ void Game::toggleDebug()
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")) {
+ if (has_debug) {
m_game_ui->showTranslatedStatusText("Debug info, profiler graph, and wireframe hidden");
} else {
m_game_ui->showTranslatedStatusText("Debug info and profiler graph hidden");
@@ -2512,11 +2509,13 @@ void Game::updatePlayerControl(const CameraOrientation &cam)
input->getMovementDirection()
);
- // autoforward if set: move towards pointed position at maximum speed
+ // autoforward if set: move at maximum speed
if (player->getPlayerSettings().continuous_forward &&
client->activeObjectsReceived() && !player->isDead()) {
control.movement_speed = 1.0f;
- control.movement_direction = 0.0f;
+ // sideways movement only
+ float dx = sin(control.movement_direction);
+ control.movement_direction = atan2(dx, 1.0f);
}
#ifdef HAVE_TOUCHSCREENGUI
@@ -2612,6 +2611,9 @@ void Game::handleClientEvent_PlayerDamage(ClientEvent *event, CameraOrientation
if (client->modsLoaded())
client->getScript()->on_damage_taken(event->player_damage.amount);
+ if (!event->player_damage.effect)
+ return;
+
// Damage flash and hurt tilt are not used at death
if (client->getHP() > 0) {
LocalPlayer *player = client->getEnv().getLocalPlayer();
@@ -2880,6 +2882,7 @@ void Game::handleClientEvent_SetStars(ClientEvent *event, CameraOrientation *cam
sky->setStarCount(event->star_params->count);
sky->setStarColor(event->star_params->starcolor);
sky->setStarScale(event->star_params->scale);
+ sky->setStarDayOpacity(event->star_params->day_opacity);
delete event->star_params;
}
@@ -3042,7 +3045,7 @@ void Game::updateSound(f32 dtime)
}
-void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
+void Game::processPlayerInteraction(f32 dtime, bool show_hud)
{
LocalPlayer *player = client->getEnv().getLocalPlayer();
@@ -3162,7 +3165,9 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
handlePointingAtNode(pointed, selected_item, hand_item, dtime);
} else if (pointed.type == POINTEDTHING_OBJECT) {
v3f player_position = player->getPosition();
- handlePointingAtObject(pointed, tool_item, player_position, show_debug);
+ bool basic_debug_allowed = client->checkPrivilege("debug") || (player->hud_flags & HUD_FLAG_BASIC_DEBUG);
+ handlePointingAtObject(pointed, tool_item, player_position,
+ m_game_ui->m_flags.show_basic_debug && basic_debug_allowed);
} else if (isKeyDown(KeyType::DIG)) {
// When button is held down in air, show continuous animation
runData.punching = true;
@@ -3760,7 +3765,10 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
float direct_brightness;
bool sunlight_seen;
- if (m_cache_enable_noclip && m_cache_enable_free_move) {
+ // When in noclip mode force same sky brightness as above ground so you
+ // can see properly
+ if (draw_control->allow_noclip && m_cache_enable_free_move &&
+ client->checkPrivilege("fly")) {
direct_brightness = time_brightness;
sunlight_seen = true;
} else {
@@ -4043,7 +4051,12 @@ void Game::updateShadows()
float in_timeofday = fmod(runData.time_of_day_smooth, 1.0f);
- float timeoftheday = fmod(getWickedTimeOfDay(in_timeofday) + 0.75f, 0.5f) + 0.25f;
+ float timeoftheday = getWickedTimeOfDay(in_timeofday);
+ bool is_day = timeoftheday > 0.25 && timeoftheday < 0.75;
+ bool is_shadow_visible = is_day ? sky->getSunVisible() : sky->getMoonVisible();
+ shadow->setShadowIntensity(is_shadow_visible ? client->getEnv().getLocalPlayer()->getLighting().shadow_intensity : 0.0f);
+
+ timeoftheday = fmod(timeoftheday + 0.75f, 0.5f) + 0.25f;
const float offset_constant = 10000.0f;
v3f light(0.0f, 0.0f, -1.0f);
@@ -4075,10 +4088,10 @@ void FpsControl::reset()
*/
void FpsControl::limit(IrrlichtDevice *device, f32 *dtime)
{
- const u64 frametime_min = 1000000.0f / (
- device->isWindowFocused() && !g_menumgr.pausesGame()
+ const float fps_limit = (device->isWindowFocused() && !g_menumgr.pausesGame())
? g_settings->getFloat("fps_max")
- : g_settings->getFloat("fps_max_unfocused"));
+ : g_settings->getFloat("fps_max_unfocused");
+ const u64 frametime_min = 1000000.0f / std::max(fps_limit, 1.0f);
u64 time = porting::getTimeUs();
@@ -4127,9 +4140,9 @@ void Game::readSettings()
m_cache_enable_joysticks = g_settings->getBool("enable_joysticks");
m_cache_enable_particles = g_settings->getBool("enable_particles");
m_cache_enable_fog = g_settings->getBool("enable_fog");
- m_cache_mouse_sensitivity = g_settings->getFloat("mouse_sensitivity");
- m_cache_joystick_frustum_sensitivity = g_settings->getFloat("joystick_frustum_sensitivity");
- m_repeat_place_time = g_settings->getFloat("repeat_place_time");
+ m_cache_mouse_sensitivity = g_settings->getFloat("mouse_sensitivity", 0.001f, 10.0f);
+ m_cache_joystick_frustum_sensitivity = std::max(g_settings->getFloat("joystick_frustum_sensitivity"), 0.001f);
+ m_repeat_place_time = g_settings->getFloat("repeat_place_time", 0.25f, 2.0);
m_cache_enable_noclip = g_settings->getBool("noclip");
m_cache_enable_free_move = g_settings->getBool("free_move");
diff --git a/src/client/gameui.cpp b/src/client/gameui.cpp
index 8505ea3ae..909719bbe 100644
--- a/src/client/gameui.cpp
+++ b/src/client/gameui.cpp
@@ -68,7 +68,7 @@ void GameUI::init()
u16 chat_font_size = g_settings->getU16("chat_font_size");
if (chat_font_size != 0) {
m_guitext_chat->setOverrideFont(g_fontengine->getFont(
- chat_font_size, FM_Unspecified));
+ rangelim(chat_font_size, 5, 72), FM_Unspecified));
}
@@ -151,9 +151,13 @@ void GameUI::update(const RunStats &stats, Client *client, MapDrawControl *draw_
const NodeDefManager *nodedef = client->getNodeDefManager();
MapNode n = map.getNode(pointed_old.node_undersurface);
- if (n.getContent() != CONTENT_IGNORE && nodedef->get(n).name != "unknown") {
- os << ", pointed: " << nodedef->get(n).name
- << ", param2: " << (u64) n.getParam2();
+ if (n.getContent() != CONTENT_IGNORE) {
+ if (nodedef->get(n).name == "unknown") {
+ os << ", pointed: <unknown node>";
+ } else {
+ os << ", pointed: " << nodedef->get(n).name;
+ }
+ os << ", param2: " << (u64) n.getParam2();
}
}
diff --git a/src/client/guiscalingfilter.cpp b/src/client/guiscalingfilter.cpp
index de122becf..42508259f 100644
--- a/src/client/guiscalingfilter.cpp
+++ b/src/client/guiscalingfilter.cpp
@@ -176,52 +176,61 @@ void draw2DImageFilterScaled(video::IVideoDriver *driver, video::ITexture *txr,
}
void draw2DImage9Slice(video::IVideoDriver *driver, video::ITexture *texture,
- const core::rect<s32> &rect, const core::rect<s32> &middle,
- const core::rect<s32> *cliprect, const video::SColor *const colors)
+ const core::rect<s32> &destrect, const core::rect<s32> &srcrect,
+ const core::rect<s32> &middlerect, const core::rect<s32> *cliprect,
+ const video::SColor *const colors)
{
- auto originalSize = texture->getOriginalSize();
- core::vector2di lowerRightOffset = core::vector2di(originalSize.Width, originalSize.Height) - middle.LowerRightCorner;
+ // `-x` is interpreted as `w - x`
+ core::rect<s32> middle = middlerect;
+
+ if (middlerect.LowerRightCorner.X < 0)
+ middle.LowerRightCorner.X += srcrect.getWidth();
+ if (middlerect.LowerRightCorner.Y < 0)
+ middle.LowerRightCorner.Y += srcrect.getHeight();
+
+ core::vector2di lower_right_offset = core::vector2di(srcrect.getWidth(),
+ srcrect.getHeight()) - middle.LowerRightCorner;
for (int y = 0; y < 3; ++y) {
for (int x = 0; x < 3; ++x) {
- core::rect<s32> src({0, 0}, originalSize);
- core::rect<s32> dest = rect;
+ core::rect<s32> src = srcrect;
+ core::rect<s32> dest = destrect;
switch (x) {
case 0:
- dest.LowerRightCorner.X = rect.UpperLeftCorner.X + middle.UpperLeftCorner.X;
- src.LowerRightCorner.X = middle.UpperLeftCorner.X;
+ dest.LowerRightCorner.X = destrect.UpperLeftCorner.X + middle.UpperLeftCorner.X;
+ src.LowerRightCorner.X = srcrect.UpperLeftCorner.X + middle.UpperLeftCorner.X;
break;
case 1:
dest.UpperLeftCorner.X += middle.UpperLeftCorner.X;
- dest.LowerRightCorner.X -= lowerRightOffset.X;
- src.UpperLeftCorner.X = middle.UpperLeftCorner.X;
- src.LowerRightCorner.X = middle.LowerRightCorner.X;
+ dest.LowerRightCorner.X -= lower_right_offset.X;
+ src.UpperLeftCorner.X += middle.UpperLeftCorner.X;
+ src.LowerRightCorner.X -= lower_right_offset.X;
break;
case 2:
- dest.UpperLeftCorner.X = rect.LowerRightCorner.X - lowerRightOffset.X;
- src.UpperLeftCorner.X = middle.LowerRightCorner.X;
+ dest.UpperLeftCorner.X = destrect.LowerRightCorner.X - lower_right_offset.X;
+ src.UpperLeftCorner.X = srcrect.LowerRightCorner.X - lower_right_offset.X;
break;
}
switch (y) {
case 0:
- dest.LowerRightCorner.Y = rect.UpperLeftCorner.Y + middle.UpperLeftCorner.Y;
- src.LowerRightCorner.Y = middle.UpperLeftCorner.Y;
+ dest.LowerRightCorner.Y = destrect.UpperLeftCorner.Y + middle.UpperLeftCorner.Y;
+ src.LowerRightCorner.Y = srcrect.UpperLeftCorner.Y + middle.UpperLeftCorner.Y;
break;
case 1:
dest.UpperLeftCorner.Y += middle.UpperLeftCorner.Y;
- dest.LowerRightCorner.Y -= lowerRightOffset.Y;
- src.UpperLeftCorner.Y = middle.UpperLeftCorner.Y;
- src.LowerRightCorner.Y = middle.LowerRightCorner.Y;
+ dest.LowerRightCorner.Y -= lower_right_offset.Y;
+ src.UpperLeftCorner.Y += middle.UpperLeftCorner.Y;
+ src.LowerRightCorner.Y -= lower_right_offset.Y;
break;
case 2:
- dest.UpperLeftCorner.Y = rect.LowerRightCorner.Y - lowerRightOffset.Y;
- src.UpperLeftCorner.Y = middle.LowerRightCorner.Y;
+ dest.UpperLeftCorner.Y = destrect.LowerRightCorner.Y - lower_right_offset.Y;
+ src.UpperLeftCorner.Y = srcrect.LowerRightCorner.Y - lower_right_offset.Y;
break;
}
diff --git a/src/client/guiscalingfilter.h b/src/client/guiscalingfilter.h
index 379a4bdb0..f2d2fce10 100644
--- a/src/client/guiscalingfilter.h
+++ b/src/client/guiscalingfilter.h
@@ -46,13 +46,13 @@ video::ITexture *guiScalingImageButton(video::IVideoDriver *driver, video::IText
*/
void draw2DImageFilterScaled(video::IVideoDriver *driver, video::ITexture *txr,
const core::rect<s32> &destrect, const core::rect<s32> &srcrect,
- const core::rect<s32> *cliprect = 0, const video::SColor *const colors = 0,
- bool usealpha = false);
+ const core::rect<s32> *cliprect = nullptr,
+ const video::SColor *const colors = nullptr, bool usealpha = false);
/*
* 9-slice / segment drawing
*/
void draw2DImage9Slice(video::IVideoDriver *driver, video::ITexture *texture,
- const core::rect<s32> &rect, const core::rect<s32> &middle,
- const core::rect<s32> *cliprect = nullptr,
+ const core::rect<s32> &destrect, const core::rect<s32> &srcrect,
+ const core::rect<s32> &middlerect, const core::rect<s32> *cliprect = nullptr,
const video::SColor *const colors = nullptr);
diff --git a/src/client/hud.cpp b/src/client/hud.cpp
index 259a18ab9..c0c289608 100644
--- a/src/client/hud.cpp
+++ b/src/client/hud.cpp
@@ -55,7 +55,7 @@ Hud::Hud(Client *client, LocalPlayer *player,
this->player = player;
this->inventory = inventory;
- m_hud_scaling = g_settings->getFloat("hud_scaling");
+ m_hud_scaling = g_settings->getFloat("hud_scaling", 0.5f, 20.0f);
m_scale_factor = m_hud_scaling * RenderingEngine::getDisplayDensity();
m_hotbar_imagesize = std::floor(HOTBAR_IMAGE_SIZE *
RenderingEngine::getDisplayDensity() + 0.5f);
@@ -1013,6 +1013,10 @@ void drawItemStack(
bool has_mesh = false;
ItemMesh *imesh;
+ core::rect<s32> viewrect = rect;
+ if (clip != nullptr)
+ viewrect.clipAgainst(*clip);
+
// 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);
@@ -1034,9 +1038,6 @@ void drawItemStack(
core::rect<s32> oldViewPort = driver->getViewPort();
core::matrix4 oldProjMat = driver->getTransform(video::ETS_PROJECTION);
core::matrix4 oldViewMat = driver->getTransform(video::ETS_VIEW);
- core::rect<s32> viewrect = rect;
- if (clip)
- viewrect.clipAgainst(*clip);
core::matrix4 ProjMatrix;
ProjMatrix.buildProjectionMatrixOrthoLH(2.0f, 2.0f, -1.0f, 100.0f);
@@ -1180,24 +1181,68 @@ void drawItemStack(
driver->draw2DRectangle(color, progressrect2, clip);
}
- if (font != NULL && item.count >= 2) {
+ const std::string &count_text = item.metadata.getString("count_meta");
+ if (font != nullptr && (item.count >= 2 || !count_text.empty())) {
// Get the item count as a string
- std::string text = itos(item.count);
- v2u32 dim = font->getDimension(utf8_to_wide(text).c_str());
+ std::string text = count_text.empty() ? itos(item.count) : count_text;
+ v2u32 dim = font->getDimension(utf8_to_wide(unescape_enriched(text)).c_str());
v2s32 sdim(dim.X, dim.Y);
core::rect<s32> rect2(
- /*rect.UpperLeftCorner,
- core::dimension2d<u32>(rect.getWidth(), 15)*/
rect.LowerRightCorner - sdim,
- sdim
+ rect.LowerRightCorner
);
- video::SColor bgcolor(128, 0, 0, 0);
- driver->draw2DRectangle(bgcolor, rect2, clip);
+ // get the count alignment
+ s32 count_alignment = stoi(item.metadata.getString("count_alignment"));
+ if (count_alignment != 0) {
+ s32 a_x = count_alignment & 3;
+ s32 a_y = (count_alignment >> 2) & 3;
+
+ s32 x1, x2, y1, y2;
+ switch (a_x) {
+ case 1: // left
+ x1 = rect.UpperLeftCorner.X;
+ x2 = x1 + sdim.X;
+ break;
+ case 2: // middle
+ x1 = (rect.UpperLeftCorner.X + rect.LowerRightCorner.X - sdim.X) / 2;
+ x2 = x1 + sdim.X;
+ break;
+ case 3: // right
+ x2 = rect.LowerRightCorner.X;
+ x1 = x2 - sdim.X;
+ break;
+ default: // 0 = default
+ x1 = rect2.UpperLeftCorner.X;
+ x2 = rect2.LowerRightCorner.X;
+ break;
+ }
+
+ switch (a_y) {
+ case 1: // up
+ y1 = rect.UpperLeftCorner.Y;
+ y2 = y1 + sdim.Y;
+ break;
+ case 2: // middle
+ y1 = (rect.UpperLeftCorner.Y + rect.LowerRightCorner.Y - sdim.Y) / 2;
+ y2 = y1 + sdim.Y;
+ break;
+ case 3: // down
+ y2 = rect.LowerRightCorner.Y;
+ y1 = y2 - sdim.Y;
+ break;
+ default: // 0 = default
+ y1 = rect2.UpperLeftCorner.Y;
+ y2 = rect2.LowerRightCorner.Y;
+ break;
+ }
+
+ rect2 = core::rect<s32>(x1, y1, x2, y2);
+ }
video::SColor color(255, 255, 255, 255);
- font->draw(text.c_str(), rect2, color, false, false, clip);
+ font->draw(utf8_to_wide(text).c_str(), rect2, color, false, false, &viewrect);
}
}
diff --git a/src/client/imagefilters.cpp b/src/client/imagefilters.cpp
index b62e336f7..c9d1504ad 100644
--- a/src/client/imagefilters.cpp
+++ b/src/client/imagefilters.cpp
@@ -124,7 +124,7 @@ void imageCleanTransparent(video::IImage *src, u32 threshold)
// Ignore pixels we haven't processed
if (!bitmap.get(sx, sy))
continue;
-
+
// 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);
diff --git a/src/client/joystick_controller.cpp b/src/client/joystick_controller.cpp
index aae73c62d..9e58b9f62 100644
--- a/src/client/joystick_controller.cpp
+++ b/src/client/joystick_controller.cpp
@@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "gettime.h"
#include "porting.h"
#include "util/string.h"
+#include "util/numeric.h"
bool JoystickButtonCmb::isTriggered(const irr::SEvent::SJoystickEvent &ev) const
{
@@ -202,9 +203,9 @@ JoystickLayout create_dragonrise_gamecube_layout()
}
-JoystickController::JoystickController() :
- doubling_dtime(g_settings->getFloat("repeat_joystick_button_time"))
+JoystickController::JoystickController()
{
+ doubling_dtime = std::max(g_settings->getFloat("repeat_joystick_button_time"), 0.001f);
for (float &i : m_past_pressed_time) {
i = 0;
}
@@ -217,19 +218,20 @@ void JoystickController::onJoystickConnect(const std::vector<irr::SJoystickInfo>
s32 id = g_settings->getS32("joystick_id");
std::string layout = g_settings->get("joystick_type");
- if (id < 0 || (u16)id >= joystick_infos.size()) {
+ if (id < 0 || id >= (s32)joystick_infos.size()) {
// TODO: auto detection
id = 0;
}
- if (id >= 0 && (u16)id < joystick_infos.size()) {
+ if (id >= 0 && id < (s32)joystick_infos.size()) {
if (layout.empty() || layout == "auto")
setLayoutFromControllerName(joystick_infos[id].Name.c_str());
else
setLayoutFromControllerName(layout);
}
- m_joystick_id = id;
+ // Irrlicht restriction.
+ m_joystick_id = rangelim(id, 0, UINT8_MAX);
}
void JoystickController::setLayoutFromControllerName(const std::string &name)
diff --git a/src/client/localplayer.cpp b/src/client/localplayer.cpp
index 279efafe9..79fe2cb11 100644
--- a/src/client/localplayer.cpp
+++ b/src/client/localplayer.cpp
@@ -426,16 +426,6 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
camera_impact = getSpeed().Y * -1;
}
- {
- camera_barely_in_ceiling = false;
- v3s16 camera_np = floatToInt(getEyePosition(), BS);
- MapNode n = map->getNode(camera_np);
- if (n.getContent() != CONTENT_IGNORE) {
- if (nodemgr->get(n).walkable && nodemgr->get(n).solidness == 2)
- camera_barely_in_ceiling = true;
- }
- }
-
/*
Check properties of the node on which the player is standing
*/
@@ -696,8 +686,7 @@ v3s16 LocalPlayer::getLightPosition() const
v3f LocalPlayer::getEyeOffset() const
{
- float eye_height = camera_barely_in_ceiling ? m_eye_height - 0.125f : m_eye_height;
- return v3f(0.0f, BS * eye_height, 0.0f);
+ return v3f(0.0f, BS * m_eye_height, 0.0f);
}
ClientActiveObject *LocalPlayer::getParent() const
@@ -1025,16 +1014,6 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d,
camera_impact = getSpeed().Y * -1.0f;
}
- {
- camera_barely_in_ceiling = false;
- v3s16 camera_np = floatToInt(getEyePosition(), BS);
- MapNode n = map->getNode(camera_np);
- if (n.getContent() != CONTENT_IGNORE) {
- if (nodemgr->get(n).walkable && nodemgr->get(n).solidness == 2)
- camera_barely_in_ceiling = true;
- }
- }
-
/*
Update the node last under the player
*/
diff --git a/src/client/localplayer.h b/src/client/localplayer.h
index 577be2803..650a01574 100644
--- a/src/client/localplayer.h
+++ b/src/client/localplayer.h
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "environment.h"
#include "constants.h"
#include "settings.h"
+#include "lighting.h"
#include <list>
class Client;
@@ -158,6 +159,8 @@ public:
added_velocity += vel;
}
+ inline Lighting& getLighting() { return m_lighting; }
+
private:
void accelerate(const v3f &target_speed, const f32 max_increase_H,
const f32 max_increase_V, const bool use_pitch);
@@ -196,7 +199,6 @@ private:
u16 m_breath = PLAYER_MAX_BREATH_DEFAULT;
f32 m_yaw = 0.0f;
f32 m_pitch = 0.0f;
- bool camera_barely_in_ceiling = false;
aabb3f m_collisionbox = aabb3f(-BS * 0.30f, 0.0f, -BS * 0.30f, BS * 0.30f,
BS * 1.75f, BS * 0.30f);
float m_eye_height = 1.625f;
@@ -209,4 +211,5 @@ private:
GenericCAO *m_cao = nullptr;
Client *m_client;
+ Lighting m_lighting;
};
diff --git a/src/client/mapblock_mesh.cpp b/src/client/mapblock_mesh.cpp
index e077011cc..c730b9bf9 100644
--- a/src/client/mapblock_mesh.cpp
+++ b/src/client/mapblock_mesh.cpp
@@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/meshgen/collector.h"
#include "client/renderingengine.h"
#include <array>
+#include <algorithm>
/*
MeshMakeData
@@ -861,7 +862,7 @@ static void updateFastFaceRow(
g_settings->getBool("enable_waving_water");
static thread_local const bool force_not_tiling =
- false && g_settings->getBool("enable_dynamic_shadows");
+ g_settings->getBool("enable_dynamic_shadows");
v3s16 p = startpos;
@@ -1004,6 +1005,179 @@ static void applyTileColor(PreMeshBuffer &pmb)
}
/*
+ MapBlockBspTree
+*/
+
+void MapBlockBspTree::buildTree(const std::vector<MeshTriangle> *triangles)
+{
+ this->triangles = triangles;
+
+ nodes.clear();
+
+ // assert that triangle index can fit into s32
+ assert(triangles->size() <= 0x7FFFFFFFL);
+ std::vector<s32> indexes;
+ indexes.reserve(triangles->size());
+ for (u32 i = 0; i < triangles->size(); i++)
+ indexes.push_back(i);
+
+ if (!indexes.empty()) {
+ // Start in the center of the block with increment of one quarter in each direction
+ root = buildTree(v3f(1, 0, 0), v3f((MAP_BLOCKSIZE + 1) * 0.5f * BS), MAP_BLOCKSIZE * 0.25f * BS, indexes, 0);
+ } else {
+ root = -1;
+ }
+}
+
+/**
+ * @brief Find a candidate plane to split a set of triangles in two
+ *
+ * The candidate plane is represented by one of the triangles from the set.
+ *
+ * @param list Vector of indexes of the triangles in the set
+ * @param triangles Vector of all triangles in the BSP tree
+ * @return Address of the triangle that represents the proposed split plane
+ */
+static const MeshTriangle *findSplitCandidate(const std::vector<s32> &list, const std::vector<MeshTriangle> &triangles)
+{
+ // find the center of the cluster.
+ v3f center(0, 0, 0);
+ size_t n = list.size();
+ for (s32 i : list) {
+ center += triangles[i].centroid / n;
+ }
+
+ // find the triangle with the largest area and closest to the center
+ const MeshTriangle *candidate_triangle = &triangles[list[0]];
+ const MeshTriangle *ith_triangle;
+ for (s32 i : list) {
+ ith_triangle = &triangles[i];
+ if (ith_triangle->areaSQ > candidate_triangle->areaSQ ||
+ (ith_triangle->areaSQ == candidate_triangle->areaSQ &&
+ ith_triangle->centroid.getDistanceFromSQ(center) < candidate_triangle->centroid.getDistanceFromSQ(center))) {
+ candidate_triangle = ith_triangle;
+ }
+ }
+ return candidate_triangle;
+}
+
+s32 MapBlockBspTree::buildTree(v3f normal, v3f origin, float delta, const std::vector<s32> &list, u32 depth)
+{
+ // if the list is empty, don't bother
+ if (list.empty())
+ return -1;
+
+ // if there is only one triangle, or the delta is insanely small, this is a leaf node
+ if (list.size() == 1 || delta < 0.01) {
+ nodes.emplace_back(normal, origin, list, -1, -1);
+ return nodes.size() - 1;
+ }
+
+ std::vector<s32> front_list;
+ std::vector<s32> back_list;
+ std::vector<s32> node_list;
+
+ // split the list
+ for (s32 i : list) {
+ const MeshTriangle &triangle = (*triangles)[i];
+ float factor = normal.dotProduct(triangle.centroid - origin);
+ if (factor == 0)
+ node_list.push_back(i);
+ else if (factor > 0)
+ front_list.push_back(i);
+ else
+ back_list.push_back(i);
+ }
+
+ // define the new split-plane
+ v3f candidate_normal(normal.Z, normal.X, normal.Y);
+ float candidate_delta = delta;
+ if (depth % 3 == 2)
+ candidate_delta /= 2;
+
+ s32 front_index = -1;
+ s32 back_index = -1;
+
+ if (!front_list.empty()) {
+ v3f next_normal = candidate_normal;
+ v3f next_origin = origin + delta * normal;
+ float next_delta = candidate_delta;
+ if (next_delta < 5) {
+ const MeshTriangle *candidate = findSplitCandidate(front_list, *triangles);
+ next_normal = candidate->getNormal();
+ next_origin = candidate->centroid;
+ }
+ front_index = buildTree(next_normal, next_origin, next_delta, front_list, depth + 1);
+
+ // if there are no other triangles, don't create a new node
+ if (back_list.empty() && node_list.empty())
+ return front_index;
+ }
+
+ if (!back_list.empty()) {
+ v3f next_normal = candidate_normal;
+ v3f next_origin = origin - delta * normal;
+ float next_delta = candidate_delta;
+ if (next_delta < 5) {
+ const MeshTriangle *candidate = findSplitCandidate(back_list, *triangles);
+ next_normal = candidate->getNormal();
+ next_origin = candidate->centroid;
+ }
+
+ back_index = buildTree(next_normal, next_origin, next_delta, back_list, depth + 1);
+
+ // if there are no other triangles, don't create a new node
+ if (front_list.empty() && node_list.empty())
+ return back_index;
+ }
+
+ nodes.emplace_back(normal, origin, node_list, front_index, back_index);
+
+ return nodes.size() - 1;
+}
+
+void MapBlockBspTree::traverse(s32 node, v3f viewpoint, std::vector<s32> &output) const
+{
+ if (node < 0) return; // recursion break;
+
+ const TreeNode &n = nodes[node];
+ float factor = n.normal.dotProduct(viewpoint - n.origin);
+
+ if (factor > 0)
+ traverse(n.back_ref, viewpoint, output);
+ else
+ traverse(n.front_ref, viewpoint, output);
+
+ if (factor != 0)
+ for (s32 i : n.triangle_refs)
+ output.push_back(i);
+
+ if (factor > 0)
+ traverse(n.front_ref, viewpoint, output);
+ else
+ traverse(n.back_ref, viewpoint, output);
+}
+
+
+
+/*
+ PartialMeshBuffer
+*/
+
+void PartialMeshBuffer::beforeDraw() const
+{
+ // Patch the indexes in the mesh buffer before draw
+ m_buffer->Indices = std::move(m_vertex_indexes);
+ m_buffer->setDirty(scene::EBT_INDEX);
+}
+
+void PartialMeshBuffer::afterDraw() const
+{
+ // Take the data back
+ m_vertex_indexes = m_buffer->Indices.steal();
+}
+
+/*
MapBlockMesh
*/
@@ -1084,6 +1258,9 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
Convert MeshCollector to SMesh
*/
+ const bool desync_animations = g_settings->getBool(
+ "desynchronize_mapblock_texture_animation");
+
for (int layer = 0; layer < MAX_TILE_LAYERS; layer++) {
for(u32 i = 0; i < collector.prebuffers[layer].size(); i++)
{
@@ -1113,18 +1290,18 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
// - Texture animation
if (p.layer.material_flags & MATERIAL_FLAG_ANIMATION) {
// Add to MapBlockMesh in order to animate these tiles
- m_animation_tiles[std::pair<u8, u32>(layer, i)] = p.layer;
- m_animation_frames[std::pair<u8, u32>(layer, i)] = 0;
- if (g_settings->getBool(
- "desynchronize_mapblock_texture_animation")) {
+ auto &info = m_animation_info[{layer, i}];
+ info.tile = p.layer;
+ info.frame = 0;
+ if (desync_animations) {
// Get starting position from noise
- m_animation_frame_offsets[std::pair<u8, u32>(layer, i)] =
+ info.frame_offset =
100000 * (2.0 + noise3d(
data->m_blockpos.X, data->m_blockpos.Y,
data->m_blockpos.Z, 0));
} else {
// Play all synchronized
- m_animation_frame_offsets[std::pair<u8, u32>(layer, i)] = 0;
+ info.frame_offset = 0;
}
// Replace tile texture with the first animation frame
p.layer.texture = (*p.layer.frames)[0].texture;
@@ -1135,19 +1312,23 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
// Dummy sunlight to handle non-sunlit areas
video::SColorf sunlight;
get_sunlight_color(&sunlight, 0);
- u32 vertex_count = p.vertices.size();
+
+ std::map<u32, video::SColor> colors;
+ const u32 vertex_count = p.vertices.size();
for (u32 j = 0; j < vertex_count; j++) {
video::SColor *vc = &p.vertices[j].Color;
video::SColor copy = *vc;
if (vc->getAlpha() == 0) // No sunlight - no need to animate
final_color_blend(vc, copy, sunlight); // Finalize color
else // Record color to animate
- m_daynight_diffs[std::pair<u8, u32>(layer, i)][j] = copy;
+ colors[j] = copy;
// The sunlight ratio has been stored,
// delete alpha (for the final rendering).
vc->setAlpha(255);
}
+ if (!colors.empty())
+ m_daynight_diffs[{layer, i}] = std::move(colors);
}
// Create material
@@ -1173,8 +1354,23 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
scene::SMeshBuffer *buf = new scene::SMeshBuffer();
buf->Material = material;
- buf->append(&p.vertices[0], p.vertices.size(),
- &p.indices[0], p.indices.size());
+ if (p.layer.isTransparent()) {
+ buf->append(&p.vertices[0], p.vertices.size(), nullptr, 0);
+
+ MeshTriangle t;
+ t.buffer = buf;
+ m_transparent_triangles.reserve(p.indices.size() / 3);
+ for (u32 i = 0; i < p.indices.size(); i += 3) {
+ t.p1 = p.indices[i];
+ t.p2 = p.indices[i + 1];
+ t.p3 = p.indices[i + 2];
+ t.updateAttributes();
+ m_transparent_triangles.push_back(t);
+ }
+ } else {
+ buf->append(&p.vertices[0], p.vertices.size(),
+ &p.indices[0], p.indices.size());
+ }
mesh->addMeshBuffer(buf);
buf->drop();
}
@@ -1187,12 +1383,13 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
}
//std::cout<<"added "<<fastfaces.getSize()<<" faces."<<std::endl;
+ m_bsp_tree.buildTree(&m_transparent_triangles);
// Check if animation is required for this mesh
m_has_animation =
!m_crack_materials.empty() ||
!m_daynight_diffs.empty() ||
- !m_animation_tiles.empty();
+ !m_animation_info.empty();
}
MapBlockMesh::~MapBlockMesh()
@@ -1226,25 +1423,22 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack,
for (auto &crack_material : m_crack_materials) {
scene::IMeshBuffer *buf = m_mesh[crack_material.first.first]->
getMeshBuffer(crack_material.first.second);
- std::string basename = crack_material.second;
// Create new texture name from original
- std::ostringstream os;
- os << basename << crack;
+ std::string s = crack_material.second + itos(crack);
u32 new_texture_id = 0;
video::ITexture *new_texture =
- m_tsrc->getTextureForMesh(os.str(), &new_texture_id);
+ m_tsrc->getTextureForMesh(s, &new_texture_id);
buf->getMaterial().setTexture(0, new_texture);
- // If the current material is also animated,
- // update animation info
- auto anim_iter = m_animation_tiles.find(crack_material.first);
- if (anim_iter != m_animation_tiles.end()) {
- TileLayer &tile = anim_iter->second;
+ // If the current material is also animated, update animation info
+ auto anim_it = m_animation_info.find(crack_material.first);
+ if (anim_it != m_animation_info.end()) {
+ TileLayer &tile = anim_it->second.tile;
tile.texture = new_texture;
tile.texture_id = new_texture_id;
// force animation update
- m_animation_frames[crack_material.first] = -1;
+ anim_it->second.frame = -1;
}
}
@@ -1252,28 +1446,25 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack,
}
// Texture animation
- for (auto &animation_tile : m_animation_tiles) {
- const TileLayer &tile = animation_tile.second;
+ for (auto &it : m_animation_info) {
+ const TileLayer &tile = it.second.tile;
// Figure out current frame
- int frameoffset = m_animation_frame_offsets[animation_tile.first];
- int frame = (int)(time * 1000 / tile.animation_frame_length_ms
- + frameoffset) % tile.animation_frame_count;
+ int frameno = (int)(time * 1000 / tile.animation_frame_length_ms
+ + it.second.frame_offset) % tile.animation_frame_count;
// If frame doesn't change, skip
- if (frame == m_animation_frames[animation_tile.first])
+ if (frameno == it.second.frame)
continue;
- m_animation_frames[animation_tile.first] = frame;
+ it.second.frame = frameno;
- scene::IMeshBuffer *buf = m_mesh[animation_tile.first.first]->
- getMeshBuffer(animation_tile.first.second);
+ scene::IMeshBuffer *buf = m_mesh[it.first.first]->getMeshBuffer(it.first.second);
- const FrameSpec &animation_frame = (*tile.frames)[frame];
- buf->getMaterial().setTexture(0, animation_frame.texture);
+ const FrameSpec &frame = (*tile.frames)[frameno];
+ buf->getMaterial().setTexture(0, frame.texture);
if (m_enable_shaders) {
- if (animation_frame.normal_texture)
- buf->getMaterial().setTexture(1,
- animation_frame.normal_texture);
- buf->getMaterial().setTexture(2, animation_frame.flags_texture);
+ if (frame.normal_texture)
+ buf->getMaterial().setTexture(1, frame.normal_texture);
+ buf->getMaterial().setTexture(2, frame.flags_texture);
}
}
@@ -1300,6 +1491,67 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack,
return true;
}
+void MapBlockMesh::updateTransparentBuffers(v3f camera_pos, v3s16 block_pos)
+{
+ // nothing to do if the entire block is opaque
+ if (m_transparent_triangles.empty())
+ return;
+
+ v3f block_posf = intToFloat(block_pos * MAP_BLOCKSIZE, BS);
+ v3f rel_camera_pos = camera_pos - block_posf;
+
+ std::vector<s32> triangle_refs;
+ m_bsp_tree.traverse(rel_camera_pos, triangle_refs);
+
+ // arrange index sequences into partial buffers
+ m_transparent_buffers.clear();
+
+ scene::SMeshBuffer *current_buffer = nullptr;
+ std::vector<u16> current_strain;
+ for (auto i : triangle_refs) {
+ const auto &t = m_transparent_triangles[i];
+ if (current_buffer != t.buffer) {
+ if (current_buffer) {
+ m_transparent_buffers.emplace_back(current_buffer, std::move(current_strain));
+ current_strain.clear();
+ }
+ current_buffer = t.buffer;
+ }
+ current_strain.push_back(t.p1);
+ current_strain.push_back(t.p2);
+ current_strain.push_back(t.p3);
+ }
+
+ if (!current_strain.empty())
+ m_transparent_buffers.emplace_back(current_buffer, std::move(current_strain));
+}
+
+void MapBlockMesh::consolidateTransparentBuffers()
+{
+ m_transparent_buffers.clear();
+
+ scene::SMeshBuffer *current_buffer = nullptr;
+ std::vector<u16> current_strain;
+
+ // use the fact that m_transparent_triangles is already arranged by buffer
+ for (const auto &t : m_transparent_triangles) {
+ if (current_buffer != t.buffer) {
+ if (current_buffer != nullptr) {
+ this->m_transparent_buffers.emplace_back(current_buffer, std::move(current_strain));
+ current_strain.clear();
+ }
+ current_buffer = t.buffer;
+ }
+ current_strain.push_back(t.p1);
+ current_strain.push_back(t.p2);
+ current_strain.push_back(t.p3);
+ }
+
+ if (!current_strain.empty()) {
+ this->m_transparent_buffers.emplace_back(current_buffer, std::move(current_strain));
+ }
+}
+
video::SColor encode_light(u16 light, u8 emissive_light)
{
// Get components
diff --git a/src/client/mapblock_mesh.h b/src/client/mapblock_mesh.h
index 3b17c4af9..169b3a8c1 100644
--- a/src/client/mapblock_mesh.h
+++ b/src/client/mapblock_mesh.h
@@ -71,6 +71,102 @@ struct MeshMakeData
void setSmoothLighting(bool smooth_lighting);
};
+// represents a triangle as indexes into the vertex buffer in SMeshBuffer
+class MeshTriangle
+{
+public:
+ scene::SMeshBuffer *buffer;
+ u16 p1, p2, p3;
+ v3f centroid;
+ float areaSQ;
+
+ void updateAttributes()
+ {
+ v3f v1 = buffer->getPosition(p1);
+ v3f v2 = buffer->getPosition(p2);
+ v3f v3 = buffer->getPosition(p3);
+
+ centroid = (v1 + v2 + v3) / 3;
+ areaSQ = (v2-v1).crossProduct(v3-v1).getLengthSQ() / 4;
+ }
+
+ v3f getNormal() const {
+ v3f v1 = buffer->getPosition(p1);
+ v3f v2 = buffer->getPosition(p2);
+ v3f v3 = buffer->getPosition(p3);
+
+ return (v2-v1).crossProduct(v3-v1);
+ }
+};
+
+/**
+ * Implements a binary space partitioning tree
+ * See also: https://en.wikipedia.org/wiki/Binary_space_partitioning
+ */
+class MapBlockBspTree
+{
+public:
+ MapBlockBspTree() {}
+
+ void buildTree(const std::vector<MeshTriangle> *triangles);
+
+ void traverse(v3f viewpoint, std::vector<s32> &output) const
+ {
+ traverse(root, viewpoint, output);
+ }
+
+private:
+ // Tree node definition;
+ struct TreeNode
+ {
+ v3f normal;
+ v3f origin;
+ std::vector<s32> triangle_refs;
+ s32 front_ref;
+ s32 back_ref;
+
+ TreeNode() = default;
+ TreeNode(v3f normal, v3f origin, const std::vector<s32> &triangle_refs, s32 front_ref, s32 back_ref) :
+ normal(normal), origin(origin), triangle_refs(triangle_refs), front_ref(front_ref), back_ref(back_ref)
+ {}
+ };
+
+
+ s32 buildTree(v3f normal, v3f origin, float delta, const std::vector<s32> &list, u32 depth);
+ void traverse(s32 node, v3f viewpoint, std::vector<s32> &output) const;
+
+ const std::vector<MeshTriangle> *triangles = nullptr; // this reference is managed externally
+ std::vector<TreeNode> nodes; // list of nodes
+ s32 root = -1; // index of the root node
+};
+
+/*
+ * PartialMeshBuffer
+ *
+ * Attach alternate `Indices` to an existing mesh buffer, to make it possible to use different
+ * indices with the same vertex buffer.
+ *
+ * Irrlicht does not currently support this: `CMeshBuffer` ties together a single vertex buffer
+ * and a single index buffer. There's no way to share these between mesh buffers.
+ *
+ */
+class PartialMeshBuffer
+{
+public:
+ PartialMeshBuffer(scene::SMeshBuffer *buffer, std::vector<u16> &&vertex_indexes) :
+ m_buffer(buffer), m_vertex_indexes(std::move(vertex_indexes))
+ {}
+
+ scene::IMeshBuffer *getBuffer() const { return m_buffer; }
+ const std::vector<u16> &getVertexIndexes() const { return m_vertex_indexes; }
+
+ void beforeDraw() const;
+ void afterDraw() const;
+private:
+ scene::SMeshBuffer *m_buffer;
+ mutable std::vector<u16> m_vertex_indexes;
+};
+
/*
Holds a mesh for a mapblock.
@@ -125,7 +221,23 @@ public:
m_animation_force_timer--;
}
+ /// update transparent buffers to render towards the camera
+ void updateTransparentBuffers(v3f camera_pos, v3s16 block_pos);
+ void consolidateTransparentBuffers();
+
+ /// get the list of transparent buffers
+ const std::vector<PartialMeshBuffer> &getTransparentBuffers() const
+ {
+ return this->m_transparent_buffers;
+ }
+
private:
+ struct AnimationInfo {
+ int frame; // last animation frame
+ int frame_offset;
+ TileLayer tile;
+ };
+
scene::IMesh *m_mesh[MAX_TILE_LAYERS];
MinimapMapblock *m_minimap_mapblock;
ITextureSource *m_tsrc;
@@ -144,12 +256,10 @@ private:
// Maps mesh and mesh buffer (i.e. material) indices to base texture names
std::map<std::pair<u8, u32>, std::string> m_crack_materials;
- // Animation info: texture animationi
+ // Animation info: texture animation
// Maps mesh and mesh buffer indices to TileSpecs
// Keys are pairs of (mesh index, buffer index in the mesh)
- std::map<std::pair<u8, u32>, TileLayer> m_animation_tiles;
- std::map<std::pair<u8, u32>, int> m_animation_frames; // last animation frame
- std::map<std::pair<u8, u32>, int> m_animation_frame_offsets;
+ std::map<std::pair<u8, u32>, AnimationInfo> m_animation_info;
// Animation info: day/night transitions
// Last daynight_ratio value passed to animate()
@@ -158,6 +268,13 @@ private:
// of sunlit vertices
// Keys are pairs of (mesh index, buffer index in the mesh)
std::map<std::pair<u8, u32>, std::map<u32, video::SColor > > m_daynight_diffs;
+
+ // list of all semitransparent triangles in the mapblock
+ std::vector<MeshTriangle> m_transparent_triangles;
+ // Binary Space Partitioning tree for the block
+ MapBlockBspTree m_bsp_tree;
+ // Ordered list of references to parts of transparent buffers to draw
+ std::vector<PartialMeshBuffer> m_transparent_buffers;
};
/*!
diff --git a/src/client/mesh.cpp b/src/client/mesh.cpp
index c56eba2e2..4bf07effa 100644
--- a/src/client/mesh.cpp
+++ b/src/client/mesh.cpp
@@ -20,7 +20,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mesh.h"
#include "debug.h"
#include "log.h"
-#include "irrMap.h"
#include <cmath>
#include <iostream>
#include <IAnimatedMesh.h>
diff --git a/src/client/mesh_generator_thread.cpp b/src/client/mesh_generator_thread.cpp
index 5c3f4180b..c1bd7388e 100644
--- a/src/client/mesh_generator_thread.cpp
+++ b/src/client/mesh_generator_thread.cpp
@@ -50,7 +50,8 @@ QueuedMeshUpdate::~QueuedMeshUpdate()
*/
MeshUpdateQueue::MeshUpdateQueue(Client *client):
- m_client(client)
+ m_client(client),
+ m_next_cache_cleanup(0)
{
m_cache_enable_shaders = g_settings->getBool("enable_shaders");
m_cache_smooth_lighting = g_settings->getBool("smooth_lighting");
@@ -157,8 +158,7 @@ CachedMapBlockData* MeshUpdateQueue::cacheBlock(Map *map, v3s16 p, UpdateMode mo
size_t *cache_hit_counter)
{
CachedMapBlockData *cached_block = nullptr;
- std::map<v3s16, CachedMapBlockData*>::iterator it =
- m_cache.find(p);
+ auto it = m_cache.find(p);
if (it != m_cache.end()) {
cached_block = it->second;
@@ -192,7 +192,7 @@ CachedMapBlockData* MeshUpdateQueue::cacheBlock(Map *map, v3s16 p, UpdateMode mo
CachedMapBlockData* MeshUpdateQueue::getCachedBlock(const v3s16 &p)
{
- std::map<v3s16, CachedMapBlockData*>::iterator it = m_cache.find(p);
+ auto it = m_cache.find(p);
if (it != m_cache.end()) {
return it->second;
}
@@ -231,6 +231,15 @@ void MeshUpdateQueue::cleanupCache()
g_profiler->avg("MeshUpdateQueue MapBlock cache size kB",
mapblock_kB * m_cache.size());
+ // Iterating the entire cache can get pretty expensive so don't do it too often
+ {
+ constexpr int cleanup_interval = 250;
+ const u64 now = porting::getTimeMs();
+ if (m_next_cache_cleanup > now)
+ return;
+ m_next_cache_cleanup = now + cleanup_interval;
+ }
+
// The cache size is kept roughly below cache_soft_max_size, not letting
// anything get older than cache_seconds_max or deleted before 2 seconds.
const int cache_seconds_max = 10;
@@ -240,12 +249,11 @@ void MeshUpdateQueue::cleanupCache()
int t_now = time(0);
- for (std::map<v3s16, CachedMapBlockData*>::iterator it = m_cache.begin();
- it != m_cache.end(); ) {
+ for (auto it = m_cache.begin(); it != m_cache.end(); ) {
CachedMapBlockData *cached_block = it->second;
if (cached_block->refcount_from_queue == 0 &&
cached_block->last_used_timestamp < t_now - cache_seconds) {
- m_cache.erase(it++);
+ it = m_cache.erase(it);
delete cached_block;
} else {
++it;
diff --git a/src/client/mesh_generator_thread.h b/src/client/mesh_generator_thread.h
index 1b734bc06..552b2a9f0 100644
--- a/src/client/mesh_generator_thread.h
+++ b/src/client/mesh_generator_thread.h
@@ -21,6 +21,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <ctime>
#include <mutex>
+#include <unordered_map>
+#include <unordered_set>
#include "mapblock_mesh.h"
#include "threading/mutex_auto_lock.h"
#include "util/thread.h"
@@ -81,8 +83,9 @@ public:
private:
Client *m_client;
std::vector<QueuedMeshUpdate *> m_queue;
- std::set<v3s16> m_urgents;
- std::map<v3s16, CachedMapBlockData *> m_cache;
+ std::unordered_set<v3s16> m_urgents;
+ std::unordered_map<v3s16, CachedMapBlockData *> m_cache;
+ u64 m_next_cache_cleanup; // milliseconds
std::mutex m_mutex;
// TODO: Add callback to update these when g_settings changes
diff --git a/src/client/minimap.cpp b/src/client/minimap.cpp
index f26aa1c70..320621d91 100644
--- a/src/client/minimap.cpp
+++ b/src/client/minimap.cpp
@@ -304,7 +304,7 @@ void Minimap::setModeIndex(size_t index)
data->mode = m_modes[index];
m_current_mode_index = index;
} else {
- data->mode = MinimapModeDef{MINIMAP_TYPE_OFF, gettext("Minimap hidden"), 0, 0, ""};
+ data->mode = {MINIMAP_TYPE_OFF, gettext("Minimap hidden"), 0, 0, "", 0};
m_current_mode_index = 0;
}
diff --git a/src/client/particles.cpp b/src/client/particles.cpp
index 288826a5f..818cdc8cc 100644
--- a/src/client/particles.cpp
+++ b/src/client/particles.cpp
@@ -34,23 +34,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "settings.h"
/*
- Utility
-*/
-
-static f32 random_f32(f32 min, f32 max)
-{
- return rand() / (float)RAND_MAX * (max - min) + min;
-}
-
-static v3f random_v3f(v3f min, v3f max)
-{
- return v3f(
- random_f32(min.X, max.X),
- random_f32(min.Y, max.Y),
- random_f32(min.Z, max.Z));
-}
-
-/*
Particle
*/
@@ -59,25 +42,69 @@ Particle::Particle(
LocalPlayer *player,
ClientEnvironment *env,
const ParticleParameters &p,
- video::ITexture *texture,
+ const ClientTexRef& texture,
v2f texpos,
v2f texsize,
video::SColor color
):
scene::ISceneNode(((Client *)gamedef)->getSceneManager()->getRootSceneNode(),
- ((Client *)gamedef)->getSceneManager())
+ ((Client *)gamedef)->getSceneManager()),
+ m_texture(texture)
{
// Misc
m_gamedef = gamedef;
m_env = env;
+ // translate blend modes to GL blend functions
+ video::E_BLEND_FACTOR bfsrc, bfdst;
+ video::E_BLEND_OPERATION blendop;
+ const auto blendmode = texture.tex != nullptr
+ ? texture.tex -> blendmode
+ : ParticleParamTypes::BlendMode::alpha;
+
+ switch (blendmode) {
+ case ParticleParamTypes::BlendMode::add:
+ bfsrc = video::EBF_SRC_ALPHA;
+ bfdst = video::EBF_DST_ALPHA;
+ blendop = video::EBO_ADD;
+ break;
+
+ case ParticleParamTypes::BlendMode::sub:
+ bfsrc = video::EBF_SRC_ALPHA;
+ bfdst = video::EBF_DST_ALPHA;
+ blendop = video::EBO_REVSUBTRACT;
+ break;
+
+ case ParticleParamTypes::BlendMode::screen:
+ bfsrc = video::EBF_ONE;
+ bfdst = video::EBF_ONE_MINUS_SRC_COLOR;
+ blendop = video::EBO_ADD;
+ break;
+
+ default: // includes ParticleParamTypes::BlendMode::alpha
+ bfsrc = video::EBF_SRC_ALPHA;
+ bfdst = video::EBF_ONE_MINUS_SRC_ALPHA;
+ blendop = video::EBO_ADD;
+ break;
+ }
+
// Texture
m_material.setFlag(video::EMF_LIGHTING, false);
m_material.setFlag(video::EMF_BACK_FACE_CULLING, false);
m_material.setFlag(video::EMF_BILINEAR_FILTER, false);
m_material.setFlag(video::EMF_FOG_ENABLE, true);
- m_material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
- m_material.setTexture(0, texture);
+
+ // correctly render layered transparent particles -- see #10398
+ m_material.setFlag(video::EMF_ZWRITE_ENABLE, true);
+
+ // enable alpha blending and set blend mode
+ m_material.MaterialType = video::EMT_ONETEXTURE_BLEND;
+ m_material.MaterialTypeParam = video::pack_textureBlendFunc(
+ bfsrc, bfdst,
+ video::EMFN_MODULATE_1X,
+ video::EAS_TEXTURE | video::EAS_VERTEX_COLOR);
+ m_material.BlendOperation = blendop;
+ m_material.setTexture(0, m_texture.ref);
m_texpos = texpos;
m_texsize = texsize;
m_animation = p.animation;
@@ -90,6 +117,9 @@ Particle::Particle(
m_pos = p.pos;
m_velocity = p.vel;
m_acceleration = p.acc;
+ m_drag = p.drag;
+ m_jitter = p.jitter;
+ m_bounce = p.bounce;
m_expiration = p.expirationtime;
m_player = player;
m_size = p.size;
@@ -98,6 +128,8 @@ Particle::Particle(
m_object_collision = p.object_collision;
m_vertical = p.vertical;
m_glow = p.glow;
+ m_alpha = 0;
+ m_parent = nullptr;
// Irrlicht stuff
const float c = p.size / 2;
@@ -111,6 +143,14 @@ Particle::Particle(
updateVertices();
}
+Particle::~Particle()
+{
+ /* if our textures aren't owned by a particlespawner, we need to clean
+ * them up ourselves when the particle dies */
+ if (m_parent == nullptr)
+ delete m_texture.tex;
+}
+
void Particle::OnRegisterSceneNode()
{
if (IsVisible)
@@ -134,6 +174,12 @@ void Particle::render()
void Particle::step(float dtime)
{
m_time += dtime;
+
+ // apply drag (not handled by collisionMoveSimple) and brownian motion
+ v3f av = vecAbsolute(m_velocity);
+ av -= av * (m_drag * dtime);
+ m_velocity = av*vecSign(m_velocity) + v3f(m_jitter.pickWithin())*dtime;
+
if (m_collisiondetection) {
aabb3f box = m_collisionbox;
v3f p_pos = m_pos * BS;
@@ -141,17 +187,41 @@ void Particle::step(float dtime)
collisionMoveResult r = collisionMoveSimple(m_env, m_gamedef, BS * 0.5f,
box, 0.0f, dtime, &p_pos, &p_velocity, m_acceleration * BS, nullptr,
m_object_collision);
- if (m_collision_removal && r.collides) {
- // force expiration of the particle
- m_expiration = -1.0;
+
+ f32 bounciness = m_bounce.pickWithin();
+ if (r.collides && (m_collision_removal || bounciness > 0)) {
+ if (m_collision_removal) {
+ // force expiration of the particle
+ m_expiration = -1.0f;
+ } else if (bounciness > 0) {
+ /* cheap way to get a decent bounce effect is to only invert the
+ * largest component of the velocity vector, so e.g. you don't
+ * have a rock immediately bounce back in your face when you try
+ * to skip it across the water (as would happen if we simply
+ * downscaled and negated the velocity vector). this means
+ * bounciness will work properly for cubic objects, but meshes
+ * with diagonal angles and entities will not yield the correct
+ * visual. this is probably unavoidable */
+ if (av.Y > av.X && av.Y > av.Z) {
+ m_velocity.Y = -(m_velocity.Y * bounciness);
+ } else if (av.X > av.Y && av.X > av.Z) {
+ m_velocity.X = -(m_velocity.X * bounciness);
+ } else if (av.Z > av.Y && av.Z > av.X) {
+ m_velocity.Z = -(m_velocity.Z * bounciness);
+ } else { // well now we're in a bit of a pickle
+ m_velocity = -(m_velocity * bounciness);
+ }
+ }
} else {
- m_pos = p_pos / BS;
m_velocity = p_velocity / BS;
}
+ m_pos = p_pos / BS;
} else {
+ // apply acceleration
m_velocity += m_acceleration * dtime;
m_pos += m_velocity * dtime;
}
+
if (m_animation.type != TAT_NONE) {
m_animation_time += dtime;
int frame_length_i, frame_count;
@@ -165,11 +235,21 @@ void Particle::step(float dtime)
}
}
+ // animate particle alpha in accordance with settings
+ if (m_texture.tex != nullptr)
+ m_alpha = m_texture.tex -> alpha.blend(m_time / (m_expiration+0.1f));
+ else
+ m_alpha = 1.f;
+
// Update lighting
updateLight();
// Update model
updateVertices();
+
+ // Update position -- see #10398
+ v3s16 camera_offset = m_env->getCameraOffset();
+ setPosition(m_pos*BS - intToFloat(camera_offset, BS));
}
void Particle::updateLight()
@@ -189,7 +269,7 @@ void Particle::updateLight()
light = blend_light(m_env->getDayNightRatio(), LIGHT_SUN, 0);
u8 m_light = decode_light(light + m_glow);
- m_color.set(255,
+ m_color.set(m_alpha*255,
m_light * m_base_color.getRed() / 255,
m_light * m_base_color.getGreen() / 255,
m_light * m_base_color.getBlue() / 255);
@@ -198,6 +278,12 @@ void Particle::updateLight()
void Particle::updateVertices()
{
f32 tx0, tx1, ty0, ty1;
+ v2f scale;
+
+ if (m_texture.tex != nullptr)
+ scale = m_texture.tex -> scale.blend(m_time / (m_expiration+0.1));
+ else
+ scale = v2f(1.f, 1.f);
if (m_animation.type != TAT_NONE) {
const v2u32 texsize = m_material.getTexture(0)->getSize();
@@ -218,16 +304,24 @@ void Particle::updateVertices()
ty1 = m_texpos.Y + m_texsize.Y;
}
- m_vertices[0] = video::S3DVertex(-m_size / 2, -m_size / 2,
+ auto half = m_size * .5f,
+ hx = half * scale.X,
+ hy = half * scale.Y;
+ m_vertices[0] = video::S3DVertex(-hx, -hy,
0, 0, 0, 0, m_color, tx0, ty1);
- m_vertices[1] = video::S3DVertex(m_size / 2, -m_size / 2,
+ m_vertices[1] = video::S3DVertex(hx, -hy,
0, 0, 0, 0, m_color, tx1, ty1);
- m_vertices[2] = video::S3DVertex(m_size / 2, m_size / 2,
+ m_vertices[2] = video::S3DVertex(hx, hy,
0, 0, 0, 0, m_color, tx1, ty0);
- m_vertices[3] = video::S3DVertex(-m_size / 2, m_size / 2,
+ m_vertices[3] = video::S3DVertex(-hx, hy,
0, 0, 0, 0, m_color, tx0, ty0);
- v3s16 camera_offset = m_env->getCameraOffset();
+
+ // see #10398
+ // v3s16 camera_offset = m_env->getCameraOffset();
+ // particle position is now handled by step()
+ m_box.reset(v3f());
+
for (video::S3DVertex &vertex : m_vertices) {
if (m_vertical) {
v3f ppos = m_player->getPosition()/BS;
@@ -238,7 +332,6 @@ void Particle::updateVertices()
vertex.Pos.rotateXZBy(m_player->getYaw());
}
m_box.addInternalPoint(vertex.Pos);
- vertex.Pos += m_pos*BS - intToFloat(camera_offset, BS);
}
}
@@ -251,7 +344,8 @@ ParticleSpawner::ParticleSpawner(
LocalPlayer *player,
const ParticleSpawnerParameters &p,
u16 attached_id,
- video::ITexture *texture,
+ std::unique_ptr<ClientTexture[]>& texpool,
+ size_t texcount,
ParticleManager *p_manager
):
m_particlemanager(p_manager), p(p)
@@ -259,21 +353,66 @@ ParticleSpawner::ParticleSpawner(
m_gamedef = gamedef;
m_player = player;
m_attached_id = attached_id;
- m_texture = texture;
+ m_texpool = std::move(texpool);
+ m_texcount = texcount;
m_time = 0;
+ m_active = 0;
+ m_dying = false;
m_spawntimes.reserve(p.amount + 1);
for (u16 i = 0; i <= p.amount; i++) {
- float spawntime = rand() / (float)RAND_MAX * p.time;
+ float spawntime = myrand_float() * p.time;
m_spawntimes.push_back(spawntime);
}
+
+ size_t max_particles = 0; // maximum number of particles likely to be visible at any given time
+ if (p.time != 0) {
+ auto maxGenerations = p.time / std::min(p.exptime.start.min, p.exptime.end.min);
+ max_particles = p.amount / maxGenerations;
+ } else {
+ auto longestLife = std::max(p.exptime.start.max, p.exptime.end.max);
+ max_particles = p.amount * longestLife;
+ }
+
+ p_manager->reserveParticleSpace(max_particles * 1.2);
+}
+
+namespace {
+ GenericCAO *findObjectByID(ClientEnvironment *env, u16 id) {
+ if (id == 0)
+ return nullptr;
+ return env->getGenericCAO(id);
+ }
}
void ParticleSpawner::spawnParticle(ClientEnvironment *env, float radius,
const core::matrix4 *attached_absolute_pos_rot_matrix)
{
+ float fac = 0;
+ if (p.time != 0) { // ensure safety from divide-by-zeroes
+ fac = m_time / (p.time+0.1f);
+ }
+
+ auto r_pos = p.pos.blend(fac);
+ auto r_vel = p.vel.blend(fac);
+ auto r_acc = p.acc.blend(fac);
+ auto r_drag = p.drag.blend(fac);
+ auto r_radius = p.radius.blend(fac);
+ auto r_jitter = p.jitter.blend(fac);
+ auto r_bounce = p.bounce.blend(fac);
+ v3f attractor_origin = p.attractor_origin.blend(fac);
+ v3f attractor_direction = p.attractor_direction.blend(fac);
+ auto attractor_obj = findObjectByID(env, p.attractor_attachment);
+ auto attractor_direction_obj = findObjectByID(env, p.attractor_direction_attachment);
+
+ auto r_exp = p.exptime.blend(fac);
+ auto r_size = p.size.blend(fac);
+ auto r_attract = p.attract.blend(fac);
+ auto attract = r_attract.pickWithin();
+
v3f ppos = m_player->getPosition() / BS;
- v3f pos = random_v3f(p.minpos, p.maxpos);
+ v3f pos = r_pos.pickWithin();
+ v3f sphere_radius = r_radius.pickWithin();
// Need to apply this first or the following check
// will be wrong for attached spawners
@@ -287,15 +426,18 @@ void ParticleSpawner::spawnParticle(ClientEnvironment *env, float radius,
pos.Z += camera_offset.Z;
}
- if (pos.getDistanceFrom(ppos) > radius)
+ if (pos.getDistanceFromSQ(ppos) > radius*radius)
return;
// Parameters for the single particle we're about to spawn
ParticleParameters pp;
pp.pos = pos;
- pp.vel = random_v3f(p.minvel, p.maxvel);
- pp.acc = random_v3f(p.minacc, p.maxacc);
+ pp.vel = r_vel.pickWithin();
+ pp.acc = r_acc.pickWithin();
+ pp.drag = r_drag.pickWithin();
+ pp.jitter = r_jitter;
+ pp.bounce = r_bounce;
if (attached_absolute_pos_rot_matrix) {
// Apply attachment rotation
@@ -303,30 +445,137 @@ void ParticleSpawner::spawnParticle(ClientEnvironment *env, float radius,
attached_absolute_pos_rot_matrix->rotateVect(pp.acc);
}
- pp.expirationtime = random_f32(p.minexptime, p.maxexptime);
+ if (attractor_obj)
+ attractor_origin += attractor_obj->getPosition() / BS;
+ if (attractor_direction_obj) {
+ auto *attractor_absolute_pos_rot_matrix = attractor_direction_obj->getAbsolutePosRotMatrix();
+ if (attractor_absolute_pos_rot_matrix)
+ attractor_absolute_pos_rot_matrix->rotateVect(attractor_direction);
+ }
+
+ pp.expirationtime = r_exp.pickWithin();
+
+ if (sphere_radius != v3f()) {
+ f32 l = sphere_radius.getLength();
+ v3f mag = sphere_radius;
+ mag.normalize();
+
+ v3f ofs = v3f(l,0,0);
+ ofs.rotateXZBy(myrand_range(0.f,360.f));
+ ofs.rotateYZBy(myrand_range(0.f,360.f));
+ ofs.rotateXYBy(myrand_range(0.f,360.f));
+
+ pp.pos += ofs * mag;
+ }
+
+ if (p.attractor_kind != ParticleParamTypes::AttractorKind::none && attract != 0) {
+ v3f dir;
+ f32 dist = 0; /* =0 necessary to silence warning */
+ switch (p.attractor_kind) {
+ case ParticleParamTypes::AttractorKind::none:
+ break;
+
+ case ParticleParamTypes::AttractorKind::point: {
+ dist = pp.pos.getDistanceFrom(attractor_origin);
+ dir = pp.pos - attractor_origin;
+ dir.normalize();
+ break;
+ }
+
+ case ParticleParamTypes::AttractorKind::line: {
+ // https://github.com/minetest/minetest/issues/11505#issuecomment-915612700
+ const auto& lorigin = attractor_origin;
+ v3f ldir = attractor_direction;
+ ldir.normalize();
+ auto origin_to_point = pp.pos - lorigin;
+ auto scalar_projection = origin_to_point.dotProduct(ldir);
+ auto point_on_line = lorigin + (ldir * scalar_projection);
+
+ dist = pp.pos.getDistanceFrom(point_on_line);
+ dir = (point_on_line - pp.pos);
+ dir.normalize();
+ dir *= -1; // flip it around so strength=1 attracts, not repulses
+ break;
+ }
+
+ case ParticleParamTypes::AttractorKind::plane: {
+ // https://github.com/minetest/minetest/issues/11505#issuecomment-915612700
+ const v3f& porigin = attractor_origin;
+ v3f normal = attractor_direction;
+ normal.normalize();
+ v3f point_to_origin = porigin - pp.pos;
+ f32 factor = normal.dotProduct(point_to_origin);
+ if (numericAbsolute(factor) == 0.0f) {
+ dir = normal;
+ } else {
+ factor = numericSign(factor);
+ dir = normal * factor;
+ }
+ dist = numericAbsolute(normal.dotProduct(pp.pos - porigin));
+ dir *= -1; // flip it around so strength=1 attracts, not repulses
+ break;
+ }
+ }
+
+ f32 speedTowards = numericAbsolute(attract) * dist;
+ v3f avel = dir * speedTowards;
+ if (attract > 0 && speedTowards > 0) {
+ avel *= -1;
+ if (p.attractor_kill) {
+ // make sure the particle dies after crossing the attractor threshold
+ f32 timeToCenter = dist / speedTowards;
+ if (timeToCenter < pp.expirationtime)
+ pp.expirationtime = timeToCenter;
+ }
+ }
+ pp.vel += avel;
+ }
+
p.copyCommon(pp);
- video::ITexture *texture;
+ ClientTexRef texture;
v2f texpos, texsize;
video::SColor color(0xFFFFFFFF);
if (p.node.getContent() != CONTENT_IGNORE) {
const ContentFeatures &f =
m_particlemanager->m_env->getGameDef()->ndef()->get(p.node);
- if (!ParticleManager::getNodeParticleParams(p.node, f, pp, &texture,
+ if (!ParticleManager::getNodeParticleParams(p.node, f, pp, &texture.ref,
texpos, texsize, &color, p.node_tile))
return;
} else {
- texture = m_texture;
+ if (m_texcount == 0)
+ return;
+ texture = decltype(texture)(m_texpool[m_texcount == 1 ? 0 : myrand_range(0,m_texcount-1)]);
texpos = v2f(0.0f, 0.0f);
texsize = v2f(1.0f, 1.0f);
+ if (texture.tex->animated)
+ pp.animation = texture.tex->animation;
+ }
+
+ // synchronize animation length with particle life if desired
+ if (pp.animation.type != TAT_NONE) {
+ if (pp.animation.type == TAT_VERTICAL_FRAMES &&
+ pp.animation.vertical_frames.length < 0) {
+ auto& a = pp.animation.vertical_frames;
+ // we add a tiny extra value to prevent the first frame
+ // from flickering back on just before the particle dies
+ a.length = (pp.expirationtime / -a.length) + 0.1;
+ } else if (pp.animation.type == TAT_SHEET_2D &&
+ pp.animation.sheet_2d.frame_length < 0) {
+ auto& a = pp.animation.sheet_2d;
+ auto frames = a.frames_w * a.frames_h;
+ auto runtime = (pp.expirationtime / -a.frame_length) + 0.1;
+ pp.animation.sheet_2d.frame_length = frames / runtime;
+ }
}
// Allow keeping default random size
- if (p.maxsize > 0.0f)
- pp.size = random_f32(p.minsize, p.maxsize);
+ if (p.size.start.max > 0.0f || p.size.end.max > 0.0f)
+ pp.size = r_size.pickWithin();
- m_particlemanager->addParticle(new Particle(
+ ++m_active;
+ auto pa = new Particle(
m_gamedef,
m_player,
env,
@@ -335,7 +584,9 @@ void ParticleSpawner::spawnParticle(ClientEnvironment *env, float radius,
texpos,
texsize,
color
- ));
+ );
+ pa->m_parent = this;
+ m_particlemanager->addParticle(pa);
}
void ParticleSpawner::step(float dtime, ClientEnvironment *env)
@@ -348,7 +599,7 @@ void ParticleSpawner::step(float dtime, ClientEnvironment *env)
bool unloaded = false;
const core::matrix4 *attached_absolute_pos_rot_matrix = nullptr;
if (m_attached_id) {
- if (GenericCAO *attached = dynamic_cast<GenericCAO *>(env->getActiveObject(m_attached_id))) {
+ if (GenericCAO *attached = env->getGenericCAO(m_attached_id)) {
attached_absolute_pos_rot_matrix = attached->getAbsolutePosRotMatrix();
} else {
unloaded = true;
@@ -379,7 +630,7 @@ void ParticleSpawner::step(float dtime, ClientEnvironment *env)
return;
for (int i = 0; i <= p.amount; i++) {
- if (rand() / (float)RAND_MAX < dtime)
+ if (myrand_float() < dtime)
spawnParticle(env, radius, attached_absolute_pos_rot_matrix);
}
}
@@ -408,9 +659,15 @@ void ParticleManager::stepSpawners(float dtime)
{
MutexAutoLock lock(m_spawner_list_lock);
for (auto i = m_particle_spawners.begin(); i != m_particle_spawners.end();) {
- if (i->second->get_expired()) {
- delete i->second;
- m_particle_spawners.erase(i++);
+ if (i->second->getExpired()) {
+ // the particlespawner owns the textures, so we need to make
+ // sure there are no active particles before we free it
+ if (i->second->m_active == 0) {
+ delete i->second;
+ m_particle_spawners.erase(i++);
+ } else {
+ ++i;
+ }
} else {
i->second->step(dtime, m_env);
++i;
@@ -423,6 +680,10 @@ void ParticleManager::stepParticles(float dtime)
MutexAutoLock lock(m_particle_list_lock);
for (auto i = m_particles.begin(); i != m_particles.end();) {
if ((*i)->get_expired()) {
+ if ((*i)->m_parent) {
+ assert((*i)->m_parent->m_active != 0);
+ --(*i)->m_parent->m_active;
+ }
(*i)->remove();
delete *i;
i = m_particles.erase(i);
@@ -464,13 +725,29 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, Client *client,
const ParticleSpawnerParameters &p = *event->add_particlespawner.p;
- video::ITexture *texture =
- client->tsrc()->getTextureForMesh(p.texture);
+ // texture pool
+ std::unique_ptr<ClientTexture[]> texpool = nullptr;
+ size_t txpsz = 0;
+ if (!p.texpool.empty()) {
+ txpsz = p.texpool.size();
+ texpool = decltype(texpool)(new ClientTexture [txpsz]);
+
+ for (size_t i = 0; i < txpsz; ++i) {
+ texpool[i] = ClientTexture(p.texpool[i], client->tsrc());
+ }
+ } else {
+ // no texpool in use, use fallback texture
+ txpsz = 1;
+ texpool = decltype(texpool)(new ClientTexture[1] {
+ ClientTexture(p.texture, client->tsrc())
+ });
+ }
auto toadd = new ParticleSpawner(client, player,
p,
event->add_particlespawner.attached_id,
- texture,
+ texpool,
+ txpsz,
this);
addParticleSpawner(event->add_particlespawner.id, toadd);
@@ -481,7 +758,7 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, Client *client,
case CE_SPAWN_PARTICLE: {
ParticleParameters &p = *event->spawn_particle;
- video::ITexture *texture;
+ ClientTexRef texture;
v2f texpos, texsize;
video::SColor color(0xFFFFFFFF);
@@ -489,11 +766,15 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, Client *client,
if (p.node.getContent() != CONTENT_IGNORE) {
const ContentFeatures &f = m_env->getGameDef()->ndef()->get(p.node);
- if (!getNodeParticleParams(p.node, f, p, &texture, texpos,
- texsize, &color, p.node_tile))
- texture = nullptr;
+ getNodeParticleParams(p.node, f, p, &texture.ref, texpos,
+ texsize, &color, p.node_tile);
} else {
- texture = client->tsrc()->getTextureForMesh(p.texture);
+ /* with no particlespawner to own the texture, we need
+ * to save it on the heap. it will be freed when the
+ * particle is destroyed */
+ auto texstore = new ClientTexture(p.texture, client->tsrc());
+
+ texture = ClientTexRef(*texstore);
texpos = v2f(0.0f, 0.0f);
texsize = v2f(1.0f, 1.0f);
}
@@ -502,7 +783,7 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, Client *client,
if (oldsize > 0.0f)
p.size = oldsize;
- if (texture) {
+ if (texture.ref) {
Particle *toadd = new Particle(client, player, m_env,
p, texture, texpos, texsize, color);
@@ -529,7 +810,7 @@ bool ParticleManager::getNodeParticleParams(const MapNode &n,
if (tilenum > 0 && tilenum <= 6)
texid = tilenum - 1;
else
- texid = rand() % 6;
+ texid = myrand_range(0,5);
const TileLayer &tile = f.tiles[texid].layers[0];
p.animation.type = TAT_NONE;
@@ -539,13 +820,13 @@ bool ParticleManager::getNodeParticleParams(const MapNode &n,
else
*texture = tile.texture;
- float size = (rand() % 8) / 64.0f;
+ float size = (myrand_range(0,8)) / 64.0f;
p.size = BS * size;
if (tile.scale)
size /= tile.scale;
texsize = v2f(size * 2.0f, size * 2.0f);
- texpos.X = (rand() % 64) / 64.0f - texsize.X;
- texpos.Y = (rand() % 64) / 64.0f - texsize.Y;
+ texpos.X = (myrand_range(0,64)) / 64.0f - texsize.X;
+ texpos.Y = (myrand_range(0,64)) / 64.0f - texsize.Y;
if (tile.has_color)
*color = tile.color;
@@ -577,20 +858,20 @@ void ParticleManager::addNodeParticle(IGameDef *gamedef,
LocalPlayer *player, v3s16 pos, const MapNode &n, const ContentFeatures &f)
{
ParticleParameters p;
- video::ITexture *texture;
+ video::ITexture *ref = nullptr;
v2f texpos, texsize;
video::SColor color;
- if (!getNodeParticleParams(n, f, p, &texture, texpos, texsize, &color))
+ if (!getNodeParticleParams(n, f, p, &ref, texpos, texsize, &color))
return;
- p.expirationtime = (rand() % 100) / 100.0f;
+ p.expirationtime = myrand_range(0, 100) / 100.0f;
// Physics
p.vel = v3f(
- (rand() % 150) / 50.0f - 1.5f,
- (rand() % 150) / 50.0f,
- (rand() % 150) / 50.0f - 1.5f
+ myrand_range(-1.5f,1.5f),
+ myrand_range(0.f,3.f),
+ myrand_range(-1.5f,1.5f)
);
p.acc = v3f(
0.0f,
@@ -598,9 +879,9 @@ void ParticleManager::addNodeParticle(IGameDef *gamedef,
0.0f
);
p.pos = v3f(
- (f32)pos.X + (rand() % 100) / 200.0f - 0.25f,
- (f32)pos.Y + (rand() % 100) / 200.0f - 0.25f,
- (f32)pos.Z + (rand() % 100) / 200.0f - 0.25f
+ (f32)pos.X + myrand_range(0.f, .5f) - .25f,
+ (f32)pos.Y + myrand_range(0.f, .5f) - .25f,
+ (f32)pos.Z + myrand_range(0.f, .5f) - .25f
);
Particle *toadd = new Particle(
@@ -608,7 +889,7 @@ void ParticleManager::addNodeParticle(IGameDef *gamedef,
player,
m_env,
p,
- texture,
+ ClientTexRef(ref),
texpos,
texsize,
color);
@@ -616,6 +897,12 @@ void ParticleManager::addNodeParticle(IGameDef *gamedef,
addParticle(toadd);
}
+void ParticleManager::reserveParticleSpace(size_t max_estimate)
+{
+ MutexAutoLock lock(m_particle_list_lock);
+ m_particles.reserve(m_particles.size() + max_estimate);
+}
+
void ParticleManager::addParticle(Particle *toadd)
{
MutexAutoLock lock(m_particle_list_lock);
@@ -634,7 +921,6 @@ void ParticleManager::deleteParticleSpawner(u64 id)
MutexAutoLock lock(m_spawner_list_lock);
auto it = m_particle_spawners.find(id);
if (it != m_particle_spawners.end()) {
- delete it->second;
- m_particle_spawners.erase(it);
+ it->second->setDying();
}
}
diff --git a/src/client/particles.h b/src/client/particles.h
index 2011f0262..0818b796b 100644
--- a/src/client/particles.h
+++ b/src/client/particles.h
@@ -31,20 +31,51 @@ class ClientEnvironment;
struct MapNode;
struct ContentFeatures;
+struct ClientTexture
+{
+ /* per-spawner structure used to store the ParticleTexture structs
+ * that spawned particles will refer to through ClientTexRef */
+ ParticleTexture tex;
+ video::ITexture *ref = nullptr;
+
+ ClientTexture() = default;
+ ClientTexture(const ServerParticleTexture& p, ITextureSource *t):
+ tex(p),
+ ref(t->getTextureForMesh(p.string)) {};
+};
+
+struct ClientTexRef
+{
+ /* per-particle structure used to avoid massively duplicating the
+ * fairly large ParticleTexture struct */
+ ParticleTexture* tex = nullptr;
+ video::ITexture* ref = nullptr;
+ ClientTexRef() = default;
+
+ /* constructor used by particles spawned from a spawner */
+ ClientTexRef(ClientTexture& t):
+ tex(&t.tex), ref(t.ref) {};
+
+ /* constructor used for node particles */
+ ClientTexRef(decltype(ref) tp): ref(tp) {};
+};
+
+class ParticleSpawner;
+
class Particle : public scene::ISceneNode
{
- public:
+public:
Particle(
- IGameDef* gamedef,
+ IGameDef *gamedef,
LocalPlayer *player,
ClientEnvironment *env,
const ParticleParameters &p,
- video::ITexture *texture,
+ const ClientTexRef &texture,
v2f texpos,
v2f texsize,
video::SColor color
);
- ~Particle() = default;
+ ~Particle();
virtual const aabb3f &getBoundingBox() const
{
@@ -69,9 +100,12 @@ class Particle : public scene::ISceneNode
bool get_expired ()
{ return m_expiration < m_time; }
+ ParticleSpawner *m_parent;
+
private:
void updateLight();
void updateVertices();
+ void setVertexAlpha(float a);
video::S3DVertex m_vertices[4];
float m_time = 0.0f;
@@ -81,14 +115,19 @@ private:
IGameDef *m_gamedef;
aabb3f m_box;
aabb3f m_collisionbox;
+ ClientTexRef m_texture;
video::SMaterial m_material;
v2f m_texpos;
v2f m_texsize;
v3f m_pos;
v3f m_velocity;
v3f m_acceleration;
+ v3f m_drag;
+ ParticleParamTypes::v3fRange m_jitter;
+ ParticleParamTypes::f32Range m_bounce;
LocalPlayer *m_player;
float m_size;
+
//! Color without lighting
video::SColor m_base_color;
//! Final rendered color
@@ -102,24 +141,27 @@ private:
float m_animation_time = 0.0f;
int m_animation_frame = 0;
u8 m_glow;
+ float m_alpha = 0.0f;
};
class ParticleSpawner
{
public:
- ParticleSpawner(IGameDef* gamedef,
+ ParticleSpawner(IGameDef *gamedef,
LocalPlayer *player,
const ParticleSpawnerParameters &p,
u16 attached_id,
- video::ITexture *texture,
+ std::unique_ptr<ClientTexture[]> &texpool,
+ size_t texcount,
ParticleManager* p_manager);
- ~ParticleSpawner() = default;
-
void step(float dtime, ClientEnvironment *env);
- bool get_expired ()
- { return p.amount <= 0 && p.time != 0; }
+ size_t m_active;
+
+ bool getExpired() const
+ { return m_dying || (p.amount <= 0 && p.time != 0); }
+ void setDying() { m_dying = true; }
private:
void spawnParticle(ClientEnvironment *env, float radius,
@@ -127,10 +169,12 @@ private:
ParticleManager *m_particlemanager;
float m_time;
+ bool m_dying;
IGameDef *m_gamedef;
LocalPlayer *m_player;
ParticleSpawnerParameters p;
- video::ITexture *m_texture;
+ std::unique_ptr<ClientTexture[]> m_texpool;
+ size_t m_texcount;
std::vector<float> m_spawntimes;
u16 m_attached_id;
};
@@ -156,6 +200,8 @@ public:
void addNodeParticle(IGameDef *gamedef, LocalPlayer *player, v3s16 pos,
const MapNode &n, const ContentFeatures &f);
+ void reserveParticleSpace(size_t max_estimate);
+
/**
* This function is only used by client particle spawners
*
diff --git a/src/client/render/core.cpp b/src/client/render/core.cpp
index 44ef1c98c..ca5d3c614 100644
--- a/src/client/render/core.cpp
+++ b/src/client/render/core.cpp
@@ -35,8 +35,15 @@ RenderingCore::RenderingCore(IrrlichtDevice *_device, Client *_client, Hud *_hud
screensize = driver->getScreenSize();
virtual_size = screensize;
+ // disable if unsupported
+ if (g_settings->getBool("enable_dynamic_shadows") && (
+ g_settings->get("video_driver") != "opengl" ||
+ !g_settings->getBool("enable_shaders"))) {
+ g_settings->setBool("enable_dynamic_shadows", false);
+ }
+
if (g_settings->getBool("enable_shaders") &&
- false && g_settings->getBool("enable_dynamic_shadows")) {
+ g_settings->getBool("enable_dynamic_shadows")) {
shadow_renderer = new ShadowRenderer(device, client);
}
}
@@ -76,8 +83,11 @@ 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)
+ if (shadow_renderer) {
+ // This is necessary to render shadows for animations correctly
+ smgr->getRootSceneNode()->OnAnimate(device->getTimer()->getTime());
shadow_renderer->update();
+ }
beforeDraw();
drawAll();
@@ -103,7 +113,7 @@ void RenderingCore::drawHUD()
if (show_hud) {
if (draw_crosshair)
hud->drawCrosshair();
-
+
hud->drawHotbar(client->getEnv().getLocalPlayer()->getWieldIndex());
hud->drawLuaElements(camera->getOffset());
camera->drawNametags();
diff --git a/src/client/render/stereo.cpp b/src/client/render/stereo.cpp
index 967b5a78f..0f54e166e 100644
--- a/src/client/render/stereo.cpp
+++ b/src/client/render/stereo.cpp
@@ -27,7 +27,7 @@ RenderingCoreStereo::RenderingCoreStereo(
IrrlichtDevice *_device, Client *_client, Hud *_hud)
: RenderingCore(_device, _client, _hud)
{
- eye_offset = BS * g_settings->getFloat("3d_paralax_strength");
+ eye_offset = BS * g_settings->getFloat("3d_paralax_strength", -0.087f, 0.087f);
}
void RenderingCoreStereo::beforeDraw()
diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp
index 723865db4..9698b63bb 100644
--- a/src/client/renderingengine.cpp
+++ b/src/client/renderingengine.cpp
@@ -86,8 +86,12 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver)
// Resolution selection
bool fullscreen = g_settings->getBool("fullscreen");
- u16 screen_w = g_settings->getU16("screen_w");
- u16 screen_h = g_settings->getU16("screen_h");
+#ifdef __ANDROID__
+ u16 screen_w = 0, screen_h = 0;
+#else
+ u16 screen_w = std::max<u16>(g_settings->getU16("screen_w"), 1);
+ u16 screen_h = std::max<u16>(g_settings->getU16("screen_h"), 1);
+#endif
// bpp, fsaa, vsync
bool vsync = g_settings->getBool("vsync");
@@ -116,7 +120,7 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver)
}
SIrrlichtCreationParameters params = SIrrlichtCreationParameters();
- if (g_logger.getTraceEnabled())
+ if (tracestream)
params.LoggingLevel = irr::ELL_DEBUG;
params.DriverType = driverType;
params.WindowSize = core::dimension2d<u32>(screen_w, screen_h);
@@ -598,7 +602,7 @@ static float calcDisplayDensity()
float RenderingEngine::getDisplayDensity()
{
static float cached_display_density = calcDisplayDensity();
- return cached_display_density * g_settings->getFloat("display_density_factor");
+ return std::max(cached_display_density * g_settings->getFloat("display_density_factor"), 0.5f);
}
#elif defined(_WIN32)
@@ -626,37 +630,23 @@ float RenderingEngine::getDisplayDensity()
display_density = calcDisplayDensity(get_video_driver());
cached = true;
}
- return display_density * g_settings->getFloat("display_density_factor");
+ return std::max(display_density * g_settings->getFloat("display_density_factor"), 0.5f);
}
#else
float RenderingEngine::getDisplayDensity()
{
- return (g_settings->getFloat("screen_dpi") / 96.0) * g_settings->getFloat("display_density_factor");
+ return std::max(g_settings->getFloat("screen_dpi") / 96.0f *
+ g_settings->getFloat("display_density_factor"), 0.5f);
}
#endif
-v2u32 RenderingEngine::getDisplaySize()
-{
- IrrlichtDevice *nulldevice = createDevice(video::EDT_NULL);
-
- core::dimension2d<u32> deskres =
- nulldevice->getVideoModeList()->getDesktopResolution();
- nulldevice->drop();
-
- return deskres;
-}
-
#else // __ANDROID__
float RenderingEngine::getDisplayDensity()
{
return porting::getDisplayDensity();
}
-v2u32 RenderingEngine::getDisplaySize()
-{
- return porting::getDisplaySize();
-}
#endif // __ANDROID__
diff --git a/src/client/renderingengine.h b/src/client/renderingengine.h
index a0ddb0d9a..38420010f 100644
--- a/src/client/renderingengine.h
+++ b/src/client/renderingengine.h
@@ -55,7 +55,6 @@ public:
static const VideoDriverInfo &getVideoDriverInfo(irr::video::E_DRIVER_TYPE type);
static float getDisplayDensity();
- static v2u32 getDisplaySize();
bool setupTopLevelWindow(const std::string &name);
void setupTopLevelXorgWindow(const std::string &name);
@@ -123,8 +122,8 @@ public:
// FIXME: this is still global when it shouldn't be
static ShadowRenderer *get_shadow_renderer()
{
- //if (s_singleton && s_singleton->core)
- // return s_singleton->core->get_shadow_renderer();
+ if (s_singleton && s_singleton->core)
+ return s_singleton->core->get_shadow_renderer();
return nullptr;
}
static std::vector<irr::video::E_DRIVER_TYPE> getSupportedVideoDrivers();
diff --git a/src/client/shader.cpp b/src/client/shader.cpp
index c04a25862..009a4b3d7 100644
--- a/src/client/shader.cpp
+++ b/src/client/shader.cpp
@@ -40,20 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/tile.h"
#include "config.h"
-#if ENABLE_GLES
-#ifdef _IRR_COMPILE_WITH_OGLES1_
-#include <GLES/gl.h>
-#else
-#include <GLES2/gl2.h>
-#endif
-#else
-#ifndef __APPLE__
-#include <GL/gl.h>
-#else
-#define GL_SILENCE_DEPRECATION
-#include <OpenGL/gl.h>
-#endif
-#endif
+#include <mt_opengl.h>
/*
A cache from shader name to shader path
@@ -223,17 +210,24 @@ public:
class MainShaderConstantSetter : public IShaderConstantSetter
{
- CachedVertexShaderSetting<float, 16> m_world_view_proj;
- CachedVertexShaderSetting<float, 16> m_world;
+ CachedVertexShaderSetting<f32, 16> m_world_view_proj;
+ CachedVertexShaderSetting<f32, 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<f32, 16> m_shadow_view_proj;
+ CachedPixelShaderSetting<f32, 3> m_light_direction;
+ CachedPixelShaderSetting<f32> m_texture_res;
+ CachedPixelShaderSetting<f32> m_shadow_strength;
+ CachedPixelShaderSetting<f32> m_time_of_day;
+ CachedPixelShaderSetting<f32> m_shadowfar;
+ CachedPixelShaderSetting<f32, 4> m_camera_pos;
CachedPixelShaderSetting<s32> m_shadow_texture;
+ CachedVertexShaderSetting<f32> m_perspective_bias0_vertex;
+ CachedPixelShaderSetting<f32> m_perspective_bias0_pixel;
+ CachedVertexShaderSetting<f32> m_perspective_bias1_vertex;
+ CachedPixelShaderSetting<f32> m_perspective_bias1_pixel;
+ CachedVertexShaderSetting<f32> m_perspective_zbias_vertex;
+ CachedPixelShaderSetting<f32> m_perspective_zbias_pixel;
#if ENABLE_GLES
// Modelview matrix
@@ -248,18 +242,25 @@ public:
MainShaderConstantSetter() :
m_world_view_proj("mWorldViewProj")
, m_world("mWorld")
-#if ENABLE_GLES
- , m_world_view("mWorldView")
- , 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_camera_pos("CameraPos")
, m_shadow_texture("ShadowMapSampler")
+ , m_perspective_bias0_vertex("xyPerspectiveBias0")
+ , m_perspective_bias0_pixel("xyPerspectiveBias0")
+ , m_perspective_bias1_vertex("xyPerspectiveBias1")
+ , m_perspective_bias1_pixel("xyPerspectiveBias1")
+ , m_perspective_zbias_vertex("zPerspectiveBias")
+ , m_perspective_zbias_pixel("zPerspectiveBias")
+#if ENABLE_GLES
+ , m_world_view("mWorldView")
+ , m_texture("mTexture")
+ , m_normal("mNormal")
+#endif
{}
~MainShaderConstantSetter() = default;
@@ -306,26 +307,40 @@ public:
shadowViewProj *= light.getViewMatrix();
m_shadow_view_proj.set(shadowViewProj.pointer(), services);
- float v_LightDirection[3];
+ f32 v_LightDirection[3];
light.getDirection().getAs3Values(v_LightDirection);
m_light_direction.set(v_LightDirection, services);
- float TextureResolution = light.getMapResolution();
+ f32 TextureResolution = light.getMapResolution();
m_texture_res.set(&TextureResolution, services);
- float ShadowStrength = shadow->getShadowStrength();
+ f32 ShadowStrength = shadow->getShadowStrength();
m_shadow_strength.set(&ShadowStrength, services);
- float timeOfDay = shadow->getTimeOfDay();
+ f32 timeOfDay = shadow->getTimeOfDay();
m_time_of_day.set(&timeOfDay, services);
- float shadowFar = shadow->getMaxShadowFar();
+ f32 shadowFar = shadow->getMaxShadowFar();
m_shadowfar.set(&shadowFar, services);
+ f32 cam_pos[4];
+ shadowViewProj.transformVect(cam_pos, light.getPlayerPos());
+ m_camera_pos.set(cam_pos, 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);
+
+ f32 bias0 = shadow->getPerspectiveBiasXY();
+ m_perspective_bias0_vertex.set(&bias0, services);
+ m_perspective_bias0_pixel.set(&bias0, services);
+ f32 bias1 = 1.0f - bias0 + 1e-5f;
+ m_perspective_bias1_vertex.set(&bias1, services);
+ m_perspective_bias1_pixel.set(&bias1, services);
+ f32 zbias = shadow->getPerspectiveBiasZ();
+ m_perspective_zbias_vertex.set(&zbias, services);
+ m_perspective_zbias_pixel.set(&zbias, services);
}
}
};
@@ -667,13 +682,19 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
)";
}
+ // Since this is the first time we're using the GL bindings be extra careful.
+ // This should be removed before 5.6.0 or similar.
+ if (!GL.GetString) {
+ errorstream << "OpenGL procedures were not loaded correctly, "
+ "please open a bug report with details about your platform/OS." << std::endl;
+ abort();
+ }
+
bool use_discard = use_gles;
-#ifdef __unix__
// For renderers that should use discard instead of GL_ALPHA_TEST
- const char* gl_renderer = (const char*)glGetString(GL_RENDERER);
- if (strstr(gl_renderer, "GC7000"))
+ const char *renderer = reinterpret_cast<const char*>(GL.GetString(GL.RENDERER));
+ if (strstr(renderer, "GC7000"))
use_discard = true;
-#endif
if (use_discard) {
if (shaderinfo.base_material == video::EMT_TRANSPARENT_ALPHA_CHANNEL)
shaders_header << "#define USE_DISCARD 1\n";
@@ -733,7 +754,7 @@ 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")) {
+ if (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";
@@ -750,6 +771,8 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
shaders_header << "#define SOFTSHADOWRADIUS " << shadow_soft_radius << "\n";
}
+ shaders_header << "#line 0\n"; // reset the line counter for meaningful diagnostics
+
std::string common_header = shaders_header.str();
std::string vertex_shader = m_sourcecache.getOrLoad(name, "opengl_vertex.glsl");
diff --git a/src/client/shadows/dynamicshadows.cpp b/src/client/shadows/dynamicshadows.cpp
index 6ef5a4f1d..9f26ba94a 100644
--- a/src/client/shadows/dynamicshadows.cpp
+++ b/src/client/shadows/dynamicshadows.cpp
@@ -27,11 +27,24 @@ with this program; if not, write to the Free Software Foundation, Inc.,
using m4f = core::matrix4;
+static v3f quantizeDirection(v3f direction, float step)
+{
+
+ float yaw = std::atan2(direction.Z, direction.X);
+ float pitch = std::asin(direction.Y); // assume look is normalized
+
+ yaw = std::floor(yaw / step) * step;
+ pitch = std::floor(pitch / step) * step;
+
+ return v3f(std::cos(yaw)*std::cos(pitch), std::sin(pitch), std::sin(yaw)*std::cos(pitch));
+}
+
void DirectionalLight::createSplitMatrices(const Camera *cam)
{
- float radius;
+ const float DISTANCE_STEP = BS * 2.0; // 2 meters
v3f newCenter;
v3f look = cam->getDirection();
+ look = quantizeDirection(look, M_PI / 12.0); // 15 degrees
// camera view tangents
float tanFovY = tanf(cam->getFovY() * 0.5f);
@@ -42,42 +55,42 @@ void DirectionalLight::createSplitMatrices(const Camera *cam)
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;
+ v3f cam_pos_world = cam->getPosition();
+ cam_pos_world = v3f(
+ floor(cam_pos_world.X / DISTANCE_STEP) * DISTANCE_STEP,
+ floor(cam_pos_world.Y / DISTANCE_STEP) * DISTANCE_STEP,
+ floor(cam_pos_world.Z / DISTANCE_STEP) * DISTANCE_STEP);
+ v3f cam_pos_scene = v3f(cam_pos_world.X - cam->getOffset().X * BS,
+ cam_pos_world.Y - cam->getOffset().Y * BS,
+ cam_pos_world.Z - cam->getOffset().Z * BS);
+ cam_pos_scene += look * sfNear;
+ cam_pos_world += 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);
+ v3f center_scene = cam_pos_scene + look * 0.35 * (sfFar - sfNear);
+ v3f center_world = cam_pos_world + look * 0.35 * (sfFar - sfNear);
// 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;
+ v3f farCorner = (look + viewRight * tanFovX + viewUp * tanFovY).normalize();
// 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;
+ v3f boundVec = (cam_pos_scene + farCorner * sfFar) - center_scene;
+ float radius = boundVec.getLength();
+ float length = radius * 3.0f;
+ v3f eye_displacement = quantizeDirection(direction, M_PI / 2880 /*15 seconds*/) * length;
// 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);
+ v3f eye = center_scene - eye_displacement;
+ future_frustum.player = cam_pos_scene;
+ future_frustum.position = center_world - eye_displacement;
+ future_frustum.length = length;
+ future_frustum.radius = radius;
+ future_frustum.ViewMat.buildCameraLookAtMatrixLH(eye, center_scene, v3f(0.0f, 1.0f, 0.0f));
+ future_frustum.ProjOrthMat.buildProjectionMatrixOrthoLH(radius, radius,
+ 0.0f, length, false);
future_frustum.camera_offset = cam->getOffset();
}
@@ -95,6 +108,8 @@ void DirectionalLight::update_frustum(const Camera *cam, Client *client, bool fo
float zNear = cam->getCameraNode()->getNearValue();
float zFar = getMaxFarValue();
+ if (!client->getEnv().getClientMap().getControl().range_all)
+ zFar = MYMIN(zFar, client->getEnv().getClientMap().getControl().wanted_range * BS);
///////////////////////////////////
// update splits near and fars
@@ -105,7 +120,7 @@ void DirectionalLight::update_frustum(const Camera *cam, Client *client, bool fo
createSplitMatrices(cam);
// get the draw list for shadows
client->getEnv().getClientMap().updateDrawListShadow(
- getPosition(), getDirection(), future_frustum.length);
+ getPosition(), getDirection(), future_frustum.radius, future_frustum.length);
should_update_map_shadow = true;
dirty = true;
@@ -115,6 +130,7 @@ void DirectionalLight::update_frustum(const Camera *cam, Client *client, bool fo
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.player += intToFloat(shadow_frustum.camera_offset - cam->getOffset(), BS);
shadow_frustum.camera_offset = cam_offset;
}
}
@@ -139,6 +155,16 @@ v3f DirectionalLight::getPosition() const
return shadow_frustum.position;
}
+v3f DirectionalLight::getPlayerPos() const
+{
+ return shadow_frustum.player;
+}
+
+v3f DirectionalLight::getFuturePlayerPos() const
+{
+ return future_frustum.player;
+}
+
const m4f &DirectionalLight::getViewMatrix() const
{
return shadow_frustum.ViewMat;
diff --git a/src/client/shadows/dynamicshadows.h b/src/client/shadows/dynamicshadows.h
index d8be66be8..6e9d96b15 100644
--- a/src/client/shadows/dynamicshadows.h
+++ b/src/client/shadows/dynamicshadows.h
@@ -22,18 +22,21 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes_bloated.h"
#include <matrix4.h>
#include "util/basic_macros.h"
+#include "constants.h"
class Camera;
class Client;
struct shadowFrustum
{
- float zNear{0.0f};
- float zFar{0.0f};
- float length{0.0f};
+ f32 zNear{0.0f};
+ f32 zFar{0.0f};
+ f32 length{0.0f};
+ f32 radius{0.0f};
core::matrix4 ProjOrthMat;
core::matrix4 ViewMat;
v3f position;
+ v3f player;
v3s16 camera_offset;
};
@@ -56,6 +59,8 @@ public:
return direction;
};
v3f getPosition() const;
+ v3f getPlayerPos() const;
+ v3f getFuturePlayerPos() const;
/// Gets the light's matrices.
const core::matrix4 &getViewMatrix() const;
@@ -64,10 +69,16 @@ public:
const core::matrix4 &getFutureProjectionMatrix() const;
core::matrix4 getViewProjMatrix();
- /// Gets the light's far value.
+ /// Gets the light's maximum far value, i.e. the shadow boundary
f32 getMaxFarValue() const
{
- return farPlane;
+ return farPlane * BS;
+ }
+
+ /// Gets the current far value of the light
+ f32 getFarValue() const
+ {
+ return shadow_frustum.zFar;
}
diff --git a/src/client/shadows/dynamicshadowsrender.cpp b/src/client/shadows/dynamicshadowsrender.cpp
index a913a9290..944deb801 100644
--- a/src/client/shadows/dynamicshadowsrender.cpp
+++ b/src/client/shadows/dynamicshadowsrender.cpp
@@ -18,6 +18,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include <cstring>
+#include <cmath>
#include "client/shadows/dynamicshadowsrender.h"
#include "client/shadows/shadowsScreenQuad.h"
#include "client/shadows/shadowsshadercallbacks.h"
@@ -30,12 +31,19 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#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_smgr(device->getSceneManager()), m_driver(device->getVideoDriver()),
+ m_client(client), m_current_frame(0),
+ m_perspective_bias_xy(0.8), m_perspective_bias_z(0.5)
{
+ (void) m_client;
+
+ m_shadows_supported = true; // assume shadows supported. We will check actual support in initialize
m_shadows_enabled = true;
- m_shadow_strength = g_settings->getFloat("shadow_strength");
+ m_shadow_strength_gamma = g_settings->getFloat("shadow_strength_gamma");
+ if (std::isnan(m_shadow_strength_gamma))
+ m_shadow_strength_gamma = 1.0f;
+ m_shadow_strength_gamma = core::clamp(m_shadow_strength_gamma, 0.1f, 10.0f);
m_shadow_map_max_distance = g_settings->getFloat("shadow_map_max_distance");
@@ -49,27 +57,58 @@ ShadowRenderer::ShadowRenderer(IrrlichtDevice *device, Client *client) :
ShadowRenderer::~ShadowRenderer()
{
+ // call to disable releases dynamically allocated resources
+ disable();
+
if (m_shadow_depth_cb)
delete m_shadow_depth_cb;
+ if (m_shadow_depth_entity_cb)
+ delete m_shadow_depth_entity_cb;
+ if (m_shadow_depth_trans_cb)
+ delete m_shadow_depth_trans_cb;
if (m_shadow_mix_cb)
delete m_shadow_mix_cb;
m_shadow_node_array.clear();
m_light_list.clear();
+}
- if (shadowMapTextureDynamicObjects)
+void ShadowRenderer::disable()
+{
+ m_shadows_enabled = false;
+ if (shadowMapTextureFinal) {
+ m_driver->setRenderTarget(shadowMapTextureFinal, true, true,
+ video::SColor(255, 255, 255, 255));
+ m_driver->setRenderTarget(0, false, false);
+ }
+
+ if (shadowMapTextureDynamicObjects) {
m_driver->removeTexture(shadowMapTextureDynamicObjects);
+ shadowMapTextureDynamicObjects = nullptr;
+ }
- if (shadowMapTextureFinal)
+ if (shadowMapTextureFinal) {
m_driver->removeTexture(shadowMapTextureFinal);
+ shadowMapTextureFinal = nullptr;
+ }
- if (shadowMapTextureColors)
+ if (shadowMapTextureColors) {
m_driver->removeTexture(shadowMapTextureColors);
+ shadowMapTextureColors = nullptr;
+ }
- if (shadowMapClientMap)
+ if (shadowMapClientMap) {
m_driver->removeTexture(shadowMapClientMap);
+ shadowMapClientMap = nullptr;
+ }
- if (shadowMapClientMapFuture)
+ if (shadowMapClientMapFuture) {
m_driver->removeTexture(shadowMapClientMapFuture);
+ shadowMapClientMapFuture = nullptr;
+ }
+
+ for (auto node : m_shadow_node_array)
+ if (node.shadowMode & E_SHADOW_MODE::ESM_RECEIVE)
+ node.node->setMaterialTexture(TEXTURE_LAYER_SHADOW, nullptr);
}
void ShadowRenderer::initialize()
@@ -77,10 +116,10 @@ void ShadowRenderer::initialize()
auto *gpu = m_driver->getGPUProgrammingServices();
// we need glsl
- if (m_shadows_enabled && gpu && m_driver->queryFeature(video::EVDF_ARB_GLSL)) {
+ if (m_shadows_supported && gpu && m_driver->queryFeature(video::EVDF_ARB_GLSL)) {
createShaders();
} else {
- m_shadows_enabled = false;
+ m_shadows_supported = false;
warningstream << "Shadows: GLSL Shader not supported on this system."
<< std::endl;
@@ -94,6 +133,8 @@ void ShadowRenderer::initialize()
m_texture_format_color = m_shadow_map_texture_32bit
? video::ECOLOR_FORMAT::ECF_G32R32F
: video::ECOLOR_FORMAT::ECF_G16R16F;
+
+ m_shadows_enabled &= m_shadows_supported;
}
@@ -118,24 +159,36 @@ size_t ShadowRenderer::getDirectionalLightCount() const
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;
+ float zMax = m_light_list[0].getFarValue();
+ return zMax;
}
return 0.0f;
}
+void ShadowRenderer::setShadowIntensity(float shadow_intensity)
+{
+ m_shadow_strength = pow(shadow_intensity, 1.0f / m_shadow_strength_gamma);
+ if (m_shadow_strength > 1E-2)
+ enable();
+ else
+ disable();
+}
+
void ShadowRenderer::addNodeToShadowList(
scene::ISceneNode *node, E_SHADOW_MODE shadowMode)
{
- m_shadow_node_array.emplace_back(NodeToApply(node, shadowMode));
+ if (!node)
+ return;
+ m_shadow_node_array.emplace_back(node, shadowMode);
+ if (shadowMode == ESM_RECEIVE || shadowMode == ESM_BOTH)
+ node->setMaterialTexture(TEXTURE_LAYER_SHADOW, shadowMapTextureFinal);
}
void ShadowRenderer::removeNodeFromShadowList(scene::ISceneNode *node)
{
+ if (!node)
+ return;
+ node->setMaterialTexture(TEXTURE_LAYER_SHADOW, nullptr);
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);
@@ -157,6 +210,7 @@ void ShadowRenderer::updateSMTextures()
shadowMapTextureDynamicObjects = getSMTexture(
std::string("shadow_dynamic_") + itos(m_shadow_map_texture_size),
m_texture_format, true);
+ assert(shadowMapTextureDynamicObjects != nullptr);
}
if (!shadowMapClientMap) {
@@ -165,6 +219,7 @@ void ShadowRenderer::updateSMTextures()
std::string("shadow_clientmap_") + itos(m_shadow_map_texture_size),
m_shadow_map_colored ? m_texture_format_color : m_texture_format,
true);
+ assert(shadowMapClientMap != nullptr);
}
if (!shadowMapClientMapFuture && m_map_shadow_update_frames > 1) {
@@ -172,6 +227,7 @@ void ShadowRenderer::updateSMTextures()
std::string("shadow_clientmap_bb_") + itos(m_shadow_map_texture_size),
m_shadow_map_colored ? m_texture_format_color : m_texture_format,
true);
+ assert(shadowMapClientMapFuture != nullptr);
}
if (m_shadow_map_colored && !shadowMapTextureColors) {
@@ -179,6 +235,7 @@ void ShadowRenderer::updateSMTextures()
std::string("shadow_colored_") + itos(m_shadow_map_texture_size),
m_shadow_map_colored ? m_texture_format_color : m_texture_format,
true);
+ assert(shadowMapTextureColors != nullptr);
}
// The merge all shadowmaps texture
@@ -198,6 +255,11 @@ void ShadowRenderer::updateSMTextures()
shadowMapTextureFinal = getSMTexture(
std::string("shadowmap_final_") + itos(m_shadow_map_texture_size),
frt, true);
+ assert(shadowMapTextureFinal != nullptr);
+
+ for (auto &node : m_shadow_node_array)
+ if (node.shadowMode == ESM_RECEIVE || node.shadowMode == ESM_BOTH)
+ node.node->setMaterialTexture(TEXTURE_LAYER_SHADOW, shadowMapTextureFinal);
}
if (!m_shadow_node_array.empty() && !m_light_list.empty()) {
@@ -205,7 +267,7 @@ void ShadowRenderer::updateSMTextures()
// detect if SM should be regenerated
for (DirectionalLight &light : m_light_list) {
- if (light.should_update_map_shadow) {
+ if (light.should_update_map_shadow || m_force_update_shadow_map) {
light.should_update_map_shadow = false;
m_current_frame = 0;
reset_sm_texture = true;
@@ -219,23 +281,29 @@ void ShadowRenderer::updateSMTextures()
// 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;
-
+ for (auto cb : {m_shadow_depth_cb, m_shadow_depth_entity_cb, m_shadow_depth_trans_cb})
+ if (cb) {
+ cb->MapRes = (f32)m_shadow_map_texture_size;
+ cb->MaxFar = (f32)m_shadow_map_max_distance * BS;
+ cb->PerspectiveBiasXY = getPerspectiveBiasXY();
+ cb->PerspectiveBiasZ = getPerspectiveBiasZ();
+ cb->CameraPos = light.getFuturePlayerPos();
+ }
+
// 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) {
+ if (m_current_frame < m_map_shadow_update_frames || m_force_update_shadow_map) {
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_current_frame == m_map_shadow_update_frames - 1 || m_force_update_shadow_map) {
if (m_shadow_map_colored) {
m_driver->setRenderTarget(0, false, false);
m_driver->setRenderTarget(shadowMapTextureColors,
@@ -255,7 +323,7 @@ void ShadowRenderer::updateSMTextures()
++m_current_frame;
// pass finished, swap textures and commit light changes
- if (m_current_frame == m_map_shadow_update_frames) {
+ if (m_current_frame == m_map_shadow_update_frames || m_force_update_shadow_map) {
if (shadowMapClientMapFuture != nullptr)
std::swap(shadowMapClientMapFuture, shadowMapClientMap);
@@ -263,6 +331,7 @@ void ShadowRenderer::updateSMTextures()
for (DirectionalLight &light : m_light_list)
light.commitFrustum();
}
+ m_force_update_shadow_map = false;
}
}
@@ -274,12 +343,18 @@ void ShadowRenderer::update(video::ITexture *outputTarget)
updateSMTextures();
+ if (shadowMapTextureFinal == nullptr) {
+ return;
+ }
+
+
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;
+ // Static shader values for entities are set in updateSMTextures
+ // SM texture for entities is not updated incrementally and
+ // must by updated using current player position.
+ m_shadow_depth_entity_cb->CameraPos = light.getPlayerPos();
// render shadows for the n0n-map objects.
m_driver->setRenderTarget(shadowMapTextureDynamicObjects, true,
@@ -311,19 +386,23 @@ 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()));
+ if (shadowMapTextureFinal)
+ 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 (shadowMapClientMap)
+ m_driver->draw2DImage(shadowMapClientMap,
+ core::rect<s32>(0, 50 + 128, 128, 128 + 50 + 128),
+ core::rect<s32>({0, 0}, shadowMapTextureFinal->getSize()));
+
+ if (shadowMapTextureDynamicObjects)
+ 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) {
+ if (m_shadow_map_colored && shadowMapTextureColors) {
m_driver->draw2DImage(shadowMapTextureColors,
core::rect<s32>(128,128 + 50 + 128 + 128,
@@ -368,10 +447,6 @@ void ShadowRenderer::renderShadowMap(video::ITexture *target,
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;
@@ -381,13 +456,13 @@ void ShadowRenderer::renderShadowMap(video::ITexture *target,
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);
+ int frame = m_force_update_shadow_map ? 0 : m_current_frame;
+ int total_frames = m_force_update_shadow_map ? 1 : m_map_shadow_update_frames;
+
+ map_node->renderMapShadows(m_driver, material, pass, frame, total_frames);
break;
}
}
@@ -429,10 +504,6 @@ void ShadowRenderer::renderShadowObjects(
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,
@@ -473,13 +544,13 @@ void ShadowRenderer::createShaders()
if (depth_shader == -1) {
std::string depth_shader_vs = getShaderPath("shadow_shaders", "pass1_vertex.glsl");
if (depth_shader_vs.empty()) {
- m_shadows_enabled = false;
+ m_shadows_supported = 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;
+ m_shadows_supported = false;
errorstream << "Error shadow mapping fs shader not found." << std::endl;
return;
}
@@ -494,7 +565,9 @@ void ShadowRenderer::createShaders()
if (depth_shader == -1) {
// upsi, something went wrong loading shader.
delete m_shadow_depth_cb;
+ m_shadow_depth_cb = nullptr;
m_shadows_enabled = false;
+ m_shadows_supported = false;
errorstream << "Error compiling shadow mapping shader." << std::endl;
return;
}
@@ -510,26 +583,30 @@ void ShadowRenderer::createShaders()
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;
+ m_shadows_supported = 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;
+ m_shadows_supported = false;
errorstream << "Error shadow mapping fs shader not found." << std::endl;
return;
}
+ m_shadow_depth_entity_cb = new ShadowDepthShaderCB();
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);
+ video::EPST_PS_1_2, m_shadow_depth_entity_cb);
if (depth_shader_entities == -1) {
// upsi, something went wrong loading shader.
+ delete m_shadow_depth_entity_cb;
+ m_shadow_depth_entity_cb = nullptr;
m_shadows_enabled = false;
+ m_shadows_supported = false;
errorstream << "Error compiling shadow mapping shader (dynamic)." << std::endl;
return;
}
@@ -543,14 +620,14 @@ void ShadowRenderer::createShaders()
if (mixcsm_shader == -1) {
std::string depth_shader_vs = getShaderPath("shadow_shaders", "pass2_vertex.glsl");
if (depth_shader_vs.empty()) {
- m_shadows_enabled = false;
+ m_shadows_supported = 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;
+ m_shadows_supported = false;
errorstream << "Error cascade shadow mapping fs shader not found." << std::endl;
return;
}
@@ -569,7 +646,7 @@ void ShadowRenderer::createShaders()
// upsi, something went wrong loading shader.
delete m_shadow_mix_cb;
delete m_screen_quad;
- m_shadows_enabled = false;
+ m_shadows_supported = false;
errorstream << "Error compiling cascade shadow mapping shader." << std::endl;
return;
}
@@ -583,13 +660,13 @@ void ShadowRenderer::createShaders()
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;
+ m_shadows_supported = 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;
+ m_shadows_supported = false;
errorstream << "Error shadow mapping fs shader not found." << std::endl;
return;
}
@@ -604,8 +681,9 @@ void ShadowRenderer::createShaders()
if (depth_shader_trans == -1) {
// upsi, something went wrong loading shader.
delete m_shadow_depth_trans_cb;
+ m_shadow_depth_trans_cb = nullptr;
m_shadow_map_colored = false;
- m_shadows_enabled = false;
+ m_shadows_supported = false;
errorstream << "Error compiling colored shadow mapping shader." << std::endl;
return;
}
@@ -622,6 +700,7 @@ std::string ShadowRenderer::readShaderFile(const std::string &path)
std::string prefix;
if (m_shadow_map_colored)
prefix.append("#define COLORED_SHADOWS 1\n");
+ prefix.append("#line 0\n");
std::string content;
fs::ReadFile(path, content);
diff --git a/src/client/shadows/dynamicshadowsrender.h b/src/client/shadows/dynamicshadowsrender.h
index e4b3c3e22..bd27f6f20 100644
--- a/src/client/shadows/dynamicshadowsrender.h
+++ b/src/client/shadows/dynamicshadowsrender.h
@@ -51,6 +51,8 @@ struct NodeToApply
class ShadowRenderer
{
public:
+ static const int TEXTURE_LAYER_SHADOW = 3;
+
ShadowRenderer(IrrlichtDevice *device, Client *client);
~ShadowRenderer();
@@ -74,6 +76,7 @@ public:
void removeNodeFromShadowList(scene::ISceneNode *node);
void update(video::ITexture *outputTarget = nullptr);
+ void setForceUpdateShadowMap() { m_force_update_shadow_map = true; }
void drawDebug();
video::ITexture *get_texture()
@@ -82,13 +85,17 @@ public:
}
- bool is_active() const { return m_shadows_enabled; }
+ bool is_active() const { return m_shadows_enabled && shadowMapTextureFinal != nullptr; }
void setTimeOfDay(float isDay) { m_time_day = isDay; };
+ void setShadowIntensity(float shadow_intensity);
s32 getShadowSamples() const { return m_shadow_samples; }
- float getShadowStrength() const { return m_shadow_strength; }
+ float getShadowStrength() const { return m_shadows_enabled ? m_shadow_strength : 0.0f; }
float getTimeOfDay() const { return m_time_day; }
+ f32 getPerspectiveBiasXY() { return m_perspective_bias_xy; }
+ f32 getPerspectiveBiasZ() { return m_perspective_bias_z; }
+
private:
video::ITexture *getSMTexture(const std::string &shadow_map_name,
video::ECOLOR_FORMAT texture_format,
@@ -101,8 +108,10 @@ private:
void mixShadowsQuad();
void updateSMTextures();
+ void disable();
+ void enable() { m_shadows_enabled = m_shadows_supported; }
+
// a bunch of variables
- IrrlichtDevice *m_device{nullptr};
scene::ISceneManager *m_smgr{nullptr};
video::IVideoDriver *m_driver{nullptr};
Client *m_client{nullptr};
@@ -116,15 +125,20 @@ private:
std::vector<NodeToApply> m_shadow_node_array;
float m_shadow_strength;
+ float m_shadow_strength_gamma;
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_shadows_supported;
bool m_shadow_map_colored;
+ bool m_force_update_shadow_map;
u8 m_map_shadow_update_frames; /* Use this number of frames to update map shaodw */
u8 m_current_frame{0}; /* Current frame */
+ f32 m_perspective_bias_xy;
+ f32 m_perspective_bias_z;
video::ECOLOR_FORMAT m_texture_format{video::ECOLOR_FORMAT::ECF_R16F};
video::ECOLOR_FORMAT m_texture_format_color{video::ECOLOR_FORMAT::ECF_R16G16};
@@ -140,6 +154,7 @@ private:
s32 mixcsm_shader{-1};
ShadowDepthShaderCB *m_shadow_depth_cb{nullptr};
+ ShadowDepthShaderCB *m_shadow_depth_entity_cb{nullptr};
ShadowDepthShaderCB *m_shadow_depth_trans_cb{nullptr};
shadowScreenQuad *m_screen_quad{nullptr};
diff --git a/src/client/shadows/shadowsshadercallbacks.cpp b/src/client/shadows/shadowsshadercallbacks.cpp
index 65a63f49c..b571ea939 100644
--- a/src/client/shadows/shadowsshadercallbacks.cpp
+++ b/src/client/shadows/shadowsshadercallbacks.cpp
@@ -26,6 +26,10 @@ void ShadowDepthShaderCB::OnSetConstants(
core::matrix4 lightMVP = driver->getTransform(video::ETS_PROJECTION);
lightMVP *= driver->getTransform(video::ETS_VIEW);
+
+ f32 cam_pos[4];
+ lightMVP.transformVect(cam_pos, CameraPos);
+
lightMVP *= driver->getTransform(video::ETS_WORLD);
m_light_mvp_setting.set(lightMVP.pointer(), services);
@@ -33,4 +37,12 @@ void ShadowDepthShaderCB::OnSetConstants(
m_max_far_setting.set(&MaxFar, services);
s32 TextureId = 0;
m_color_map_sampler_setting.set(&TextureId, services);
+ f32 bias0 = PerspectiveBiasXY;
+ m_perspective_bias0.set(&bias0, services);
+ f32 bias1 = 1.0f - bias0 + 1e-5f;
+ m_perspective_bias1.set(&bias1, services);
+ f32 zbias = PerspectiveBiasZ;
+ m_perspective_zbias.set(&zbias, services);
+
+ m_cam_pos_setting.set(cam_pos, services);
}
diff --git a/src/client/shadows/shadowsshadercallbacks.h b/src/client/shadows/shadowsshadercallbacks.h
index 3549567c3..87833c0ec 100644
--- a/src/client/shadows/shadowsshadercallbacks.h
+++ b/src/client/shadows/shadowsshadercallbacks.h
@@ -30,7 +30,11 @@ public:
m_light_mvp_setting("LightMVP"),
m_map_resolution_setting("MapResolution"),
m_max_far_setting("MaxFar"),
- m_color_map_sampler_setting("ColorMapSampler")
+ m_color_map_sampler_setting("ColorMapSampler"),
+ m_perspective_bias0("xyPerspectiveBias0"),
+ m_perspective_bias1("xyPerspectiveBias1"),
+ m_perspective_zbias("zPerspectiveBias"),
+ m_cam_pos_setting("CameraPos")
{}
void OnSetMaterial(const video::SMaterial &material) override {}
@@ -39,10 +43,16 @@ public:
s32 userData) override;
f32 MaxFar{2048.0f}, MapRes{1024.0f};
+ f32 PerspectiveBiasXY {0.9f}, PerspectiveBiasZ {0.5f};
+ v3f CameraPos;
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;
+ CachedVertexShaderSetting<f32> m_perspective_bias0;
+ CachedVertexShaderSetting<f32> m_perspective_bias1;
+ CachedVertexShaderSetting<f32> m_perspective_zbias;
+ CachedVertexShaderSetting<f32, 4> m_cam_pos_setting;
};
diff --git a/src/client/sky.cpp b/src/client/sky.cpp
index 7fe90c6cd..ca56889b4 100644
--- a/src/client/sky.cpp
+++ b/src/client/sky.cpp
@@ -103,7 +103,7 @@ Sky::Sky(s32 id, RenderingEngine *rendering_engine, ITextureSource *tsrc, IShade
m_directional_colored_fog = g_settings->getBool("directional_colored_fog");
- if (false && g_settings->getBool("enable_dynamic_shadows")) {
+ if (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);
}
@@ -660,9 +660,12 @@ void Sky::draw_stars(video::IVideoDriver * driver, float wicked_time_of_day)
// to time 4000.
float tod = wicked_time_of_day < 0.5f ? wicked_time_of_day : (1.0f - wicked_time_of_day);
- float starbrightness = (0.25f - fabsf(tod)) * 20.0f;
+ float day_opacity = clamp(m_star_params.day_opacity, 0.0f, 1.0f);
+ float starbrightness = (0.25f - fabs(tod)) * 20.0f;
+ float alpha = clamp(starbrightness, day_opacity, 1.0f);
+
m_star_color = m_star_params.starcolor;
- m_star_color.a *= clamp(starbrightness, 0.0f, 1.0f);
+ m_star_color.a *= alpha;
if (m_star_color.a <= 0.0f) // Stars are only drawn when not fully transparent
return;
m_materials[0].DiffuseColor = m_materials[0].EmissiveColor = m_star_color.toSColor();
diff --git a/src/client/sky.h b/src/client/sky.h
index 3dc057b70..cbb1186aa 100644
--- a/src/client/sky.h
+++ b/src/client/sky.h
@@ -65,6 +65,7 @@ public:
}
void setSunVisible(bool sun_visible) { m_sun_params.visible = sun_visible; }
+ bool getSunVisible() const { return m_sun_params.visible; }
void setSunTexture(const std::string &sun_texture,
const std::string &sun_tonemap, ITextureSource *tsrc);
void setSunScale(f32 sun_scale) { m_sun_params.scale = sun_scale; }
@@ -72,6 +73,7 @@ public:
void setSunriseTexture(const std::string &sunglow_texture, ITextureSource* tsrc);
void setMoonVisible(bool moon_visible) { m_moon_params.visible = moon_visible; }
+ bool getMoonVisible() const { return m_moon_params.visible; }
void setMoonTexture(const std::string &moon_texture,
const std::string &moon_tonemap, ITextureSource *tsrc);
void setMoonScale(f32 moon_scale) { m_moon_params.scale = moon_scale; }
@@ -80,6 +82,7 @@ public:
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(); }
+ void setStarDayOpacity(f32 day_opacity) { m_star_params.day_opacity = day_opacity; }
bool getCloudsVisible() const { return m_clouds_visible && m_clouds_enabled; }
const video::SColorf &getCloudColor() const { return m_cloudcolor_f; }
diff --git a/src/client/sound.h b/src/client/sound.h
index c1d3c0cfa..213d20831 100644
--- a/src/client/sound.h
+++ b/src/client/sound.h
@@ -51,10 +51,8 @@ public:
// playSound functions return -1 on failure, otherwise a handle to the
// sound. If name=="", call should be ignored without error.
- virtual int playSound(const std::string &name, bool loop, float volume,
- float fade = 0.0f, float pitch = 1.0f) = 0;
- virtual int playSoundAt(const std::string &name, bool loop, float volume, v3f pos,
- float pitch = 1.0f) = 0;
+ virtual int playSound(const SimpleSoundSpec &spec) = 0;
+ virtual int playSoundAt(const SimpleSoundSpec &spec, const v3f &pos) = 0;
virtual void stopSound(int sound) = 0;
virtual bool soundExists(int sound) = 0;
virtual void updateSoundPosition(int sound, v3f pos) = 0;
@@ -62,15 +60,6 @@ public:
virtual float getSoundGain(int id) = 0;
virtual void step(float dtime) = 0;
virtual void fadeSound(int sound, float step, float gain) = 0;
-
- int playSound(const SimpleSoundSpec &spec, bool loop)
- {
- return playSound(spec.name, loop, spec.gain, spec.fade, spec.pitch);
- }
- int playSoundAt(const SimpleSoundSpec &spec, bool loop, const v3f &pos)
- {
- return playSoundAt(spec.name, loop, spec.gain, pos, spec.pitch);
- }
};
class DummySoundManager : public ISoundManager
@@ -88,16 +77,9 @@ public:
{
}
void setListenerGain(float gain) {}
- int playSound(const std::string &name, bool loop, float volume, float fade,
- float pitch)
- {
- return 0;
- }
- int playSoundAt(const std::string &name, bool loop, float volume, v3f pos,
- float pitch)
- {
- return 0;
- }
+
+ int playSound(const SimpleSoundSpec &spec) { return -1; }
+ int playSoundAt(const SimpleSoundSpec &spec, const v3f &pos) { return -1; }
void stopSound(int sound) {}
bool soundExists(int sound) { return false; }
void updateSoundPosition(int sound, v3f pos) {}
diff --git a/src/client/sound_openal.cpp b/src/client/sound_openal.cpp
index 0eda8842b..b015aba25 100644
--- a/src/client/sound_openal.cpp
+++ b/src/client/sound_openal.cpp
@@ -322,7 +322,7 @@ private:
OnDemandSoundFetcher *m_fetcher;
ALCdevice *m_device;
ALCcontext *m_context;
- int m_next_id;
+ u16 m_last_used_id = 0; // only access within getFreeId() !
std::unordered_map<std::string, std::vector<SoundBuffer*>> m_buffers;
std::unordered_map<int, PlayingSound*> m_sounds_playing;
struct FadeState {
@@ -342,8 +342,7 @@ public:
OpenALSoundManager(SoundManagerSingleton *smg, OnDemandSoundFetcher *fetcher):
m_fetcher(fetcher),
m_device(smg->m_device.get()),
- m_context(smg->m_context.get()),
- m_next_id(1)
+ m_context(smg->m_context.get())
{
infostream << "Audio: Initialized: OpenAL " << std::endl;
}
@@ -379,6 +378,22 @@ public:
infostream << "Audio: Deinitialized." << std::endl;
}
+ u16 getFreeId()
+ {
+ u16 startid = m_last_used_id;
+ while (!isFreeId(++m_last_used_id)) {
+ if (m_last_used_id == startid)
+ return 0;
+ }
+
+ return m_last_used_id;
+ }
+
+ inline bool isFreeId(int id) const
+ {
+ return id > 0 && m_sounds_playing.find(id) == m_sounds_playing.end();
+ }
+
void step(float dtime)
{
doFades(dtime);
@@ -437,7 +452,7 @@ public:
<< std::endl;
assert(buf);
PlayingSound *sound = new PlayingSound;
- assert(sound);
+
warn_if_error(alGetError(), "before createPlayingSoundAt");
alGenSources(1, &sound->source_id);
alSourcei(sound->source_id, AL_BUFFER, buf->buffer_id);
@@ -463,28 +478,17 @@ public:
{
assert(buf);
PlayingSound *sound = createPlayingSound(buf, loop, volume, pitch);
- if(!sound)
+ if (!sound)
return -1;
- int id = m_next_id++;
- m_sounds_playing[id] = sound;
- return id;
- }
- int playSoundRawAt(SoundBuffer *buf, bool loop, float volume, const v3f &pos,
- float pitch)
- {
- assert(buf);
- PlayingSound *sound = createPlayingSoundAt(buf, loop, volume, pos, pitch);
- if(!sound)
- return -1;
- int id = m_next_id++;
- m_sounds_playing[id] = sound;
- return id;
+ int handle = getFreeId();
+ m_sounds_playing[handle] = sound;
+ return handle;
}
void deleteSound(int id)
{
- std::unordered_map<int, PlayingSound*>::iterator i = m_sounds_playing.find(id);
+ auto i = m_sounds_playing.find(id);
if(i == m_sounds_playing.end())
return;
PlayingSound *sound = i->second;
@@ -580,39 +584,46 @@ public:
alListenerf(AL_GAIN, gain);
}
- int playSound(const std::string &name, bool loop, float volume, float fade, float pitch)
+ int playSound(const SimpleSoundSpec &spec)
{
maintain();
- if (name.empty())
+ if (spec.name.empty())
return 0;
- SoundBuffer *buf = getFetchBuffer(name);
+ SoundBuffer *buf = getFetchBuffer(spec.name);
if(!buf){
- infostream << "OpenALSoundManager: \"" << name << "\" not found."
+ infostream << "OpenALSoundManager: \"" << spec.name << "\" not found."
<< std::endl;
return -1;
}
+
int handle = -1;
- if (fade > 0) {
- handle = playSoundRaw(buf, loop, 0.0f, pitch);
- fadeSound(handle, fade, volume);
+ if (spec.fade > 0) {
+ handle = playSoundRaw(buf, spec.loop, 0.0f, spec.pitch);
+ fadeSound(handle, spec.fade, spec.gain);
} else {
- handle = playSoundRaw(buf, loop, volume, pitch);
+ handle = playSoundRaw(buf, spec.loop, spec.gain, spec.pitch);
}
return handle;
}
- int playSoundAt(const std::string &name, bool loop, float volume, v3f pos, float pitch)
+ int playSoundAt(const SimpleSoundSpec &spec, const v3f &pos)
{
maintain();
- if (name.empty())
+ if (spec.name.empty())
return 0;
- SoundBuffer *buf = getFetchBuffer(name);
- if(!buf){
- infostream << "OpenALSoundManager: \"" << name << "\" not found."
+ SoundBuffer *buf = getFetchBuffer(spec.name);
+ if (!buf) {
+ infostream << "OpenALSoundManager: \"" << spec.name << "\" not found."
<< std::endl;
return -1;
}
- return playSoundRawAt(buf, loop, volume, pos, pitch);
+
+ PlayingSound *sound = createPlayingSoundAt(buf, spec.loop, spec.gain, pos, spec.pitch);
+ if (!sound)
+ return -1;
+ int handle = getFreeId();
+ m_sounds_playing[handle] = sound;
+ return handle;
}
void stopSound(int sound)
@@ -624,8 +635,9 @@ public:
void fadeSound(int soundid, float step, float gain)
{
// Ignore the command if step isn't valid.
- if (step == 0)
+ if (step == 0 || soundid < 0)
return;
+
float current_gain = getSoundGain(soundid);
step = gain - current_gain > 0 ? abs(step) : -abs(step);
if (m_sounds_fading.find(soundid) != m_sounds_fading.end()) {
diff --git a/src/client/tile.cpp b/src/client/tile.cpp
index aa78c50f0..87d2818b4 100644
--- a/src/client/tile.cpp
+++ b/src/client/tile.cpp
@@ -1619,7 +1619,7 @@ bool TextureSource::generateImagePart(std::string part_of_name,
* textures that don't have the resources to offer high-res alternatives.
*/
const bool filter = m_setting_trilinear_filter || m_setting_bilinear_filter;
- const s32 scaleto = filter ? g_settings->getS32("texture_min_size") : 1;
+ const s32 scaleto = filter ? g_settings->getU16("texture_min_size") : 1;
if (scaleto > 1) {
const core::dimension2d<u32> dim = baseimg->getDimension();
diff --git a/src/client/tile.h b/src/client/tile.h
index fe96cef58..e55a26e56 100644
--- a/src/client/tile.h
+++ b/src/client/tile.h
@@ -260,6 +260,17 @@ struct TileLayer
&& (material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL);
}
+ bool isTransparent() const
+ {
+ switch (material_type) {
+ case TILE_MATERIAL_ALPHA:
+ case TILE_MATERIAL_LIQUID_TRANSPARENT:
+ case TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT:
+ return true;
+ }
+ return false;
+ }
+
// Ordered for size, please do not reorder
video::ITexture *texture = nullptr;
@@ -308,7 +319,8 @@ struct TileSpec
for (int layer = 0; layer < MAX_TILE_LAYERS; layer++) {
if (layers[layer] != other.layers[layer])
return false;
- if (!layers[layer].isTileable())
+ // Only non-transparent tiles can be merged into fast faces
+ if (layers[layer].isTransparent() || !layers[layer].isTileable())
return false;
}
return rotation == 0
diff --git a/src/client/wieldmesh.cpp b/src/client/wieldmesh.cpp
index 0a4cb3b86..0a89e2aa2 100644
--- a/src/client/wieldmesh.cpp
+++ b/src/client/wieldmesh.cpp
@@ -386,6 +386,9 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
m_colors.emplace_back();
// overlay is white, if present
m_colors.emplace_back(true, video::SColor(0xFFFFFFFF));
+ // initialize the color
+ if (!m_lighting)
+ setColor(video::SColor(0xFFFFFFFF));
return;
}
@@ -457,6 +460,10 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
material.setFlag(video::EMF_BILINEAR_FILTER, m_bilinear_filter);
material.setFlag(video::EMF_TRILINEAR_FILTER, m_trilinear_filter);
}
+
+ // initialize the color
+ if (!m_lighting)
+ setColor(video::SColor(0xFFFFFFFF));
return;
} else {
if (!def.inventory_image.empty()) {
@@ -469,6 +476,10 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
m_colors.emplace_back();
// overlay is white, if present
m_colors.emplace_back(true, video::SColor(0xFFFFFFFF));
+
+ // initialize the color
+ if (!m_lighting)
+ setColor(video::SColor(0xFFFFFFFF));
return;
}
@@ -515,8 +526,9 @@ void WieldMeshSceneNode::setNodeLightColor(video::SColor color)
material.EmissiveColor = color;
}
}
-
- setColor(color);
+ else {
+ setColor(color);
+ }
}
void WieldMeshSceneNode::render()
@@ -541,9 +553,10 @@ void WieldMeshSceneNode::changeToMesh(scene::IMesh *mesh)
m_meshnode->setMaterialFlag(video::EMF_NORMALIZE_NORMALS, m_lighting);
m_meshnode->setVisible(true);
- // Add mesh to shadow caster
- if (m_shadow)
+ if (m_shadow) {
+ // Add mesh to shadow caster
m_shadow->addNodeToShadowList(m_meshnode);
+ }
}
void getItemMesh(Client *client, const ItemStack &item, ItemMesh *result)
diff --git a/src/clientiface.cpp b/src/clientiface.cpp
index a4bfb8242..5733b05de 100644
--- a/src/clientiface.cpp
+++ b/src/clientiface.cpp
@@ -472,20 +472,14 @@ void RemoteClient::notifyEvent(ClientStateEvent event)
{
case CSE_AuthAccept:
m_state = CS_AwaitingInit2;
- if (chosen_mech == AUTH_MECHANISM_SRP ||
- chosen_mech == AUTH_MECHANISM_LEGACY_PASSWORD)
- srp_verifier_delete((SRPVerifier *) auth_data);
- chosen_mech = AUTH_MECHANISM_NONE;
+ resetChosenMech();
break;
case CSE_Disconnect:
m_state = CS_Disconnecting;
break;
case CSE_SetDenied:
m_state = CS_Denied;
- if (chosen_mech == AUTH_MECHANISM_SRP ||
- chosen_mech == AUTH_MECHANISM_LEGACY_PASSWORD)
- srp_verifier_delete((SRPVerifier *) auth_data);
- chosen_mech = AUTH_MECHANISM_NONE;
+ resetChosenMech();
break;
default:
myerror << "HelloSent: Invalid client state transition! " << event;
@@ -561,9 +555,7 @@ void RemoteClient::notifyEvent(ClientStateEvent event)
break;
case CSE_SudoSuccess:
m_state = CS_SudoMode;
- if (chosen_mech == AUTH_MECHANISM_SRP)
- srp_verifier_delete((SRPVerifier *) auth_data);
- chosen_mech = AUTH_MECHANISM_NONE;
+ resetChosenMech();
break;
/* Init GotInit2 SetDefinitionsSent SetMediaSent SetDenied */
default:
@@ -598,7 +590,7 @@ void RemoteClient::notifyEvent(ClientStateEvent event)
void RemoteClient::resetChosenMech()
{
- if (chosen_mech == AUTH_MECHANISM_SRP) {
+ if (auth_data) {
srp_verifier_delete((SRPVerifier *) auth_data);
auth_data = nullptr;
}
diff --git a/src/clientiface.h b/src/clientiface.h
index 04e8b8033..3e7ba4793 100644
--- a/src/clientiface.h
+++ b/src/clientiface.h
@@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "network/networkprotocol.h"
#include "network/address.h"
#include "porting.h"
+#include "threading/mutex_auto_lock.h"
#include <list>
#include <vector>
@@ -342,7 +343,7 @@ public:
u8 getMinor() const { return m_version_minor; }
u8 getPatch() const { return m_version_patch; }
const std::string &getFullVer() const { return m_full_version; }
-
+
void setLangCode(const std::string &code) { m_lang_code = code; }
const std::string &getLangCode() const { return m_lang_code; }
@@ -505,9 +506,13 @@ public:
static std::string state2Name(ClientState state);
protected:
- //TODO find way to avoid this functions
- void lock() { m_clients_mutex.lock(); }
- void unlock() { m_clients_mutex.unlock(); }
+ class AutoLock {
+ public:
+ AutoLock(ClientInterface &iface): m_lock(iface.m_clients_mutex) {}
+
+ private:
+ RecursiveMutexAutoLock m_lock;
+ };
RemoteClientMap& getClientList() { return m_clients; }
diff --git a/src/cmake_config.h.in b/src/cmake_config.h.in
index cf436d6dc..17b70e268 100644
--- a/src/cmake_config.h.in
+++ b/src/cmake_config.h.in
@@ -15,6 +15,8 @@
#define BUILD_TYPE "@CMAKE_BUILD_TYPE@"
#define ICON_DIR "@ICONDIR@"
#cmakedefine01 RUN_IN_PLACE
+#cmakedefine01 DEVELOPMENT_BUILD
+#cmakedefine01 ENABLE_UPDATE_CHECKER
#cmakedefine01 USE_GETTEXT
#cmakedefine01 USE_CURL
#cmakedefine01 USE_SOUND
@@ -35,3 +37,4 @@
#cmakedefine01 CURSES_HAVE_NCURSESW_NCURSES_H
#cmakedefine01 CURSES_HAVE_NCURSESW_CURSES_H
#cmakedefine01 BUILD_UNITTESTS
+#cmakedefine01 BUILD_BENCHMARKS
diff --git a/src/collision.cpp b/src/collision.cpp
index ccc3a058d..be135a225 100644
--- a/src/collision.cpp
+++ b/src/collision.cpp
@@ -153,7 +153,7 @@ CollisionAxis axisAlignedCollision(
(std::max(movingbox.MaxEdge.Z + speed.Z * time, staticbox.MaxEdge.Z)
- std::min(movingbox.MinEdge.Z + speed.Z * time, staticbox.MinEdge.Z)
- relbox.MinEdge.Z < 0)
- )
+ )
return COLLISION_AXIS_X;
}
} else {
@@ -180,7 +180,7 @@ CollisionAxis axisAlignedCollision(
(std::max(movingbox.MaxEdge.Y + speed.Y * time, staticbox.MaxEdge.Y)
- std::min(movingbox.MinEdge.Y + speed.Y * time, staticbox.MinEdge.Y)
- relbox.MinEdge.Y < 0)
- )
+ )
return COLLISION_AXIS_Z;
}
}
diff --git a/src/config.h b/src/config.h
index 5e1164642..a4c6c9f10 100644
--- a/src/config.h
+++ b/src/config.h
@@ -11,17 +11,14 @@
#if defined USE_CMAKE_CONFIG_H
#include "cmake_config.h"
-#elif defined (__ANDROID__)
- #define PROJECT_NAME "minetest"
- #define PROJECT_NAME_C "Minetest"
- #define STATIC_SHAREDIR ""
- #define VERSION_STRING STR(VERSION_MAJOR) "." STR(VERSION_MINOR) "." STR(VERSION_PATCH) STR(VERSION_EXTRA)
-#ifdef NDEBUG
- #define BUILD_TYPE "Release"
- #else
- #define BUILD_TYPE "Debug"
- #endif
#else
+ #if defined (__ANDROID__)
+ #define PROJECT_NAME "minetest"
+ #define PROJECT_NAME_C "Minetest"
+ #define STATIC_SHAREDIR ""
+ #define ENABLE_UPDATE_CHECKER 0
+ #define VERSION_STRING STR(VERSION_MAJOR) "." STR(VERSION_MINOR) "." STR(VERSION_PATCH) STR(VERSION_EXTRA)
+ #endif
#ifdef NDEBUG
#define BUILD_TYPE "Release"
#else
diff --git a/src/content/CMakeLists.txt b/src/content/CMakeLists.txt
index 6dd049418..2aefd40a4 100644
--- a/src/content/CMakeLists.txt
+++ b/src/content/CMakeLists.txt
@@ -1,5 +1,6 @@
set(content_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/content.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/mod_configuration.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mods.cpp
${CMAKE_CURRENT_SOURCE_DIR}/subgames.cpp
PARENT_SCOPE
diff --git a/src/content/content.cpp b/src/content/content.cpp
index 66ef83d42..e576943ff 100644
--- a/src/content/content.cpp
+++ b/src/content/content.cpp
@@ -96,7 +96,12 @@ void parseContentInfo(ContentSpec &spec)
Settings conf;
if (!conf_path.empty() && conf.readConfigFile(conf_path.c_str())) {
- if (conf.exists("name"))
+ if (conf.exists("title"))
+ spec.title = conf.get("title");
+ else if (spec.type == "game" && conf.exists("name"))
+ spec.title = conf.get("name");
+
+ if (spec.type != "game" && conf.exists("name"))
spec.name = conf.get("name");
if (conf.exists("description"))
diff --git a/src/content/content.h b/src/content/content.h
index e246ed411..ce09a2eb9 100644
--- a/src/content/content.h
+++ b/src/content/content.h
@@ -27,7 +27,14 @@ struct ContentSpec
std::string type;
std::string author;
u32 release = 0;
+
+ /// Technical name / Id
std::string name;
+
+ /// Human-readable title
+ std::string title;
+
+ /// Short description
std::string desc;
std::string path;
};
diff --git a/src/content/mod_configuration.cpp b/src/content/mod_configuration.cpp
new file mode 100644
index 000000000..504cdaf6f
--- /dev/null
+++ b/src/content/mod_configuration.cpp
@@ -0,0 +1,255 @@
+/*
+Minetest
+Copyright (C) 2013-22 celeron55, Perttu Ahola <celeron55@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 "mod_configuration.h"
+#include "log.h"
+#include "settings.h"
+#include "filesys.h"
+
+void ModConfiguration::printUnsatisfiedModsError() const
+{
+ for (const ModSpec &mod : m_unsatisfied_mods) {
+ errorstream << "mod \"" << mod.name
+ << "\" has unsatisfied dependencies: ";
+ for (const std::string &unsatisfied_depend : mod.unsatisfied_depends)
+ errorstream << " \"" << unsatisfied_depend << "\"";
+ errorstream << std::endl;
+ }
+}
+
+void ModConfiguration::addModsInPath(const std::string &path, const std::string &virtual_path)
+{
+ addMods(flattenMods(getModsInPath(path, virtual_path)));
+}
+
+void ModConfiguration::addMods(const std::vector<ModSpec> &new_mods)
+{
+ // Maintain a map of all existing m_unsatisfied_mods.
+ // Keys are mod names and values are indices into m_unsatisfied_mods.
+ std::map<std::string, u32> existing_mods;
+ for (u32 i = 0; i < m_unsatisfied_mods.size(); ++i) {
+ existing_mods[m_unsatisfied_mods[i].name] = i;
+ }
+
+ // Add new mods
+ for (int want_from_modpack = 1; want_from_modpack >= 0; --want_from_modpack) {
+ // First iteration:
+ // Add all the mods that come from modpacks
+ // Second iteration:
+ // Add all the mods that didn't come from modpacks
+
+ std::set<std::string> seen_this_iteration;
+
+ for (const ModSpec &mod : new_mods) {
+ if (mod.part_of_modpack != (bool)want_from_modpack)
+ continue;
+
+ if (existing_mods.count(mod.name) == 0) {
+ // GOOD CASE: completely new mod.
+ m_unsatisfied_mods.push_back(mod);
+ existing_mods[mod.name] = m_unsatisfied_mods.size() - 1;
+ } else if (seen_this_iteration.count(mod.name) == 0) {
+ // BAD CASE: name conflict in different levels.
+ u32 oldindex = existing_mods[mod.name];
+ const ModSpec &oldmod = m_unsatisfied_mods[oldindex];
+ warningstream << "Mod name conflict detected: \""
+ << mod.name << "\"" << std::endl
+ << "Will not load: " << oldmod.path
+ << std::endl
+ << "Overridden by: " << mod.path
+ << std::endl;
+ m_unsatisfied_mods[oldindex] = mod;
+
+ // If there was a "VERY BAD CASE" name conflict
+ // in an earlier level, ignore it.
+ m_name_conflicts.erase(mod.name);
+ } else {
+ // VERY BAD CASE: name conflict in the same level.
+ u32 oldindex = existing_mods[mod.name];
+ const ModSpec &oldmod = m_unsatisfied_mods[oldindex];
+ warningstream << "Mod name conflict detected: \""
+ << mod.name << "\"" << std::endl
+ << "Will not load: " << oldmod.path
+ << std::endl
+ << "Will not load: " << mod.path
+ << std::endl;
+ m_unsatisfied_mods[oldindex] = mod;
+ m_name_conflicts.insert(mod.name);
+ }
+
+ seen_this_iteration.insert(mod.name);
+ }
+ }
+}
+
+void ModConfiguration::addGameMods(const SubgameSpec &gamespec)
+{
+ std::string game_virtual_path;
+ game_virtual_path.append("games/").append(gamespec.id).append("/mods");
+ addModsInPath(gamespec.gamemods_path, game_virtual_path);
+}
+
+void ModConfiguration::addModsFromConfig(
+ const std::string &settings_path,
+ const std::unordered_map<std::string, std::string> &modPaths)
+{
+ Settings conf;
+ std::unordered_map<std::string, std::string> load_mod_names;
+
+ conf.readConfigFile(settings_path.c_str());
+ std::vector<std::string> names = conf.getNames();
+ for (const std::string &name : names) {
+ const auto &value = conf.get(name);
+ if (name.compare(0, 9, "load_mod_") == 0 && value != "false" &&
+ value != "nil")
+ load_mod_names[name.substr(9)] = value;
+ }
+
+ // List of enabled non-game non-world mods
+ std::vector<ModSpec> addon_mods;
+
+ // Map of modname to a list candidate mod paths. Used to list
+ // alternatives if a particular mod cannot be found.
+ std::unordered_map<std::string, std::vector<std::string>> candidates;
+
+ /*
+ * Iterate through all installed mods except game mods and world mods
+ *
+ * If the mod is enabled, add it to `addon_mods`. *
+ *
+ * Alternative candidates for a modname are stored in `candidates`,
+ * and used in an error message later.
+ *
+ * If not enabled, add `load_mod_modname = false` to world.mt
+ */
+ for (const auto &modPath : modPaths) {
+ std::vector<ModSpec> addon_mods_in_path = flattenMods(getModsInPath(modPath.second, modPath.first));
+ for (const auto &mod : addon_mods_in_path) {
+ const auto &pair = load_mod_names.find(mod.name);
+ if (pair != load_mod_names.end()) {
+ if (is_yes(pair->second) || pair->second == mod.virtual_path) {
+ addon_mods.push_back(mod);
+ } else {
+ candidates[pair->first].emplace_back(mod.virtual_path);
+ }
+ } else {
+ conf.setBool("load_mod_" + mod.name, false);
+ }
+ }
+ }
+ conf.updateConfigFile(settings_path.c_str());
+
+ addMods(addon_mods);
+
+ // Remove all loaded mods from `load_mod_names`
+ // NB: as deps have not yet been resolved, `m_unsatisfied_mods` will contain all mods.
+ for (const ModSpec &mod : m_unsatisfied_mods)
+ load_mod_names.erase(mod.name);
+
+ // Complain about mods declared to be loaded, but not found
+ if (!load_mod_names.empty()) {
+ errorstream << "The following mods could not be found:";
+ for (const auto &pair : load_mod_names)
+ errorstream << " \"" << pair.first << "\"";
+ errorstream << std::endl;
+
+ for (const auto &pair : load_mod_names) {
+ const auto &candidate = candidates.find(pair.first);
+ if (candidate != candidates.end()) {
+ errorstream << "Unable to load " << pair.first << " as the specified path "
+ << pair.second << " could not be found. "
+ << "However, it is available in the following locations:"
+ << std::endl;
+ for (const auto &path : candidate->second) {
+ errorstream << " - " << path << std::endl;
+ }
+ }
+ }
+ }
+}
+
+void ModConfiguration::checkConflictsAndDeps()
+{
+ // report on name conflicts
+ if (!m_name_conflicts.empty()) {
+ std::string s = "Unresolved name conflicts for mods ";
+
+ bool add_comma = false;
+ for (const auto& it : m_name_conflicts) {
+ if (add_comma)
+ s.append(", ");
+ s.append("\"").append(it).append("\"");
+ add_comma = true;
+ }
+ s.append(".");
+
+ throw ModError(s);
+ }
+
+ // get the mods in order
+ resolveDependencies();
+}
+
+void ModConfiguration::resolveDependencies()
+{
+ // Step 1: Compile a list of the mod names we're working with
+ std::set<std::string> modnames;
+ for (const ModSpec &mod : m_unsatisfied_mods) {
+ modnames.insert(mod.name);
+ }
+
+ // Step 2: get dependencies (including optional dependencies)
+ // of each mod, split mods into satisfied and unsatisfied
+ std::list<ModSpec> satisfied;
+ std::list<ModSpec> unsatisfied;
+ for (ModSpec mod : m_unsatisfied_mods) {
+ mod.unsatisfied_depends = mod.depends;
+ // check which optional dependencies actually exist
+ for (const std::string &optdep : mod.optdepends) {
+ if (modnames.count(optdep) != 0)
+ mod.unsatisfied_depends.insert(optdep);
+ }
+ // if a mod has no depends it is initially satisfied
+ if (mod.unsatisfied_depends.empty())
+ satisfied.push_back(mod);
+ else
+ unsatisfied.push_back(mod);
+ }
+
+ // Step 3: mods without unmet dependencies can be appended to
+ // the sorted list.
+ while (!satisfied.empty()) {
+ ModSpec mod = satisfied.back();
+ m_sorted_mods.push_back(mod);
+ satisfied.pop_back();
+ for (auto it = unsatisfied.begin(); it != unsatisfied.end();) {
+ ModSpec &mod2 = *it;
+ mod2.unsatisfied_depends.erase(mod.name);
+ if (mod2.unsatisfied_depends.empty()) {
+ satisfied.push_back(mod2);
+ it = unsatisfied.erase(it);
+ } else {
+ ++it;
+ }
+ }
+ }
+
+ // Step 4: write back list of unsatisfied mods
+ m_unsatisfied_mods.assign(unsatisfied.begin(), unsatisfied.end());
+}
diff --git a/src/content/mod_configuration.h b/src/content/mod_configuration.h
new file mode 100644
index 000000000..1595d1ca3
--- /dev/null
+++ b/src/content/mod_configuration.h
@@ -0,0 +1,111 @@
+/*
+Minetest
+Copyright (C) 2013-22 celeron55, Perttu Ahola <celeron55@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 "mods.h"
+
+
+/**
+ * ModConfiguration is a subset of installed mods. This class
+ * is used to resolve dependencies and return a sorted list of mods.
+ *
+ * This class should not be extended from, but instead used as a
+ * component in other classes.
+ */
+class ModConfiguration
+{
+public:
+ /**
+ * @returns true if all dependencies are fullfilled.
+ */
+ inline bool isConsistent() const { return m_unsatisfied_mods.empty(); }
+
+ inline const std::vector<ModSpec> &getUnsatisfiedMods() const
+ {
+ return m_unsatisfied_mods;
+ }
+
+ /**
+ * List of mods sorted such that they can be loaded in the
+ * given order with all dependencies being fulfilled.
+ *
+ * I.e: every mod in this list has only dependencies on mods which
+ * appear earlier in the vector.
+ */
+ const std::vector<ModSpec> &getMods() const { return m_sorted_mods; }
+
+ void printUnsatisfiedModsError() const;
+
+ /**
+ * Adds all mods in the given path. used for games, modpacks
+ * and world-specific mods (worldmods-folders)
+ *
+ * @param path To search, should be absolute
+ * @param virtual_path Virtual path for this directory, see comment in ModSpec
+ */
+ void addModsInPath(const std::string &path, const std::string &virtual_path);
+
+ /**
+ * Adds all mods in `new_mods`
+ */
+ void addMods(const std::vector<ModSpec> &new_mods);
+
+ /**
+ * Adds game mods
+ */
+ void addGameMods(const SubgameSpec &gamespec);
+
+ /**
+ * Adds mods specifed by a world.mt config
+ *
+ * @param settings_path Path to world.mt
+ * @param modPaths Map from virtual name to mod path
+ */
+ void addModsFromConfig(const std::string &settings_path,
+ const std::unordered_map<std::string, std::string> &modPaths);
+
+ /**
+ * Call this function once all mods have been added
+ */
+ void checkConflictsAndDeps();
+
+private:
+ std::vector<ModSpec> m_sorted_mods;
+
+ /**
+ * move mods from m_unsatisfied_mods to m_sorted_mods
+ * in an order that satisfies dependencies
+ */
+ void resolveDependencies();
+
+ // mods with unmet dependencies. Before dependencies are resolved,
+ // this is where all mods are stored. Afterwards this contains
+ // only the ones with really unsatisfied dependencies.
+ std::vector<ModSpec> m_unsatisfied_mods;
+
+ // set of mod names for which an unresolved name conflict
+ // exists. A name conflict happens when two or more mods
+ // at the same level have the same name but different paths.
+ // Levels (mods in higher levels override mods in lower levels):
+ // 1. game mod in modpack; 2. game mod;
+ // 3. world mod in modpack; 4. world mod;
+ // 5. addon mod in modpack; 6. addon mod.
+ std::unordered_set<std::string> m_name_conflicts;
+};
diff --git a/src/content/mods.cpp b/src/content/mods.cpp
index 455506967..cec6fc2cd 100644
--- a/src/content/mods.cpp
+++ b/src/content/mods.cpp
@@ -69,7 +69,7 @@ bool parseDependsString(std::string &dep, std::unordered_set<char> &symbols)
return !dep.empty();
}
-void parseModContents(ModSpec &spec)
+bool parseModContents(ModSpec &spec)
{
// NOTE: this function works in mutual recursion with getModsInPath
@@ -79,101 +79,100 @@ void parseModContents(ModSpec &spec)
spec.modpack_content.clear();
// Handle modpacks (defined by containing modpack.txt)
- std::ifstream modpack_is((spec.path + DIR_DELIM + "modpack.txt").c_str());
- std::ifstream modpack2_is((spec.path + DIR_DELIM + "modpack.conf").c_str());
- if (modpack_is.good() || modpack2_is.good()) {
- if (modpack_is.good())
- modpack_is.close();
+ if (fs::IsFile(spec.path + DIR_DELIM + "modpack.txt") ||
+ fs::IsFile(spec.path + DIR_DELIM + "modpack.conf")) {
+ spec.is_modpack = true;
+ spec.modpack_content = getModsInPath(spec.path, spec.virtual_path, true);
+ return true;
+ } else if (!fs::IsFile(spec.path + DIR_DELIM + "init.lua")) {
+ return false;
+ }
- if (modpack2_is.good())
- modpack2_is.close();
- spec.is_modpack = true;
- spec.modpack_content = getModsInPath(spec.path, true);
+ Settings info;
+ info.readConfigFile((spec.path + DIR_DELIM + "mod.conf").c_str());
- } 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("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")) {
- mod_conf_has_depends = true;
- std::string dep = info.get("depends");
- // clang-format off
- dep.erase(std::remove_if(dep.begin(), dep.end(),
- static_cast<int (*)(int)>(&std::isspace)), dep.end());
- // clang-format on
- for (const auto &dependency : str_split(dep, ',')) {
- spec.depends.insert(dependency);
- }
+ 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")) {
+ mod_conf_has_depends = true;
+ std::string dep = info.get("depends");
+ // clang-format off
+ dep.erase(std::remove_if(dep.begin(), dep.end(),
+ static_cast<int (*)(int)>(&std::isspace)), dep.end());
+ // clang-format on
+ for (const auto &dependency : str_split(dep, ',')) {
+ spec.depends.insert(dependency);
}
+ }
- if (info.exists("optional_depends")) {
- mod_conf_has_depends = true;
- std::string dep = info.get("optional_depends");
- // clang-format off
- dep.erase(std::remove_if(dep.begin(), dep.end(),
- static_cast<int (*)(int)>(&std::isspace)), dep.end());
- // clang-format on
- for (const auto &dependency : str_split(dep, ',')) {
- spec.optdepends.insert(dependency);
- }
+ if (info.exists("optional_depends")) {
+ mod_conf_has_depends = true;
+ std::string dep = info.get("optional_depends");
+ // clang-format off
+ dep.erase(std::remove_if(dep.begin(), dep.end(),
+ static_cast<int (*)(int)>(&std::isspace)), dep.end());
+ // clang-format on
+ for (const auto &dependency : str_split(dep, ',')) {
+ spec.optdepends.insert(dependency);
}
+ }
- // Fallback to depends.txt
- if (!mod_conf_has_depends) {
- std::vector<std::string> dependencies;
+ // Fallback to depends.txt
+ if (!mod_conf_has_depends) {
+ std::vector<std::string> dependencies;
- std::ifstream is((spec.path + DIR_DELIM + "depends.txt").c_str());
+ 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.");
+ 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);
- dependencies.push_back(dep);
- }
+ while (is.good()) {
+ std::string dep;
+ std::getline(is, dep);
+ dependencies.push_back(dep);
+ }
- for (auto &dependency : dependencies) {
- std::unordered_set<char> symbols;
- if (parseDependsString(dependency, symbols)) {
- if (symbols.count('?') != 0) {
- spec.optdepends.insert(dependency);
- } else {
- spec.depends.insert(dependency);
- }
+ for (auto &dependency : dependencies) {
+ std::unordered_set<char> symbols;
+ if (parseDependsString(dependency, symbols)) {
+ if (symbols.count('?') != 0) {
+ spec.optdepends.insert(dependency);
+ } else {
+ spec.depends.insert(dependency);
}
}
}
-
- if (info.exists("description"))
- spec.desc = info.get("description");
- 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.");
}
+
+ if (info.exists("description"))
+ spec.desc = info.get("description");
+ 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.");
+
+ return true;
}
std::map<std::string, ModSpec> getModsInPath(
- const std::string &path, bool part_of_modpack)
+ const std::string &path, const std::string &virtual_path, bool part_of_modpack)
{
// NOTE: this function works in mutual recursion with parseModContents
std::map<std::string, ModSpec> result;
std::vector<fs::DirListNode> dirlist = fs::GetDirListing(path);
- std::string modpath;
+ std::string mod_path;
+ std::string mod_virtual_path;
for (const fs::DirListNode &dln : dirlist) {
if (!dln.dir)
@@ -185,10 +184,14 @@ std::map<std::string, ModSpec> getModsInPath(
if (modname[0] == '.')
continue;
- modpath.clear();
- modpath.append(path).append(DIR_DELIM).append(modname);
+ mod_path.clear();
+ mod_path.append(path).append(DIR_DELIM).append(modname);
- ModSpec spec(modname, modpath, part_of_modpack);
+ mod_virtual_path.clear();
+ // Intentionally uses / to keep paths same on different platforms
+ mod_virtual_path.append(virtual_path).append("/").append(modname);
+
+ ModSpec spec(modname, mod_path, part_of_modpack, mod_virtual_path);
parseModContents(spec);
result.insert(std::make_pair(modname, spec));
}
@@ -213,215 +216,6 @@ std::vector<ModSpec> flattenMods(const std::map<std::string, ModSpec> &mods)
return result;
}
-ModConfiguration::ModConfiguration(const std::string &worldpath)
-{
-}
-
-void ModConfiguration::printUnsatisfiedModsError() const
-{
- for (const ModSpec &mod : m_unsatisfied_mods) {
- errorstream << "mod \"" << mod.name
- << "\" has unsatisfied dependencies: ";
- for (const std::string &unsatisfied_depend : mod.unsatisfied_depends)
- errorstream << " \"" << unsatisfied_depend << "\"";
- errorstream << std::endl;
- }
-}
-
-void ModConfiguration::addModsInPath(const std::string &path)
-{
- addMods(flattenMods(getModsInPath(path)));
-}
-
-void ModConfiguration::addMods(const std::vector<ModSpec> &new_mods)
-{
- // Maintain a map of all existing m_unsatisfied_mods.
- // Keys are mod names and values are indices into m_unsatisfied_mods.
- std::map<std::string, u32> existing_mods;
- for (u32 i = 0; i < m_unsatisfied_mods.size(); ++i) {
- existing_mods[m_unsatisfied_mods[i].name] = i;
- }
-
- // Add new mods
- for (int want_from_modpack = 1; want_from_modpack >= 0; --want_from_modpack) {
- // First iteration:
- // Add all the mods that come from modpacks
- // Second iteration:
- // Add all the mods that didn't come from modpacks
-
- std::set<std::string> seen_this_iteration;
-
- for (const ModSpec &mod : new_mods) {
- if (mod.part_of_modpack != (bool)want_from_modpack)
- continue;
-
- if (existing_mods.count(mod.name) == 0) {
- // GOOD CASE: completely new mod.
- m_unsatisfied_mods.push_back(mod);
- existing_mods[mod.name] = m_unsatisfied_mods.size() - 1;
- } else if (seen_this_iteration.count(mod.name) == 0) {
- // BAD CASE: name conflict in different levels.
- u32 oldindex = existing_mods[mod.name];
- const ModSpec &oldmod = m_unsatisfied_mods[oldindex];
- warningstream << "Mod name conflict detected: \""
- << mod.name << "\"" << std::endl
- << "Will not load: " << oldmod.path
- << std::endl
- << "Overridden by: " << mod.path
- << std::endl;
- m_unsatisfied_mods[oldindex] = mod;
-
- // If there was a "VERY BAD CASE" name conflict
- // in an earlier level, ignore it.
- m_name_conflicts.erase(mod.name);
- } else {
- // VERY BAD CASE: name conflict in the same level.
- u32 oldindex = existing_mods[mod.name];
- const ModSpec &oldmod = m_unsatisfied_mods[oldindex];
- warningstream << "Mod name conflict detected: \""
- << mod.name << "\"" << std::endl
- << "Will not load: " << oldmod.path
- << std::endl
- << "Will not load: " << mod.path
- << std::endl;
- m_unsatisfied_mods[oldindex] = mod;
- m_name_conflicts.insert(mod.name);
- }
-
- seen_this_iteration.insert(mod.name);
- }
- }
-}
-
-void ModConfiguration::addModsFromConfig(
- const std::string &settings_path, const std::set<std::string> &mods)
-{
- Settings conf;
- std::set<std::string> load_mod_names;
-
- conf.readConfigFile(settings_path.c_str());
- std::vector<std::string> names = conf.getNames();
- for (const std::string &name : names) {
- if (name.compare(0, 9, "load_mod_") == 0 && conf.get(name) != "false" &&
- conf.get(name) != "nil")
- load_mod_names.insert(name.substr(9));
- }
-
- std::vector<ModSpec> addon_mods;
- for (const std::string &i : mods) {
- std::vector<ModSpec> addon_mods_in_path = flattenMods(getModsInPath(i));
- for (std::vector<ModSpec>::const_iterator it = addon_mods_in_path.begin();
- it != addon_mods_in_path.end(); ++it) {
- const ModSpec &mod = *it;
- if (load_mod_names.count(mod.name) != 0)
- addon_mods.push_back(mod);
- else
- conf.setBool("load_mod_" + mod.name, false);
- }
- }
- conf.updateConfigFile(settings_path.c_str());
-
- addMods(addon_mods);
- checkConflictsAndDeps();
-
- // complain about mods declared to be loaded, but not found
- for (const ModSpec &addon_mod : addon_mods)
- load_mod_names.erase(addon_mod.name);
-
- std::vector<ModSpec> unsatisfiedMods = getUnsatisfiedMods();
-
- for (const ModSpec &unsatisfiedMod : unsatisfiedMods)
- load_mod_names.erase(unsatisfiedMod.name);
-
- if (!load_mod_names.empty()) {
- errorstream << "The following mods could not be found:";
- for (const std::string &mod : load_mod_names)
- errorstream << " \"" << mod << "\"";
- errorstream << std::endl;
- }
-}
-
-void ModConfiguration::checkConflictsAndDeps()
-{
- // report on name conflicts
- if (!m_name_conflicts.empty()) {
- std::string s = "Unresolved name conflicts for mods ";
- for (std::unordered_set<std::string>::const_iterator it =
- m_name_conflicts.begin();
- it != m_name_conflicts.end(); ++it) {
- if (it != m_name_conflicts.begin())
- s += ", ";
- s += std::string("\"") + (*it) + "\"";
- }
- s += ".";
- throw ModError(s);
- }
-
- // get the mods in order
- resolveDependencies();
-}
-
-void ModConfiguration::resolveDependencies()
-{
- // Step 1: Compile a list of the mod names we're working with
- std::set<std::string> modnames;
- for (const ModSpec &mod : m_unsatisfied_mods) {
- modnames.insert(mod.name);
- }
-
- // Step 2: get dependencies (including optional dependencies)
- // of each mod, split mods into satisfied and unsatisfied
- std::list<ModSpec> satisfied;
- std::list<ModSpec> unsatisfied;
- for (ModSpec mod : m_unsatisfied_mods) {
- mod.unsatisfied_depends = mod.depends;
- // check which optional dependencies actually exist
- for (const std::string &optdep : mod.optdepends) {
- if (modnames.count(optdep) != 0)
- mod.unsatisfied_depends.insert(optdep);
- }
- // if a mod has no depends it is initially satisfied
- if (mod.unsatisfied_depends.empty())
- satisfied.push_back(mod);
- else
- unsatisfied.push_back(mod);
- }
-
- // Step 3: mods without unmet dependencies can be appended to
- // the sorted list.
- while (!satisfied.empty()) {
- ModSpec mod = satisfied.back();
- m_sorted_mods.push_back(mod);
- satisfied.pop_back();
- for (auto it = unsatisfied.begin(); it != unsatisfied.end();) {
- ModSpec &mod2 = *it;
- mod2.unsatisfied_depends.erase(mod.name);
- if (mod2.unsatisfied_depends.empty()) {
- satisfied.push_back(mod2);
- it = unsatisfied.erase(it);
- } else {
- ++it;
- }
- }
- }
-
- // Step 4: write back list of unsatisfied mods
- m_unsatisfied_mods.assign(unsatisfied.begin(), unsatisfied.end());
-}
-
-#ifndef SERVER
-ClientModConfiguration::ClientModConfiguration(const std::string &path) :
- ModConfiguration(path)
-{
- std::set<std::string> paths;
- std::string path_user = porting::path_user + DIR_DELIM + "clientmods";
- paths.insert(path);
- paths.insert(path_user);
-
- std::string settings_path = path_user + DIR_DELIM + "mods.conf";
- addModsFromConfig(settings_path, paths);
-}
-#endif
ModMetadata::ModMetadata(const std::string &mod_name, ModMetadataDatabase *database):
m_mod_name(mod_name), m_database(database)
diff --git a/src/content/mods.h b/src/content/mods.h
index dd3b6e0e6..5ed5b8171 100644
--- a/src/content/mods.h
+++ b/src/content/mods.h
@@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/basic_macros.h"
#include "config.h"
#include "metadata.h"
+#include "subgames.h"
class ModMetadataDatabase;
@@ -51,101 +52,63 @@ struct ModSpec
bool part_of_modpack = false;
bool is_modpack = false;
+ /**
+ * A constructed canonical path to represent this mod's location.
+ * This intended to be used as an identifier for a modpath that tolerates file movement,
+ * and cannot be used to read the mod files.
+ *
+ * Note that `mymod` is the directory name, not the mod name specified in mod.conf.
+ *
+ * Ex:
+ *
+ * - mods/mymod
+ * - mods/mymod (1)
+ * (^ this would have name=mymod in mod.conf)
+ * - mods/modpack1/mymod
+ * - games/mygame/mods/mymod
+ * - worldmods/mymod
+ */
+ std::string virtual_path;
+
// 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 = "") :
- name(name), path(path)
+
+ ModSpec()
{
}
- ModSpec(const std::string &name, const std::string &path, bool part_of_modpack) :
- name(name), path(path), part_of_modpack(part_of_modpack)
+
+ ModSpec(const std::string &name, const std::string &path, bool part_of_modpack, const std::string &virtual_path) :
+ name(name), path(path), part_of_modpack(part_of_modpack), virtual_path(virtual_path)
{
}
void checkAndLog() const;
};
-// Retrieves depends, optdepends, is_modpack and modpack_content
-void parseModContents(ModSpec &mod);
-
-std::map<std::string, ModSpec> getModsInPath(
- const std::string &path, bool part_of_modpack = false);
+/**
+ * Retrieves depends, optdepends, is_modpack and modpack_content
+ *
+ * @returns false if not a mod
+ */
+bool parseModContents(ModSpec &mod);
+
+/**
+ * Gets a list of all mods and modpacks in path
+ *
+ * @param Path to search, should be absolute
+ * @param part_of_modpack Is this searching within a modpack?
+ * @param virtual_path Virtual path for this directory, see comment in ModSpec
+ * @returns map of mods
+ */
+std::map<std::string, ModSpec> getModsInPath(const std::string &path,
+ const std::string &virtual_path, bool part_of_modpack = false);
// replaces modpack Modspecs with their content
std::vector<ModSpec> flattenMods(const std::map<std::string, ModSpec> &mods);
-// a ModConfiguration is a subset of installed mods, expected to have
-// all dependencies fullfilled, so it can be used as a list of mods to
-// load when the game starts.
-class ModConfiguration
-{
-public:
- // checks if all dependencies are fullfilled.
- bool isConsistent() const { return m_unsatisfied_mods.empty(); }
-
- const std::vector<ModSpec> &getMods() const { return m_sorted_mods; }
-
- const std::vector<ModSpec> &getUnsatisfiedMods() const
- {
- return m_unsatisfied_mods;
- }
-
- void printUnsatisfiedModsError() const;
-
-protected:
- ModConfiguration(const std::string &worldpath);
- // adds all mods in the given path. used for games, modpacks
- // and world-specific mods (worldmods-folders)
- void addModsInPath(const std::string &path);
-
- // adds all mods in the set.
- void addMods(const std::vector<ModSpec> &new_mods);
-
- void addModsFromConfig(const std::string &settings_path,
- const std::set<std::string> &mods);
-
- void checkConflictsAndDeps();
-
-protected:
- // list of mods sorted such that they can be loaded in the
- // given order with all dependencies being fullfilled. I.e.,
- // every mod in this list has only dependencies on mods which
- // appear earlier in the vector.
- std::vector<ModSpec> m_sorted_mods;
-
-private:
- // move mods from m_unsatisfied_mods to m_sorted_mods
- // in an order that satisfies dependencies
- void resolveDependencies();
-
- // mods with unmet dependencies. Before dependencies are resolved,
- // this is where all mods are stored. Afterwards this contains
- // only the ones with really unsatisfied dependencies.
- std::vector<ModSpec> m_unsatisfied_mods;
-
- // set of mod names for which an unresolved name conflict
- // exists. A name conflict happens when two or more mods
- // at the same level have the same name but different paths.
- // Levels (mods in higher levels override mods in lower levels):
- // 1. game mod in modpack; 2. game mod;
- // 3. world mod in modpack; 4. world mod;
- // 5. addon mod in modpack; 6. addon mod.
- std::unordered_set<std::string> m_name_conflicts;
-
- // Deleted default constructor
- ModConfiguration() = default;
-};
-
-#ifndef SERVER
-class ClientModConfiguration : public ModConfiguration
-{
-public:
- ClientModConfiguration(const std::string &path);
-};
-#endif
class ModMetadata : public Metadata
{
diff --git a/src/content/subgames.cpp b/src/content/subgames.cpp
index 62e82e0e4..d0de926ef 100644
--- a/src/content/subgames.cpp
+++ b/src/content/subgames.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 <common/c_internal.h>
#include "content/subgames.h"
#include "porting.h"
#include "filesys.h"
@@ -45,6 +46,25 @@ bool getGameMinetestConfig(const std::string &game_path, Settings &conf)
}
+
+void SubgameSpec::checkAndLog() const
+{
+ // Log deprecation messages
+ auto handling_mode = get_deprecated_handling_mode();
+ if (!deprecation_msgs.empty() && handling_mode != DeprecatedHandlingMode::Ignore) {
+ std::ostringstream os;
+ os << "Game " << title << " 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();
+ }
+}
+
+
struct GameFindPath
{
std::string path;
@@ -107,14 +127,13 @@ SubgameSpec findSubgame(const std::string &id)
std::string gamemod_path = game_path + DIR_DELIM + "mods";
// Find mod directories
- std::set<std::string> mods_paths;
- if (!user_game)
- mods_paths.insert(share + DIR_DELIM + "mods");
- if (user != share || user_game)
- mods_paths.insert(user + DIR_DELIM + "mods");
+ std::unordered_map<std::string, std::string> mods_paths;
+ mods_paths["mods"] = user + DIR_DELIM + "mods";
+ if (!user_game && user != share)
+ mods_paths["share"] = share + DIR_DELIM + "mods";
for (const std::string &mod_path : getEnvModPaths()) {
- mods_paths.insert(mod_path);
+ mods_paths[fs::AbsolutePath(mod_path)] = mod_path;
}
// Get meta
@@ -122,11 +141,13 @@ SubgameSpec findSubgame(const std::string &id)
Settings conf;
conf.readConfigFile(conf_path.c_str());
- std::string game_name;
- if (conf.exists("name"))
- game_name = conf.get("name");
+ std::string game_title;
+ if (conf.exists("title"))
+ game_title = conf.get("title");
+ else if (conf.exists("name"))
+ game_title = conf.get("name");
else
- game_name = id;
+ game_title = id;
std::string game_author;
if (conf.exists("author"))
@@ -141,8 +162,14 @@ SubgameSpec findSubgame(const std::string &id)
menuicon_path = getImagePath(
game_path + DIR_DELIM + "menu" + DIR_DELIM + "icon.png");
#endif
- return SubgameSpec(id, game_path, gamemod_path, mods_paths, game_name,
+
+ SubgameSpec spec(id, game_path, gamemod_path, mods_paths, game_title,
menuicon_path, game_author, game_release);
+
+ if (conf.exists("name") && !conf.exists("title"))
+ spec.deprecation_msgs.push_back("\"name\" setting in game.conf is deprecated, please use \"title\" instead");
+
+ return spec;
}
SubgameSpec findWorldSubgame(const std::string &world_path)
@@ -160,10 +187,12 @@ SubgameSpec findWorldSubgame(const std::string &world_path)
std::string conf_path = world_gamepath + DIR_DELIM + "game.conf";
conf.readConfigFile(conf_path.c_str());
- if (conf.exists("name"))
- gamespec.name = conf.get("name");
+ if (conf.exists("title"))
+ gamespec.title = conf.get("title");
+ else if (conf.exists("name"))
+ gamespec.title = conf.get("name");
else
- gamespec.name = world_gameid;
+ gamespec.title = world_gameid;
return gamespec;
}
diff --git a/src/content/subgames.h b/src/content/subgames.h
index 4a50803e8..d5d168243 100644
--- a/src/content/subgames.h
+++ b/src/content/subgames.h
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <string>
#include <set>
+#include <unordered_map>
#include <vector>
class Settings;
@@ -28,29 +29,36 @@ class Settings;
struct SubgameSpec
{
std::string id;
- std::string name;
+ std::string title;
std::string author;
int release;
std::string path;
std::string gamemods_path;
- std::set<std::string> addon_mods_paths;
+
+ /**
+ * Map from virtual path to mods path
+ */
+ std::unordered_map<std::string, std::string> addon_mods_paths;
std::string menuicon_path;
+ // For logging purposes
+ std::vector<const char *> deprecation_msgs;
+
SubgameSpec(const std::string &id = "", const std::string &path = "",
const std::string &gamemods_path = "",
- const std::set<std::string> &addon_mods_paths =
- std::set<std::string>(),
- const std::string &name = "",
+ const std::unordered_map<std::string, std::string> &addon_mods_paths = {},
+ const std::string &title = "",
const std::string &menuicon_path = "",
const std::string &author = "", int release = 0) :
id(id),
- name(name), author(author), release(release), path(path),
+ title(title), author(author), release(release), path(path),
gamemods_path(gamemods_path), addon_mods_paths(addon_mods_paths),
menuicon_path(menuicon_path)
{
}
bool isValid() const { return (!id.empty() && !path.empty()); }
+ void checkAndLog() const;
};
SubgameSpec findSubgame(const std::string &id);
diff --git a/src/database/database-leveldb.cpp b/src/database/database-leveldb.cpp
index 39f4c8442..6e59daab3 100644
--- a/src/database/database-leveldb.cpp
+++ b/src/database/database-leveldb.cpp
@@ -74,7 +74,7 @@ void Database_LevelDB::loadBlock(const v3s16 &pos, std::string *block)
i64tos(getBlockAsInteger(pos)), block);
if (!status.ok())
- block->clear();
+ block->clear();
}
bool Database_LevelDB::deleteBlock(const v3s16 &pos)
diff --git a/src/database/database-postgresql.cpp b/src/database/database-postgresql.cpp
index 3469f4242..9d6501e68 100644
--- a/src/database/database-postgresql.cpp
+++ b/src/database/database-postgresql.cpp
@@ -495,7 +495,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player)
execPrepared("remove_player_inventories", 1, rmvalues);
execPrepared("remove_player_inventory_items", 1, rmvalues);
- std::vector<const InventoryList*> inventory_lists = sao->getInventory()->getLists();
+ const auto &inventory_lists = sao->getInventory()->getLists();
std::ostringstream oss;
for (u16 i = 0; i < inventory_lists.size(); i++) {
const InventoryList* list = inventory_lists[i];
diff --git a/src/database/database-postgresql.h b/src/database/database-postgresql.h
index 81b4a2b10..0a9ead01e 100644
--- a/src/database/database-postgresql.h
+++ b/src/database/database-postgresql.h
@@ -94,7 +94,8 @@ protected:
checkResults(PQprepare(m_conn, name.c_str(), sql.c_str(), 0, NULL));
}
- const int getPGVersion() const { return m_pgversion; }
+ int getPGVersion() const { return m_pgversion; }
+
private:
// Database connectivity checks
void ping();
diff --git a/src/database/database-sqlite3.cpp b/src/database/database-sqlite3.cpp
index 1e63ae9d8..9521085e9 100644
--- a/src/database/database-sqlite3.cpp
+++ b/src/database/database-sqlite3.cpp
@@ -476,10 +476,10 @@ void PlayerDatabaseSQLite3::savePlayer(RemotePlayer *player)
sqlite3_vrfy(sqlite3_step(m_stmt_player_remove_inventory_items), SQLITE_DONE);
sqlite3_reset(m_stmt_player_remove_inventory_items);
- std::vector<const InventoryList*> inventory_lists = sao->getInventory()->getLists();
+ const auto &inventory_lists = sao->getInventory()->getLists();
std::ostringstream oss;
for (u16 i = 0; i < inventory_lists.size(); i++) {
- const InventoryList* list = inventory_lists[i];
+ const InventoryList *list = inventory_lists[i];
str_to_sqlite(m_stmt_player_add_inventory, 1, player->getName());
int_to_sqlite(m_stmt_player_add_inventory, 2, i);
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index 600fc65f3..c5d92e680 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -64,8 +64,7 @@ void set_default_settings()
settings->setDefault("enable_client_modding", "false");
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("enable_split_login_register", "true");
settings->setDefault("chat_weblink_color", "#8888FF");
// Keymap
@@ -244,6 +243,7 @@ void set_default_settings()
settings->setDefault("enable_particles", "true");
settings->setDefault("arm_inertia", "true");
settings->setDefault("show_nametag_backgrounds", "true");
+ settings->setDefault("transparency_sorting_distance", "16");
settings->setDefault("enable_minimap", "true");
settings->setDefault("minimap_shape_round", "true");
@@ -266,7 +266,7 @@ void set_default_settings()
// Effects Shadows
settings->setDefault("enable_dynamic_shadows", "false");
- settings->setDefault("shadow_strength", "0.2");
+ settings->setDefault("shadow_strength_gamma", "1.0");
settings->setDefault("shadow_map_max_distance", "200.0");
settings->setDefault("shadow_map_texture_size", "2048");
settings->setDefault("shadow_map_texture_32bit", "true");
@@ -274,7 +274,7 @@ void set_default_settings()
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_soft_radius", "5.0");
settings->setDefault("shadow_sky_body_orbit_tilt", "0.0");
// Input
@@ -335,6 +335,12 @@ void set_default_settings()
settings->setDefault("contentdb_flag_blacklist", "nonfree, desktop_default");
#endif
+ settings->setDefault("update_information_url", "https://www.minetest.net/release_info.json");
+#if ENABLE_UPDATE_CHECKER
+ settings->setDefault("update_last_checked", "");
+#else
+ settings->setDefault("update_last_checked", "disabled");
+#endif
// Server
settings->setDefault("disable_escape_sequences", "false");
@@ -386,7 +392,7 @@ void set_default_settings()
settings->setDefault("time_speed", "72");
settings->setDefault("world_start_time", "6125");
settings->setDefault("server_unload_unused_data_timeout", "29");
- settings->setDefault("max_objects_per_block", "64");
+ settings->setDefault("max_objects_per_block", "256");
settings->setDefault("server_map_save_interval", "5.3");
settings->setDefault("chat_message_max_size", "500");
settings->setDefault("chat_message_limit_per_10sec", "8.0");
@@ -456,7 +462,6 @@ void set_default_settings()
// Altered settings for macOS
#if defined(__MACH__) && defined(__APPLE__)
settings->setDefault("keymap_sneak", "KEY_SHIFT");
- settings->setDefault("fps_max", "0");
#endif
#ifdef HAVE_TOUCHSCREENGUI
@@ -464,6 +469,9 @@ void set_default_settings()
settings->setDefault("touchscreen_threshold","20");
settings->setDefault("fixed_virtual_joystick", "false");
settings->setDefault("virtual_joystick_triggers_aux1", "false");
+ settings->setDefault("clickable_chat_weblinks", "false");
+#else
+ settings->setDefault("clickable_chat_weblinks", "true");
#endif
// Altered settings for Android
#ifdef __ANDROID__
@@ -477,9 +485,7 @@ void set_default_settings()
settings->setDefault("emergequeue_limit_generate", "16");
settings->setDefault("max_block_generate_distance", "5");
settings->setDefault("enable_3d_clouds", "false");
- settings->setDefault("fps_max", "30");
settings->setDefault("fps_max_unfocused", "10");
- 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", "-1");
diff --git a/src/emerge.cpp b/src/emerge.cpp
index 3760b24e6..3e42742f6 100644
--- a/src/emerge.cpp
+++ b/src/emerge.cpp
@@ -61,7 +61,9 @@ public:
void cancelPendingItems();
- static void runCompletionCallbacks(
+protected:
+
+ void runCompletionCallbacks(
const v3s16 &pos, EmergeAction action,
const EmergeCallbackList &callbacks);
@@ -138,7 +140,7 @@ EmergeParams::EmergeParams(EmergeManager *parent, const BiomeGen *biomegen,
//// EmergeManager
////
-EmergeManager::EmergeManager(Server *server)
+EmergeManager::EmergeManager(Server *server, MetricsBackend *mb)
{
this->ndef = server->getNodeDefManager();
this->biomemgr = new BiomeManager(server);
@@ -156,11 +158,22 @@ EmergeManager::EmergeManager(Server *server)
enable_mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info");
+ STATIC_ASSERT(ARRLEN(emergeActionStrs) == ARRLEN(m_completed_emerge_counter),
+ enum_size_mismatches);
+ for (u32 i = 0; i < ARRLEN(m_completed_emerge_counter); i++) {
+ std::string help_str("Number of completed emerges with status ");
+ help_str.append(emergeActionStrs[i]);
+ m_completed_emerge_counter[i] = mb->addCounter(
+ "minetest_emerge_completed", help_str,
+ {{"status", emergeActionStrs[i]}}
+ );
+ }
+
s16 nthreads = 1;
g_settings->getS16NoEx("num_emerge_threads", nthreads);
// If automatic, leave a proc for the main thread and one for
// some other misc thread
- if (nthreads == 0)
+ if (nthreads <= 0)
nthreads = Thread::getNumberOfProcessors() - 2;
if (nthreads < 1)
nthreads = 1;
@@ -489,6 +502,12 @@ EmergeThread *EmergeManager::getOptimalThread()
return m_threads[index];
}
+void EmergeManager::reportCompletedEmerge(EmergeAction action)
+{
+ assert((size_t)action < ARRLEN(m_completed_emerge_counter));
+ m_completed_emerge_counter[(int)action]->increment();
+}
+
////
//// EmergeThread
@@ -540,6 +559,8 @@ void EmergeThread::cancelPendingItems()
void EmergeThread::runCompletionCallbacks(const v3s16 &pos, EmergeAction action,
const EmergeCallbackList &callbacks)
{
+ m_emerge->reportCompletedEmerge(action);
+
for (size_t i = 0; i != callbacks.size(); i++) {
EmergeCompletionCallback callback;
void *param;
diff --git a/src/emerge.h b/src/emerge.h
index 61e7bda63..1bac4b708 100644
--- a/src/emerge.h
+++ b/src/emerge.h
@@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "network/networkprotocol.h"
#include "irr_v3d.h"
#include "util/container.h"
+#include "util/metricsbackend.h"
#include "mapgen/mapgen.h" // for MapgenParams
#include "map.h"
@@ -69,6 +70,14 @@ enum EmergeAction {
EMERGE_GENERATED,
};
+const static std::string emergeActionStrs[] = {
+ "cancelled",
+ "errored",
+ "from_memory",
+ "from_disk",
+ "generated",
+};
+
// Callback
typedef void (*EmergeCompletionCallback)(
v3s16 blockpos, EmergeAction action, void *param);
@@ -138,7 +147,7 @@ public:
MapSettingsManager *map_settings_mgr;
// Methods
- EmergeManager(Server *server);
+ EmergeManager(Server *server, MetricsBackend *mb);
~EmergeManager();
DISABLE_CLASS_COPY(EmergeManager);
@@ -197,6 +206,9 @@ private:
u32 m_qlimit_diskonly;
u32 m_qlimit_generate;
+ // Emerge metrics
+ MetricCounterPtr m_completed_emerge_counter[5];
+
// Managers of various map generation-related components
// Note that each Mapgen gets a copy(!) of these to work with
BiomeGen *biomegen;
@@ -218,5 +230,7 @@ private:
bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata);
+ void reportCompletedEmerge(EmergeAction action);
+
friend class EmergeThread;
};
diff --git a/src/filesys.cpp b/src/filesys.cpp
index ea00def6a..28df32054 100644
--- a/src/filesys.cpp
+++ b/src/filesys.cpp
@@ -877,4 +877,3 @@ bool Rename(const std::string &from, const std::string &to)
}
} // namespace fs
-
diff --git a/src/filesys.h b/src/filesys.h
index 3fa2524c3..a26fe28d6 100644
--- a/src/filesys.h
+++ b/src/filesys.h
@@ -60,6 +60,11 @@ bool IsPathAbsolute(const std::string &path);
bool IsDir(const std::string &path);
+inline bool IsFile(const std::string &path)
+{
+ return PathExists(path) && !IsDir(path);
+}
+
bool IsDirDelimiter(char c);
// Only pass full paths to this one. True on success.
diff --git a/src/gamedef.h b/src/gamedef.h
index 8a9246da2..45b9c4750 100644
--- a/src/gamedef.h
+++ b/src/gamedef.h
@@ -63,6 +63,8 @@ public:
virtual IRollbackManager* getRollbackManager() { return NULL; }
// Shorthands
+ // TODO: these should be made const-safe so that a const IGameDef* is
+ // actually usable
IItemDefManager *idef() { return getItemDefManager(); }
const NodeDefManager *ndef() { return getNodeDefManager(); }
ICraftDefManager *cdef() { return getCraftDefManager(); }
diff --git a/src/gameparams.h b/src/gameparams.h
index 70b0ffcde..b138f8771 100644
--- a/src/gameparams.h
+++ b/src/gameparams.h
@@ -20,8 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include "irrlichttypes.h"
-
-struct SubgameSpec;
+#include "content/subgames.h"
// Information provided from "main"
struct GameParams
@@ -34,6 +33,12 @@ struct GameParams
bool is_dedicated_server;
};
+enum class ELoginRegister {
+ Any = 0,
+ Login,
+ Register
+};
+
// Information processed by main menu
struct GameStartData : GameParams
{
@@ -46,6 +51,8 @@ struct GameStartData : GameParams
std::string address;
bool local_server;
+ ELoginRegister allow_login_or_register = ELoginRegister::Any;
+
// "world_path" must be kept in sync!
WorldSpec world_spec;
};
diff --git a/src/gettime.h b/src/gettime.h
index 66efef1d7..772ff9b50 100644
--- a/src/gettime.h
+++ b/src/gettime.h
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <ctime>
#include <string>
+#include <mutex>
enum TimePrecision
{
@@ -30,13 +31,34 @@ enum TimePrecision
PRECISION_NANO
};
-inline std::string getTimestamp()
+inline struct tm mt_localtime()
{
+ // initialize the time zone on first invocation
+ static std::once_flag tz_init;
+ std::call_once(tz_init, [] {
+#ifdef _WIN32
+ _tzset();
+#else
+ tzset();
+#endif
+ });
+
+ struct tm ret;
time_t t = time(NULL);
- // This is not really thread-safe but it won't break anything
- // except its own output, so just go with it.
- struct tm *tm = localtime(&t);
+ // TODO we should check if the function returns NULL, which would mean error
+#ifdef _WIN32
+ localtime_s(&ret, &t);
+#else
+ localtime_r(&t, &ret);
+#endif
+ return ret;
+}
+
+
+inline std::string getTimestamp()
+{
+ const struct tm tm = mt_localtime();
char cs[20]; // YYYY-MM-DD HH:MM:SS + '\0'
- strftime(cs, 20, "%Y-%m-%d %H:%M:%S", tm);
+ strftime(cs, 20, "%Y-%m-%d %H:%M:%S", &tm);
return cs;
}
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index 513b13e8e..4434b14a0 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -11,7 +11,6 @@ set(gui_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/guiButtonImage.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiButtonItemImage.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiChatConsole.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/guiConfirmRegistration.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiEditBox.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiEditBoxWithScrollbar.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiEngine.cpp
diff --git a/src/gui/StyleSpec.h b/src/gui/StyleSpec.h
index fc92a861b..7a45e07d1 100644
--- a/src/gui/StyleSpec.h
+++ b/src/gui/StyleSpec.h
@@ -45,6 +45,7 @@ public:
BGIMG_PRESSED, // Note: Deprecated property
FGIMG,
FGIMG_HOVERED, // Note: Deprecated property
+ FGIMG_MIDDLE,
FGIMG_PRESSED, // Note: Deprecated property
ALPHA,
CONTENT_OFFSET,
@@ -101,6 +102,8 @@ public:
return FGIMG;
} else if (name == "fgimg_hovered") {
return FGIMG_HOVERED;
+ } else if (name == "fgimg_middle") {
+ return FGIMG_MIDDLE;
} else if (name == "fgimg_pressed") {
return FGIMG_PRESSED;
} else if (name == "alpha") {
diff --git a/src/gui/guiAnimatedImage.cpp b/src/gui/guiAnimatedImage.cpp
index b1447c45f..890763e71 100644
--- a/src/gui/guiAnimatedImage.cpp
+++ b/src/gui/guiAnimatedImage.cpp
@@ -9,40 +9,37 @@
#include <vector>
GUIAnimatedImage::GUIAnimatedImage(gui::IGUIEnvironment *env, gui::IGUIElement *parent,
- s32 id, const core::rect<s32> &rectangle, const std::string &texture_name,
- s32 frame_count, s32 frame_duration, ISimpleTextureSource *tsrc) :
- gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle), m_tsrc(tsrc)
+ s32 id, const core::rect<s32> &rectangle) :
+ gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle)
{
- m_texture = m_tsrc->getTexture(texture_name);
-
- m_frame_count = std::max(frame_count, 1);
- m_frame_duration = std::max(frame_duration, 0);
-
- if (m_texture != nullptr) {
- core::dimension2d<u32> size = m_texture->getOriginalSize();
- if (size.Height < (u64)m_frame_count)
- m_frame_count = size.Height;
- } else {
- // No need to step an animation if we have nothing to draw
- m_frame_count = 1;
- }
}
void GUIAnimatedImage::draw()
{
- // Render the current frame
- if (m_texture != nullptr) {
- video::IVideoDriver *driver = Environment->getVideoDriver();
+ if (m_texture == nullptr)
+ return;
- const video::SColor color(255, 255, 255, 255);
- const video::SColor colors[] = {color, color, color, color};
+ video::IVideoDriver *driver = Environment->getVideoDriver();
+
+ core::dimension2d<u32> size = m_texture->getOriginalSize();
+
+ if ((u32)m_frame_count > size.Height)
+ m_frame_count = size.Height;
+ if (m_frame_idx >= m_frame_count)
+ m_frame_idx = m_frame_count - 1;
- core::dimension2d<u32> size = m_texture->getOriginalSize();
- size.Height /= m_frame_count;
+ size.Height /= m_frame_count;
- draw2DImageFilterScaled(driver, m_texture, AbsoluteRect,
- core::rect<s32>(core::position2d<s32>(0, size.Height * m_frame_idx), size),
- NoClip ? nullptr : &AbsoluteClippingRect, colors, true);
+ core::rect<s32> rect(core::position2d<s32>(0, size.Height * m_frame_idx), size);
+ core::rect<s32> *cliprect = NoClip ? nullptr : &AbsoluteClippingRect;
+
+ if (m_middle.getArea() == 0) {
+ const video::SColor color(255, 255, 255, 255);
+ const video::SColor colors[] = {color, color, color, color};
+ draw2DImageFilterScaled(driver, m_texture, AbsoluteRect, rect, cliprect,
+ colors, true);
+ } else {
+ draw2DImage9Slice(driver, m_texture, AbsoluteRect, rect, m_middle, cliprect);
}
// Step the animation
@@ -55,7 +52,7 @@ void GUIAnimatedImage::draw()
m_global_time = new_global_time;
// Advance by the number of elapsed frames, looping if necessary
- m_frame_idx += u32(m_frame_time / m_frame_duration);
+ m_frame_idx += (u32)(m_frame_time / m_frame_duration);
m_frame_idx %= m_frame_count;
// If 1 or more frames have elapsed, reset the frame time counter with
@@ -63,11 +60,3 @@ void GUIAnimatedImage::draw()
m_frame_time %= m_frame_duration;
}
}
-
-
-void GUIAnimatedImage::setFrameIndex(s32 frame)
-{
- s32 idx = std::max(frame, 0);
- if (idx > 0 && idx < m_frame_count)
- m_frame_idx = idx;
-}
diff --git a/src/gui/guiAnimatedImage.h b/src/gui/guiAnimatedImage.h
index f8e6a506e..885aedece 100644
--- a/src/gui/guiAnimatedImage.h
+++ b/src/gui/guiAnimatedImage.h
@@ -1,6 +1,7 @@
#pragma once
#include "irrlichttypes_extrabloated.h"
+#include <algorithm>
#include <string>
class ISimpleTextureSource;
@@ -8,21 +9,33 @@ class ISimpleTextureSource;
class GUIAnimatedImage : public gui::IGUIElement {
public:
GUIAnimatedImage(gui::IGUIEnvironment *env, gui::IGUIElement *parent,
- s32 id, const core::rect<s32> &rectangle, const std::string &texture_name,
- s32 frame_count, s32 frame_duration, ISimpleTextureSource *tsrc);
+ s32 id, const core::rect<s32> &rectangle);
virtual void draw() override;
- void setFrameIndex(s32 frame);
+ void setTexture(video::ITexture *texture) { m_texture = texture; };
+ video::ITexture *getTexture() const { return m_texture; };
+
+ void setMiddleRect(const core::rect<s32> &middle) { m_middle = middle; };
+ core::rect<s32> getMiddleRect() const { return m_middle; };
+
+ void setFrameDuration(u64 duration) { m_frame_duration = duration; };
+ u64 getFrameDuration() const { return m_frame_duration; };
+
+ void setFrameCount(s32 count) { m_frame_count = std::max(count, 1); };
+ s32 getFrameCount() const { return m_frame_count; };
+
+ void setFrameIndex(s32 frame) { m_frame_idx = std::max(frame, 0); };
s32 getFrameIndex() const { return m_frame_idx; };
private:
- ISimpleTextureSource *m_tsrc;
-
video::ITexture *m_texture = nullptr;
+
u64 m_global_time = 0;
s32 m_frame_idx = 0;
s32 m_frame_count = 1;
- u64 m_frame_duration = 1;
+ u64 m_frame_duration = 0;
u64 m_frame_time = 0;
+
+ core::rect<s32> m_middle;
};
diff --git a/src/gui/guiBackgroundImage.cpp b/src/gui/guiBackgroundImage.cpp
index 21c1e88cf..8d0d1c010 100644
--- a/src/gui/guiBackgroundImage.cpp
+++ b/src/gui/guiBackgroundImage.cpp
@@ -44,25 +44,19 @@ void GUIBackgroundImage::draw()
core::rect<s32> rect = AbsoluteRect;
if (m_autoclip)
- rect.LowerRightCorner += Parent->getAbsolutePosition().getSize();
+ rect.LowerRightCorner += Parent->getAbsoluteClippingRect().getSize();
video::IVideoDriver *driver = Environment->getVideoDriver();
+ core::rect<s32> srcrect(core::position2d<s32>(0, 0),
+ core::dimension2di(texture->getOriginalSize()));
+
if (m_middle.getArea() == 0) {
const video::SColor color(255, 255, 255, 255);
const video::SColor colors[] = {color, color, color, color};
- draw2DImageFilterScaled(driver, texture, rect,
- core::rect<s32>(core::position2d<s32>(0, 0),
- core::dimension2di(texture->getOriginalSize())),
- nullptr, colors, true);
+ draw2DImageFilterScaled(driver, texture, rect, srcrect, nullptr, colors, true);
} else {
- core::rect<s32> middle = m_middle;
- // `-x` is interpreted as `w - x`
- if (middle.LowerRightCorner.X < 0)
- middle.LowerRightCorner.X += texture->getOriginalSize().Width;
- if (middle.LowerRightCorner.Y < 0)
- middle.LowerRightCorner.Y += texture->getOriginalSize().Height;
- draw2DImage9Slice(driver, texture, rect, middle);
+ draw2DImage9Slice(driver, texture, rect, srcrect, m_middle);
}
IGUIElement::draw();
diff --git a/src/gui/guiButton.cpp b/src/gui/guiButton.cpp
index ba95b81c3..c38d901c4 100644
--- a/src/gui/guiButton.cpp
+++ b/src/gui/guiButton.cpp
@@ -320,15 +320,9 @@ void GUIButton::draw()
sourceRect, &AbsoluteClippingRect,
image_colors, UseAlphaChannel);
} else {
- core::rect<s32> middle = BgMiddle;
- // `-x` is interpreted as `w - x`
- if (middle.LowerRightCorner.X < 0)
- middle.LowerRightCorner.X += texture->getOriginalSize().Width;
- if (middle.LowerRightCorner.Y < 0)
- middle.LowerRightCorner.Y += texture->getOriginalSize().Height;
draw2DImage9Slice(driver, texture,
ScaleImage ? AbsoluteRect : core::rect<s32>(pos, sourceRect.getSize()),
- middle, &AbsoluteClippingRect, image_colors);
+ sourceRect, BgMiddle, &AbsoluteClippingRect, image_colors);
}
// END PATCH
}
diff --git a/src/gui/guiButtonImage.cpp b/src/gui/guiButtonImage.cpp
index b507ffece..4ab770a99 100644
--- a/src/gui/guiButtonImage.cpp
+++ b/src/gui/guiButtonImage.cpp
@@ -32,15 +32,15 @@ using namespace gui;
GUIButtonImage::GUIButtonImage(gui::IGUIEnvironment *environment,
gui::IGUIElement *parent, s32 id, core::rect<s32> rectangle,
ISimpleTextureSource *tsrc, bool noclip)
- : GUIButton (environment, parent, id, rectangle, tsrc, noclip)
+ : GUIButton(environment, parent, id, rectangle, tsrc, noclip)
{
- m_image = Environment->addImage(
- core::rect<s32>(0,0,rectangle.getWidth(),rectangle.getHeight()), this);
- m_image->setScaleImage(isScalingImage());
+ GUIButton::setScaleImage(true);
+ m_image = new GUIAnimatedImage(environment, this, id, rectangle);
sendToBack(m_image);
}
-void GUIButtonImage::setForegroundImage(video::ITexture *image)
+void GUIButtonImage::setForegroundImage(video::ITexture *image,
+ const core::rect<s32> &middle)
{
if (image == m_foreground_image)
return;
@@ -52,11 +52,12 @@ void GUIButtonImage::setForegroundImage(video::ITexture *image)
m_foreground_image->drop();
m_foreground_image = image;
- m_image->setImage(image);
+ m_image->setTexture(image);
+ m_image->setMiddleRect(middle);
}
//! Set element properties from a StyleSpec
-void GUIButtonImage::setFromStyle(const StyleSpec& style)
+void GUIButtonImage::setFromStyle(const StyleSpec &style)
{
GUIButton::setFromStyle(style);
@@ -67,19 +68,13 @@ void GUIButtonImage::setFromStyle(const StyleSpec& style)
getTextureSource());
setForegroundImage(guiScalingImageButton(driver, texture,
- AbsoluteRect.getWidth(), AbsoluteRect.getHeight()));
- setScaleImage(true);
+ AbsoluteRect.getWidth(), AbsoluteRect.getHeight()),
+ style.getRect(StyleSpec::FGIMG_MIDDLE, m_image->getMiddleRect()));
} else {
- setForegroundImage(nullptr);
+ setForegroundImage();
}
}
-void GUIButtonImage::setScaleImage(bool scaleImage)
-{
- GUIButton::setScaleImage(scaleImage);
- m_image->setScaleImage(scaleImage);
-}
-
GUIButtonImage *GUIButtonImage::addButton(IGUIEnvironment *environment,
const core::rect<s32> &rectangle, ISimpleTextureSource *tsrc,
IGUIElement *parent, s32 id, const wchar_t *text,
diff --git a/src/gui/guiButtonImage.h b/src/gui/guiButtonImage.h
index 59a25b4f0..554934518 100644
--- a/src/gui/guiButtonImage.h
+++ b/src/gui/guiButtonImage.h
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "guiButton.h"
#include "IGUIButton.h"
+#include "guiAnimatedImage.h"
using namespace irr;
@@ -32,12 +33,11 @@ public:
s32 id, core::rect<s32> rectangle, ISimpleTextureSource *tsrc,
bool noclip = false);
- void setForegroundImage(video::ITexture *image = nullptr);
+ void setForegroundImage(video::ITexture *image = nullptr,
+ const core::rect<s32> &middle = core::rect<s32>());
//! Set element properties from a StyleSpec
- virtual void setFromStyle(const StyleSpec& style) override;
-
- virtual void setScaleImage(bool scaleImage=true) override;
+ virtual void setFromStyle(const StyleSpec &style) override;
//! Do not drop returned handle
static GUIButtonImage *addButton(gui::IGUIEnvironment *environment,
@@ -47,5 +47,5 @@ public:
private:
video::ITexture *m_foreground_image = nullptr;
- gui::IGUIImage *m_image;
+ GUIAnimatedImage *m_image;
};
diff --git a/src/gui/guiChatConsole.cpp b/src/gui/guiChatConsole.cpp
index 01e10ea2e..280f7e45b 100644
--- a/src/gui/guiChatConsole.cpp
+++ b/src/gui/guiChatConsole.cpp
@@ -76,9 +76,9 @@ GUIChatConsole::GUIChatConsole(
m_background_color.setBlue(clamp_u8(myround(console_color.Z)));
}
- u16 chat_font_size = g_settings->getU16("chat_font_size");
+ const u16 chat_font_size = g_settings->getU16("chat_font_size");
m_font = g_fontengine->getFont(chat_font_size != 0 ?
- chat_font_size : FONT_SIZE_UNSPECIFIED, FM_Mono);
+ rangelim(chat_font_size, 5, 72) : FONT_SIZE_UNSPECIFIED, FM_Mono);
if (!m_font) {
errorstream << "GUIChatConsole: Unable to load mono font" << std::endl;
diff --git a/src/gui/guiConfirmRegistration.cpp b/src/gui/guiConfirmRegistration.cpp
deleted file mode 100644
index b8887a4af..000000000
--- a/src/gui/guiConfirmRegistration.cpp
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
-Minetest
-Copyright (C) 2018 srifqi, Muhammad Rifqi Priyo Susanto
- <muhammadrifqipriyosusanto@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 "guiConfirmRegistration.h"
-#include "client/client.h"
-#include "guiButton.h"
-#include <IGUICheckBox.h>
-#include <IGUIButton.h>
-#include <IGUIStaticText.h>
-#include <IGUIFont.h>
-#include "guiEditBoxWithScrollbar.h"
-#include "porting.h"
-
-#ifdef HAVE_TOUCHSCREENGUI
- #include "client/renderingengine.h"
-#endif
-
-#include "gettext.h"
-
-// Continuing from guiPasswordChange.cpp
-const int ID_confirmPassword = 262;
-const int ID_confirm = 263;
-const int ID_intotext = 264;
-const int ID_cancel = 265;
-const int ID_message = 266;
-
-GUIConfirmRegistration::GUIConfirmRegistration(gui::IGUIEnvironment *env,
- gui::IGUIElement *parent, s32 id, IMenuManager *menumgr, Client *client,
- const std::string &playername, const std::string &password,
- bool *aborted, ISimpleTextureSource *tsrc) :
- GUIModalMenu(env, parent, id, menumgr),
- m_client(client), m_playername(playername), m_password(password),
- m_aborted(aborted), m_tsrc(tsrc)
-{
-#ifdef HAVE_TOUCHSCREENGUI
- m_touchscreen_visible = false;
-#endif
-}
-
-GUIConfirmRegistration::~GUIConfirmRegistration()
-{
- removeChildren();
-}
-
-void GUIConfirmRegistration::removeChildren()
-{
- const core::list<gui::IGUIElement *> &children = getChildren();
- core::list<gui::IGUIElement *> children_copy;
- for (gui::IGUIElement *i : children)
- children_copy.push_back(i);
- for (gui::IGUIElement *i : children_copy)
- i->remove();
-}
-
-void GUIConfirmRegistration::regenerateGui(v2u32 screensize)
-{
- acceptInput();
- removeChildren();
-
- /*
- Calculate new sizes and positions
- */
-#ifdef HAVE_TOUCHSCREENGUI
- const float s = m_gui_scale * RenderingEngine::getDisplayDensity() / 2;
-#else
- const float s = m_gui_scale;
-#endif
- DesiredRect = core::rect<s32>(
- screensize.X / 2 - 600 * s / 2,
- screensize.Y / 2 - 360 * s / 2,
- screensize.X / 2 + 600 * s / 2,
- screensize.Y / 2 + 360 * s / 2
- );
- recalculateAbsolutePosition(false);
-
- v2s32 size = DesiredRect.getSize();
- v2s32 topleft_client(0, 0);
-
- const wchar_t *text;
-
- /*
- Add stuff
- */
- s32 ypos = 30 * s;
- {
- core::rect<s32> rect2(0, 0, 540 * s, 180 * s);
- rect2 += topleft_client + v2s32(30 * s, ypos);
- static const std::string info_text_template = strgettext(
- "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.");
- char info_text_buf[1024];
- porting::mt_snprintf(info_text_buf, sizeof(info_text_buf),
- info_text_template.c_str(), m_playername.c_str());
-
- 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);
- e->setTextAlignment(gui::EGUIA_UPPERLEFT, gui::EGUIA_CENTER);
- }
-
- ypos += 200 * s;
- {
- core::rect<s32> rect2(0, 0, 540 * s, 30 * s);
- rect2 += topleft_client + v2s32(30 * s, ypos);
- gui::IGUIEditBox *e = Environment->addEditBox(m_pass_confirm.c_str(),
- rect2, true, this, ID_confirmPassword);
- e->setPasswordBox(true);
- Environment->setFocus(e);
- }
-
- ypos += 50 * s;
- {
- core::rect<s32> rect2(0, 0, 230 * s, 35 * s);
- rect2 = rect2 + v2s32(size.X / 2 - 220 * s, ypos);
- text = wgettext("Register and Join");
- GUIButton::addButton(Environment, rect2, m_tsrc, this, ID_confirm, text);
- delete[] text;
- }
- {
- core::rect<s32> rect2(0, 0, 120 * s, 35 * s);
- rect2 = rect2 + v2s32(size.X / 2 + 70 * s, ypos);
- text = wgettext("Cancel");
- GUIButton::addButton(Environment, rect2, m_tsrc, this, ID_cancel, text);
- delete[] text;
- }
- {
- core::rect<s32> rect2(0, 0, 500 * s, 40 * s);
- rect2 += topleft_client + v2s32(30 * s, ypos + 40 * s);
- text = wgettext("Passwords do not match!");
- IGUIElement *e = Environment->addStaticText(
- text, rect2, false, true, this, ID_message);
- e->setVisible(false);
- delete[] text;
- }
-}
-
-void GUIConfirmRegistration::drawMenu()
-{
- gui::IGUISkin *skin = Environment->getSkin();
- if (!skin)
- return;
- video::IVideoDriver *driver = Environment->getVideoDriver();
-
- video::SColor bgcolor(140, 0, 0, 0);
- driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect);
-
- gui::IGUIElement::draw();
-#ifdef __ANDROID__
- getAndroidUIInput();
-#endif
-}
-
-void GUIConfirmRegistration::closeMenu(bool goNext)
-{
- if (goNext) {
- m_client->confirmRegistration();
- } else {
- *m_aborted = true;
- infostream << "Connect aborted [Escape]" << std::endl;
- }
- quitMenu();
-}
-
-void GUIConfirmRegistration::acceptInput()
-{
- gui::IGUIElement *e;
- e = getElementFromId(ID_confirmPassword);
- if (e)
- m_pass_confirm = e->getText();
-}
-
-bool GUIConfirmRegistration::processInput()
-{
- if (utf8_to_wide(m_password) != m_pass_confirm) {
- gui::IGUIElement *e = getElementFromId(ID_message);
- if (e)
- e->setVisible(true);
- return false;
- }
- return true;
-}
-
-bool GUIConfirmRegistration::OnEvent(const SEvent &event)
-{
- if (event.EventType == EET_KEY_INPUT_EVENT) {
- // clang-format off
- if ((event.KeyInput.Key == KEY_ESCAPE ||
- event.KeyInput.Key == KEY_CANCEL) &&
- event.KeyInput.PressedDown) {
- closeMenu(false);
- return true;
- }
- // clang-format on
- if (event.KeyInput.Key == KEY_RETURN && event.KeyInput.PressedDown) {
- acceptInput();
- if (processInput())
- closeMenu(true);
- return true;
- }
- }
-
- if (event.EventType != EET_GUI_EVENT)
- return Parent ? Parent->OnEvent(event) : false;
-
- if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST && isVisible()) {
- if (!canTakeFocus(event.GUIEvent.Element)) {
- infostream << "GUIConfirmRegistration: Not allowing focus change."
- << std::endl;
- // Returning true disables focus change
- return true;
- }
- } else if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED) {
- switch (event.GUIEvent.Caller->getID()) {
- case ID_confirm:
- acceptInput();
- if (processInput())
- closeMenu(true);
- return true;
- case ID_cancel:
- closeMenu(false);
- return true;
- }
- } else if (event.GUIEvent.EventType == gui::EGET_EDITBOX_ENTER) {
- switch (event.GUIEvent.Caller->getID()) {
- case ID_confirmPassword:
- acceptInput();
- if (processInput())
- closeMenu(true);
- return true;
- }
- }
-
- return false;
-}
-
-#ifdef __ANDROID__
-bool GUIConfirmRegistration::getAndroidUIInput()
-{
- if (!hasAndroidUIInput() || m_jni_field_name != "password")
- return false;
-
- // still waiting
- if (porting::getInputDialogState() == -1)
- return true;
-
- m_jni_field_name.clear();
-
- gui::IGUIElement *e = getElementFromId(ID_confirmPassword);
-
- if (!e || e->getType() != irr::gui::EGUIET_EDIT_BOX)
- return false;
-
- std::string text = porting::getInputDialogValue();
- e->setText(utf8_to_wide(text).c_str());
- return false;
-}
-#endif
diff --git a/src/gui/guiConfirmRegistration.h b/src/gui/guiConfirmRegistration.h
deleted file mode 100644
index d8387201d..000000000
--- a/src/gui/guiConfirmRegistration.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-Minetest
-Copyright (C) 2018 srifqi, Muhammad Rifqi Priyo Susanto
- <muhammadrifqipriyosusanto@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 "modalMenu.h"
-#include <string>
-
-class Client;
-class ISimpleTextureSource;
-
-class GUIConfirmRegistration : public GUIModalMenu
-{
-public:
- GUIConfirmRegistration(gui::IGUIEnvironment *env, gui::IGUIElement *parent,
- s32 id, IMenuManager *menumgr, Client *client,
- const std::string &playername, const std::string &password,
- bool *aborted, ISimpleTextureSource *tsrc);
- ~GUIConfirmRegistration();
-
- void removeChildren();
- /*
- Remove and re-add (or reposition) stuff
- */
- void regenerateGui(v2u32 screensize);
-
- void drawMenu();
-
- void closeMenu(bool goNext);
-
- void acceptInput();
-
- bool processInput();
-
- bool OnEvent(const SEvent &event);
-#ifdef __ANDROID__
- bool getAndroidUIInput();
-#endif
-
-private:
- std::wstring getLabelByID(s32 id) { return L""; }
- std::string getNameByID(s32 id) { return "password"; }
-
- Client *m_client = nullptr;
- const std::string &m_playername;
- const std::string &m_password;
- bool *m_aborted = nullptr;
- std::wstring m_pass_confirm = L"";
- ISimpleTextureSource *m_tsrc;
-};
diff --git a/src/gui/guiEngine.cpp b/src/gui/guiEngine.cpp
index b65b31304..01f3f8fd5 100644
--- a/src/gui/guiEngine.cpp
+++ b/src/gui/guiEngine.cpp
@@ -622,9 +622,9 @@ void GUIEngine::updateTopLeftTextSize()
}
/******************************************************************************/
-s32 GUIEngine::playSound(const SimpleSoundSpec &spec, bool looped)
+s32 GUIEngine::playSound(const SimpleSoundSpec &spec)
{
- s32 handle = m_sound_manager->playSound(spec, looped);
+ s32 handle = m_sound_manager->playSound(spec);
return handle;
}
diff --git a/src/gui/guiEngine.h b/src/gui/guiEngine.h
index d7e6485ef..2f182ca81 100644
--- a/src/gui/guiEngine.h
+++ b/src/gui/guiEngine.h
@@ -296,7 +296,7 @@ private:
clouddata m_cloud;
/** start playing a sound and return handle */
- s32 playSound(const SimpleSoundSpec &spec, bool looped);
+ s32 playSound(const SimpleSoundSpec &spec);
/** stop playing a sound started with playSound() */
void stopSound(s32 handle);
diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp
index 85bd04900..1f9914e72 100644
--- a/src/gui/guiFormSpecMenu.cpp
+++ b/src/gui/guiFormSpecMenu.cpp
@@ -127,7 +127,8 @@ GUIFormSpecMenu::GUIFormSpecMenu(JoystickController *joystick,
GUIFormSpecMenu::~GUIFormSpecMenu()
{
- removeChildren();
+ removeAllChildren();
+ removeTooltip();
for (auto &table_it : m_tables)
table_it.second->drop();
@@ -137,8 +138,6 @@ GUIFormSpecMenu::~GUIFormSpecMenu()
checkbox_it.second->drop();
for (auto &scrollbar_it : m_scrollbars)
scrollbar_it.second->drop();
- for (auto &background_it : m_backgrounds)
- background_it->drop();
for (auto &tooltip_rect_it : m_tooltip_rects)
tooltip_rect_it.first->drop();
for (auto &clickthrough_it : m_clickthrough_elements)
@@ -176,14 +175,8 @@ void GUIFormSpecMenu::create(GUIFormSpecMenu *&cur_formspec, Client *client,
}
}
-void GUIFormSpecMenu::removeChildren()
+void GUIFormSpecMenu::removeTooltip()
{
- const core::list<gui::IGUIElement*> &children = getChildren();
-
- while (!children.empty()) {
- (*children.getLast())->remove();
- }
-
if (m_tooltip_element) {
m_tooltip_element->remove();
m_tooltip_element->drop();
@@ -201,16 +194,7 @@ void GUIFormSpecMenu::setInitialFocus()
// 5. first focusable (not statictext, not tabheader)
// 6. first child element
- core::list<gui::IGUIElement*> children = getChildren();
-
- // in case "children" contains any NULL elements, remove them
- for (core::list<gui::IGUIElement*>::Iterator it = children.begin();
- it != children.end();) {
- if (*it)
- ++it;
- else
- it = children.erase(it);
- }
+ const auto& children = getChildren();
// 1. first empty editbox
for (gui::IGUIElement *it : children) {
@@ -238,8 +222,7 @@ void GUIFormSpecMenu::setInitialFocus()
}
// 4. last button
- for (core::list<gui::IGUIElement*>::Iterator it = children.getLast();
- it != children.end(); --it) {
+ for (auto it = children.rbegin(); it != children.rend(); ++it) {
if ((*it)->getType() == gui::EGUIET_BUTTON) {
Environment->setFocus(*it);
return;
@@ -259,7 +242,7 @@ void GUIFormSpecMenu::setInitialFocus()
if (children.empty())
Environment->setFocus(this);
else
- Environment->setFocus(*(children.begin()));
+ Environment->setFocus(children.front());
}
GUITable* GUIFormSpecMenu::getTable(const std::string &tablename)
@@ -784,101 +767,99 @@ void GUIFormSpecMenu::parseScrollBarOptions(parserData* data, const std::string
void GUIFormSpecMenu::parseImage(parserData* data, const std::string &element)
{
std::vector<std::string> parts;
- if (!precheckElement("image", element, 2, 3, parts))
+ if (!precheckElement("image", element, 2, 4, parts))
return;
- 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]);
+ size_t offset = parts.size() >= 3;
+
+ std::vector<std::string> v_pos = split(parts[0],',');
+ MY_CHECKPOS("image", 0);
- MY_CHECKPOS("image", 0);
+ std::vector<std::string> v_geom;
+ if (parts.size() >= 3) {
+ v_geom = split(parts[1],',');
MY_CHECKGEOM("image", 1);
+ }
- v2s32 pos;
- v2s32 geom;
+ std::string name = unescape_string(parts[1 + offset]);
+ video::ITexture *texture = m_tsrc->getTexture(name);
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos);
- geom = getRealCoordinateGeometry(v_geom);
+ v2s32 pos;
+ v2s32 geom;
+
+ if (parts.size() < 3) {
+ if (texture != nullptr) {
+ core::dimension2du dim = texture->getOriginalSize();
+ geom.X = dim.Width;
+ geom.Y = dim.Height;
} else {
- pos = getElementBasePos(&v_pos);
- geom.X = stof(v_geom[0]) * (float)imgsize.X;
- geom.Y = stof(v_geom[1]) * (float)imgsize.Y;
+ geom = v2s32(0);
}
+ }
- if (!data->explicit_size)
- warningstream<<"invalid use of image without a size[] element"<<std::endl;
-
- video::ITexture *texture = m_tsrc->getTexture(name);
- if (!texture) {
- errorstream << "GUIFormSpecMenu::parseImage() Unable to load texture:"
- << std::endl << "\t" << name << std::endl;
- return;
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos);
+ if (parts.size() >= 3)
+ geom = getRealCoordinateGeometry(v_geom);
+ } else {
+ pos = getElementBasePos(&v_pos);
+ if (parts.size() >= 3) {
+ geom.X = stof(v_geom[0]) * (float)imgsize.X;
+ geom.Y = stof(v_geom[1]) * (float)imgsize.Y;
}
-
- FieldSpec spec(
- name,
- L"",
- L"",
- 258 + m_fields.size(),
- 1
- );
- core::rect<s32> rect(pos, pos + geom);
- gui::IGUIImage *e = Environment->addImage(rect, data->current_parent,
- spec.fid, 0, true);
- e->setImage(texture);
- e->setScaleImage(true);
- 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);
- return;
}
- // Else: 2 arguments in "parts"
-
- std::vector<std::string> v_pos = split(parts[0],',');
- std::string name = unescape_string(parts[1]);
-
- MY_CHECKPOS("image", 0);
-
- v2s32 pos = getElementBasePos(&v_pos);
-
if (!data->explicit_size)
- warningstream<<"invalid use of image without a size[] element"<<std::endl;
-
- video::ITexture *texture = m_tsrc->getTexture(name);
- if (!texture) {
- errorstream << "GUIFormSpecMenu::parseImage() Unable to load texture:"
- << std::endl << "\t" << name << std::endl;
- return;
- }
+ warningstream << "Invalid use of image without a size[] element" << std::endl;
FieldSpec spec(
name,
L"",
L"",
- 258 + m_fields.size()
+ 258 + m_fields.size(),
+ 1
);
- gui::IGUIImage *e = Environment->addImage(texture, pos, true,
- data->current_parent, spec.fid, 0);
+
+ core::rect<s32> rect = core::rect<s32>(pos, pos + geom);
+
+ core::rect<s32> middle;
+ if (parts.size() >= 4)
+ parseMiddleRect(parts[3], &middle);
+
+ // Temporary fix for issue #12581 in 5.6.0.
+ // Use legacy image when not rendering 9-slice image because GUIAnimatedImage
+ // uses NNAA filter which causes visual artifacts when image uses alpha blending.
+
+ gui::IGUIElement *e;
+ if (middle.getArea() > 0) {
+ GUIAnimatedImage *image = new GUIAnimatedImage(Environment, data->current_parent,
+ spec.fid, rect);
+
+ image->setTexture(texture);
+ image->setMiddleRect(middle);
+ e = image;
+ }
+ else {
+ gui::IGUIImage *image = Environment->addImage(rect, data->current_parent, spec.fid, nullptr, true);
+ image->setImage(texture);
+ image->setScaleImage(true);
+ image->grab(); // compensate for drop in addImage
+ e = image;
+ }
+
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();
+ // Animated images should let events through
m_clickthrough_elements.push_back(e);
+
+ m_fields.push_back(spec);
}
void GUIFormSpecMenu::parseAnimatedImage(parserData *data, const std::string &element)
{
std::vector<std::string> parts;
- if (!precheckElement("animated_image", element, 6, 7, parts))
+ if (!precheckElement("animated_image", element, 6, 8, parts))
return;
std::vector<std::string> v_pos = split(parts[0], ',');
@@ -904,7 +885,8 @@ void GUIFormSpecMenu::parseAnimatedImage(parserData *data, const std::string &el
}
if (!data->explicit_size)
- warningstream << "Invalid use of animated_image without a size[] element" << std::endl;
+ warningstream << "Invalid use of animated_image without a size[] element"
+ << std::endl;
FieldSpec spec(
name,
@@ -917,9 +899,17 @@ void GUIFormSpecMenu::parseAnimatedImage(parserData *data, const std::string &el
core::rect<s32> rect = core::rect<s32>(pos, pos + geom);
- GUIAnimatedImage *e = new GUIAnimatedImage(Environment, data->current_parent, spec.fid,
- rect, texture_name, frame_count, frame_duration, m_tsrc);
+ core::rect<s32> middle;
+ if (parts.size() >= 8)
+ parseMiddleRect(parts[7], &middle);
+
+ GUIAnimatedImage *e = new GUIAnimatedImage(Environment, data->current_parent,
+ spec.fid, rect);
+ e->setTexture(m_tsrc->getTexture(texture_name));
+ e->setMiddleRect(middle);
+ e->setFrameDuration(frame_duration);
+ e->setFrameCount(frame_count);
if (parts.size() >= 7)
e->setFrameIndex(stoi(parts[6]) - 1);
@@ -1044,6 +1034,35 @@ void GUIFormSpecMenu::parseButton(parserData* data, const std::string &element,
m_fields.push_back(spec);
}
+bool GUIFormSpecMenu::parseMiddleRect(const std::string &value, core::rect<s32> *parsed_rect)
+{
+ core::rect<s32> rect;
+ std::vector<std::string> v_rect = split(value, ',');
+
+ if (v_rect.size() == 1) {
+ s32 x = stoi(v_rect[0]);
+ rect.UpperLeftCorner = core::vector2di(x, x);
+ rect.LowerRightCorner = core::vector2di(-x, -x);
+ } else if (v_rect.size() == 2) {
+ s32 x = stoi(v_rect[0]);
+ s32 y = stoi(v_rect[1]);
+ rect.UpperLeftCorner = core::vector2di(x, y);
+ rect.LowerRightCorner = core::vector2di(-x, -y);
+ // `-x` is interpreted as `w - x`
+ } else if (v_rect.size() == 4) {
+ rect.UpperLeftCorner = core::vector2di(stoi(v_rect[0]), stoi(v_rect[1]));
+ rect.LowerRightCorner = core::vector2di(stoi(v_rect[2]), stoi(v_rect[3]));
+ } else {
+ warningstream << "Invalid rectangle string format: \"" << value
+ << "\"" << std::endl;
+ return false;
+ }
+
+ *parsed_rect = rect;
+
+ return true;
+}
+
void GUIFormSpecMenu::parseBackground(parserData* data, const std::string &element)
{
std::vector<std::string> parts;
@@ -1085,25 +1104,8 @@ void GUIFormSpecMenu::parseBackground(parserData* data, const std::string &eleme
}
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 (parts.size() >= 5)
+ parseMiddleRect(parts[4], &middle);
if (!data->explicit_size && !clip)
warningstream << "invalid use of unclipped background without a size[] element" << std::endl;
@@ -1124,17 +1126,15 @@ void GUIFormSpecMenu::parseBackground(parserData* data, const std::string &eleme
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, data->background_parent.get(),
+ spec.fid, rect, name, middle, m_tsrc, clip);
FATAL_ERROR_IF(!e, "Failed to create background formspec element");
e->setNotClipped(true);
- e->setVisible(false); // the element is drawn manually before all others
-
- m_backgrounds.push_back(e);
m_fields.push_back(spec);
+ e->drop();
}
void GUIFormSpecMenu::parseTableOptions(parserData* data, const std::string &element)
@@ -1686,7 +1686,7 @@ void GUIFormSpecMenu::parseField(parserData* data, const std::string &element,
void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &element)
{
- MY_CHECKCLIENT("list");
+ MY_CHECKCLIENT("hypertext");
std::vector<std::string> parts;
if (!precheckElement("hypertext", element, 4, 4, parts))
@@ -1746,25 +1746,27 @@ void GUIFormSpecMenu::parseLabel(parserData* data, const std::string &element)
return;
std::vector<std::string> v_pos = split(parts[0],',');
- std::string text = parts[1];
MY_CHECKPOS("label",0);
if(!data->explicit_size)
warningstream<<"invalid use of label without a size[] element"<<std::endl;
- std::vector<std::string> lines = split(text, '\n');
-
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);
+ EnrichedString str(unescape_string(utf8_to_wide(parts[1])));
+ size_t str_pos = 0;
+
+ for (size_t i = 0; str_pos < str.size(); ++i) {
+ // Split per line
+ size_t str_nl = str.getString().find(L'\n', str_pos);
+ if (str_nl == std::wstring::npos)
+ str_nl = str.getString().size();
+ EnrichedString line = str.substr(str_pos, str_nl - str_pos);
+ str_pos += line.size() + 1;
core::rect<s32> rect;
@@ -1781,7 +1783,7 @@ void GUIFormSpecMenu::parseLabel(parserData* data, const std::string &element)
rect = core::rect<s32>(
pos.X, pos.Y,
- pos.X + font->getDimension(wlabel_plain.c_str()).Width,
+ pos.X + font->getDimension(line.c_str()).Width,
pos.Y + imgsize.Y);
} else {
@@ -1803,19 +1805,19 @@ void GUIFormSpecMenu::parseLabel(parserData* data, const std::string &element)
rect = core::rect<s32>(
pos.X, pos.Y - m_btn_height,
- pos.X + font->getDimension(wlabel_plain.c_str()).Width,
+ pos.X + font->getDimension(line.c_str()).Width,
pos.Y + m_btn_height);
}
FieldSpec spec(
"",
- wlabel_colors,
+ L"",
L"",
258 + m_fields.size(),
4
);
gui::IGUIStaticText *e = gui::StaticText::add(Environment,
- spec.flabel.c_str(), rect, false, false, data->current_parent,
+ line, rect, false, false, data->current_parent,
spec.fid);
e->setTextAlignment(gui::EGUIA_UPPERLEFT, gui::EGUIA_CENTER);
@@ -3049,7 +3051,8 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
}
// Remove children
- removeChildren();
+ removeAllChildren();
+ removeTooltip();
for (auto &table_it : m_tables)
table_it.second->drop();
@@ -3059,8 +3062,6 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
checkbox_it.second->drop();
for (auto &scrollbar_it : m_scrollbars)
scrollbar_it.second->drop();
- for (auto &background_it : m_backgrounds)
- background_it->drop();
for (auto &tooltip_rect_it : m_tooltip_rects)
tooltip_rect_it.first->drop();
for (auto &clickthrough_it : m_clickthrough_elements)
@@ -3082,7 +3083,6 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
mydata.current_parent = this;
m_inventorylists.clear();
- m_backgrounds.clear();
m_tables.clear();
m_checkboxes.clear();
m_scrollbars.clear();
@@ -3229,8 +3229,8 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
offset = v2s32(0,0);
}
- double gui_scaling = g_settings->getFloat("gui_scaling");
- double screen_dpi = RenderingEngine::getDisplayDensity() * 96;
+ const double gui_scaling = g_settings->getFloat("gui_scaling", 0.5f, 42.0f);
+ const double screen_dpi = RenderingEngine::getDisplayDensity() * 96;
double use_imgsize;
if (m_lock) {
@@ -3336,10 +3336,19 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
gui::IGUIFont *old_font = skin->getFont();
skin->setFont(m_font);
+ // Add a new element that will hold all the background elements as its children.
+ // Because it is the first added element, all backgrounds will be behind all
+ // the other elements.
+ // (We use an arbitrarily big rect. The actual size is determined later by
+ // clipping to `this`.)
+ core::rect<s32> background_parent_rect(0, 0, 100000, 100000);
+ mydata.background_parent.reset(new gui::IGUIElement(EGUIET_ELEMENT, Environment,
+ this, -1, background_parent_rect));
+
pos_offset = v2f32();
// used for formspec versions < 3
- core::list<IGUIElement *>::Iterator legacy_sort_start = Children.getLast();
+ std::list<IGUIElement *>::iterator legacy_sort_start = std::prev(Children.end()); // last element
if (enable_prepends) {
// Backup the coordinates so that prepends can use the coordinates of choice.
@@ -3354,7 +3363,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
// legacy sorting for formspec versions < 3
if (m_formspec_version >= 3)
// prepends do not need to be reordered
- legacy_sort_start = Children.getLast();
+ legacy_sort_start = std::prev(Children.end()); // last element
else if (version_backup >= 3)
// only prepends elements have to be reordered
legacySortElements(legacy_sort_start);
@@ -3435,7 +3444,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
}
}
-void GUIFormSpecMenu::legacySortElements(core::list<IGUIElement *>::Iterator from)
+void GUIFormSpecMenu::legacySortElements(std::list<IGUIElement *>::iterator from)
{
/*
Draw order for formspec_version <= 2:
@@ -3452,17 +3461,16 @@ void GUIFormSpecMenu::legacySortElements(core::list<IGUIElement *>::Iterator fro
if (from == Children.end())
from = Children.begin();
else
- from++;
+ ++from;
- core::list<IGUIElement *>::Iterator to = Children.end();
+ std::list<IGUIElement *>::iterator to = Children.end();
// 1: Copy into a sortable container
- std::vector<IGUIElement *> elements;
- for (auto it = from; it != to; ++it)
- elements.emplace_back(*it);
+ std::vector<IGUIElement *> elements(from, to);
// 2: Sort the container
std::stable_sort(elements.begin(), elements.end(),
[this] (const IGUIElement *a, const IGUIElement *b) -> bool {
+ // TODO: getSpecByID is a linear search. It should made O(1), or cached here.
const FieldSpec *spec_a = getSpecByID(a->getID());
const FieldSpec *spec_b = getSpecByID(b->getID());
return spec_a && spec_b &&
@@ -3470,10 +3478,7 @@ void GUIFormSpecMenu::legacySortElements(core::list<IGUIElement *>::Iterator fro
});
// 3: Re-assign the pointers
- for (auto e : elements) {
- *from = e;
- from++;
- }
+ reorderChildren(from, to, elements);
}
#ifdef __ANDROID__
@@ -3591,15 +3596,6 @@ void GUIFormSpecMenu::drawMenu()
}
}
- /*
- Draw backgrounds
- */
- for (gui::IGUIElement *e : m_backgrounds) {
- e->setVisible(true);
- e->draw();
- e->setVisible(false);
- }
-
// Some elements are only visible while being drawn
for (gui::IGUIElement *e : m_clickthrough_elements)
e->setVisible(true);
@@ -3607,12 +3603,11 @@ void GUIFormSpecMenu::drawMenu()
/*
This is where all the drawing happens.
*/
- core::list<IGUIElement*>::Iterator it = Children.begin();
- for (; it != Children.end(); ++it)
- if ((*it)->isNotClipped() ||
+ for (auto child : Children)
+ if (child->isNotClipped() ||
AbsoluteClippingRect.isRectCollided(
- (*it)->getAbsolutePosition()))
- (*it)->draw();
+ child->getAbsolutePosition()))
+ child->draw();
for (gui::IGUIElement *e : m_clickthrough_elements)
e->setVisible(false);
@@ -4520,7 +4515,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
if ((s.ftype == f_TabHeader) &&
(s.fid == event.GUIEvent.Caller->getID())) {
if (!s.sound.empty() && m_sound_manager)
- m_sound_manager->playSound(s.sound, false, 1.0f);
+ m_sound_manager->playSound(SimpleSoundSpec(s.sound, 1.0f));
s.send = true;
acceptInput();
s.send = false;
@@ -4565,7 +4560,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
if (s.ftype == f_Button || s.ftype == f_CheckBox) {
if (!s.sound.empty() && m_sound_manager)
- m_sound_manager->playSound(s.sound, false, 1.0f);
+ m_sound_manager->playSound(SimpleSoundSpec(s.sound, 1.0f));
s.send = true;
if (s.is_exit) {
@@ -4590,7 +4585,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
}
}
if (!s.sound.empty() && m_sound_manager)
- m_sound_manager->playSound(s.sound, false, 1.0f);
+ m_sound_manager->playSound(SimpleSoundSpec(s.sound, 1.0f));
s.send = true;
acceptInput(quit_mode_no);
@@ -4608,7 +4603,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
s.fdefault = L"";
} else if (s.ftype == f_Unknown || s.ftype == f_HyperText) {
if (!s.sound.empty() && m_sound_manager)
- m_sound_manager->playSound(s.sound, false, 1.0f);
+ m_sound_manager->playSound(SimpleSoundSpec(s.sound, 1.0f));
s.send = true;
acceptInput();
s.send = false;
diff --git a/src/gui/guiFormSpecMenu.h b/src/gui/guiFormSpecMenu.h
index 0b4d3879d..c01ff817b 100644
--- a/src/gui/guiFormSpecMenu.h
+++ b/src/gui/guiFormSpecMenu.h
@@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <unordered_set>
#include "irrlichttypes_extrabloated.h"
+#include "irr_ptr.h"
#include "inventorymanager.h"
#include "modalMenu.h"
#include "guiInventoryList.h"
@@ -211,7 +212,7 @@ public:
m_lockscreensize = basescreensize;
}
- void removeChildren();
+ void removeTooltip();
void setInitialFocus();
void setFocus(const std::string &elementname)
@@ -313,7 +314,6 @@ protected:
std::vector<GUIInventoryList *> m_inventorylists;
std::vector<ListRingSpec> m_inventory_rings;
- std::vector<gui::IGUIElement *> m_backgrounds;
std::unordered_map<std::string, bool> field_close_on_enter;
std::unordered_map<std::string, bool> m_dropdown_index_event;
std::vector<FieldSpec> m_fields;
@@ -375,6 +375,7 @@ private:
GUITable::TableOptions table_options;
GUITable::TableColumns table_columns;
gui::IGUIElement *current_parent = nullptr;
+ irr_ptr<gui::IGUIElement> background_parent;
GUIInventoryList::Options inventorylist_options;
@@ -456,6 +457,8 @@ private:
void parseSetFocus(const std::string &element);
void parseModel(parserData *data, const std::string &element);
+ bool parseMiddleRect(const std::string &value, core::rect<s32> *parsed_rect);
+
void tryClose();
void showTooltip(const std::wstring &text, const irr::video::SColor &color,
@@ -466,7 +469,7 @@ private:
* types were drawn before others.
* This function sorts the elements in the old order for backwards compatibility.
*/
- void legacySortElements(core::list<IGUIElement *>::Iterator from);
+ void legacySortElements(std::list<IGUIElement *>::iterator from);
int m_btn_height;
gui::IGUIFont *m_font = nullptr;
diff --git a/src/gui/guiKeyChangeMenu.cpp b/src/gui/guiKeyChangeMenu.cpp
index 29d5138f0..021f5f0a9 100644
--- a/src/gui/guiKeyChangeMenu.cpp
+++ b/src/gui/guiKeyChangeMenu.cpp
@@ -93,7 +93,8 @@ GUIKeyChangeMenu::GUIKeyChangeMenu(gui::IGUIEnvironment* env,
GUIKeyChangeMenu::~GUIKeyChangeMenu()
{
- removeChildren();
+ removeAllChildren();
+ key_used_text = nullptr;
for (key_setting *ks : key_settings) {
delete[] ks->button_name;
@@ -102,23 +103,10 @@ GUIKeyChangeMenu::~GUIKeyChangeMenu()
key_settings.clear();
}
-void GUIKeyChangeMenu::removeChildren()
-{
- const core::list<gui::IGUIElement*> &children = getChildren();
- core::list<gui::IGUIElement*> children_copy;
- for (gui::IGUIElement*i : children) {
- children_copy.push_back(i);
- }
-
- for (gui::IGUIElement *i : children_copy) {
- i->remove();
- }
- key_used_text = nullptr;
-}
-
void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
{
- removeChildren();
+ removeAllChildren();
+ key_used_text = nullptr;
const float s = m_gui_scale;
DesiredRect = core::rect<s32>(
@@ -136,7 +124,7 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
core::rect<s32> rect(0, 0, 600 * s, 40 * s);
rect += topleft + v2s32(25 * s, 3 * s);
//gui::IGUIStaticText *t =
- const wchar_t *text = wgettext("Keybindings. (If this menu screws up, remove stuff from minetest.conf)");
+ const wchar_t *text = wgettext("Keybindings.");
Environment->addStaticText(text,
rect, false, true, this, -1);
delete[] text;
diff --git a/src/gui/guiKeyChangeMenu.h b/src/gui/guiKeyChangeMenu.h
index 1c0f40247..84a898774 100644
--- a/src/gui/guiKeyChangeMenu.h
+++ b/src/gui/guiKeyChangeMenu.h
@@ -46,7 +46,6 @@ public:
IMenuManager *menumgr, ISimpleTextureSource *tsrc);
~GUIKeyChangeMenu();
- void removeChildren();
/*
Remove and re-add (or reposition) stuff
*/
diff --git a/src/gui/guiMainMenu.h b/src/gui/guiMainMenu.h
index 1dca8bf2d..9b8ff383c 100644
--- a/src/gui/guiMainMenu.h
+++ b/src/gui/guiMainMenu.h
@@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include "irrlichttypes_extrabloated.h"
+#include "gameparams.h"
#include <string>
#include <list>
@@ -50,5 +51,7 @@ struct MainMenuData {
// Data to be passed to the script
MainMenuDataForScript script_data;
+ ELoginRegister allow_login_or_register = ELoginRegister::Any;
+
MainMenuData() = default;
};
diff --git a/src/gui/guiPasswordChange.cpp b/src/gui/guiPasswordChange.cpp
index c983260f6..c39df176b 100644
--- a/src/gui/guiPasswordChange.cpp
+++ b/src/gui/guiPasswordChange.cpp
@@ -51,23 +51,6 @@ GUIPasswordChange::GUIPasswordChange(gui::IGUIEnvironment* env,
{
}
-GUIPasswordChange::~GUIPasswordChange()
-{
- removeChildren();
-}
-
-void GUIPasswordChange::removeChildren()
-{
- const core::list<gui::IGUIElement *> &children = getChildren();
- core::list<gui::IGUIElement *> children_copy;
- for (gui::IGUIElement *i : children) {
- children_copy.push_back(i);
- }
-
- for (gui::IGUIElement *i : children_copy) {
- i->remove();
- }
-}
void GUIPasswordChange::regenerateGui(v2u32 screensize)
{
/*
@@ -78,7 +61,7 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize)
/*
Remove stuff
*/
- removeChildren();
+ removeAllChildren();
/*
Calculate new sizes and positions
diff --git a/src/gui/guiPasswordChange.h b/src/gui/guiPasswordChange.h
index 7141100c0..452702add 100644
--- a/src/gui/guiPasswordChange.h
+++ b/src/gui/guiPasswordChange.h
@@ -31,9 +31,7 @@ public:
GUIPasswordChange(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
IMenuManager *menumgr, Client *client,
ISimpleTextureSource *tsrc);
- ~GUIPasswordChange();
- void removeChildren();
/*
Remove and re-add (or reposition) stuff
*/
diff --git a/src/gui/guiPathSelectMenu.cpp b/src/gui/guiPathSelectMenu.cpp
index 489927a11..9c63e06b5 100644
--- a/src/gui/guiPathSelectMenu.cpp
+++ b/src/gui/guiPathSelectMenu.cpp
@@ -32,13 +32,12 @@ GUIFileSelectMenu::GUIFileSelectMenu(gui::IGUIEnvironment* env,
GUIFileSelectMenu::~GUIFileSelectMenu()
{
- removeChildren();
setlocale(LC_NUMERIC, "C");
}
void GUIFileSelectMenu::regenerateGui(v2u32 screensize)
{
- removeChildren();
+ removeAllChildren();
m_fileOpenDialog = 0;
core::dimension2du size(600 * m_gui_scale, 400 * m_gui_scale);
diff --git a/src/gui/guiScrollContainer.cpp b/src/gui/guiScrollContainer.cpp
index 0fe4c41bd..2d71f3453 100644
--- a/src/gui/guiScrollContainer.cpp
+++ b/src/gui/guiScrollContainer.cpp
@@ -59,12 +59,11 @@ bool GUIScrollContainer::OnEvent(const SEvent &event)
void GUIScrollContainer::draw()
{
if (isVisible()) {
- core::list<IGUIElement *>::Iterator it = Children.begin();
- for (; it != Children.end(); ++it)
- if ((*it)->isNotClipped() ||
+ for (auto child : Children)
+ if (child->isNotClipped() ||
AbsoluteClippingRect.isRectCollided(
- (*it)->getAbsolutePosition()))
- (*it)->draw();
+ child->getAbsolutePosition()))
+ child->draw();
}
}
diff --git a/src/gui/guiTable.cpp b/src/gui/guiTable.cpp
index 79ae1aea3..3929d678b 100644
--- a/src/gui/guiTable.cpp
+++ b/src/gui/guiTable.cpp
@@ -84,7 +84,7 @@ GUITable::GUITable(gui::IGUIEnvironment *env,
#endif
core::rect<s32> relative_rect = m_scrollbar->getRelativePosition();
s32 width = (relative_rect.getWidth() / (2.0 / 3.0)) * density *
- g_settings->getFloat("gui_scaling");
+ g_settings->getFloat("gui_scaling", 0.5f, 20.0f);
m_scrollbar->setRelativePosition(core::rect<s32>(
relative_rect.LowerRightCorner.X-width,relative_rect.UpperLeftCorner.Y,
relative_rect.LowerRightCorner.X,relative_rect.LowerRightCorner.Y
diff --git a/src/gui/guiVolumeChange.cpp b/src/gui/guiVolumeChange.cpp
index 61ab758a1..0f6f43fe9 100644
--- a/src/gui/guiVolumeChange.cpp
+++ b/src/gui/guiVolumeChange.cpp
@@ -45,32 +45,12 @@ GUIVolumeChange::GUIVolumeChange(gui::IGUIEnvironment* env,
{
}
-GUIVolumeChange::~GUIVolumeChange()
-{
- removeChildren();
-}
-
-void GUIVolumeChange::removeChildren()
-{
- if (gui::IGUIElement *e = getElementFromId(ID_soundText))
- e->remove();
-
- if (gui::IGUIElement *e = getElementFromId(ID_soundExitButton))
- e->remove();
-
- if (gui::IGUIElement *e = getElementFromId(ID_soundSlider))
- e->remove();
-
- if (gui::IGUIElement *e = getElementFromId(ID_soundMuteButton))
- e->remove();
-}
-
void GUIVolumeChange::regenerateGui(v2u32 screensize)
{
/*
Remove stuff
*/
- removeChildren();
+ removeAllChildren();
/*
Calculate new sizes and positions
*/
diff --git a/src/gui/guiVolumeChange.h b/src/gui/guiVolumeChange.h
index 466e17f9d..ccdaca00b 100644
--- a/src/gui/guiVolumeChange.h
+++ b/src/gui/guiVolumeChange.h
@@ -31,9 +31,6 @@ public:
GUIVolumeChange(gui::IGUIEnvironment* env,
gui::IGUIElement* parent, s32 id,
IMenuManager *menumgr, ISimpleTextureSource *tsrc);
- ~GUIVolumeChange();
-
- void removeChildren();
/*
Remove and re-add (or reposition) stuff
*/
diff --git a/src/gui/mainmenumanager.h b/src/gui/mainmenumanager.h
index 102492255..76d357340 100644
--- a/src/gui/mainmenumanager.h
+++ b/src/gui/mainmenumanager.h
@@ -64,10 +64,6 @@ public:
// Remove all entries if there are duplicates
m_stack.remove(menu);
- /*core::list<GUIModalMenu*>::Iterator i = m_stack.getLast();
- assert(*i == menu);
- m_stack.erase(i);*/
-
if(!m_stack.empty())
m_stack.back()->setVisible(true);
}
diff --git a/src/gui/modalMenu.cpp b/src/gui/modalMenu.cpp
index 56a5d2cb9..cfc4d5c5a 100644
--- a/src/gui/modalMenu.cpp
+++ b/src/gui/modalMenu.cpp
@@ -40,7 +40,7 @@ GUIModalMenu::GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent,
m_menumgr(menumgr),
m_remap_dbl_click(remap_dbl_click)
{
- m_gui_scale = g_settings->getFloat("gui_scaling");
+ m_gui_scale = std::max(g_settings->getFloat("gui_scaling"), 0.5f);
#ifdef HAVE_TOUCHSCREENGUI
float d = RenderingEngine::getDisplayDensity();
m_gui_scale *= 1.1 - 0.3 * d + 0.2 * d * d;
@@ -108,19 +108,6 @@ void GUIModalMenu::quitMenu()
#endif
}
-void GUIModalMenu::removeChildren()
-{
- const core::list<gui::IGUIElement *> &children = getChildren();
- core::list<gui::IGUIElement *> children_copy;
- for (gui::IGUIElement *i : children) {
- children_copy.push_back(i);
- }
-
- for (gui::IGUIElement *i : children_copy) {
- i->remove();
- }
-}
-
// clang-format off
bool GUIModalMenu::DoubleClickDetection(const SEvent &event)
{
@@ -265,13 +252,6 @@ bool GUIModalMenu::preprocessEvent(const SEvent &event)
return retval;
m_jni_field_name = field_name;
- /*~ Imperative, as in "Enter/type in text".
- Don't forget the space. */
- std::string message = gettext("Enter ");
- std::string label = wide_to_utf8(getLabelByID(hovered->getID()));
- if (label.empty())
- label = "text";
- message += strgettext(label) + ":";
// single line text input
int type = 2;
diff --git a/src/gui/modalMenu.h b/src/gui/modalMenu.h
index 06e78f06b..e37c41533 100644
--- a/src/gui/modalMenu.h
+++ b/src/gui/modalMenu.h
@@ -47,7 +47,6 @@ public:
bool canTakeFocus(gui::IGUIElement *e);
void draw();
void quitMenu();
- void removeChildren();
virtual void regenerateGui(v2u32 screensize) = 0;
virtual void drawMenu() = 0;
diff --git a/src/gui/touchscreengui.cpp b/src/gui/touchscreengui.cpp
index ebe1a6325..d483c136e 100644
--- a/src/gui/touchscreengui.cpp
+++ b/src/gui/touchscreengui.cpp
@@ -843,7 +843,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
s32 dy = Y - m_pointerpos[event.TouchInput.ID].Y;
// adapt to similar behaviour as pc screen
- double d = g_settings->getFloat("mouse_sensitivity") * 3.0f;
+ const double d = g_settings->getFloat("mouse_sensitivity", 0.001f, 10.0f) * 3.0f;
m_camera_yaw_change -= dx * d;
m_camera_pitch = MYMIN(MYMAX(m_camera_pitch + (dy * d), -180), 180);
diff --git a/src/hud.cpp b/src/hud.cpp
index e4ad7940f..841c90758 100644
--- a/src/hud.cpp
+++ b/src/hud.cpp
@@ -63,5 +63,6 @@ const struct EnumString es_HudBuiltinElement[] =
{HUD_FLAG_BREATHBAR_VISIBLE, "breathbar"},
{HUD_FLAG_MINIMAP_VISIBLE, "minimap"},
{HUD_FLAG_MINIMAP_RADAR_VISIBLE, "minimap_radar"},
+ {HUD_FLAG_BASIC_DEBUG, "basic_debug"},
{0, NULL},
};
diff --git a/src/hud.h b/src/hud.h
index 769966688..173633fcc 100644
--- a/src/hud.h
+++ b/src/hud.h
@@ -47,6 +47,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define HUD_FLAG_BREATHBAR_VISIBLE (1 << 4)
#define HUD_FLAG_MINIMAP_VISIBLE (1 << 5)
#define HUD_FLAG_MINIMAP_RADAR_VISIBLE (1 << 6)
+#define HUD_FLAG_BASIC_DEBUG (1 << 7)
#define HUD_PARAM_HOTBAR_ITEMCOUNT 1
#define HUD_PARAM_HOTBAR_IMAGE 2
diff --git a/src/inventory.cpp b/src/inventory.cpp
index d14b12f9d..6d2b7fba3 100644
--- a/src/inventory.cpp
+++ b/src/inventory.cpp
@@ -503,11 +503,6 @@ void InventoryList::deSerialize(std::istream &is)
throw SerializationError(ss.str());
}
-InventoryList::InventoryList(const InventoryList &other)
-{
- *this = other;
-}
-
InventoryList & InventoryList::operator = (const InventoryList &other)
{
m_items = other.m_items;
@@ -535,21 +530,6 @@ bool InventoryList::operator == (const InventoryList &other) const
return true;
}
-const std::string &InventoryList::getName() const
-{
- return m_name;
-}
-
-u32 InventoryList::getSize() const
-{
- return m_items.size();
-}
-
-u32 InventoryList::getWidth() const
-{
- return m_width;
-}
-
u32 InventoryList::getUsedSlots() const
{
u32 num = 0;
@@ -560,18 +540,6 @@ u32 InventoryList::getUsedSlots() const
return num;
}
-const ItemStack& InventoryList::getItem(u32 i) const
-{
- assert(i < m_size); // Pre-condition
- return m_items[i];
-}
-
-ItemStack& InventoryList::getItem(u32 i)
-{
- assert(i < m_size); // Pre-condition
- return m_items[i];
-}
-
ItemStack InventoryList::changeItem(u32 i, const ItemStack &newitem)
{
if(i >= m_items.size())
@@ -960,16 +928,6 @@ InventoryList * Inventory::getList(const std::string &name)
return m_lists[i];
}
-std::vector<const InventoryList*> Inventory::getLists()
-{
- std::vector<const InventoryList*> lists;
- lists.reserve(m_lists.size());
- for (auto list : m_lists) {
- lists.push_back(list);
- }
- return lists;
-}
-
bool Inventory::deleteList(const std::string &name)
{
s32 i = getListIndex(name);
diff --git a/src/inventory.h b/src/inventory.h
index eb063d4ad..8b31de3a8 100644
--- a/src/inventory.h
+++ b/src/inventory.h
@@ -198,7 +198,7 @@ public:
void serialize(std::ostream &os, bool incremental) const;
void deSerialize(std::istream &is);
- InventoryList(const InventoryList &other);
+ InventoryList(const InventoryList &other) { *this = other; }
InventoryList & operator = (const InventoryList &other);
bool operator == (const InventoryList &other) const;
bool operator != (const InventoryList &other) const
@@ -206,15 +206,25 @@ public:
return !(*this == other);
}
- const std::string &getName() const;
- u32 getSize() const;
- u32 getWidth() const;
+ const std::string &getName() const { return m_name; }
+ u32 getSize() const { return static_cast<u32>(m_items.size()); }
+ u32 getWidth() const { return m_width; }
// Count used slots
u32 getUsedSlots() const;
// Get reference to item
- const ItemStack& getItem(u32 i) const;
- ItemStack& getItem(u32 i);
+ const ItemStack &getItem(u32 i) const
+ {
+ assert(i < m_size); // Pre-condition
+ return m_items[i];
+ }
+ ItemStack &getItem(u32 i)
+ {
+ assert(i < m_size); // Pre-condition
+ return m_items[i];
+ }
+ // Get reference to all items
+ const std::vector<ItemStack> &getItems() const { return m_items; }
// Returns old item. Parameter can be an empty item.
ItemStack changeItem(u32 i, const ItemStack &newitem);
// Delete item
@@ -271,7 +281,7 @@ public:
private:
std::vector<ItemStack> m_items;
std::string m_name;
- u32 m_size;
+ u32 m_size; // always the same as m_items.size()
u32 m_width = 0;
IItemDefManager *m_itemdef;
bool m_dirty = true;
@@ -301,7 +311,7 @@ public:
InventoryList * addList(const std::string &name, u32 size);
InventoryList * getList(const std::string &name);
const InventoryList * getList(const std::string &name) const;
- std::vector<const InventoryList*> getLists();
+ const std::vector<InventoryList *> &getLists() const { return m_lists; }
bool deleteList(const std::string &name);
// A shorthand for adding items. Returns leftover item (possibly empty).
ItemStack addItem(const std::string &listname, const ItemStack &newitem)
diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp
index a159bf786..ecdb56a97 100644
--- a/src/inventorymanager.cpp
+++ b/src/inventorymanager.cpp
@@ -172,7 +172,7 @@ void IMoveAction::onPutAndOnTake(const ItemStack &src_item, ServerActiveObject *
sa->player_inventory_OnPut(*this, src_item, player);
else
assert(false);
-
+
if (from_inv.type == InventoryLocation::DETACHED)
sa->detached_inventory_OnTake(*this, src_item, player);
else if (from_inv.type == InventoryLocation::NODEMETA)
diff --git a/src/irrlicht_changes/CGUITTFont.cpp b/src/irrlicht_changes/CGUITTFont.cpp
index e785ea837..53be27319 100644
--- a/src/irrlicht_changes/CGUITTFont.cpp
+++ b/src/irrlicht_changes/CGUITTFont.cpp
@@ -1,7 +1,7 @@
/*
CGUITTFont FreeType class for Irrlicht
Copyright (c) 2009-2010 John Norman
- Copyright (c) 2016 Nathanaël Courant
+ Copyright (c) 2016 Nathanaëlle Courant
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any
@@ -59,7 +59,7 @@ struct SGUITTFace : public virtual irr::IReferenceCounted
// Static variables.
FT_Library CGUITTFont::c_library;
-core::map<io::path, SGUITTFace*> CGUITTFont::c_faces;
+std::map<io::path, SGUITTFace*> CGUITTFont::c_faces;
bool CGUITTFont::c_libraryLoaded = false;
scene::IMesh* CGUITTFont::shared_plane_ptr_ = 0;
scene::SMesh CGUITTFont::shared_plane_;
@@ -292,9 +292,6 @@ shadow_offset(0), shadow_alpha(0), fallback(0)
Driver->grab();
setInvisibleCharacters(L" ");
-
- // Glyphs aren't reference counted, so don't try to delete them when we free the array.
- Glyphs.set_free_when_destroyed(false);
}
bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antialias, const bool transparency)
@@ -320,11 +317,11 @@ bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antia
// Grab the face.
SGUITTFace* face = 0;
- core::map<io::path, SGUITTFace*>::Node* node = c_faces.find(filename);
- if (node == 0)
+ auto node = c_faces.find(filename);
+ if (node == c_faces.end())
{
face = new SGUITTFace();
- c_faces.set(filename, face);
+ c_faces.emplace(filename, face);
if (filesystem)
{
@@ -334,7 +331,7 @@ bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antia
{
if (logger) logger->log(L"CGUITTFont", L"Failed to open the file.", irr::ELL_INFORMATION);
- c_faces.remove(filename);
+ c_faces.erase(filename);
delete face;
face = 0;
return false;
@@ -349,7 +346,7 @@ bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antia
{
if (logger) logger->log(L"CGUITTFont", L"FT_New_Memory_Face failed.", irr::ELL_INFORMATION);
- c_faces.remove(filename);
+ c_faces.erase(filename);
delete face;
face = 0;
return false;
@@ -362,7 +359,7 @@ bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antia
{
if (logger) logger->log(L"CGUITTFont", L"FT_New_Face failed.", irr::ELL_INFORMATION);
- c_faces.remove(filename);
+ c_faces.erase(filename);
delete face;
face = 0;
return false;
@@ -372,7 +369,7 @@ bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antia
else
{
// Using another instance of this face.
- face = node->getValue();
+ face = node->second;
face->grab();
}
@@ -411,21 +408,20 @@ CGUITTFont::~CGUITTFont()
{
// Delete the glyphs and glyph pages.
reset_images();
- CGUITTAssistDelete::Delete(Glyphs);
- //Glyphs.clear();
+ Glyphs.clear();
// We aren't using this face anymore.
- core::map<io::path, SGUITTFace*>::Node* n = c_faces.find(filename);
- if (n)
+ auto n = c_faces.find(filename);
+ if (n != c_faces.end())
{
- SGUITTFace* f = n->getValue();
+ SGUITTFace* f = n->second;
// Drop our face. If this was the last face, the destructor will clean up.
if (f->drop())
- c_faces.remove(filename);
+ c_faces.erase(filename);
// If there are no more faces referenced by FreeType, clean up.
- if (c_faces.size() == 0)
+ if (c_faces.empty())
{
FT_Done_FreeType(c_library);
c_libraryLoaded = false;
@@ -478,7 +474,7 @@ CGUITTGlyphPage* CGUITTFont::getLastGlyphPage() const
CGUITTGlyphPage* CGUITTFont::createGlyphPage(const u8& pixel_mode)
{
CGUITTGlyphPage* page = 0;
-
+
// Name of our page.
io::path name("TTFontGlyphPage_");
name += tt_face->family_name;
@@ -585,7 +581,7 @@ void CGUITTFont::draw(const EnrichedString &text, const core::rect<s32>& positio
core::ustring utext = text.getString();
// Set up our render map.
- core::map<u32, CGUITTGlyphPage*> Render_Map;
+ std::map<u32, CGUITTGlyphPage*> Render_Map;
// Start parsing characters.
u32 n;
@@ -640,7 +636,7 @@ void CGUITTFont::draw(const EnrichedString &text, const core::rect<s32>& positio
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);
+ Render_Map[glyph.glyph_page] = page;
}
if (n > 0)
{
@@ -673,14 +669,14 @@ void CGUITTFont::draw(const EnrichedString &text, const core::rect<s32>& positio
// Draw now.
update_glyph_pages();
- core::map<u32, CGUITTGlyphPage*>::Iterator j = Render_Map.getIterator();
- while (!j.atEnd())
+ auto it = Render_Map.begin();
+ auto ie = Render_Map.end();
+ core::array<core::vector2di> tmp_positions;
+ core::array<core::recti> tmp_source_rects;
+ while (it != ie)
{
- core::map<u32, CGUITTGlyphPage*>::Node* n = j.getNode();
- j++;
- if (n == 0) continue;
-
- CGUITTGlyphPage* page = n->getValue();
+ CGUITTGlyphPage* page = it->second;
+ ++it;
if (shadow_offset) {
for (size_t i = 0; i < page->render_positions.size(); ++i)
@@ -698,10 +694,8 @@ void CGUITTFont::draw(const EnrichedString &text, const core::rect<s32>& positio
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);
+ tmp_positions.set_data(&page->render_positions[ibegin], i - ibegin);
+ tmp_source_rects.set_data(&page->render_source_rects[ibegin], i - ibegin);
--i;
if (!use_transparency)
diff --git a/src/irrlicht_changes/CGUITTFont.h b/src/irrlicht_changes/CGUITTFont.h
index 7b04ae828..2721364f5 100644
--- a/src/irrlicht_changes/CGUITTFont.h
+++ b/src/irrlicht_changes/CGUITTFont.h
@@ -1,7 +1,7 @@
/*
CGUITTFont FreeType class for Irrlicht
Copyright (c) 2009-2010 John Norman
- Copyright (c) 2016 Nathanaël Courant
+ Copyright (c) 2016 Nathanaëlle Courant
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any
@@ -34,8 +34,10 @@
#include <irrlicht.h>
#include <ft2build.h>
#include <vector>
+#include <map>
#include <irrUString.h>
#include "util/enriched_string.h"
+#include "util/basic_macros.h"
#include FT_FREETYPE_H
namespace irr
@@ -45,23 +47,34 @@ namespace gui
struct SGUITTFace;
class CGUITTFont;
- //! Class to assist in deleting glyphs.
- class CGUITTAssistDelete
- {
- public:
- template <class T, typename TAlloc>
- static void Delete(core::array<T, TAlloc>& a)
- {
- TAlloc allocator;
- allocator.deallocate(a.pointer());
- }
- };
-
//! Structure representing a single TrueType glyph.
struct SGUITTGlyph
{
//! Constructor.
- SGUITTGlyph() : isLoaded(false), glyph_page(0), surface(0), parent(0) {}
+ SGUITTGlyph() :
+ isLoaded(false),
+ glyph_page(0),
+ source_rect(),
+ offset(),
+ advance(),
+ surface(0),
+ parent(0)
+ {}
+
+ DISABLE_CLASS_COPY(SGUITTGlyph);
+
+ //! This class would be trivially copyable except for the reference count on `surface`.
+ SGUITTGlyph(SGUITTGlyph &&other) :
+ isLoaded(other.isLoaded),
+ glyph_page(other.glyph_page),
+ source_rect(other.source_rect),
+ offset(other.offset),
+ advance(other.advance),
+ surface(other.surface),
+ parent(other.parent)
+ {
+ other.surface = 0;
+ }
//! Destructor.
~SGUITTGlyph() { unload(); }
@@ -345,7 +358,7 @@ namespace gui
private:
// Manages the FreeType library.
static FT_Library c_library;
- static core::map<io::path, SGUITTFace*> c_faces;
+ static std::map<io::path, SGUITTFace*> c_faces;
static bool c_libraryLoaded;
static scene::IMesh* shared_plane_ptr_;
static scene::SMesh shared_plane_;
diff --git a/src/irrlicht_changes/static_text.cpp b/src/irrlicht_changes/static_text.cpp
index baf0ea626..a4749bab1 100644
--- a/src/irrlicht_changes/static_text.cpp
+++ b/src/irrlicht_changes/static_text.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt
-// Copyright (C) 2016 Nathanaël Courant:
+// Copyright (C) 2016 Nathanaëlle Courant:
// Modified the functions to use EnrichedText instead of string.
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
diff --git a/src/irrlicht_changes/static_text.h b/src/irrlicht_changes/static_text.h
index 74ef62008..fc58e3e90 100644
--- a/src/irrlicht_changes/static_text.h
+++ b/src/irrlicht_changes/static_text.h
@@ -1,5 +1,5 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt
-// Copyright (C) 2016 Nathanaël Courant
+// Copyright (C) 2016 Nathanaëlle Courant
// Modified this class to work with EnrichedStrings too
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
diff --git a/src/itemdef.cpp b/src/itemdef.cpp
index d79d6b263..a34805b8e 100644
--- a/src/itemdef.cpp
+++ b/src/itemdef.cpp
@@ -154,8 +154,8 @@ void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const
os << serializeString16(node_placement_prediction);
// Version from ContentFeatures::serialize to keep in sync
- sound_place.serialize(os, CONTENTFEATURES_VERSION);
- sound_place_failed.serialize(os, CONTENTFEATURES_VERSION);
+ sound_place.serialize(os, protocol_version);
+ sound_place_failed.serialize(os, protocol_version);
writeF32(os, range);
os << serializeString16(palette_image);
@@ -168,7 +168,7 @@ void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const
os << place_param2;
}
-void ItemDefinition::deSerialize(std::istream &is)
+void ItemDefinition::deSerialize(std::istream &is, u16 protocol_version)
{
// Reset everything
reset();
@@ -205,9 +205,8 @@ void ItemDefinition::deSerialize(std::istream &is)
node_placement_prediction = deSerializeString16(is);
- // Version from ContentFeatures::serialize to keep in sync
- sound_place.deSerialize(is, CONTENTFEATURES_VERSION);
- sound_place_failed.deSerialize(is, CONTENTFEATURES_VERSION);
+ sound_place.deSerialize(is, protocol_version);
+ sound_place_failed.deSerialize(is, protocol_version);
range = readF32(is);
palette_image = deSerializeString16(is);
@@ -538,21 +537,21 @@ public:
os << serializeString16(it.second);
}
}
- void deSerialize(std::istream &is)
+ void deSerialize(std::istream &is, u16 protocol_version)
{
// Clear everything
clear();
- // Deserialize
- int version = readU8(is);
- if(version != 0)
+
+ if(readU8(is) != 0)
throw SerializationError("unsupported ItemDefManager version");
+
u16 count = readU16(is);
for(u16 i=0; i<count; i++)
{
// Deserialize a string and grab an ItemDefinition from it
std::istringstream tmp_is(deSerializeString16(is), std::ios::binary);
ItemDefinition def;
- def.deSerialize(tmp_is);
+ def.deSerialize(tmp_is, protocol_version);
// Register
registerItem(def);
}
diff --git a/src/itemdef.h b/src/itemdef.h
index 3e302840f..035717379 100644
--- a/src/itemdef.h
+++ b/src/itemdef.h
@@ -97,7 +97,7 @@ struct ItemDefinition
~ItemDefinition();
void reset();
void serialize(std::ostream &os, u16 protocol_version) const;
- void deSerialize(std::istream &is);
+ void deSerialize(std::istream &is, u16 protocol_version);
private:
void resetInitial();
};
@@ -177,7 +177,7 @@ public:
const std::string &convert_to)=0;
virtual void serialize(std::ostream &os, u16 protocol_version)=0;
- virtual void deSerialize(std::istream &is)=0;
+ virtual void deSerialize(std::istream &is, u16 protocol_version)=0;
// Do stuff asked by threads that can only be done in the main thread
virtual void processQueue(IGameDef *gamedef)=0;
diff --git a/src/lighting.h b/src/lighting.h
new file mode 100644
index 000000000..e0d9cee09
--- /dev/null
+++ b/src/lighting.h
@@ -0,0 +1,27 @@
+/*
+Minetest
+Copyright (C) 2021 x2048, Dmitry Kostenko <codeforsmile@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
+
+/** Describes ambient light settings for a player
+ */
+struct Lighting
+{
+ float shadow_intensity {0.0f};
+};
diff --git a/src/log.cpp b/src/log.cpp
index 3c61414e9..ef998f161 100644
--- a/src/log.cpp
+++ b/src/log.cpp
@@ -35,43 +35,30 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <cerrno>
#include <cstring>
-const int BUFFER_LENGTH = 256;
-
-class StringBuffer : public std::streambuf {
+class LevelTarget : public LogTarget {
public:
- StringBuffer() {
- buffer_index = 0;
- }
-
- int overflow(int c);
- virtual void flush(const std::string &buf) = 0;
- std::streamsize xsputn(const char *s, std::streamsize n);
- void push_back(char c);
-
-private:
- char buffer[BUFFER_LENGTH];
- int buffer_index;
-};
-
-
-class LogBuffer : public StringBuffer {
-public:
- LogBuffer(Logger &logger, LogLevel lev) :
- logger(logger),
- level(lev)
+ LevelTarget(Logger &logger, LogLevel level, bool raw = false) :
+ m_logger(logger),
+ m_level(level),
+ m_raw(raw)
{}
- void flush(const std::string &buffer);
-
-private:
- Logger &logger;
- LogLevel level;
-};
+ virtual bool hasOutput() override {
+ return m_logger.hasOutput(m_level);
+ }
+ virtual void log(const std::string &buf) override {
+ if (!m_raw) {
+ m_logger.log(m_level, buf);
+ } else {
+ m_logger.logRaw(m_level, buf);
+ }
+ }
-class RawLogBuffer : public StringBuffer {
-public:
- void flush(const std::string &buffer);
+private:
+ Logger &m_logger;
+ LogLevel m_level;
+ bool m_raw;
};
////
@@ -80,31 +67,33 @@ public:
Logger g_logger;
+#ifdef __ANDROID__
+AndroidLogOutput stdout_output;
+AndroidLogOutput stderr_output;
+#else
StreamLogOutput stdout_output(std::cout);
StreamLogOutput stderr_output(std::cerr);
-std::ostream null_stream(NULL);
-
-RawLogBuffer raw_buf;
-
-LogBuffer none_buf(g_logger, LL_NONE);
-LogBuffer error_buf(g_logger, LL_ERROR);
-LogBuffer warning_buf(g_logger, LL_WARNING);
-LogBuffer action_buf(g_logger, LL_ACTION);
-LogBuffer info_buf(g_logger, LL_INFO);
-LogBuffer verbose_buf(g_logger, LL_VERBOSE);
-
-// Connection
-std::ostream *dout_con_ptr = &null_stream;
-std::ostream *derr_con_ptr = &verbosestream;
-
-// Common streams
-std::ostream rawstream(&raw_buf);
-std::ostream dstream(&none_buf);
-std::ostream errorstream(&error_buf);
-std::ostream warningstream(&warning_buf);
-std::ostream actionstream(&action_buf);
-std::ostream infostream(&info_buf);
-std::ostream verbosestream(&verbose_buf);
+#endif
+
+LevelTarget none_target_raw(g_logger, LL_NONE, true);
+LevelTarget none_target(g_logger, LL_NONE);
+LevelTarget error_target(g_logger, LL_ERROR);
+LevelTarget warning_target(g_logger, LL_WARNING);
+LevelTarget action_target(g_logger, LL_ACTION);
+LevelTarget info_target(g_logger, LL_INFO);
+LevelTarget verbose_target(g_logger, LL_VERBOSE);
+LevelTarget trace_target(g_logger, LL_TRACE);
+
+thread_local LogStream dstream(none_target);
+thread_local LogStream rawstream(none_target_raw);
+thread_local LogStream errorstream(error_target);
+thread_local LogStream warningstream(warning_target);
+thread_local LogStream actionstream(action_target);
+thread_local LogStream infostream(info_target);
+thread_local LogStream verbosestream(verbose_target);
+thread_local LogStream tracestream(trace_target);
+thread_local LogStream derr_con(verbose_target);
+thread_local LogStream dout_con(trace_target);
// Android
#ifdef __ANDROID__
@@ -118,29 +107,15 @@ static unsigned int g_level_to_android[] = {
//ANDROID_LOG_INFO,
ANDROID_LOG_DEBUG, // LL_INFO
ANDROID_LOG_VERBOSE, // LL_VERBOSE
+ ANDROID_LOG_VERBOSE, // LL_TRACE
};
-class AndroidSystemLogOutput : public ICombinedLogOutput {
- public:
- AndroidSystemLogOutput()
- {
- g_logger.addOutput(this);
- }
- ~AndroidSystemLogOutput()
- {
- g_logger.removeOutput(this);
- }
- void logRaw(LogLevel lev, const std::string &line)
- {
- STATIC_ASSERT(ARRLEN(g_level_to_android) == LL_MAX,
- mismatch_between_android_and_internal_loglevels);
- __android_log_print(g_level_to_android[lev],
- PROJECT_NAME_C, "%s", line.c_str());
- }
-};
-
-AndroidSystemLogOutput g_android_log_output;
-
+void AndroidLogOutput::logRaw(LogLevel lev, const std::string &line) {
+ STATIC_ASSERT(ARRLEN(g_level_to_android) == LL_MAX,
+ mismatch_between_android_and_internal_loglevels);
+ __android_log_print(g_level_to_android[lev],
+ PROJECT_NAME_C, "%s", line.c_str());
+}
#endif
///////////////////////////////////////////////////////////////////////////////
@@ -164,6 +139,8 @@ LogLevel Logger::stringToLevel(const std::string &name)
return LL_INFO;
else if (name == "verbose")
return LL_VERBOSE;
+ else if (name == "trace")
+ return LL_TRACE;
else
return LL_MAX;
}
@@ -175,26 +152,35 @@ void Logger::addOutput(ILogOutput *out)
void Logger::addOutput(ILogOutput *out, LogLevel lev)
{
+ MutexAutoLock lock(m_mutex);
m_outputs[lev].push_back(out);
+ m_has_outputs[lev] = true;
}
void Logger::addOutputMasked(ILogOutput *out, LogLevelMask mask)
{
+ MutexAutoLock lock(m_mutex);
for (size_t i = 0; i < LL_MAX; i++) {
- if (mask & LOGLEVEL_TO_MASKLEVEL(i))
+ if (mask & LOGLEVEL_TO_MASKLEVEL(i)) {
m_outputs[i].push_back(out);
+ m_has_outputs[i] = true;
+ }
}
}
void Logger::addOutputMaxLevel(ILogOutput *out, LogLevel lev)
{
+ MutexAutoLock lock(m_mutex);
assert(lev < LL_MAX);
- for (size_t i = 0; i <= lev; i++)
+ for (size_t i = 0; i <= lev; i++) {
m_outputs[i].push_back(out);
+ m_has_outputs[i] = true;
+ }
}
LogLevelMask Logger::removeOutput(ILogOutput *out)
{
+ MutexAutoLock lock(m_mutex);
LogLevelMask ret_mask = 0;
for (size_t i = 0; i < LL_MAX; i++) {
std::vector<ILogOutput *>::iterator it;
@@ -203,6 +189,7 @@ LogLevelMask Logger::removeOutput(ILogOutput *out)
if (it != m_outputs[i].end()) {
ret_mask |= LOGLEVEL_TO_MASKLEVEL(i);
m_outputs[i].erase(it);
+ m_has_outputs[i] = !m_outputs[i].empty();
}
}
return ret_mask;
@@ -236,6 +223,7 @@ const std::string Logger::getLevelLabel(LogLevel lev)
"ACTION",
"INFO",
"VERBOSE",
+ "TRACE",
};
assert(lev < LL_MAX && lev >= 0);
STATIC_ASSERT(ARRLEN(names) == LL_MAX,
@@ -297,7 +285,6 @@ void Logger::logToOutputs(LogLevel lev, const std::string &combined,
m_outputs[lev][i]->log(lev, combined, time, thread_name, payload_text);
}
-
////
//// *LogOutput methods
////
@@ -349,6 +336,7 @@ void StreamLogOutput::logRaw(LogLevel lev, const std::string &line)
m_stream << "\033[37m";
break;
case LL_VERBOSE:
+ case LL_TRACE:
// verbose is darker than info
m_stream << "\033[2m";
break;
@@ -396,55 +384,12 @@ void LogOutputBuffer::logRaw(LogLevel lev, const std::string &line)
color = "\x1b(c@#BBB)";
break;
case LL_VERBOSE: // dark grey
+ case LL_TRACE:
color = "\x1b(c@#888)";
break;
default: break;
}
}
-
- m_buffer.push(color.append(line));
-}
-
-////
-//// *Buffer methods
-////
-
-int StringBuffer::overflow(int c)
-{
- push_back(c);
- return c;
-}
-
-
-std::streamsize StringBuffer::xsputn(const char *s, std::streamsize n)
-{
- for (int i = 0; i < n; ++i)
- push_back(s[i]);
- return n;
-}
-
-void StringBuffer::push_back(char c)
-{
- if (c == '\n' || c == '\r') {
- if (buffer_index)
- flush(std::string(buffer, buffer_index));
- buffer_index = 0;
- } else {
- buffer[buffer_index++] = c;
- if (buffer_index >= BUFFER_LENGTH) {
- flush(std::string(buffer, buffer_index));
- buffer_index = 0;
- }
- }
-}
-
-
-void LogBuffer::flush(const std::string &buffer)
-{
- logger.log(level, buffer);
-}
-
-void RawLogBuffer::flush(const std::string &buffer)
-{
- g_logger.logRaw(LL_NONE, buffer);
+ MutexAutoLock lock(m_buffer_mutex);
+ m_buffer.emplace(color.append(line));
}
diff --git a/src/log.h b/src/log.h
index 6ed6b1fb7..0a84332e7 100644
--- a/src/log.h
+++ b/src/log.h
@@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
+#include <atomic>
#include <map>
#include <queue>
#include <string>
@@ -28,6 +29,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#if !defined(_WIN32) // POSIX
#include <unistd.h>
#endif
+#include "threading/mutex_auto_lock.h"
+#include "util/basic_macros.h"
+#include "util/stream.h"
#include "irrlichttypes.h"
class ILogOutput;
@@ -39,6 +43,7 @@ enum LogLevel {
LL_ACTION, // In-game actions
LL_INFO,
LL_VERBOSE,
+ LL_TRACE,
LL_MAX,
};
@@ -67,12 +72,13 @@ public:
// Logs without a prefix
void logRaw(LogLevel lev, const std::string &text);
- void setTraceEnabled(bool enable) { m_trace_enabled = enable; }
- bool getTraceEnabled() { return m_trace_enabled; }
-
static LogLevel stringToLevel(const std::string &name);
static const std::string getLevelLabel(LogLevel lev);
+ bool hasOutput(LogLevel level) {
+ return m_has_outputs[level].load(std::memory_order_relaxed);
+ }
+
static LogColor color_mode;
private:
@@ -84,6 +90,7 @@ private:
const std::string getThreadName();
std::vector<ILogOutput *> m_outputs[LL_MAX];
+ std::atomic<bool> m_has_outputs[LL_MAX];
// Should implement atomic loads and stores (even though it's only
// written to when one thread has access currently).
@@ -91,7 +98,6 @@ private:
volatile bool m_silenced_levels[LL_MAX];
std::map<std::thread::id, std::string> m_thread_names;
mutable std::mutex m_mutex;
- bool m_trace_enabled;
};
class ILogOutput {
@@ -163,57 +169,207 @@ public:
void clear()
{
+ MutexAutoLock lock(m_buffer_mutex);
m_buffer = std::queue<std::string>();
}
bool empty() const
{
+ MutexAutoLock lock(m_buffer_mutex);
return m_buffer.empty();
}
std::string get()
{
- if (empty())
+ MutexAutoLock lock(m_buffer_mutex);
+ if (m_buffer.empty())
return "";
- std::string s = m_buffer.front();
+ std::string s = std::move(m_buffer.front());
m_buffer.pop();
return s;
}
private:
+ // g_logger serializes calls to logRaw() with a mutex, but that
+ // doesn't prevent get() / clear() from being called on top of it.
+ // This mutex prevents that.
+ mutable std::mutex m_buffer_mutex;
std::queue<std::string> m_buffer;
Logger &m_logger;
};
+#ifdef __ANDROID__
+class AndroidLogOutput : public ICombinedLogOutput {
+public:
+ void logRaw(LogLevel lev, const std::string &line);
+};
+#endif
-extern StreamLogOutput stdout_output;
-extern StreamLogOutput stderr_output;
-extern std::ostream null_stream;
+/*
+ * LogTarget
+ *
+ * This is the interface that sits between the LogStreams and the global logger.
+ * Primarily used to route streams to log levels, but could also enable other
+ * custom behavior.
+ *
+ */
+class LogTarget {
+public:
+ // Must be thread-safe. These can be called from any thread.
+ virtual bool hasOutput() = 0;
+ virtual void log(const std::string &buf) = 0;
+};
-extern std::ostream *dout_con_ptr;
-extern std::ostream *derr_con_ptr;
-extern std::ostream *derr_server_ptr;
-extern Logger g_logger;
+/*
+ * StreamProxy
+ *
+ * An ostream-like object that can proxy to a real ostream or do nothing,
+ * depending on how it is configured. See LogStream below.
+ *
+ */
+class StreamProxy {
+public:
+ StreamProxy(std::ostream *os) : m_os(os) { }
+
+ template<typename T>
+ StreamProxy& operator<<(T&& arg) {
+ if (m_os) {
+ *m_os << std::forward<T>(arg);
+ }
+ return *this;
+ }
-// Writes directly to all LL_NONE log outputs for g_logger with no prefix.
-extern std::ostream rawstream;
+ StreamProxy& operator<<(std::ostream& (*manip)(std::ostream&)) {
+ if (m_os) {
+ *m_os << manip;
+ }
+ return *this;
+ }
-extern std::ostream errorstream;
-extern std::ostream warningstream;
-extern std::ostream actionstream;
-extern std::ostream infostream;
-extern std::ostream verbosestream;
-extern std::ostream dstream;
+private:
+ std::ostream *m_os;
+};
-#define TRACEDO(x) do { \
- if (g_logger.getTraceEnabled()) { \
- x; \
- } \
-} while (0)
-#define TRACESTREAM(x) TRACEDO(verbosestream x)
+/*
+ * LogStream
+ *
+ * The public interface for log streams (infostream, verbosestream, etc).
+ *
+ * LogStream minimizes the work done when a given stream is off. (meaning
+ * it has no output targets, so it goes to /dev/null)
+ *
+ * For example, consider:
+ *
+ * verbosestream << "hello world" << 123 << std::endl;
+ *
+ * The compiler evaluates this as:
+ *
+ * (((verbosestream << "hello world") << 123) << std::endl)
+ * ^ ^
+ *
+ * If `verbosestream` is on, the innermost expression (marked by ^) will return
+ * a StreamProxy that forwards to a real ostream, that feeds into the logger.
+ * However, if `verbosestream` is off, it will return a StreamProxy that does
+ * nothing on all later operations. Specifically, CPU time won't be wasted
+ * writing "hello world" and 123 into a buffer, or formatting the log entry.
+ *
+ * It is also possible to directly check if the stream is on/off:
+ *
+ * if (verbosestream) {
+ * auto data = ComputeExpensiveDataForTheLog();
+ * verbosestream << data << endl;
+ * }
+ *
+*/
-#define dout_con (*dout_con_ptr)
-#define derr_con (*derr_con_ptr)
+class LogStream {
+public:
+ LogStream() = delete;
+ DISABLE_CLASS_COPY(LogStream);
+
+ LogStream(LogTarget &target) :
+ m_target(target),
+ m_buffer(std::bind(&LogStream::internalFlush, this, std::placeholders::_1)),
+ m_dummy_buffer(),
+ m_stream(&m_buffer),
+ m_dummy_stream(&m_dummy_buffer),
+ m_proxy(&m_stream),
+ m_dummy_proxy(nullptr) { }
+
+ template<typename T>
+ StreamProxy& operator<<(T&& arg) {
+ StreamProxy& sp = m_target.hasOutput() ? m_proxy : m_dummy_proxy;
+ sp << std::forward<T>(arg);
+ return sp;
+ }
+ StreamProxy& operator<<(std::ostream& (*manip)(std::ostream&)) {
+ StreamProxy& sp = m_target.hasOutput() ? m_proxy : m_dummy_proxy;
+ sp << manip;
+ return sp;
+ }
+
+ operator bool() {
+ return m_target.hasOutput();
+ }
+
+ void internalFlush(const std::string &buf) {
+ m_target.log(buf);
+ }
+
+ operator std::ostream&() {
+ return m_target.hasOutput() ? m_stream : m_dummy_stream;
+ }
+
+private:
+ // 10 streams per thread x (256 + overhead) ~ 3K per thread
+ static const int BUFFER_LENGTH = 256;
+ LogTarget &m_target;
+ StringStreamBuffer<BUFFER_LENGTH> m_buffer;
+ DummyStreamBuffer m_dummy_buffer;
+ std::ostream m_stream;
+ std::ostream m_dummy_stream;
+ StreamProxy m_proxy;
+ StreamProxy m_dummy_proxy;
+
+};
+
+#ifdef __ANDROID__
+extern AndroidLogOutput stdout_output;
+extern AndroidLogOutput stderr_output;
+#else
+extern StreamLogOutput stdout_output;
+extern StreamLogOutput stderr_output;
+#endif
+
+extern Logger g_logger;
+
+/*
+ * By making the streams thread_local, each thread has its own
+ * private buffer. Two or more threads can write to the same stream
+ * simultaneously (lock-free), and there won't be any interference.
+ *
+ * The finished lines are sent to a LogTarget which is a global (not thread-local)
+ * object, and from there relayed to g_logger. The final writes are serialized
+ * by the mutex in g_logger.
+*/
+
+extern thread_local LogStream dstream;
+extern thread_local LogStream rawstream; // Writes directly to all LL_NONE log outputs with no prefix.
+extern thread_local LogStream errorstream;
+extern thread_local LogStream warningstream;
+extern thread_local LogStream actionstream;
+extern thread_local LogStream infostream;
+extern thread_local LogStream verbosestream;
+extern thread_local LogStream tracestream;
+// TODO: Search/replace these with verbose/tracestream
+extern thread_local LogStream derr_con;
+extern thread_local LogStream dout_con;
+
+#define TRACESTREAM(x) do { \
+ if (tracestream) { \
+ tracestream x; \
+ } \
+} while (0)
diff --git a/src/main.cpp b/src/main.cpp
index 5ea212d8a..ebd1f740e 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes.h" // must be included before anything irrlicht, see comment in the file
#include "irrlicht.h" // createDevice
#include "irrlichttypes_extrabloated.h"
+#include "benchmark/benchmark.h"
#include "chat_interface.h"
#include "debug.h"
#include "unittest/test.h"
@@ -212,7 +213,19 @@ int main(int argc, char *argv[])
return 1;
#endif
}
+
+ // Run benchmarks
+ if (cmd_args.getFlag("run-benchmarks")) {
+#if BUILD_BENCHMARKS
+ return run_benchmarks();
+#else
+ errorstream << "Benchmark support is not enabled in this binary. "
+ << "If you want to enable it, compile project with BUILD_BENCHMARKS=1 flag."
+ << std::endl;
+ return 1;
#endif
+ }
+#endif // __ANDROID__
GameStartData game_params;
#ifdef SERVER
@@ -277,6 +290,8 @@ static void set_allowed_options(OptionList *allowed_options)
_("Set network port (UDP)"))));
allowed_options->insert(std::make_pair("run-unittests", ValueSpec(VALUETYPE_FLAG,
_("Run the unit tests and exit"))));
+ allowed_options->insert(std::make_pair("run-benchmarks", ValueSpec(VALUETYPE_FLAG,
+ _("Run the benchmarks and exit"))));
allowed_options->insert(std::make_pair("map-dir", ValueSpec(VALUETYPE_STRING,
_("Same as --world (deprecated)"))));
allowed_options->insert(std::make_pair("world", ValueSpec(VALUETYPE_STRING,
@@ -453,14 +468,6 @@ static bool setup_log_params(const Settings &cmd_args)
}
}
- // If trace is enabled, enable logging of certain things
- if (cmd_args.getFlag("trace")) {
- dstream << _("Enabling trace level debug output") << std::endl;
- g_logger.setTraceEnabled(true);
- dout_con_ptr = &verbosestream; // This is somewhat old
- socket_enable_debug_output = true; // Sockets doesn't use log.h
- }
-
// In certain cases, output info level on stderr
if (cmd_args.getFlag("info") || cmd_args.getFlag("verbose") ||
cmd_args.getFlag("trace") || cmd_args.getFlag("speedtests"))
@@ -470,6 +477,12 @@ static bool setup_log_params(const Settings &cmd_args)
if (cmd_args.getFlag("verbose") || cmd_args.getFlag("trace"))
g_logger.addOutput(&stderr_output, LL_VERBOSE);
+ if (cmd_args.getFlag("trace")) {
+ dstream << _("Enabling trace level debug output") << std::endl;
+ g_logger.addOutput(&stderr_output, LL_TRACE);
+ socket_enable_debug_output = true;
+ }
+
return true;
}
@@ -599,7 +612,7 @@ static void init_log_streams(const Settings &cmd_args)
warningstream << "Deprecated use of debug_log_level with an "
"integer value; please update your configuration." << std::endl;
static const char *lev_name[] =
- {"", "error", "action", "info", "verbose"};
+ {"", "error", "action", "info", "verbose", "trace"};
int lev_i = atoi(conf_loglev.c_str());
if (lev_i < 0 || lev_i >= (int)ARRLEN(lev_name)) {
warningstream << "Supplied invalid debug_log_level!"
diff --git a/src/map.cpp b/src/map.cpp
index a11bbb96a..a53680065 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -102,7 +102,7 @@ MapSector * Map::getSectorNoGenerateNoLock(v2s16 p)
return sector;
}
- std::map<v2s16, MapSector*>::iterator n = m_sectors.find(p);
+ auto n = m_sectors.find(p);
if (n == m_sectors.end())
return NULL;
@@ -165,24 +165,32 @@ MapNode Map::getNode(v3s16 p, bool *is_valid_position)
return node;
}
-// throws InvalidPositionException if not found
-void Map::setNode(v3s16 p, MapNode & n)
+static void set_node_in_block(MapBlock *block, v3s16 relpos, MapNode n)
{
- v3s16 blockpos = getNodeBlockPos(p);
- MapBlock *block = getBlockNoCreate(blockpos);
- v3s16 relpos = p - blockpos*MAP_BLOCKSIZE;
// Never allow placing CONTENT_IGNORE, it causes problems
if(n.getContent() == CONTENT_IGNORE){
+ const NodeDefManager *nodedef = block->getParent()->getNodeDefManager();
+ v3s16 blockpos = block->getPos();
+ v3s16 p = blockpos * MAP_BLOCKSIZE + relpos;
bool temp_bool;
- errorstream<<"Map::setNode(): Not allowing to place CONTENT_IGNORE"
+ errorstream<<"Not allowing to place CONTENT_IGNORE"
<<" while trying to replace \""
- <<m_nodedef->get(block->getNodeNoCheck(relpos, &temp_bool)).name
+ <<nodedef->get(block->getNodeNoCheck(relpos, &temp_bool)).name
<<"\" at "<<PP(p)<<" (block "<<PP(blockpos)<<")"<<std::endl;
return;
}
block->setNodeNoCheck(relpos, n);
}
+// throws InvalidPositionException if not found
+void Map::setNode(v3s16 p, MapNode & n)
+{
+ v3s16 blockpos = getNodeBlockPos(p);
+ MapBlock *block = getBlockNoCreate(blockpos);
+ v3s16 relpos = p - blockpos*MAP_BLOCKSIZE;
+ set_node_in_block(block, relpos, n);
+}
+
void Map::addNodeAndUpdate(v3s16 p, MapNode n,
std::map<v3s16, MapBlock*> &modified_blocks,
bool remove_metadata)
@@ -190,8 +198,14 @@ void Map::addNodeAndUpdate(v3s16 p, MapNode n,
// Collect old node for rollback
RollbackNode rollback_oldnode(this, p, m_gamedef);
+ v3s16 blockpos = getNodeBlockPos(p);
+ MapBlock *block = getBlockNoCreate(blockpos);
+ if (block->isDummy())
+ throw InvalidPositionException();
+ v3s16 relpos = p - blockpos * MAP_BLOCKSIZE;
+
// This is needed for updating the lighting
- MapNode oldnode = getNode(p);
+ MapNode oldnode = block->getNodeUnsafe(relpos);
// Remove node metadata
if (remove_metadata) {
@@ -199,18 +213,29 @@ void Map::addNodeAndUpdate(v3s16 p, MapNode n,
}
// Set the node on the map
- // Ignore light (because calling voxalgo::update_lighting_nodes)
- n.setLight(LIGHTBANK_DAY, 0, m_nodedef);
- n.setLight(LIGHTBANK_NIGHT, 0, m_nodedef);
- setNode(p, n);
+ const ContentFeatures &cf = m_nodedef->get(n);
+ const ContentFeatures &oldcf = m_nodedef->get(oldnode);
+ if (cf.lightingEquivalent(oldcf)) {
+ // No light update needed, just copy over the old light.
+ n.setLight(LIGHTBANK_DAY, oldnode.getLightRaw(LIGHTBANK_DAY, oldcf), cf);
+ n.setLight(LIGHTBANK_NIGHT, oldnode.getLightRaw(LIGHTBANK_NIGHT, oldcf), cf);
+ set_node_in_block(block, relpos, n);
+
+ modified_blocks[blockpos] = block;
+ } else {
+ // Ignore light (because calling voxalgo::update_lighting_nodes)
+ n.setLight(LIGHTBANK_DAY, 0, cf);
+ n.setLight(LIGHTBANK_NIGHT, 0, cf);
+ set_node_in_block(block, relpos, n);
- // Update lighting
- std::vector<std::pair<v3s16, MapNode> > oldnodes;
- oldnodes.emplace_back(p, oldnode);
- voxalgo::update_lighting_nodes(this, oldnodes, modified_blocks);
+ // Update lighting
+ std::vector<std::pair<v3s16, MapNode> > oldnodes;
+ oldnodes.emplace_back(p, oldnode);
+ voxalgo::update_lighting_nodes(this, oldnodes, modified_blocks);
- for (auto &modified_block : modified_blocks) {
- modified_block.second->expireDayNightDiff();
+ for (auto &modified_block : modified_blocks) {
+ modified_block.second->expireDayNightDiff();
+ }
}
// Report for rollback
@@ -221,22 +246,6 @@ void Map::addNodeAndUpdate(v3s16 p, MapNode n,
action.setSetNode(p, rollback_oldnode, rollback_newnode);
m_gamedef->rollback()->reportAction(action);
}
-
- /*
- Add neighboring liquid nodes and this node to transform queue.
- (it's vital for the node itself to get updated last, if it was removed.)
- */
-
- for (const v3s16 &dir : g_7dirs) {
- v3s16 p2 = p + dir;
-
- bool is_valid_position;
- MapNode n2 = getNode(p2, &is_valid_position);
- if(is_valid_position &&
- (m_nodedef->get(n2).isLiquid() ||
- n2.getContent() == CONTENT_AIR))
- m_transforming_liquid.push_back(p2);
- }
}
void Map::removeNodeAndUpdate(v3s16 p,
@@ -314,10 +323,10 @@ struct TimeOrderedMapBlock {
/*
Updates usage timers
*/
-void Map::timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks,
+void Map::timerUpdate(float dtime, float unload_timeout, s32 max_loaded_blocks,
std::vector<v3s16> *unloaded_blocks)
{
- bool save_before_unloading = (mapType() == MAPTYPE_SERVER);
+ bool save_before_unloading = maySaveBlocks();
// Profile modified reasons
Profiler modprofiler;
@@ -327,10 +336,11 @@ void Map::timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks,
u32 saved_blocks_count = 0;
u32 block_count_all = 0;
+ const auto start_time = porting::getTimeUs();
beginSave();
// If there is no practical limit, we spare creation of mapblock_queue
- if (max_loaded_blocks == U32_MAX) {
+ if (max_loaded_blocks < 0) {
for (auto &sector_it : m_sectors) {
MapSector *sector = sector_it.second;
@@ -368,6 +378,7 @@ void Map::timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks,
}
}
+ // Delete sector if we emptied it
if (all_blocks_deleted) {
sector_deletion_queue.push_back(sector_it.first);
}
@@ -386,8 +397,9 @@ void Map::timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks,
}
}
block_count_all = mapblock_queue.size();
+
// Delete old blocks, and blocks over the limit from the memory
- while (!mapblock_queue.empty() && (mapblock_queue.size() > max_loaded_blocks
+ while (!mapblock_queue.empty() && ((s32)mapblock_queue.size() > max_loaded_blocks
|| mapblock_queue.top().block->getUsageTimer() > unload_timeout)) {
TimeOrderedMapBlock b = mapblock_queue.top();
mapblock_queue.pop();
@@ -416,6 +428,7 @@ void Map::timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks,
deleted_blocks_count++;
block_count_all--;
}
+
// Delete empty sectors
for (auto &sector_it : m_sectors) {
if (sector_it.second->empty()) {
@@ -423,7 +436,11 @@ void Map::timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks,
}
}
}
+
endSave();
+ const auto end_time = porting::getTimeUs();
+
+ reportMetrics(end_time - start_time, saved_blocks_count, block_count_all);
// Finally delete the empty sectors
deleteSectors(sector_deletion_queue);
@@ -502,11 +519,11 @@ struct NodeNeighbor {
{ }
};
-void Map::transforming_liquid_add(v3s16 p) {
+void ServerMap::transforming_liquid_add(v3s16 p) {
m_transforming_liquid.push_back(p);
}
-void Map::transformLiquids(std::map<v3s16, MapBlock*> &modified_blocks,
+void ServerMap::transformLiquids(std::map<v3s16, MapBlock*> &modified_blocks,
ServerEnvironment *env)
{
u32 loopcount = 0;
@@ -1209,7 +1226,12 @@ ServerMap::ServerMap(const std::string &savedir, IGameDef *gamedef,
m_savedir = savedir;
m_map_saving_enabled = false;
- m_save_time_counter = mb->addCounter("minetest_core_map_save_time", "Map save time (in nanoseconds)");
+ m_save_time_counter = mb->addCounter(
+ "minetest_map_save_time", "Time spent saving blocks (in microseconds)");
+ m_save_count_counter = mb->addCounter(
+ "minetest_map_saved_blocks", "Number of blocks saved");
+ m_loaded_blocks_gauge = mb->addGauge(
+ "minetest_map_loaded_blocks", "Number of loaded blocks");
m_map_compression_level = rangelim(g_settings->getS16("map_compression_level_disk"), -1, 9);
@@ -1540,6 +1562,29 @@ bool ServerMap::isBlockInQueue(v3s16 pos)
return m_emerge && m_emerge->isBlockInQueue(pos);
}
+void ServerMap::addNodeAndUpdate(v3s16 p, MapNode n,
+ std::map<v3s16, MapBlock*> &modified_blocks,
+ bool remove_metadata)
+{
+ Map::addNodeAndUpdate(p, n, modified_blocks, remove_metadata);
+
+ /*
+ Add neighboring liquid nodes and this node to transform queue.
+ (it's vital for the node itself to get updated last, if it was removed.)
+ */
+
+ for (const v3s16 &dir : g_7dirs) {
+ v3s16 p2 = p + dir;
+
+ bool is_valid_position;
+ MapNode n2 = getNode(p2, &is_valid_position);
+ if(is_valid_position &&
+ (m_nodedef->get(n2).isLiquid() ||
+ n2.getContent() == CONTENT_AIR))
+ m_transforming_liquid.push_back(p2);
+ }
+}
+
// 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)
@@ -1562,6 +1607,13 @@ void ServerMap::updateVManip(v3s16 pos)
vm->m_is_dirty = true;
}
+void ServerMap::reportMetrics(u64 save_time_us, u32 saved_blocks, u32 all_blocks)
+{
+ m_loaded_blocks_gauge->set(all_blocks);
+ m_save_time_counter->increment(save_time_us);
+ m_save_count_counter->increment(saved_blocks);
+}
+
void ServerMap::save(ModifiedState save_level)
{
if (!m_map_saving_enabled) {
@@ -1569,7 +1621,7 @@ void ServerMap::save(ModifiedState save_level)
return;
}
- u64 start_time = porting::getTimeNs();
+ const auto start_time = porting::getTimeUs();
if(save_level == MOD_STATE_CLEAN)
infostream<<"ServerMap: Saving whole map, this can take time."
@@ -1630,8 +1682,8 @@ void ServerMap::save(ModifiedState save_level)
modprofiler.print(infostream);
}
- auto end_time = porting::getTimeNs();
- m_save_time_counter->increment(end_time - start_time);
+ const auto end_time = porting::getTimeUs();
+ reportMetrics(end_time - start_time, block_count, block_count_all);
}
void ServerMap::listAllLoadableBlocks(std::vector<v3s16> &dst)
@@ -1864,6 +1916,7 @@ MMVManip::MMVManip(Map *map):
VoxelManipulator(),
m_map(map)
{
+ assert(map);
}
void MMVManip::initialEmerge(v3s16 blockpos_min, v3s16 blockpos_max,
@@ -1871,6 +1924,8 @@ void MMVManip::initialEmerge(v3s16 blockpos_min, v3s16 blockpos_max,
{
TimeTaker timer1("initialEmerge", &emerge_time);
+ assert(m_map);
+
// Units of these are MapBlocks
v3s16 p_min = blockpos_min;
v3s16 p_max = blockpos_max;
@@ -1954,6 +2009,7 @@ void MMVManip::blitBackAll(std::map<v3s16, MapBlock*> *modified_blocks,
{
if(m_area.getExtent() == v3s16(0,0,0))
return;
+ assert(m_map);
/*
Copy data of all blocks
@@ -1974,4 +2030,33 @@ void MMVManip::blitBackAll(std::map<v3s16, MapBlock*> *modified_blocks,
}
}
+MMVManip *MMVManip::clone() const
+{
+ MMVManip *ret = new MMVManip();
+
+ const s32 size = m_area.getVolume();
+ ret->m_area = m_area;
+ if (m_data) {
+ ret->m_data = new MapNode[size];
+ memcpy(ret->m_data, m_data, size * sizeof(MapNode));
+ }
+ if (m_flags) {
+ ret->m_flags = new u8[size];
+ memcpy(ret->m_flags, m_flags, size * sizeof(u8));
+ }
+
+ ret->m_is_dirty = m_is_dirty;
+ // Even if the copy is disconnected from a map object keep the information
+ // needed to write it back to one
+ ret->m_loaded_blocks = m_loaded_blocks;
+
+ return ret;
+}
+
+void MMVManip::reparent(Map *map)
+{
+ assert(map && !m_map);
+ m_map = map;
+}
+
//END
diff --git a/src/map.h b/src/map.h
index fe580b20f..6bc2aaaee 100644
--- a/src/map.h
+++ b/src/map.h
@@ -54,10 +54,6 @@ struct BlockMakeData;
MapEditEvent
*/
-#define MAPTYPE_BASE 0
-#define MAPTYPE_SERVER 1
-#define MAPTYPE_CLIENT 2
-
enum MapEditEventType{
// Node added (changed from air or something else to something)
MEET_ADDNODE,
@@ -127,11 +123,6 @@ public:
virtual ~Map();
DISABLE_CLASS_COPY(Map);
- virtual s32 mapType() const
- {
- return MAPTYPE_BASE;
- }
-
/*
Drop (client) or delete (server) the map.
*/
@@ -180,7 +171,7 @@ public:
/*
These handle lighting but not faces.
*/
- void addNodeAndUpdate(v3s16 p, MapNode n,
+ virtual void addNodeAndUpdate(v3s16 p, MapNode n,
std::map<v3s16, MapBlock*> &modified_blocks,
bool remove_metadata = true);
void removeNodeAndUpdate(v3s16 p,
@@ -200,6 +191,11 @@ public:
virtual void save(ModifiedState save_level) { FATAL_ERROR("FIXME"); }
+ /*
+ Return true unless the map definitely cannot save blocks.
+ */
+ virtual bool maySaveBlocks() { return true; }
+
// Server implements these.
// Client leaves them as no-op.
virtual bool saveBlock(MapBlock *block) { return false; }
@@ -207,14 +203,14 @@ public:
/*
Updates usage timers and unloads unused blocks and sectors.
- Saves modified blocks before unloading on MAPTYPE_SERVER.
+ Saves modified blocks before unloading if possible.
*/
- void timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks,
+ void timerUpdate(float dtime, float unload_timeout, s32 max_loaded_blocks,
std::vector<v3s16> *unloaded_blocks=NULL);
/*
Unloads all blocks with a zero refCount().
- Saves modified blocks before unloading on MAPTYPE_SERVER.
+ Saves modified blocks before unloading if possible.
*/
void unloadUnreferencedBlocks(std::vector<v3s16> *unloaded_blocks=NULL);
@@ -226,9 +222,6 @@ public:
// For debug printing. Prints "Map: ", "ServerMap: " or "ClientMap: "
virtual void PrintInfo(std::ostream &out);
- void transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks,
- ServerEnvironment *env);
-
/*
Node metadata
These are basically coordinate wrappers to MapBlock
@@ -267,39 +260,29 @@ public:
Variables
*/
- void transforming_liquid_add(v3s16 p);
-
bool isBlockOccluded(MapBlock *block, v3s16 cam_pos_nodes);
protected:
- friend class LuaVoxelManip;
-
IGameDef *m_gamedef;
std::set<MapEventReceiver*> m_event_receivers;
- std::map<v2s16, MapSector*> m_sectors;
+ std::unordered_map<v2s16, MapSector*> m_sectors;
// Be sure to set this to NULL when the cached sector is deleted
MapSector *m_sector_cache = nullptr;
v2s16 m_sector_cache_p;
- // Queued transforming water nodes
- UniqueQueue<v3s16> m_transforming_liquid;
-
// This stores the properties of the nodes on the map.
const NodeDefManager *m_nodedef;
+ // Can be implemented by child class
+ virtual void reportMetrics(u64 save_time_us, u32 saved_blocks, u32 all_blocks) {}
+
bool determineAdditionalOcclusionCheck(const v3s16 &pos_camera,
const core::aabbox3d<s16> &block_bounds, v3s16 &check);
bool isOccluded(const v3s16 &pos_camera, const v3s16 &pos_target,
float step, float stepfac, float start_offset, float end_offset,
u32 needed_count);
-
-private:
- f32 m_transforming_liquid_loop_count_multiplier = 1.0f;
- u32 m_unprocessed_count = 0;
- u64 m_inc_trending_up_start_time = 0; // milliseconds
- bool m_queue_size_timer_started = false;
};
/*
@@ -317,11 +300,6 @@ public:
ServerMap(const std::string &savedir, IGameDef *gamedef, EmergeManager *emerge, MetricsBackend *mb);
~ServerMap();
- s32 mapType() const
- {
- return MAPTYPE_SERVER;
- }
-
/*
Get a sector from somewhere.
- Check memory
@@ -352,7 +330,7 @@ public:
- Create blank filled with CONTENT_IGNORE
*/
- MapBlock *emergeBlock(v3s16 p, bool create_blank=true);
+ MapBlock *emergeBlock(v3s16 p, bool create_blank=true) override;
/*
Try to get a block.
@@ -364,33 +342,37 @@ public:
bool isBlockInQueue(v3s16 pos);
+ void addNodeAndUpdate(v3s16 p, MapNode n,
+ std::map<v3s16, MapBlock*> &modified_blocks,
+ bool remove_metadata) override;
+
/*
Database functions
*/
static MapDatabase *createDatabase(const std::string &name, const std::string &savedir, Settings &conf);
// Call these before and after saving of blocks
- void beginSave();
- void endSave();
+ void beginSave() override;
+ void endSave() override;
- void save(ModifiedState save_level);
+ void save(ModifiedState save_level) override;
void listAllLoadableBlocks(std::vector<v3s16> &dst);
void listAllLoadedBlocks(std::vector<v3s16> &dst);
MapgenParams *getMapgenParams();
- bool saveBlock(MapBlock *block);
+ bool saveBlock(MapBlock *block) override;
static bool saveBlock(MapBlock *block, MapDatabase *db, int compression_level = -1);
MapBlock* loadBlock(v3s16 p);
// Database version
void loadBlock(std::string *blob, v3s16 p3d, MapSector *sector, bool save_after_load=false);
- bool deleteBlock(v3s16 blockpos);
+ bool deleteBlock(v3s16 blockpos) override;
void updateVManip(v3s16 pos);
// For debug printing
- virtual void PrintInfo(std::ostream &out);
+ void PrintInfo(std::ostream &out) override;
bool isSavingEnabled(){ return m_map_saving_enabled; }
@@ -406,9 +388,20 @@ public:
bool repairBlockLight(v3s16 blockpos,
std::map<v3s16, MapBlock *> *modified_blocks);
+ void transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks,
+ ServerEnvironment *env);
+
+ void transforming_liquid_add(v3s16 p);
+
MapSettingsManager settings_mgr;
+protected:
+
+ void reportMetrics(u64 save_time_us, u32 saved_blocks, u32 all_blocks) override;
+
private:
+ friend class LuaVoxelManip;
+
// Emerge manager
EmergeManager *m_emerge;
@@ -419,6 +412,13 @@ private:
std::set<v3s16> m_chunks_in_progress;
+ // Queued transforming water nodes
+ UniqueQueue<v3s16> m_transforming_liquid;
+ f32 m_transforming_liquid_loop_count_multiplier = 1.0f;
+ u32 m_unprocessed_count = 0;
+ u64 m_inc_trending_up_start_time = 0; // milliseconds
+ bool m_queue_size_timer_started = false;
+
/*
Metadata is re-written on disk only if this is true.
This is reset to false when written on disk.
@@ -427,7 +427,10 @@ private:
MapDatabase *dbase = nullptr;
MapDatabase *dbase_ro = nullptr;
+ // Map metrics
+ MetricGaugePtr m_loaded_blocks_gauge;
MetricCounterPtr m_save_time_counter;
+ MetricCounterPtr m_save_count_counter;
};
@@ -453,10 +456,25 @@ public:
void blitBackAll(std::map<v3s16, MapBlock*> * modified_blocks,
bool overwrite_generated = true);
+ /*
+ Creates a copy of this VManip including contents, the copy will not be
+ associated with a Map.
+ */
+ MMVManip *clone() const;
+
+ // Reassociates a copied VManip to a map
+ void reparent(Map *map);
+
+ // Is it impossible to call initialEmerge / blitBackAll?
+ inline bool isOrphan() const { return !m_map; }
+
bool m_is_dirty = false;
protected:
- Map *m_map;
+ MMVManip() {};
+
+ // may be null
+ Map *m_map = nullptr;
/*
key = blockpos
value = flags describing the block
diff --git a/src/mapblock.cpp b/src/mapblock.cpp
index e3a6caa19..2bbc0ebbf 100644
--- a/src/mapblock.cpp
+++ b/src/mapblock.cpp
@@ -221,33 +221,36 @@ void MapBlock::expireDayNightDiff()
/*
Serialization
*/
+
// List relevant id-name pairs for ids in the block using nodedef
-// Renumbers the content IDs (starting at 0 and incrementing
-// use static memory requires about 65535 * sizeof(int) ram in order to be
-// sure we can handle all content ids. But it's absolutely worth it as it's
-// a speedup of 4 for one of the major time consuming functions on storing
-// mapblocks.
-static content_t getBlockNodeIdMapping_mapping[USHRT_MAX + 1];
+// Renumbers the content IDs (starting at 0 and incrementing)
static void getBlockNodeIdMapping(NameIdMapping *nimap, MapNode *nodes,
const NodeDefManager *nodedef)
{
- memset(getBlockNodeIdMapping_mapping, 0xFF, (USHRT_MAX + 1) * sizeof(content_t));
-
- std::set<content_t> unknown_contents;
+ // The static memory requires about 65535 * sizeof(int) RAM in order to be
+ // sure we can handle all content ids. But it's absolutely worth it as it's
+ // a speedup of 4 for one of the major time consuming functions on storing
+ // mapblocks.
+ thread_local std::unique_ptr<content_t[]> mapping;
+ static_assert(sizeof(content_t) == 2, "content_t must be 16-bit");
+ if (!mapping)
+ mapping = std::make_unique<content_t[]>(USHRT_MAX + 1);
+
+ memset(mapping.get(), 0xFF, (USHRT_MAX + 1) * sizeof(content_t));
+
+ std::unordered_set<content_t> unknown_contents;
content_t id_counter = 0;
for (u32 i = 0; i < MapBlock::nodecount; i++) {
content_t global_id = nodes[i].getContent();
content_t id = CONTENT_IGNORE;
// Try to find an existing mapping
- if (getBlockNodeIdMapping_mapping[global_id] != 0xFFFF) {
- id = getBlockNodeIdMapping_mapping[global_id];
- }
- else
- {
+ if (mapping[global_id] != 0xFFFF) {
+ id = mapping[global_id];
+ } else {
// We have to assign a new mapping
id = id_counter++;
- getBlockNodeIdMapping_mapping[global_id] = id;
+ mapping[global_id] = id;
const ContentFeatures &f = nodedef->get(global_id);
const std::string &name = f.name;
@@ -265,6 +268,7 @@ static void getBlockNodeIdMapping(NameIdMapping *nimap, MapNode *nodes,
<< "Name for node id " << unknown_content << " not known" << std::endl;
}
}
+
// Correct ids in the block to match nodedef based on names.
// Unknown ones are added to nodedef.
// Will not update itself to match id-name pairs in nodedef.
diff --git a/src/mapgen/dungeongen.cpp b/src/mapgen/dungeongen.cpp
index acdb1a0f0..1d439abeb 100644
--- a/src/mapgen/dungeongen.cpp
+++ b/src/mapgen/dungeongen.cpp
@@ -71,7 +71,7 @@ DungeonGen::DungeonGen(const NodeDefManager *ndef,
dp.num_dungeons = 1;
dp.notifytype = GENNOTIFY_DUNGEON;
- dp.np_alt_wall =
+ dp.np_alt_wall =
NoiseParams(-0.4, 1.0, v3f(40.0, 40.0, 40.0), 32474, 6, 1.1, 2.0);
}
}
diff --git a/src/mapgen/mapgen.cpp b/src/mapgen/mapgen.cpp
index d767bd264..99db50426 100644
--- a/src/mapgen/mapgen.cpp
+++ b/src/mapgen/mapgen.cpp
@@ -238,7 +238,8 @@ u32 Mapgen::getBlockSeed(v3s16 p, s32 seed)
u32 Mapgen::getBlockSeed2(v3s16 p, s32 seed)
{
- u32 n = 1619 * p.X + 31337 * p.Y + 52591 * p.Z + 1013 * seed;
+ // Multiply by unsigned number to avoid signed overflow (UB)
+ u32 n = 1619U * p.X + 31337U * p.Y + 52591U * p.Z + 1013U * seed;
n = (n >> 13) ^ n;
return (n * (n * n * 60493 + 19990303) + 1376312589);
}
@@ -452,9 +453,8 @@ void Mapgen::lightSpread(VoxelArea &a, std::queue<std::pair<v3s16, u8>> &queue,
!ndef->get(n).light_propagates)
return;
- // Since this recursive function only terminates when there is no light from
- // either bank left, we need to take the max of both banks into account for
- // the case where spreading has stopped for one light bank but not the other.
+ // MYMAX still needed here because we only exit early if both banks have
+ // nothing to propagate anymore.
light = MYMAX(light_day, n.param1 & 0x0F) |
MYMAX(light_night, n.param1 & 0xF0);
@@ -469,12 +469,9 @@ void Mapgen::calcLighting(v3s16 nmin, v3s16 nmax, v3s16 full_nmin, v3s16 full_nm
bool propagate_shadow)
{
ScopeProfiler sp(g_profiler, "EmergeThread: update lighting", SPT_AVG);
- //TimeTaker t("updateLighting");
propagateSunlight(nmin, nmax, propagate_shadow);
spreadLight(full_nmin, full_nmax);
-
- //printf("updateLighting: %dms\n", t.stop());
}
@@ -1041,6 +1038,8 @@ void MapgenParams::readParams(const Settings *settings)
settings->getS16NoEx("chunksize", chunksize);
settings->getFlagStrNoEx("mg_flags", flags, flagdesc_mapgen);
+ chunksize = rangelim(chunksize, 1, 10);
+
delete bparams;
bparams = BiomeManager::createBiomeParams(BIOMEGEN_ORIGINAL);
if (bparams) {
diff --git a/src/mapgen/mapgen.h b/src/mapgen/mapgen.h
index 61db4f3b9..ef5de6029 100644
--- a/src/mapgen/mapgen.h
+++ b/src/mapgen/mapgen.h
@@ -190,12 +190,38 @@ public:
void updateLiquid(UniqueQueue<v3s16> *trans_liquid, v3s16 nmin, v3s16 nmax);
+ /**
+ * Set light in entire area to fixed value.
+ * @param light Light value (contains both banks)
+ * @param nmin Area to operate on
+ * @param nmax ^
+ */
void setLighting(u8 light, v3s16 nmin, v3s16 nmax);
- void lightSpread(VoxelArea &a, std::queue<std::pair<v3s16, u8>> &queue,
- const v3s16 &p, u8 light);
+ /**
+ * Run all lighting calculations.
+ * @param nmin Area to spread sunlight in
+ * @param nmax ^
+ * @param full_nmin Area to recalculate light in
+ * @param full_nmax ^
+ * @param propagate_shadow see propagateSunlight()
+ */
void calcLighting(v3s16 nmin, v3s16 nmax, v3s16 full_nmin, v3s16 full_nmax,
bool propagate_shadow = true);
+ /**
+ * Spread sunlight from the area above downwards.
+ * Note that affected nodes have their night bank cleared so you want to
+ * run a light spread afterwards.
+ * @param nmin Area to operate on
+ * @param nmax ^
+ * @param propagate_shadow Ignore obstructions above and spread sun anyway
+ */
void propagateSunlight(v3s16 nmin, v3s16 nmax, bool propagate_shadow);
+ /**
+ * Spread light in the given area.
+ * Artificial light is taken from nodedef, sunlight must already be set.
+ * @param nmin Area to operate on
+ * @param nmax ^
+ */
void spreadLight(const v3s16 &nmin, const v3s16 &nmax);
virtual void makeChunk(BlockMakeData *data) {}
@@ -218,6 +244,18 @@ public:
static void setDefaultSettings(Settings *settings);
private:
+ /**
+ * Spread light to the node at the given position, add to queue if changed.
+ * The given light value is diminished once.
+ * @param a VoxelArea being operated on
+ * @param queue Queue for later lightSpread() calls
+ * @param p Node position
+ * @param light Light value (contains both banks)
+ *
+ */
+ void lightSpread(VoxelArea &a, std::queue<std::pair<v3s16, u8>> &queue,
+ const v3s16 &p, u8 light);
+
// isLiquidHorizontallyFlowable() is a helper function for updateLiquid()
// that checks whether there are floodable nodes without liquid beneath
// the node at index vi.
diff --git a/src/mapgen/mapgen_flat.cpp b/src/mapgen/mapgen_flat.cpp
index 342455029..6b249ea1f 100644
--- a/src/mapgen/mapgen_flat.cpp
+++ b/src/mapgen/mapgen_flat.cpp
@@ -177,7 +177,7 @@ void MapgenFlatParams::setDefaultSettings(Settings *settings)
int MapgenFlat::getSpawnLevelAtPoint(v2s16 p)
{
s16 stone_level = ground_level;
- float n_terrain =
+ float n_terrain =
((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS)) ?
NoisePerlin2D(&noise_terrain->np, p.X, p.Y, seed) :
0.0f;
diff --git a/src/mapgen/mapgen_fractal.cpp b/src/mapgen/mapgen_fractal.cpp
index fabb1b2b1..c9071cecf 100644
--- a/src/mapgen/mapgen_fractal.cpp
+++ b/src/mapgen/mapgen_fractal.cpp
@@ -131,6 +131,7 @@ void MapgenFractalParams::readParams(const Settings *settings)
settings->getNoiseParams("mgfractal_np_cave1", np_cave1);
settings->getNoiseParams("mgfractal_np_cave2", np_cave2);
settings->getNoiseParams("mgfractal_np_dungeons", np_dungeons);
+ iterations = std::max<u16>(iterations, 1);
}
diff --git a/src/mapgen/mg_biome.cpp b/src/mapgen/mg_biome.cpp
index f08cc190f..8b4c96cd5 100644
--- a/src/mapgen/mg_biome.cpp
+++ b/src/mapgen/mg_biome.cpp
@@ -273,7 +273,7 @@ Biome *BiomeGenOriginal::calcBiomeFromNoise(float heat, float humidity, v3s16 po
pos.Y - biome_closest_blend->max_pos.Y)
return biome_closest_blend;
- return (biome_closest) ? biome_closest : (Biome *)m_bmgr->getRaw(BIOME_NONE);
+ return (biome_closest) ? biome_closest : (Biome *)m_bmgr->getRaw(BIOME_NONE);
}
diff --git a/src/mapgen/mg_ore.cpp b/src/mapgen/mg_ore.cpp
index 5814f433a..4f0c35548 100644
--- a/src/mapgen/mg_ore.cpp
+++ b/src/mapgen/mg_ore.cpp
@@ -498,8 +498,8 @@ void OreVein::generate(MMVManip *vm, int mapseed, u32 blockseed,
}
// randval ranges from -1..1
- /*
- Note: can generate values slightly larger than 1
+ /*
+ Note: can generate values slightly larger than 1
but this can't be changed as mapgen must be deterministic accross versions.
*/
float randval = (float)pr.next() / float(pr.RANDOM_RANGE / 2) - 1.f;
diff --git a/src/mapnode.cpp b/src/mapnode.cpp
index 73bd620fb..42f020e71 100644
--- a/src/mapnode.cpp
+++ b/src/mapnode.cpp
@@ -266,10 +266,12 @@ void transformNodeBox(const MapNode &n, const NodeBox &nodebox,
std::vector<aabb3f> &boxes = *p_boxes;
if (nodebox.type == NODEBOX_FIXED || nodebox.type == NODEBOX_LEVELED) {
- const std::vector<aabb3f> &fixed = nodebox.fixed;
+ const auto &fixed = nodebox.fixed;
int facedir = n.getFaceDir(nodemgr, true);
u8 axisdir = facedir>>2;
facedir&=0x03;
+
+ boxes.reserve(boxes.size() + fixed.size());
for (aabb3f box : fixed) {
if (nodebox.type == NODEBOX_LEVELED)
box.MaxEdge.Y = (-0.5f + n.getLevel(nodemgr) / 64.0f) * BS;
@@ -437,41 +439,43 @@ void transformNodeBox(const MapNode &n, const NodeBox &nodebox,
{
size_t boxes_size = boxes.size();
boxes_size += nodebox.fixed.size();
+ const auto &c = nodebox.getConnected();
+
if (neighbors & 1)
- boxes_size += nodebox.connect_top.size();
+ boxes_size += c.connect_top.size();
else
- boxes_size += nodebox.disconnected_top.size();
+ boxes_size += c.disconnected_top.size();
if (neighbors & 2)
- boxes_size += nodebox.connect_bottom.size();
+ boxes_size += c.connect_bottom.size();
else
- boxes_size += nodebox.disconnected_bottom.size();
+ boxes_size += c.disconnected_bottom.size();
if (neighbors & 4)
- boxes_size += nodebox.connect_front.size();
+ boxes_size += c.connect_front.size();
else
- boxes_size += nodebox.disconnected_front.size();
+ boxes_size += c.disconnected_front.size();
if (neighbors & 8)
- boxes_size += nodebox.connect_left.size();
+ boxes_size += c.connect_left.size();
else
- boxes_size += nodebox.disconnected_left.size();
+ boxes_size += c.disconnected_left.size();
if (neighbors & 16)
- boxes_size += nodebox.connect_back.size();
+ boxes_size += c.connect_back.size();
else
- boxes_size += nodebox.disconnected_back.size();
+ boxes_size += c.disconnected_back.size();
if (neighbors & 32)
- boxes_size += nodebox.connect_right.size();
+ boxes_size += c.connect_right.size();
else
- boxes_size += nodebox.disconnected_right.size();
+ boxes_size += c.disconnected_right.size();
if (neighbors == 0)
- boxes_size += nodebox.disconnected.size();
+ boxes_size += c.disconnected.size();
if (neighbors < 4)
- boxes_size += nodebox.disconnected_sides.size();
+ boxes_size += c.disconnected_sides.size();
boxes.reserve(boxes_size);
@@ -484,47 +488,47 @@ void transformNodeBox(const MapNode &n, const NodeBox &nodebox,
BOXESPUSHBACK(nodebox.fixed);
if (neighbors & 1) {
- BOXESPUSHBACK(nodebox.connect_top);
+ BOXESPUSHBACK(c.connect_top);
} else {
- BOXESPUSHBACK(nodebox.disconnected_top);
+ BOXESPUSHBACK(c.disconnected_top);
}
if (neighbors & 2) {
- BOXESPUSHBACK(nodebox.connect_bottom);
+ BOXESPUSHBACK(c.connect_bottom);
} else {
- BOXESPUSHBACK(nodebox.disconnected_bottom);
+ BOXESPUSHBACK(c.disconnected_bottom);
}
if (neighbors & 4) {
- BOXESPUSHBACK(nodebox.connect_front);
+ BOXESPUSHBACK(c.connect_front);
} else {
- BOXESPUSHBACK(nodebox.disconnected_front);
+ BOXESPUSHBACK(c.disconnected_front);
}
if (neighbors & 8) {
- BOXESPUSHBACK(nodebox.connect_left);
+ BOXESPUSHBACK(c.connect_left);
} else {
- BOXESPUSHBACK(nodebox.disconnected_left);
+ BOXESPUSHBACK(c.disconnected_left);
}
if (neighbors & 16) {
- BOXESPUSHBACK(nodebox.connect_back);
+ BOXESPUSHBACK(c.connect_back);
} else {
- BOXESPUSHBACK(nodebox.disconnected_back);
+ BOXESPUSHBACK(c.disconnected_back);
}
if (neighbors & 32) {
- BOXESPUSHBACK(nodebox.connect_right);
+ BOXESPUSHBACK(c.connect_right);
} else {
- BOXESPUSHBACK(nodebox.disconnected_right);
+ BOXESPUSHBACK(c.disconnected_right);
}
if (neighbors == 0) {
- BOXESPUSHBACK(nodebox.disconnected);
+ BOXESPUSHBACK(c.disconnected);
}
if (neighbors < 4) {
- BOXESPUSHBACK(nodebox.disconnected_sides);
+ BOXESPUSHBACK(c.disconnected_sides);
}
}
diff --git a/src/modchannels.cpp b/src/modchannels.cpp
index 301dcb092..9626e8e0c 100644
--- a/src/modchannels.cpp
+++ b/src/modchannels.cpp
@@ -88,8 +88,7 @@ bool ModChannelMgr::canWriteOnChannel(const std::string &channel) const
void ModChannelMgr::registerChannel(const std::string &channel)
{
- m_registered_channels[channel] =
- std::unique_ptr<ModChannel>(new ModChannel(channel));
+ m_registered_channels[channel] = std::make_unique<ModChannel>(channel);
}
bool ModChannelMgr::setChannelState(const std::string &channel, ModChannelState state)
diff --git a/src/network/address.cpp b/src/network/address.cpp
index 90e561802..cf2e6208d 100644
--- a/src/network/address.cpp
+++ b/src/network/address.cpp
@@ -230,14 +230,14 @@ void Address::setPort(u16 port)
m_port = port;
}
-void Address::print(std::ostream *s) const
+void Address::print(std::ostream& s) const
{
if (m_addr_family == AF_INET6)
- *s << "[" << serializeString() << "]:" << m_port;
+ s << "[" << serializeString() << "]:" << m_port;
else if (m_addr_family == AF_INET)
- *s << serializeString() << ":" << m_port;
+ s << serializeString() << ":" << m_port;
else
- *s << "(undefined)";
+ s << "(undefined)";
}
bool Address::isLocalhost() const
diff --git a/src/network/address.h b/src/network/address.h
index c2f5f2eef..692bf82c5 100644
--- a/src/network/address.h
+++ b/src/network/address.h
@@ -59,7 +59,7 @@ public:
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;
+ void print(std::ostream &s) const;
std::string serializeString() const;
bool isLocalhost() const;
diff --git a/src/network/clientopcodes.cpp b/src/network/clientopcodes.cpp
index a98a5e7d1..6a78b4652 100644
--- a/src/network/clientopcodes.cpp
+++ b/src/network/clientopcodes.cpp
@@ -123,6 +123,7 @@ const ToClientCommandHandler toClientCommandTable[TOCLIENT_NUM_MSG_TYPES] =
{ "TOCLIENT_SRP_BYTES_S_B", TOCLIENT_STATE_NOT_CONNECTED, &Client::handleCommand_SrpBytesSandB }, // 0x60
{ "TOCLIENT_FORMSPEC_PREPEND", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_FormspecPrepend }, // 0x61,
{ "TOCLIENT_MINIMAP_MODES", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_MinimapModes }, // 0x62,
+ { "TOCLIENT_SET_LIGHTING", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_SetLighting }, // 0x63,
};
const static ServerCommandFactory null_command_factory = { "TOSERVER_NULL", 0, false };
diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp
index 48ad60ac6..25c1d2690 100644
--- a/src/network/clientpackethandler.cpp
+++ b/src/network/clientpackethandler.cpp
@@ -101,11 +101,20 @@ void Client::handleCommand_Hello(NetworkPacket* pkt)
// Authenticate using that method, or abort if there wasn't any method found
if (chosen_auth_mechanism != AUTH_MECHANISM_NONE) {
- if (chosen_auth_mechanism == AUTH_MECHANISM_FIRST_SRP &&
- !m_simple_singleplayer_mode &&
- !getServerAddress().isLocalhost() &&
- g_settings->getBool("enable_register_confirmation")) {
- promptConfirmRegistration(chosen_auth_mechanism);
+ bool is_register = chosen_auth_mechanism == AUTH_MECHANISM_FIRST_SRP;
+ ELoginRegister mode = is_register ? ELoginRegister::Register : ELoginRegister::Login;
+ if (m_allow_login_or_register != ELoginRegister::Any &&
+ m_allow_login_or_register != mode) {
+ m_chosen_auth_mech = AUTH_MECHANISM_NONE;
+ m_access_denied = true;
+ if (m_allow_login_or_register == ELoginRegister::Login) {
+ m_access_denied_reason =
+ gettext("Name is not registered. To create an account on this server, click 'Register'");
+ } else {
+ m_access_denied_reason =
+ gettext("Name is taken. Please choose another name");
+ }
+ m_con->Disconnect();
} else {
startAuth(chosen_auth_mechanism);
}
@@ -183,7 +192,7 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt)
m_access_denied_reason = "Unknown";
if (pkt->getCommand() != TOCLIENT_ACCESS_DENIED) {
- // 13/03/15 Legacy code from 0.4.12 and lesser but is still used
+ // Legacy code from 0.4.12 and older but is still used
// in some places of the server code
if (pkt->getSize() >= 2) {
std::wstring wide_reason;
@@ -196,14 +205,14 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt)
if (pkt->getSize() < 1)
return;
- u8 denyCode = SERVER_ACCESSDENIED_UNEXPECTED_DATA;
+ u8 denyCode;
*pkt >> denyCode;
+
if (denyCode == SERVER_ACCESSDENIED_SHUTDOWN ||
denyCode == SERVER_ACCESSDENIED_CRASH) {
*pkt >> m_access_denied_reason;
- if (m_access_denied_reason.empty()) {
+ if (m_access_denied_reason.empty())
m_access_denied_reason = accessDeniedStrings[denyCode];
- }
u8 reconnect;
*pkt >> reconnect;
m_access_denied_reconnect = reconnect & 1;
@@ -220,9 +229,8 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt)
// Until then (which may be never), this is outside
// of the defined protocol.
*pkt >> m_access_denied_reason;
- if (m_access_denied_reason.empty()) {
+ if (m_access_denied_reason.empty())
m_access_denied_reason = "Unknown";
- }
}
}
@@ -562,6 +570,10 @@ void Client::handleCommand_HP(NetworkPacket *pkt)
u16 hp;
*pkt >> hp;
+ bool damage_effect = true;
+ try {
+ *pkt >> damage_effect;
+ } catch (PacketError &e) {};
player->hp = hp;
@@ -573,6 +585,7 @@ void Client::handleCommand_HP(NetworkPacket *pkt)
ClientEvent *event = new ClientEvent();
event->type = CE_PLAYER_DAMAGE;
event->player_damage.amount = oldhp - hp;
+ event->player_damage.effect = damage_effect;
m_client_event_queue.push(event);
}
}
@@ -765,7 +778,7 @@ void Client::handleCommand_NodeDef(NetworkPacket* pkt)
decompressZlib(tmp_is, tmp_os);
// Deserialize node definitions
- m_nodedef->deSerialize(tmp_os);
+ m_nodedef->deSerialize(tmp_os, m_proto_ver);
m_nodedef_received = true;
}
@@ -784,7 +797,7 @@ void Client::handleCommand_ItemDef(NetworkPacket* pkt)
decompressZlib(tmp_is, tmp_os);
// Deserialize node definitions
- m_itemdef->deSerialize(tmp_os);
+ m_itemdef->deSerialize(tmp_os, m_proto_ver);
m_itemdef_received = true;
}
@@ -805,44 +818,38 @@ void Client::handleCommand_PlaySound(NetworkPacket* pkt)
*/
s32 server_id;
- std::string name;
- float gain;
- u8 type; // 0=local, 1=positional, 2=object
+ SimpleSoundSpec spec;
+ SoundLocation type; // 0=local, 1=positional, 2=object
v3f pos;
u16 object_id;
- bool loop;
- float fade = 0.0f;
- float pitch = 1.0f;
bool ephemeral = false;
- *pkt >> server_id >> name >> gain >> type >> pos >> object_id >> loop;
+ *pkt >> server_id >> spec.name >> spec.gain >> (u8 &)type >> pos >> object_id >> spec.loop;
try {
- *pkt >> fade;
- *pkt >> pitch;
+ *pkt >> spec.fade;
+ *pkt >> spec.pitch;
*pkt >> ephemeral;
} catch (PacketError &e) {};
// Start playing
int client_id = -1;
switch(type) {
- case 0: // local
- client_id = m_sound->playSound(name, loop, gain, fade, pitch);
- break;
- case 1: // positional
- client_id = m_sound->playSoundAt(name, loop, gain, pos, pitch);
- break;
- case 2:
- { // object
+ case SoundLocation::Local:
+ client_id = m_sound->playSound(spec);
+ break;
+ case SoundLocation::Position:
+ client_id = m_sound->playSoundAt(spec, pos);
+ break;
+ case SoundLocation::Object:
+ {
ClientActiveObject *cao = m_env.getActiveObject(object_id);
if (cao)
pos = cao->getPosition();
- client_id = m_sound->playSoundAt(name, loop, gain, pos, pitch);
+ client_id = m_sound->playSoundAt(spec, pos);
break;
}
- default:
- break;
}
if (client_id != -1) {
@@ -987,18 +994,18 @@ void Client::handleCommand_AddParticleSpawner(NetworkPacket* pkt)
p.amount = readU16(is);
p.time = readF32(is);
- p.minpos = readV3F32(is);
- p.maxpos = readV3F32(is);
- p.minvel = readV3F32(is);
- p.maxvel = readV3F32(is);
- p.minacc = readV3F32(is);
- p.maxacc = readV3F32(is);
- p.minexptime = readF32(is);
- p.maxexptime = readF32(is);
- p.minsize = readF32(is);
- p.maxsize = readF32(is);
+
+ // older protocols do not support tweening, and send only
+ // static ranges, so we can't just use the normal serialization
+ // functions for the older values.
+ p.pos.start.legacyDeSerialize(is);
+ p.vel.start.legacyDeSerialize(is);
+ p.acc.start.legacyDeSerialize(is);
+ p.exptime.start.legacyDeSerialize(is);
+ p.size.start.legacyDeSerialize(is);
+
p.collisiondetection = readU8(is);
- p.texture = deSerializeString32(is);
+ p.texture.string = deSerializeString32(is);
server_id = readU32(is);
@@ -1011,6 +1018,8 @@ void Client::handleCommand_AddParticleSpawner(NetworkPacket* pkt)
p.glow = readU8(is);
p.object_collision = readU8(is);
+ bool legacy_format = true;
+
// This is kinda awful
do {
u16 tmp_param0 = readU16(is);
@@ -1019,7 +1028,70 @@ void Client::handleCommand_AddParticleSpawner(NetworkPacket* pkt)
p.node.param0 = tmp_param0;
p.node.param2 = readU8(is);
p.node_tile = readU8(is);
- } while (0);
+
+ // v >= 5.6.0
+ f32 tmp_sbias = readF32(is);
+ if (is.eof())
+ break;
+
+ // initial bias must be stored separately in the stream to preserve
+ // backwards compatibility with older clients, which do not support
+ // a bias field in their range "format"
+ p.pos.start.bias = tmp_sbias;
+ p.vel.start.bias = readF32(is);
+ p.acc.start.bias = readF32(is);
+ p.exptime.start.bias = readF32(is);
+ p.size.start.bias = readF32(is);
+
+ p.pos.end.deSerialize(is);
+ p.vel.end.deSerialize(is);
+ p.acc.end.deSerialize(is);
+ p.exptime.end.deSerialize(is);
+ p.size.end.deSerialize(is);
+
+ // properties for legacy texture field
+ p.texture.deSerialize(is, m_proto_ver, true);
+
+ p.drag.deSerialize(is);
+ p.jitter.deSerialize(is);
+ p.bounce.deSerialize(is);
+ ParticleParamTypes::deSerializeParameterValue(is, p.attractor_kind);
+ using ParticleParamTypes::AttractorKind;
+ if (p.attractor_kind != AttractorKind::none) {
+ p.attract.deSerialize(is);
+ p.attractor_origin.deSerialize(is);
+ p.attractor_attachment = readU16(is);
+ /* we only check the first bit, in order to allow this value
+ * to be turned into a bit flag field later if needed */
+ p.attractor_kill = !!(readU8(is) & 1);
+ if (p.attractor_kind != AttractorKind::point) {
+ p.attractor_direction.deSerialize(is);
+ p.attractor_direction_attachment = readU16(is);
+ }
+ }
+ p.radius.deSerialize(is);
+
+ u16 texpoolsz = readU16(is);
+ p.texpool.reserve(texpoolsz);
+ for (u16 i = 0; i < texpoolsz; ++i) {
+ ServerParticleTexture newtex;
+ newtex.deSerialize(is, m_proto_ver);
+ p.texpool.push_back(newtex);
+ }
+
+ legacy_format = false;
+ } while(0);
+
+ if (legacy_format) {
+ // there's no tweening data to be had, so we need to set the
+ // legacy params to constant values, otherwise everything old
+ // will tween to zero
+ p.pos.end = p.pos.start;
+ p.vel.end = p.vel.start;
+ p.acc.end = p.acc.start;
+ p.exptime.end = p.exptime.start;
+ p.size.end = p.size.start;
+ }
auto event = new ClientEvent();
event->type = CE_ADD_PARTICLESPAWNER;
@@ -1331,10 +1403,13 @@ void Client::handleCommand_HudSetMoon(NetworkPacket *pkt)
void Client::handleCommand_HudSetStars(NetworkPacket *pkt)
{
- StarParams stars;
+ StarParams stars = SkyboxDefaults::getStarDefaults();
*pkt >> stars.visible >> stars.count
>> stars.starcolor >> stars.scale;
+ try {
+ *pkt >> stars.day_opacity;
+ } catch (PacketError &e) {};
ClientEvent *event = new ClientEvent();
event->type = CE_SET_STARS;
@@ -1682,3 +1757,11 @@ void Client::handleCommand_MinimapModes(NetworkPacket *pkt)
if (m_minimap)
m_minimap->setModeIndex(mode);
}
+
+void Client::handleCommand_SetLighting(NetworkPacket *pkt)
+{
+ Lighting& lighting = m_env.getLocalPlayer()->getLighting();
+
+ if (pkt->getRemainingBytes() >= 4)
+ *pkt >> lighting.shadow_intensity;
+}
diff --git a/src/network/connection.cpp b/src/network/connection.cpp
index 2d3cf6e88..6fb676f25 100644
--- a/src/network/connection.cpp
+++ b/src/network/connection.cpp
@@ -41,25 +41,14 @@ namespace con
/* defines used for debugging and profiling */
/******************************************************************************/
#ifdef NDEBUG
- #define LOG(a) a
#define PROFILE(a)
#else
- #if 0
- /* this mutex is used to achieve log message consistency */
- std::mutex log_message_mutex;
- #define LOG(a) \
- { \
- MutexAutoLock loglock(log_message_mutex); \
- a; \
- }
- #else
- // Prevent deadlocks until a solution is found after 5.2.0 (TODO)
- #define LOG(a) a
- #endif
-
#define PROFILE(a) a
#endif
+// TODO: Clean this up.
+#define LOG(a) a
+
#define PING_TIMEOUT 5.0
u16 BufferedPacket::getSeqnum() const
diff --git a/src/network/connection.h b/src/network/connection.h
index 1afb4ae84..b5ae24882 100644
--- a/src/network/connection.h
+++ b/src/network/connection.h
@@ -194,7 +194,7 @@ struct BufferedPacket {
u16 getSeqnum() const;
- inline const size_t size() const { return m_data.size(); }
+ inline 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
@@ -752,8 +752,8 @@ protected:
void putEvent(ConnectionEventPtr e);
void TriggerSend();
-
- bool ConnectedToServer()
+
+ bool ConnectedToServer()
{
return getPeerNoEx(PEER_ID_SERVER) != nullptr;
}
diff --git a/src/network/connectionthreads.cpp b/src/network/connectionthreads.cpp
index dca065ae1..90936b43d 100644
--- a/src/network/connectionthreads.cpp
+++ b/src/network/connectionthreads.cpp
@@ -32,22 +32,18 @@ namespace con
/* defines used for debugging and profiling */
/******************************************************************************/
#ifdef NDEBUG
-#define LOG(a) a
#define PROFILE(a)
#undef DEBUG_CONNECTION_KBPS
#else
/* this mutex is used to achieve log message consistency */
-std::mutex log_conthread_mutex;
-#define LOG(a) \
- { \
- MutexAutoLock loglock(log_conthread_mutex); \
- a; \
- }
#define PROFILE(a) a
//#define DEBUG_CONNECTION_KBPS
#undef DEBUG_CONNECTION_KBPS
#endif
+// TODO: Clean this up.
+#define LOG(a) a
+
#define WINDOW_SIZE 5
static session_t readPeerId(const u8 *packetdata)
diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h
index a5ff53216..3ab839f8d 100644
--- a/src/network/networkprotocol.h
+++ b/src/network/networkprotocol.h
@@ -207,9 +207,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Minimap modes
PROTOCOL VERSION 40:
TOCLIENT_MEDIA_PUSH changed, TOSERVER_HAVE_MEDIA added
+ Added new particlespawner parameters
+ [scheduled bump for 5.6.0]
*/
-#define LATEST_PROTOCOL_VERSION 40
+#define LATEST_PROTOCOL_VERSION 41
#define LATEST_PROTOCOL_VERSION_STRING TOSTRING(LATEST_PROTOCOL_VERSION)
// Server's supported network protocol range
@@ -228,8 +230,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define PASSWORD_SIZE 28 // Maximum password length. Allows for
// base64-encoded SHA-1 (27+\0).
-// See also: Formspec Version History in doc/lua_api.txt
-#define FORMSPEC_API_VERSION 5
+// See also formspec [Version History] in doc/lua_api.txt
+#define FORMSPEC_API_VERSION 6
#define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-"
@@ -511,11 +513,12 @@ enum ToClientCommand
TOCLIENT_SPAWN_PARTICLE = 0x46,
/*
- v3f1000 pos
- v3f1000 velocity
- v3f1000 acceleration
- f1000 expirationtime
- f1000 size
+ -- struct range<T> { T min, T max, f32 bias };
+ v3f pos
+ v3f velocity
+ v3f acceleration
+ f32 expirationtime
+ f32 size
u8 bool collisiondetection
u32 len
u8[len] texture
@@ -524,22 +527,26 @@ enum ToClientCommand
TileAnimation animation
u8 glow
u8 object_collision
+ v3f drag
+ range<v3f> bounce
*/
TOCLIENT_ADD_PARTICLESPAWNER = 0x47,
/*
+ -- struct range<T> { T min, T max, f32 bias };
+ -- struct tween<T> { T start, T end };
u16 amount
- f1000 spawntime
- v3f1000 minpos
- v3f1000 maxpos
- v3f1000 minvel
- v3f1000 maxvel
- v3f1000 minacc
- v3f1000 maxacc
- f1000 minexptime
- f1000 maxexptime
- f1000 minsize
- f1000 maxsize
+ f32 spawntime
+ v3f minpos
+ v3f maxpos
+ v3f minvel
+ v3f maxvel
+ v3f minacc
+ v3f maxacc
+ f32 minexptime
+ f32 maxexptime
+ f32 minsize
+ f32 maxsize
u8 bool collisiondetection
u32 len
u8[len] texture
@@ -549,6 +556,63 @@ enum ToClientCommand
TileAnimation animation
u8 glow
u8 object_collision
+
+ f32 pos_start_bias
+ f32 vel_start_bias
+ f32 acc_start_bias
+ f32 exptime_start_bias
+ f32 size_start_bias
+
+ range<v3f> pos_end
+ -- i.e v3f pos_end_min
+ -- v3f pos_end_max
+ -- f32 pos_end_bias
+ range<v3f> vel_end
+ range<v3f> acc_end
+
+ tween<range<v3f>> drag
+ -- i.e. v3f drag_start_min
+ -- v3f drag_start_max
+ -- f32 drag_start_bias
+ -- v3f drag_end_min
+ -- v3f drag_end_max
+ -- f32 drag_end_bias
+ tween<range<v3f>> jitter
+ tween<range<f32>> bounce
+
+ u8 attraction_kind
+ none = 0
+ point = 1
+ line = 2
+ plane = 3
+
+ if attraction_kind > none {
+ tween<range<f32>> attract_strength
+ tween<v3f> attractor_origin
+ u16 attractor_origin_attachment_object_id
+ u8 spawner_flags
+ bit 1: attractor_kill (particles dies on contact)
+ if attraction_mode > point {
+ tween<v3f> attractor_angle
+ u16 attractor_origin_attachment_object_id
+ }
+ }
+
+ tween<range<v3f>> radius
+ tween<range<v3f>> drag
+
+ u16 texpool_sz
+ texpool_sz.times {
+ u8 flags
+ -- bit 0: animated
+ -- other bits free & ignored as of proto v40
+ tween<f32> alpha
+ tween<v2f> scale
+ if flags.animated {
+ TileAnimation animation
+ }
+ }
+
*/
TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY = 0x48, // Obsolete
@@ -735,6 +799,7 @@ enum ToClientCommand
u32 count
u8[4] starcolor (ARGB)
f32 scale
+ f32 day_opacity
*/
TOCLIENT_SRP_BYTES_S_B = 0x60,
@@ -762,7 +827,12 @@ enum ToClientCommand
std::string extra
*/
- TOCLIENT_NUM_MSG_TYPES = 0x63,
+ TOCLIENT_SET_LIGHTING = 0x63,
+ /*
+ f32 shadow_intensity
+ */
+
+ TOCLIENT_NUM_MSG_TYPES = 0x64,
};
enum ToServerCommand
@@ -1001,7 +1071,7 @@ enum AuthMechanism
AUTH_MECHANISM_FIRST_SRP = 1 << 2,
};
-enum AccessDeniedCode {
+enum AccessDeniedCode : u8 {
SERVER_ACCESSDENIED_WRONG_PASSWORD,
SERVER_ACCESSDENIED_UNEXPECTED_DATA,
SERVER_ACCESSDENIED_SINGLEPLAYER,
@@ -1024,18 +1094,18 @@ enum NetProtoCompressionMode {
const static std::string accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = {
"Invalid password",
- "Your client sent something the server didn't expect. Try reconnecting or updating your client",
+ "Your client sent something the server didn't expect. Try reconnecting or updating your client.",
"The server is running in simple singleplayer mode. You cannot connect.",
- "Your client's version is not supported.\nPlease contact server administrator.",
- "Player name contains disallowed characters.",
- "Player name not allowed.",
- "Too many users.",
+ "Your client's version is not supported.\nPlease contact the server administrator.",
+ "Player name contains disallowed characters",
+ "Player name not allowed",
+ "Too many users",
"Empty passwords are disallowed. Set a password and try again.",
"Another client is connected with this name. If your client closed unexpectedly, try again in a minute.",
- "Server authentication failed. This is likely a server error.",
+ "Internal server error",
"",
- "Server shutting down.",
- "This server has experienced an internal error. You will now be disconnected."
+ "Server shutting down",
+ "The server has experienced an internal error. You will now be disconnected."
};
enum PlayerListModifer : u8
diff --git a/src/network/serveropcodes.cpp b/src/network/serveropcodes.cpp
index 44b65e8da..12665e7f1 100644
--- a/src/network/serveropcodes.cpp
+++ b/src/network/serveropcodes.cpp
@@ -176,7 +176,7 @@ const ClientCommandFactory clientCommandFactoryTable[TOCLIENT_NUM_MSG_TYPES] =
{ "TOCLIENT_ACTIVE_OBJECT_MESSAGES", 0, true }, // 0x32 (may be sent as unrel over channel 1 too)
{ "TOCLIENT_HP", 0, true }, // 0x33
{ "TOCLIENT_MOVE_PLAYER", 0, true }, // 0x34
- { "TOCLIENT_ACCESS_DENIED_LEGACY", 0, true }, // 0x35
+ null_command_factory, // 0x35
{ "TOCLIENT_FOV", 0, true }, // 0x36
{ "TOCLIENT_DEATHSCREEN", 0, true }, // 0x37
{ "TOCLIENT_MEDIA", 2, true }, // 0x38
diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp
index 6f60b8172..a5ee81a9c 100644
--- a/src/network/serverpackethandler.cpp
+++ b/src/network/serverpackethandler.cpp
@@ -108,8 +108,10 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
// Use the highest version supported by both
u8 depl_serial_v = std::min(client_max, our_max);
// If it's lower than the lowest supported, give up.
+#if SER_FMT_VER_LOWEST_READ > 0
if (depl_serial_v < SER_FMT_VER_LOWEST_READ)
depl_serial_v = SER_FMT_VER_INVALID;
+#endif
if (depl_serial_v == SER_FMT_VER_INVALID) {
actionstream << "Server: A mismatched client tried to connect from " <<
@@ -227,7 +229,7 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
Compose auth methods for answer
*/
std::string encpwd; // encrypted Password field for the user
- bool has_auth = m_script->getAuth(playername, &encpwd, NULL);
+ bool has_auth = m_script->getAuth(playername, &encpwd, nullptr);
u32 auth_mechs = 0;
client->chosen_mech = AUTH_MECHANISM_NONE;
@@ -444,7 +446,7 @@ void Server::handleCommand_GotBlocks(NetworkPacket* pkt)
("GOTBLOCKS length is too short");
}
- m_clients.lock();
+ ClientInterface::AutoLock lock(m_clients);
RemoteClient *client = m_clients.lockedGetClientNoEx(pkt->getPeerId());
for (u16 i = 0; i < count; i++) {
@@ -452,7 +454,6 @@ void Server::handleCommand_GotBlocks(NetworkPacket* pkt)
*pkt >> p;
client->GotBlock(p);
}
- m_clients.unlock();
}
void Server::process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao,
@@ -1462,11 +1463,9 @@ void Server::handleCommand_FirstSrp(NetworkPacket* pkt)
session_t peer_id = pkt->getPeerId();
RemoteClient *client = getClient(peer_id, CS_Invalid);
ClientState cstate = client->getState();
+ const std::string playername = client->getName();
- std::string playername = client->getName();
-
- std::string salt;
- std::string verification_key;
+ std::string salt, verification_key;
std::string addr_s = getPeerAddress(peer_id).serializeString();
u8 is_empty;
@@ -1552,8 +1551,6 @@ void Server::handleCommand_SrpBytesA(NetworkPacket* pkt)
RemoteClient *client = getClient(peer_id, CS_Invalid);
ClientState cstate = client->getState();
- bool wantSudo = (cstate == CS_Active);
-
if (!((cstate == CS_HelloSent) || (cstate == CS_Active))) {
actionstream << "Server: got SRP _A packet in wrong state " << cstate <<
" from " << getPeerAddress(peer_id).serializeString() <<
@@ -1561,6 +1558,8 @@ void Server::handleCommand_SrpBytesA(NetworkPacket* pkt)
return;
}
+ const bool wantSudo = (cstate == CS_Active);
+
if (client->chosen_mech != AUTH_MECHANISM_NONE) {
actionstream << "Server: got SRP _A packet, while auth is already "
"going on with mech " << client->chosen_mech << " from " <<
@@ -1607,8 +1606,7 @@ void Server::handleCommand_SrpBytesA(NetworkPacket* pkt)
client->chosen_mech = chosen;
- std::string salt;
- std::string verifier;
+ std::string salt, verifier;
if (based_on == 0) {
@@ -1658,10 +1656,10 @@ void Server::handleCommand_SrpBytesM(NetworkPacket* pkt)
session_t peer_id = pkt->getPeerId();
RemoteClient *client = getClient(peer_id, CS_Invalid);
ClientState cstate = client->getState();
- std::string addr_s = getPeerAddress(pkt->getPeerId()).serializeString();
- std::string playername = client->getName();
+ const std::string addr_s = client->getAddress().serializeString();
+ const std::string playername = client->getName();
- bool wantSudo = (cstate == CS_Active);
+ const bool wantSudo = (cstate == CS_Active);
verbosestream << "Server: Received TOSERVER_SRP_BYTES_M." << std::endl;
@@ -1721,8 +1719,7 @@ void Server::handleCommand_SrpBytesM(NetworkPacket* pkt)
if (client->create_player_on_auth_success) {
m_script->createAuth(playername, client->enc_pwd);
- std::string checkpwd; // not used, but needed for passing something
- if (!m_script->getAuth(playername, &checkpwd, NULL)) {
+ if (!m_script->getAuth(playername, nullptr, nullptr)) {
errorstream << "Server: " << playername <<
" cannot be authenticated (auth handler does not work?)" <<
std::endl;
diff --git a/src/network/socket.cpp b/src/network/socket.cpp
index 0bb7ea234..df15c89ba 100644
--- a/src/network/socket.cpp
+++ b/src/network/socket.cpp
@@ -198,7 +198,7 @@ void UDPSocket::Send(const Address &destination, const void *data, int size)
if (socket_enable_debug_output) {
// Print packet destination and size
dstream << (int)m_handle << " -> ";
- destination.print(&dstream);
+ destination.print(dstream);
dstream << ", size=" << size;
// Print packet contents
@@ -231,7 +231,7 @@ void UDPSocket::Send(const Address &destination, const void *data, int size)
int sent;
if (m_addr_family == AF_INET6) {
- struct sockaddr_in6 address = {0};
+ struct sockaddr_in6 address = {};
address.sin6_family = AF_INET6;
address.sin6_addr = destination.getAddress6();
address.sin6_port = htons(destination.getPort());
@@ -239,7 +239,7 @@ void UDPSocket::Send(const Address &destination, const void *data, int size)
sent = sendto(m_handle, (const char *)data, size, 0,
(struct sockaddr *)&address, sizeof(struct sockaddr_in6));
} else {
- struct sockaddr_in address = {0};
+ struct sockaddr_in address = {};
address.sin_family = AF_INET;
address.sin_addr = destination.getAddress();
address.sin_port = htons(destination.getPort());
@@ -295,7 +295,7 @@ int UDPSocket::Receive(Address &sender, void *data, int size)
if (socket_enable_debug_output) {
// Print packet sender and size
dstream << (int)m_handle << " <- ";
- sender.print(&dstream);
+ sender.print(dstream);
dstream << ", size=" << received;
// Print packet contents
diff --git a/src/nodedef.cpp b/src/nodedef.cpp
index c3fa5a35c..4022ac835 100644
--- a/src/nodedef.cpp
+++ b/src/nodedef.cpp
@@ -56,27 +56,12 @@ void NodeBox::reset()
wall_bottom = aabb3f(-BS/2, -BS/2, -BS/2, BS/2, -BS/2+BS/16., BS/2);
wall_side = aabb3f(-BS/2, -BS/2, -BS/2, -BS/2+BS/16., BS/2, BS/2);
// no default for other parts
- connect_top.clear();
- connect_bottom.clear();
- connect_front.clear();
- connect_left.clear();
- connect_back.clear();
- connect_right.clear();
- disconnected_top.clear();
- disconnected_bottom.clear();
- disconnected_front.clear();
- disconnected_left.clear();
- disconnected_back.clear();
- disconnected_right.clear();
- disconnected.clear();
- disconnected_sides.clear();
+ connected.reset();
}
void NodeBox::serialize(std::ostream &os, u16 protocol_version) const
{
- // Protocol >= 36
- const u8 version = 6;
- writeU8(os, version);
+ writeU8(os, 6); // version. Protocol >= 36
switch (type) {
case NODEBOX_LEVELED:
@@ -99,7 +84,7 @@ void NodeBox::serialize(std::ostream &os, u16 protocol_version) const
writeV3F32(os, wall_side.MinEdge);
writeV3F32(os, wall_side.MaxEdge);
break;
- case NODEBOX_CONNECTED:
+ case NODEBOX_CONNECTED: {
writeU8(os, type);
#define WRITEBOX(box) \
@@ -109,22 +94,25 @@ void NodeBox::serialize(std::ostream &os, u16 protocol_version) const
writeV3F32(os, i.MaxEdge); \
};
+ const auto &c = getConnected();
+
WRITEBOX(fixed);
- WRITEBOX(connect_top);
- WRITEBOX(connect_bottom);
- WRITEBOX(connect_front);
- WRITEBOX(connect_left);
- WRITEBOX(connect_back);
- WRITEBOX(connect_right);
- WRITEBOX(disconnected_top);
- WRITEBOX(disconnected_bottom);
- WRITEBOX(disconnected_front);
- WRITEBOX(disconnected_left);
- WRITEBOX(disconnected_back);
- WRITEBOX(disconnected_right);
- WRITEBOX(disconnected);
- WRITEBOX(disconnected_sides);
+ WRITEBOX(c.connect_top);
+ WRITEBOX(c.connect_bottom);
+ WRITEBOX(c.connect_front);
+ WRITEBOX(c.connect_left);
+ WRITEBOX(c.connect_back);
+ WRITEBOX(c.connect_right);
+ WRITEBOX(c.disconnected_top);
+ WRITEBOX(c.disconnected_bottom);
+ WRITEBOX(c.disconnected_front);
+ WRITEBOX(c.disconnected_left);
+ WRITEBOX(c.disconnected_back);
+ WRITEBOX(c.disconnected_right);
+ WRITEBOX(c.disconnected);
+ WRITEBOX(c.disconnected_sides);
break;
+ }
default:
writeU8(os, type);
break;
@@ -133,8 +121,7 @@ void NodeBox::serialize(std::ostream &os, u16 protocol_version) const
void NodeBox::deSerialize(std::istream &is)
{
- int version = readU8(is);
- if (version < 6)
+ if (readU8(is) < 6)
throw SerializationError("unsupported NodeBox version");
reset();
@@ -173,21 +160,23 @@ void NodeBox::deSerialize(std::istream &is)
u16 count;
+ auto &c = getConnected();
+
READBOXES(fixed);
- READBOXES(connect_top);
- READBOXES(connect_bottom);
- READBOXES(connect_front);
- READBOXES(connect_left);
- READBOXES(connect_back);
- READBOXES(connect_right);
- READBOXES(disconnected_top);
- READBOXES(disconnected_bottom);
- READBOXES(disconnected_front);
- READBOXES(disconnected_left);
- READBOXES(disconnected_back);
- READBOXES(disconnected_right);
- READBOXES(disconnected);
- READBOXES(disconnected_sides);
+ READBOXES(c.connect_top);
+ READBOXES(c.connect_bottom);
+ READBOXES(c.connect_front);
+ READBOXES(c.connect_left);
+ READBOXES(c.connect_back);
+ READBOXES(c.connect_right);
+ READBOXES(c.disconnected_top);
+ READBOXES(c.disconnected_bottom);
+ READBOXES(c.disconnected_front);
+ READBOXES(c.disconnected_left);
+ READBOXES(c.disconnected_back);
+ READBOXES(c.disconnected_right);
+ READBOXES(c.disconnected);
+ READBOXES(c.disconnected_sides);
}
}
@@ -257,14 +246,13 @@ void TileDef::serialize(std::ostream &os, u16 protocol_version) const
writeU8(os, align_style);
}
-void TileDef::deSerialize(std::istream &is, u8 contentfeatures_version,
- NodeDrawType drawtype)
+void TileDef::deSerialize(std::istream &is, NodeDrawType drawtype, u16 protocol_version)
{
- int version = readU8(is);
- if (version < 6)
+ if (readU8(is) < 6)
throw SerializationError("unsupported TileDef version");
+
name = deSerializeString16(is);
- animation.deSerialize(is, version);
+ animation.deSerialize(is, protocol_version);
u16 flags = readU16(is);
backface_culling = flags & TILE_FLAG_BACKFACE_CULLING;
tileable_horizontal = flags & TILE_FLAG_TILEABLE_HORIZONTAL;
@@ -291,7 +279,7 @@ void TextureSettings::readSettings()
bool smooth_lighting = g_settings->getBool("smooth_lighting");
enable_mesh_cache = g_settings->getBool("enable_mesh_cache");
enable_minimap = g_settings->getBool("enable_minimap");
- node_texture_size = g_settings->getU16("texture_min_size");
+ node_texture_size = std::min<u16>(g_settings->getU16("texture_min_size"), 1);
std::string leaves_style_str = g_settings->get("leaves_style");
std::string world_aligned_mode_str = g_settings->get("world_aligned_mode");
std::string autoscale_mode_str = g_settings->get("autoscale_mode");
@@ -409,9 +397,9 @@ void ContentFeatures::reset()
drowning = 0;
light_source = 0;
damage_per_second = 0;
- node_box = NodeBox();
- selection_box = NodeBox();
- collision_box = NodeBox();
+ node_box.reset();
+ selection_box.reset();
+ collision_box.reset();
waving = 0;
legacy_facedir_simple = false;
legacy_wallmounted = false;
@@ -456,16 +444,15 @@ u8 ContentFeatures::getAlphaForLegacy() const
void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const
{
- const u8 version = CONTENTFEATURES_VERSION;
- writeU8(os, version);
+ writeU8(os, CONTENTFEATURES_VERSION);
// general
os << serializeString16(name);
writeU16(os, groups.size());
for (const auto &group : groups) {
os << serializeString16(group.first);
- if (group.first.compare("bouncy") == 0) {
- // Clients may choke on negative bouncy value
+ if (protocol_version < 41 && group.first.compare("bouncy") == 0) {
+ // Old clients may choke on negative bouncy value
writeS16(os, abs(group.second));
} else {
writeS16(os, group.second);
@@ -542,9 +529,9 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const
collision_box.serialize(os, protocol_version);
// sound
- sound_footstep.serialize(os, version);
- sound_dig.serialize(os, version);
- sound_dug.serialize(os, version);
+ sound_footstep.serialize(os, protocol_version);
+ sound_dig.serialize(os, protocol_version);
+ sound_dug.serialize(os, protocol_version);
// legacy
writeU8(os, legacy_facedir_simple);
@@ -558,11 +545,9 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const
writeU8(os, liquid_move_physics);
}
-void ContentFeatures::deSerialize(std::istream &is)
+void ContentFeatures::deSerialize(std::istream &is, u16 protocol_version)
{
- // version detection
- const u8 version = readU8(is);
- if (version < CONTENTFEATURES_VERSION)
+ if (readU8(is) < CONTENTFEATURES_VERSION)
throw SerializationError("unsupported ContentFeatures version");
// general
@@ -584,13 +569,13 @@ void ContentFeatures::deSerialize(std::istream &is)
if (readU8(is) != 6)
throw SerializationError("unsupported tile count");
for (TileDef &td : tiledef)
- td.deSerialize(is, version, drawtype);
+ td.deSerialize(is, drawtype, protocol_version);
for (TileDef &td : tiledef_overlay)
- td.deSerialize(is, version, drawtype);
+ td.deSerialize(is, drawtype, protocol_version);
if (readU8(is) != CF_SPECIAL_COUNT)
throw SerializationError("unsupported CF_SPECIAL_COUNT");
for (TileDef &td : tiledef_special)
- td.deSerialize(is, version, drawtype);
+ td.deSerialize(is, drawtype, protocol_version);
setAlphaFromLegacy(readU8(is));
color.setRed(readU8(is));
color.setGreen(readU8(is));
@@ -641,9 +626,9 @@ void ContentFeatures::deSerialize(std::istream &is)
collision_box.deSerialize(is);
// sounds
- sound_footstep.deSerialize(is, version);
- sound_dig.deSerialize(is, version);
- sound_dug.deSerialize(is, version);
+ sound_footstep.deSerialize(is, protocol_version);
+ sound_dig.deSerialize(is, protocol_version);
+ sound_dug.deSerialize(is, protocol_version);
// read legacy properties
legacy_facedir_simple = readU8(is);
@@ -909,8 +894,15 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc
solidness = 0;
visual_solidness = 1;
} else {
- drawtype = NDT_NORMAL;
- solidness = 2;
+ if (waving >= 1) {
+ // waving nodes must make faces so there are no gaps
+ drawtype = NDT_ALLFACES;
+ solidness = 0;
+ visual_solidness = 1;
+ } else {
+ drawtype = NDT_NORMAL;
+ solidness = 2;
+ }
for (TileDef &td : tdef)
td.name += std::string("^[noalpha");
}
@@ -1091,10 +1083,8 @@ 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;
+ f.tiledef[t].name = "unknown_node.png";
// Insert directly into containers
content_t c = CONTENT_UNKNOWN;
m_content_features[c] = f;
@@ -1296,22 +1286,23 @@ void getNodeBoxUnion(const NodeBox &nodebox, const ContentFeatures &features,
break;
}
case NODEBOX_CONNECTED: {
+ const auto &c = nodebox.getConnected();
// Add all possible connected boxes
- boxVectorUnion(nodebox.fixed, box_union);
- boxVectorUnion(nodebox.connect_top, box_union);
- boxVectorUnion(nodebox.connect_bottom, box_union);
- boxVectorUnion(nodebox.connect_front, box_union);
- boxVectorUnion(nodebox.connect_left, box_union);
- boxVectorUnion(nodebox.connect_back, box_union);
- boxVectorUnion(nodebox.connect_right, box_union);
- boxVectorUnion(nodebox.disconnected_top, box_union);
- boxVectorUnion(nodebox.disconnected_bottom, box_union);
- boxVectorUnion(nodebox.disconnected_front, box_union);
- boxVectorUnion(nodebox.disconnected_left, box_union);
- boxVectorUnion(nodebox.disconnected_back, box_union);
- boxVectorUnion(nodebox.disconnected_right, box_union);
- boxVectorUnion(nodebox.disconnected, box_union);
- boxVectorUnion(nodebox.disconnected_sides, box_union);
+ boxVectorUnion(nodebox.fixed, box_union);
+ boxVectorUnion(c.connect_top, box_union);
+ boxVectorUnion(c.connect_bottom, box_union);
+ boxVectorUnion(c.connect_front, box_union);
+ boxVectorUnion(c.connect_left, box_union);
+ boxVectorUnion(c.connect_back, box_union);
+ boxVectorUnion(c.connect_right, box_union);
+ boxVectorUnion(c.disconnected_top, box_union);
+ boxVectorUnion(c.disconnected_bottom, box_union);
+ boxVectorUnion(c.disconnected_front, box_union);
+ boxVectorUnion(c.disconnected_left, box_union);
+ boxVectorUnion(c.disconnected_back, box_union);
+ boxVectorUnion(c.disconnected_right, box_union);
+ boxVectorUnion(c.disconnected, box_union);
+ boxVectorUnion(c.disconnected_sides, box_union);
break;
}
default: {
@@ -1548,12 +1539,13 @@ void NodeDefManager::serialize(std::ostream &os, u16 protocol_version) const
}
-void NodeDefManager::deSerialize(std::istream &is)
+void NodeDefManager::deSerialize(std::istream &is, u16 protocol_version)
{
clear();
- int version = readU8(is);
- if (version != 1)
+
+ if (readU8(is) < 1)
throw SerializationError("unsupported NodeDefinitionManager version");
+
u16 count = readU16(is);
std::istringstream is2(deSerializeString32(is), std::ios::binary);
ContentFeatures f;
@@ -1563,7 +1555,7 @@ void NodeDefManager::deSerialize(std::istream &is)
// Read it from the string wrapper
std::string wrapper = deSerializeString16(is2);
std::istringstream wrapper_is(wrapper, std::ios::binary);
- f.deSerialize(wrapper_is);
+ f.deSerialize(wrapper_is, protocol_version);
// Check error conditions
if (i == CONTENT_IGNORE || i == CONTENT_AIR || i == CONTENT_UNKNOWN) {
diff --git a/src/nodedef.h b/src/nodedef.h
index ea50d4281..f4367cba9 100644
--- a/src/nodedef.h
+++ b/src/nodedef.h
@@ -36,9 +36,6 @@ class Client;
#include "texture_override.h" // TextureOverride
#include "tileanimation.h"
-// PROTOCOL_VERSION >= 37
-static const u8 CONTENTFEATURES_VERSION = 13;
-
class IItemDefManager;
class ITextureSource;
class IShaderSource;
@@ -99,17 +96,8 @@ enum NodeBoxType
NODEBOX_CONNECTED, // optionally draws nodeboxes if a neighbor node attaches
};
-struct NodeBox
+struct NodeBoxConnected
{
- enum NodeBoxType type;
- // NODEBOX_REGULAR (no parameters)
- // NODEBOX_FIXED
- std::vector<aabb3f> fixed;
- // NODEBOX_WALLMOUNTED
- aabb3f wall_top;
- aabb3f wall_bottom;
- aabb3f wall_side; // being at the -X side
- // NODEBOX_CONNECTED
std::vector<aabb3f> connect_top;
std::vector<aabb3f> connect_bottom;
std::vector<aabb3f> connect_front;
@@ -124,9 +112,35 @@ struct NodeBox
std::vector<aabb3f> disconnected_right;
std::vector<aabb3f> disconnected;
std::vector<aabb3f> disconnected_sides;
+};
+
+struct NodeBox
+{
+ enum NodeBoxType type;
+ // NODEBOX_REGULAR (no parameters)
+ // NODEBOX_FIXED
+ std::vector<aabb3f> fixed;
+ // NODEBOX_WALLMOUNTED
+ aabb3f wall_top;
+ aabb3f wall_bottom;
+ aabb3f wall_side; // being at the -X side
+ // NODEBOX_CONNECTED
+ // (kept externally to not bloat the structure)
+ std::shared_ptr<NodeBoxConnected> connected;
NodeBox()
{ reset(); }
+ ~NodeBox() = default;
+
+ inline NodeBoxConnected &getConnected() {
+ if (!connected)
+ connected = std::make_shared<NodeBoxConnected>();
+ return *connected;
+ }
+ inline const NodeBoxConnected &getConnected() const {
+ assert(connected);
+ return *connected;
+ }
void reset();
void serialize(std::ostream &os, u16 protocol_version) const;
@@ -269,8 +283,7 @@ struct TileDef
}
void serialize(std::ostream &os, u16 protocol_version) const;
- void deSerialize(std::istream &is, u8 contentfeatures_version,
- NodeDrawType drawtype);
+ void deSerialize(std::istream &is, NodeDrawType drawtype, u16 protocol_version);
};
// Defines the number of special tiles per nodedef
@@ -282,6 +295,10 @@ struct TileDef
struct ContentFeatures
{
+ // PROTOCOL_VERSION >= 37. This is legacy and should not be increased anymore,
+ // write checks that depend directly on the protocol version instead.
+ static const u8 CONTENTFEATURES_VERSION = 13;
+
/*
Cached stuff
*/
@@ -290,7 +307,6 @@ struct ContentFeatures
// up down right left back front
TileSpec tiles[6];
// Special tiles
- // - Currently used for flowing liquids
TileSpec special_tiles[CF_SPECIAL_COUNT];
u8 solidness; // Used when choosing which face is drawn
u8 visual_solidness; // When solidness=0, this tells how it looks like
@@ -431,7 +447,7 @@ struct ContentFeatures
~ContentFeatures();
void reset();
void serialize(std::ostream &os, u16 protocol_version) const;
- void deSerialize(std::istream &is);
+ void deSerialize(std::istream &is, u16 protocol_version);
/*
Some handy methods
@@ -478,6 +494,12 @@ struct ContentFeatures
return (liquid_alternative_flowing_id == f.liquid_alternative_flowing_id);
}
+ bool lightingEquivalent(const ContentFeatures &other) const {
+ return light_propagates == other.light_propagates
+ && sunlight_propagates == other.sunlight_propagates
+ && light_source == other.light_source;
+ }
+
int getGroup(const std::string &group) const
{
return itemgroup_get(groups, group);
@@ -533,7 +555,7 @@ public:
*/
inline const ContentFeatures& get(content_t c) const {
return
- c < m_content_features.size() ?
+ (c < m_content_features.size() && !m_content_features[c].name.empty()) ?
m_content_features[c] : m_content_features[CONTENT_UNKNOWN];
}
@@ -668,7 +690,7 @@ public:
/*!
* Writes the content of this manager to the given output stream.
- * @param protocol_version serialization version of ContentFeatures
+ * @param protocol_version Active network protocol version
*/
void serialize(std::ostream &os, u16 protocol_version) const;
@@ -676,8 +698,9 @@ public:
* Restores the manager from a serialized stream.
* This clears the previous state.
* @param is input stream containing a serialized NodeDefManager
+ * @param protocol_version Active network protocol version
*/
- void deSerialize(std::istream &is);
+ void deSerialize(std::istream &is, u16 protocol_version);
/*!
* Used to indicate that node registration has finished.
diff --git a/src/noise.cpp b/src/noise.cpp
index 2f4de6855..99624f80d 100644
--- a/src/noise.cpp
+++ b/src/noise.cpp
@@ -35,16 +35,8 @@
#define NOISE_MAGIC_X 1619
#define NOISE_MAGIC_Y 31337
#define NOISE_MAGIC_Z 52591
-#define NOISE_MAGIC_SEED 1013
-
-typedef float (*Interp2dFxn)(
- float v00, float v10, float v01, float v11,
- float x, float y);
-
-typedef float (*Interp3dFxn)(
- float v000, float v100, float v010, float v110,
- float v001, float v101, float v011, float v111,
- float x, float y, float z);
+// Unsigned magic seed prevents undefined behavior.
+#define NOISE_MAGIC_SEED 1013U
FlagDesc flagdesc_noiseparams[] = {
{"defaults", NOISE_FLAG_DEFAULTS},
@@ -197,47 +189,34 @@ inline float linearInterpolation(float v0, float v1, float t)
inline float biLinearInterpolation(
float v00, float v10,
float v01, float v11,
- float x, float y)
-{
- float tx = easeCurve(x);
- float ty = easeCurve(y);
- float u = linearInterpolation(v00, v10, tx);
- float v = linearInterpolation(v01, v11, tx);
- return linearInterpolation(u, v, ty);
-}
-
-
-inline float biLinearInterpolationNoEase(
- float v00, float v10,
- float v01, float v11,
- float x, float y)
+ float x, float y,
+ bool eased)
{
+ // Inlining will optimize this branch out when possible
+ if (eased) {
+ x = easeCurve(x);
+ y = easeCurve(y);
+ }
float u = linearInterpolation(v00, v10, x);
float v = linearInterpolation(v01, v11, x);
return linearInterpolation(u, v, y);
}
-float triLinearInterpolation(
- float v000, float v100, float v010, float v110,
- float v001, float v101, float v011, float v111,
- float x, float y, float z)
-{
- float tx = easeCurve(x);
- float ty = easeCurve(y);
- float tz = easeCurve(z);
- float u = biLinearInterpolationNoEase(v000, v100, v010, v110, tx, ty);
- float v = biLinearInterpolationNoEase(v001, v101, v011, v111, tx, ty);
- return linearInterpolation(u, v, tz);
-}
-
-float triLinearInterpolationNoEase(
+inline float triLinearInterpolation(
float v000, float v100, float v010, float v110,
float v001, float v101, float v011, float v111,
- float x, float y, float z)
+ float x, float y, float z,
+ bool eased)
{
- float u = biLinearInterpolationNoEase(v000, v100, v010, v110, x, y);
- float v = biLinearInterpolationNoEase(v001, v101, v011, v111, x, y);
+ // Inlining will optimize this branch out when possible
+ if (eased) {
+ x = easeCurve(x);
+ y = easeCurve(y);
+ z = easeCurve(z);
+ }
+ float u = biLinearInterpolation(v000, v100, v010, v110, x, y, false);
+ float v = biLinearInterpolation(v001, v101, v011, v111, x, y, false);
return linearInterpolation(u, v, z);
}
@@ -255,10 +234,7 @@ float noise2d_gradient(float x, float y, s32 seed, bool eased)
float v01 = noise2d(x0, y0+1, seed);
float v11 = noise2d(x0+1, y0+1, seed);
// Interpolate
- if (eased)
- return biLinearInterpolation(v00, v10, v01, v11, xl, yl);
-
- return biLinearInterpolationNoEase(v00, v10, v01, v11, xl, yl);
+ return biLinearInterpolation(v00, v10, v01, v11, xl, yl, eased);
}
@@ -282,17 +258,11 @@ float noise3d_gradient(float x, float y, float z, s32 seed, bool eased)
float v011 = noise3d(x0, y0 + 1, z0 + 1, seed);
float v111 = noise3d(x0 + 1, y0 + 1, z0 + 1, seed);
// Interpolate
- if (eased) {
- return triLinearInterpolation(
- v000, v100, v010, v110,
- v001, v101, v011, v111,
- xl, yl, zl);
- }
-
- return triLinearInterpolationNoEase(
+ return triLinearInterpolation(
v000, v100, v010, v110,
v001, v101, v011, v111,
- xl, yl, zl);
+ xl, yl, zl,
+ eased);
}
@@ -517,9 +487,6 @@ void Noise::gradientMap2D(
s32 x0, y0;
bool eased = np.flags & (NOISE_FLAG_DEFAULTS | NOISE_FLAG_EASED);
- Interp2dFxn interpolate = eased ?
- biLinearInterpolation : biLinearInterpolationNoEase;
-
x0 = std::floor(x);
y0 = std::floor(y);
u = x - (float)x0;
@@ -546,7 +513,8 @@ void Noise::gradientMap2D(
u = orig_u;
noisex = 0;
for (i = 0; i != sx; i++) {
- gradient_buf[index++] = interpolate(v00, v10, v01, v11, u, v);
+ gradient_buf[index++] =
+ biLinearInterpolation(v00, v10, v01, v11, u, v, eased);
u += step_x;
if (u >= 1.0) {
@@ -582,8 +550,7 @@ void Noise::gradientMap3D(
u32 nlx, nly, nlz;
s32 x0, y0, z0;
- Interp3dFxn interpolate = (np.flags & NOISE_FLAG_EASED) ?
- triLinearInterpolation : triLinearInterpolationNoEase;
+ bool eased = np.flags & NOISE_FLAG_EASED;
x0 = std::floor(x);
y0 = std::floor(y);
@@ -624,10 +591,11 @@ void Noise::gradientMap3D(
u = orig_u;
noisex = 0;
for (i = 0; i != sx; i++) {
- gradient_buf[index++] = interpolate(
+ gradient_buf[index++] = triLinearInterpolation(
v000, v100, v010, v110,
v001, v101, v011, v111,
- u, v, w);
+ u, v, w,
+ eased);
u += step_x;
if (u >= 1.0) {
diff --git a/src/particles.cpp b/src/particles.cpp
index 14c987958..19b3418b7 100644
--- a/src/particles.cpp
+++ b/src/particles.cpp
@@ -18,7 +18,103 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "particles.h"
-#include "util/serialize.h"
+#include <type_traits>
+using namespace ParticleParamTypes;
+
+#define PARAM_PVFN(n) ParticleParamTypes::n##ParameterValue
+v2f PARAM_PVFN(pick) (float* f, const v2f a, const v2f b) {
+ return v2f(
+ numericalBlend(f[0], a.X, b.X),
+ numericalBlend(f[1], a.Y, b.Y)
+ );
+}
+
+v3f PARAM_PVFN(pick) (float* f, const v3f a, const v3f b) {
+ return v3f(
+ numericalBlend(f[0], a.X, b.X),
+ numericalBlend(f[1], a.Y, b.Y),
+ numericalBlend(f[2], a.Z, b.Z)
+ );
+}
+
+v2f PARAM_PVFN(interpolate) (float fac, const v2f a, const v2f b)
+ { return b.getInterpolated(a, fac); }
+v3f PARAM_PVFN(interpolate) (float fac, const v3f a, const v3f b)
+ { return b.getInterpolated(a, fac); }
+
+#define PARAM_DEF_SRZR(T, wr, rd) \
+ void PARAM_PVFN(serialize) (std::ostream& os, T v) {wr(os,v); } \
+ void PARAM_PVFN(deSerialize)(std::istream& is, T& v) {v = rd(is);}
+
+
+#define PARAM_DEF_NUM(T, wr, rd) PARAM_DEF_SRZR(T, wr, rd) \
+ T PARAM_PVFN(interpolate)(float fac, const T a, const T b) \
+ { return numericalBlend<T>(fac,a,b); } \
+ T PARAM_PVFN(pick) (float* f, const T a, const T b) \
+ { return numericalBlend<T>(f[0],a,b); }
+
+PARAM_DEF_NUM(u8, writeU8, readU8); PARAM_DEF_NUM(s8, writeS8, readS8);
+PARAM_DEF_NUM(u16, writeU16, readU16); PARAM_DEF_NUM(s16, writeS16, readS16);
+PARAM_DEF_NUM(u32, writeU32, readU32); PARAM_DEF_NUM(s32, writeS32, readS32);
+PARAM_DEF_NUM(f32, writeF32, readF32);
+PARAM_DEF_SRZR(v2f, writeV2F32, readV2F32);
+PARAM_DEF_SRZR(v3f, writeV3F32, readV3F32);
+
+enum class ParticleTextureFlags : u8 {
+ /* each value specifies a bit in a bitmask; if the maximum value
+ * goes above 1<<7 the type of the flags field must be changed
+ * from u8, which will necessitate a protocol change! */
+
+ // the first bit indicates whether the texture is animated
+ animated = 1,
+
+ /* the next three bits indicate the blending mode of the texture
+ * blendmode is encoded by (flags |= (u8)blend << 1); retrieve with
+ * (flags & ParticleTextureFlags::blend) >> 1. note that the third
+ * bit is currently reserved for adding more blend modes in the future */
+ blend = 0x7 << 1,
+};
+
+/* define some shorthand so we don't have to repeat ourselves or use
+ * decltype everywhere */
+using FlagT = std::underlying_type_t<ParticleTextureFlags>;
+
+void ServerParticleTexture::serialize(std::ostream &os, u16 protocol_ver, bool newPropertiesOnly) const
+{
+ /* newPropertiesOnly is used to de/serialize parameters of the legacy texture
+ * field, which are encoded separately from the texspec string */
+ FlagT flags = 0;
+ if (animated)
+ flags |= FlagT(ParticleTextureFlags::animated);
+ if (blendmode != BlendMode::alpha)
+ flags |= FlagT(blendmode) << 1;
+ serializeParameterValue(os, flags);
+
+ alpha.serialize(os);
+ scale.serialize(os);
+ if (!newPropertiesOnly)
+ os << serializeString32(string);
+
+ if (animated)
+ animation.serialize(os, protocol_ver);
+}
+
+void ServerParticleTexture::deSerialize(std::istream &is, u16 protocol_ver, bool newPropertiesOnly)
+{
+ FlagT flags = 0;
+ deSerializeParameterValue(is, flags);
+
+ animated = !!(flags & FlagT(ParticleTextureFlags::animated));
+ blendmode = BlendMode((flags & FlagT(ParticleTextureFlags::blend)) >> 1);
+
+ alpha.deSerialize(is);
+ scale.deSerialize(is);
+ if (!newPropertiesOnly)
+ string = deSerializeString32(is);
+
+ if (animated)
+ animation.deSerialize(is, protocol_ver);
+}
void ParticleParameters::serialize(std::ostream &os, u16 protocol_ver) const
{
@@ -28,7 +124,7 @@ void ParticleParameters::serialize(std::ostream &os, u16 protocol_ver) const
writeF32(os, expirationtime);
writeF32(os, size);
writeU8(os, collisiondetection);
- os << serializeString32(texture);
+ os << serializeString32(texture.string);
writeU8(os, vertical);
writeU8(os, collision_removal);
animation.serialize(os, 6); /* NOT the protocol ver */
@@ -37,6 +133,20 @@ void ParticleParameters::serialize(std::ostream &os, u16 protocol_ver) const
writeU16(os, node.param0);
writeU8(os, node.param2);
writeU8(os, node_tile);
+ writeV3F32(os, drag);
+ jitter.serialize(os);
+ bounce.serialize(os);
+}
+
+template <typename T, T (reader)(std::istream& is)>
+inline bool streamEndsBeforeParam(T& val, std::istream& is)
+{
+ // This is kinda awful
+ T tmp = reader(is);
+ if (is.eof())
+ return true;
+ val = tmp;
+ return false;
}
void ParticleParameters::deSerialize(std::istream &is, u16 protocol_ver)
@@ -47,17 +157,20 @@ void ParticleParameters::deSerialize(std::istream &is, u16 protocol_ver)
expirationtime = readF32(is);
size = readF32(is);
collisiondetection = readU8(is);
- texture = deSerializeString32(is);
+ texture.string = deSerializeString32(is);
vertical = readU8(is);
collision_removal = readU8(is);
animation.deSerialize(is, 6); /* NOT the protocol ver */
glow = readU8(is);
object_collision = readU8(is);
- // This is kinda awful
- u16 tmp_param0 = readU16(is);
- if (is.eof())
+
+ if (streamEndsBeforeParam<u16, readU16>(node.param0, is))
return;
- node.param0 = tmp_param0;
node.param2 = readU8(is);
node_tile = readU8(is);
+
+ if (streamEndsBeforeParam<v3f, readV3F32>(drag, is))
+ return;
+ jitter.deSerialize(is);
+ bounce.deSerialize(is);
}
diff --git a/src/particles.h b/src/particles.h
index 6f518b771..3061deb83 100644
--- a/src/particles.h
+++ b/src/particles.h
@@ -20,19 +20,350 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include <string>
+#include <sstream>
+#include <vector>
+#include <ctgmath>
+#include <type_traits>
#include "irrlichttypes_bloated.h"
#include "tileanimation.h"
#include "mapnode.h"
+#include "util/serialize.h"
+#include "util/numeric.h"
// This file defines the particle-related structures that both the server and
// client need. The ParticleManager and rendering is in client/particles.h
-struct CommonParticleParams {
+namespace ParticleParamTypes
+{
+ template <bool cond, typename T>
+ using enableIf = typename std::enable_if<cond, T>::type;
+ // std::enable_if_t does not appear to be present in GCC????
+ // std::is_enum_v also missing. wtf. these are supposed to be
+ // present as of c++14
+
+ template<typename T> using BlendFunction = T(float,T,T);
+ #define DECL_PARAM_SRZRS(type) \
+ void serializeParameterValue (std::ostream& os, type v); \
+ void deSerializeParameterValue(std::istream& is, type& r);
+ #define DECL_PARAM_OVERLOADS(type) DECL_PARAM_SRZRS(type) \
+ type interpolateParameterValue(float fac, const type a, const type b); \
+ type pickParameterValue (float* facs, const type a, const type b);
+
+ DECL_PARAM_OVERLOADS(u8); DECL_PARAM_OVERLOADS(s8);
+ DECL_PARAM_OVERLOADS(u16); DECL_PARAM_OVERLOADS(s16);
+ DECL_PARAM_OVERLOADS(u32); DECL_PARAM_OVERLOADS(s32);
+ DECL_PARAM_OVERLOADS(f32);
+ DECL_PARAM_OVERLOADS(v2f);
+ DECL_PARAM_OVERLOADS(v3f);
+
+ /* C++ is a strongly typed language. this means that enums cannot be implicitly
+ * cast to integers, as they can be in C. while this may sound good in principle,
+ * it means that our normal serialization functions cannot be called on
+ * enumerations unless they are explicitly cast to a particular type first. this
+ * is problematic, because in C++ enums can have any integral type as an underlying
+ * type, and that type would need to be named everywhere an enumeration is
+ * de/serialized.
+ *
+ * this is obviously not cool, both in terms of writing legible, succinct code,
+ * and in terms of robustness: the underlying type might be changed at some point,
+ * e.g. if a bitmask gets too big for its britches. we could use an equivalent of
+ * `std::to_underlying(value)` everywhere we need to deal with enumerations, but
+ * that's hideous and unintuitive. instead, we supply the following functions to
+ * transparently map enumeration types to their underlying values. */
+
+ template <typename E, enableIf<std::is_enum<E>::value, bool> = true>
+ void serializeParameterValue(std::ostream& os, E k) {
+ serializeParameterValue(os, (std::underlying_type_t<E>)k);
+ }
+
+ template <typename E, enableIf<std::is_enum<E>::value, bool> = true>
+ void deSerializeParameterValue(std::istream& is, E& k) {
+ std::underlying_type_t<E> v;
+ deSerializeParameterValue(is, v);
+ k = (E)v;
+ }
+
+ /* this is your brain on C++. */
+
+ template <typename T, size_t PN>
+ struct Parameter
+ {
+ using ValType = T;
+ using pickFactors = float[PN];
+
+ T val = T();
+ using This = Parameter<T, PN>;
+
+ Parameter() = default;
+
+ template <typename... Args>
+ Parameter(Args... args) : val(args...) {}
+
+ virtual void serialize(std::ostream &os) const
+ { serializeParameterValue (os, this->val); }
+ virtual void deSerialize(std::istream &is)
+ { deSerializeParameterValue(is, this->val); }
+
+ virtual T interpolate(float fac, const This& against) const
+ {
+ return interpolateParameterValue(fac, this->val, against.val);
+ }
+
+ static T pick(float* f, const This& a, const This& b)
+ {
+ return pickParameterValue(f, a.val, b.val);
+ }
+
+ operator T() const { return val; }
+ T operator=(T b) { return val = b; }
+
+ };
+
+ template <typename T> T numericalBlend(float fac, T min, T max)
+ { return min + ((max - min) * fac); }
+
+ template <typename T, size_t N>
+ struct VectorParameter : public Parameter<T,N> {
+ using This = VectorParameter<T,N>;
+ template <typename... Args>
+ VectorParameter(Args... args) : Parameter<T,N>(args...) {}
+ };
+
+ template <typename T, size_t PN>
+ inline std::string dump(const Parameter<T,PN>& p)
+ {
+ return std::to_string(p.val);
+ }
+
+ template <typename T, size_t N>
+ inline std::string dump(const VectorParameter<T,N>& v)
+ {
+ std::ostringstream oss;
+ if (N == 3)
+ oss << PP(v.val);
+ else
+ oss << PP2(v.val);
+ return oss.str();
+ }
+
+ using u8Parameter = Parameter<u8, 1>; using s8Parameter = Parameter<s8, 1>;
+ using u16Parameter = Parameter<u16, 1>; using s16Parameter = Parameter<s16, 1>;
+ using u32Parameter = Parameter<u32, 1>; using s32Parameter = Parameter<s32, 1>;
+
+ using f32Parameter = Parameter<f32, 1>;
+
+ using v2fParameter = VectorParameter<v2f, 2>;
+ using v3fParameter = VectorParameter<v3f, 3>;
+
+ template <typename T>
+ struct RangedParameter
+ {
+ using ValType = T;
+ using This = RangedParameter<T>;
+
+ T min, max;
+ f32 bias = 0;
+
+ RangedParameter() = default;
+ RangedParameter(T _min, T _max) : min(_min), max(_max) {}
+ template <typename M> RangedParameter(M b) : min(b), max(b) {}
+
+ // these functions handle the old range serialization "format"; bias must
+ // be manually encoded in a separate part of the stream. NEVER ADD FIELDS
+ // TO THESE FUNCTIONS
+ void legacySerialize(std::ostream& os) const
+ {
+ min.serialize(os);
+ max.serialize(os);
+ }
+ void legacyDeSerialize(std::istream& is)
+ {
+ min.deSerialize(is);
+ max.deSerialize(is);
+ }
+
+ // these functions handle the format used by new fields. new fields go here
+ void serialize(std::ostream &os) const
+ {
+ legacySerialize(os);
+ writeF32(os, bias);
+ }
+ void deSerialize(std::istream &is)
+ {
+ legacyDeSerialize(is);
+ bias = readF32(is);
+ }
+
+ This interpolate(float fac, const This against) const
+ {
+ This r;
+ r.min = min.interpolate(fac, against.min);
+ r.max = max.interpolate(fac, against.max);
+ r.bias = bias;
+ return r;
+ }
+
+ T pickWithin() const
+ {
+ typename T::pickFactors values;
+ auto p = numericAbsolute(bias) + 1;
+ for (size_t i = 0; i < sizeof(values) / sizeof(values[0]); ++i) {
+ if (bias < 0)
+ values[i] = 1.0f - pow(myrand_float(), p);
+ else
+ values[i] = pow(myrand_float(), p);
+ }
+ return T::pick(values, min, max);
+ }
+
+ };
+
+ template <typename T>
+ inline std::string dump(const RangedParameter<T>& r)
+ {
+ std::ostringstream s;
+ s << "range<" << dump(r.min) << " ~ " << dump(r.max);
+ if (r.bias != 0)
+ s << " :: " << r.bias;
+ s << ">";
+ return s.str();
+ }
+
+ enum class TweenStyle : u8 { fwd, rev, pulse, flicker };
+
+ template <typename T>
+ struct TweenedParameter
+ {
+ using ValType = T;
+ using This = TweenedParameter<T>;
+
+ TweenStyle style = TweenStyle::fwd;
+ u16 reps = 1;
+ f32 beginning = 0.0f;
+
+ T start, end;
+
+ TweenedParameter() = default;
+ TweenedParameter(T _start, T _end) : start(_start), end(_end) {}
+ template <typename M> TweenedParameter(M b) : start(b), end(b) {}
+
+ T blend(float fac) const
+ {
+ // warp time coordinates in accordance w/ settings
+ if (fac > beginning) {
+ // remap for beginning offset
+ auto len = 1 - beginning;
+ fac -= beginning;
+ fac /= len;
+
+ // remap for repetitions
+ fac *= reps;
+ if (fac > 1) // poor man's modulo
+ fac -= (decltype(reps))fac;
+
+ // remap for style
+ switch (style) {
+ case TweenStyle::fwd: /* do nothing */ break;
+ case TweenStyle::rev: fac = 1.0f - fac; break;
+ case TweenStyle::pulse:
+ case TweenStyle::flicker: {
+ if (fac > 0.5f) {
+ fac = 1.f - (fac*2.f - 1.f);
+ } else {
+ fac = fac * 2;
+ }
+ if (style == TweenStyle::flicker) {
+ fac *= myrand_range(0.7f, 1.0f);
+ }
+ }
+ }
+ if (fac>1.f)
+ fac = 1.f;
+ else if (fac<0.f)
+ fac = 0.f;
+ } else {
+ fac = (style == TweenStyle::rev) ? 1.f : 0.f;
+ }
+
+ return start.interpolate(fac, end);
+ }
+
+ void serialize(std::ostream &os) const
+ {
+ writeU8(os, static_cast<u8>(style));
+ writeU16(os, reps);
+ writeF32(os, beginning);
+ start.serialize(os);
+ end.serialize(os);
+ }
+ void deSerialize(std::istream &is)
+ {
+ style = static_cast<TweenStyle>(readU8(is));
+ reps = readU16(is);
+ beginning = readF32(is);
+ start.deSerialize(is);
+ end.deSerialize(is);
+ }
+ };
+
+ template <typename T>
+ inline std::string dump(const TweenedParameter<T>& t)
+ {
+ std::ostringstream s;
+ const char* icon;
+ switch (t.style) {
+ case TweenStyle::fwd: icon = "→"; break;
+ case TweenStyle::rev: icon = "â†"; break;
+ case TweenStyle::pulse: icon = "↔"; break;
+ case TweenStyle::flicker: icon = "↯"; break;
+ }
+ s << "tween<";
+ if (t.reps != 1)
+ s << t.reps << "x ";
+ s << dump(t.start) << " "<<icon<<" " << dump(t.end) << ">";
+ return s.str();
+ }
+
+ enum class AttractorKind : u8 { none, point, line, plane };
+ enum class BlendMode : u8 { alpha, add, sub, screen };
+
+ // these are consistently-named convenience aliases to make code more readable without `using ParticleParamTypes` declarations
+ using v3fRange = RangedParameter<v3fParameter>;
+ using f32Range = RangedParameter<f32Parameter>;
+
+ using v2fTween = TweenedParameter<v2fParameter>;
+ using v3fTween = TweenedParameter<v3fParameter>;
+ using f32Tween = TweenedParameter<f32Parameter>;
+ using v3fRangeTween = TweenedParameter<v3fRange>;
+ using f32RangeTween = TweenedParameter<f32Range>;
+
+ #undef DECL_PARAM_SRZRS
+ #undef DECL_PARAM_OVERLOADS
+}
+
+struct ParticleTexture
+{
+ bool animated = false;
+ ParticleParamTypes::BlendMode blendmode = ParticleParamTypes::BlendMode::alpha;
+ TileAnimationParams animation;
+ ParticleParamTypes::f32Tween alpha{1.0f};
+ ParticleParamTypes::v2fTween scale{v2f(1.0f)};
+};
+
+struct ServerParticleTexture : public ParticleTexture
+{
+ std::string string;
+ void serialize(std::ostream &os, u16 protocol_ver, bool newPropertiesOnly = false) const;
+ void deSerialize(std::istream &is, u16 protocol_ver, bool newPropertiesOnly = false);
+};
+
+struct CommonParticleParams
+{
bool collisiondetection = false;
bool collision_removal = false;
bool object_collision = false;
bool vertical = false;
- std::string texture;
+ ServerParticleTexture texture;
struct TileAnimationParams animation;
u8 glow = 0;
MapNode node;
@@ -58,22 +389,42 @@ struct CommonParticleParams {
}
};
-struct ParticleParameters : CommonParticleParams {
- v3f pos;
- v3f vel;
- v3f acc;
- f32 expirationtime = 1;
- f32 size = 1;
+struct ParticleParameters : CommonParticleParams
+{
+ v3f pos, vel, acc, drag;
+ f32 size = 1, expirationtime = 1;
+ ParticleParamTypes::f32Range bounce;
+ ParticleParamTypes::v3fRange jitter;
void serialize(std::ostream &os, u16 protocol_ver) const;
void deSerialize(std::istream &is, u16 protocol_ver);
};
-struct ParticleSpawnerParameters : CommonParticleParams {
+struct ParticleSpawnerParameters : CommonParticleParams
+{
u16 amount = 1;
- v3f minpos, maxpos, minvel, maxvel, minacc, maxacc;
f32 time = 1;
- f32 minexptime = 1, maxexptime = 1, minsize = 1, maxsize = 1;
+
+ std::vector<ServerParticleTexture> texpool;
+
+ ParticleParamTypes::v3fRangeTween
+ pos, vel, acc, drag, radius, jitter;
+
+ ParticleParamTypes::AttractorKind
+ attractor_kind;
+ ParticleParamTypes::v3fTween
+ attractor_origin, attractor_direction;
+ // object IDs
+ u16 attractor_attachment = 0,
+ attractor_direction_attachment = 0;
+ // do particles disappear when they cross the attractor threshold?
+ bool attractor_kill = true;
+
+ ParticleParamTypes::f32RangeTween
+ exptime{1.0f},
+ size {1.0f},
+ attract{0.0f},
+ bounce {0.0f};
// For historical reasons no (de-)serialization methods here
};
diff --git a/src/player.cpp b/src/player.cpp
index 347be30f1..1e064c1da 100644
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -71,7 +71,7 @@ Player::Player(const char *name, IItemDefManager *idef):
HUD_FLAG_HOTBAR_VISIBLE | HUD_FLAG_HEALTHBAR_VISIBLE |
HUD_FLAG_CROSSHAIR_VISIBLE | HUD_FLAG_WIELDITEM_VISIBLE |
HUD_FLAG_BREATHBAR_VISIBLE | HUD_FLAG_MINIMAP_VISIBLE |
- HUD_FLAG_MINIMAP_RADAR_VISIBLE;
+ HUD_FLAG_MINIMAP_RADAR_VISIBLE | HUD_FLAG_BASIC_DEBUG;
hud_hotbar_itemcount = HUD_HOTBAR_ITEMCOUNT_DEFAULT;
diff --git a/src/player.h b/src/player.h
index d769acdad..beca82f66 100644
--- a/src/player.h
+++ b/src/player.h
@@ -134,12 +134,12 @@ public:
std::vector<CollisionInfo> *collision_info)
{}
- const v3f &getSpeed() const
+ v3f getSpeed() const
{
return m_speed;
}
- void setSpeed(const v3f &speed)
+ void setSpeed(v3f speed)
{
m_speed = speed;
}
diff --git a/src/porting.cpp b/src/porting.cpp
index caf9e9be3..09627431c 100644
--- a/src/porting.cpp
+++ b/src/porting.cpp
@@ -608,7 +608,7 @@ void initializePaths()
// First try $XDG_CACHE_HOME/PROJECT_NAME
const char *cache_dir = getenv("XDG_CACHE_HOME");
const char *home_dir = getenv("HOME");
- if (cache_dir) {
+ if (cache_dir && cache_dir[0] != '\0') {
path_cache = std::string(cache_dir) + DIR_DELIM + PROJECT_NAME;
} else if (home_dir) {
// Then try $HOME/.cache/PROJECT_NAME
diff --git a/src/porting_android.cpp b/src/porting_android.cpp
index c71fe5ad8..83b590b99 100644
--- a/src/porting_android.cpp
+++ b/src/porting_android.cpp
@@ -213,6 +213,18 @@ void openURIAndroid(const std::string &url)
jnienv->CallVoidMethod(app_global->activity->clazz, url_open, jurl);
}
+void shareFileAndroid(const std::string &path)
+{
+ jmethodID url_open = jnienv->GetMethodID(nativeActivity, "shareFile",
+ "(Ljava/lang/String;)V");
+
+ FATAL_ERROR_IF(url_open == nullptr,
+ "porting::shareFileAndroid unable to find java openURI method");
+
+ jstring jurl = jnienv->NewStringUTF(path.c_str());
+ jnienv->CallVoidMethod(app_global->activity->clazz, url_open, jurl);
+}
+
int getInputDialogState()
{
jmethodID dialogstate = jnienv->GetMethodID(nativeActivity,
diff --git a/src/porting_android.h b/src/porting_android.h
index 239815922..265825fbd 100644
--- a/src/porting_android.h
+++ b/src/porting_android.h
@@ -61,6 +61,13 @@ void showInputDialog(const std::string &acceptButton,
void openURIAndroid(const std::string &url);
/**
+ * Opens a share intent to the file at path
+ *
+ * @param path
+ */
+void shareFileAndroid(const std::string &path);
+
+/**
* WORKAROUND for not working callbacks from java -> c++
* get current state of input dialog
*/
diff --git a/src/remoteplayer.h b/src/remoteplayer.h
index e33630841..0ab33adfe 100644
--- a/src/remoteplayer.h
+++ b/src/remoteplayer.h
@@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "player.h"
#include "skyparams.h"
+#include "lighting.h"
class PlayerSAO;
@@ -125,6 +126,10 @@ public:
*frame_speed = local_animation_speed;
}
+ void setLighting(const Lighting &lighting) { m_lighting = lighting; }
+
+ const Lighting& getLighting() const { return m_lighting; }
+
void setDirty(bool dirty) { m_dirty = true; }
u16 protocol_version = 0;
@@ -160,5 +165,7 @@ private:
MoonParams m_moon_params;
StarParams m_star_params;
+ Lighting m_lighting;
+
session_t m_peer_id = PEER_ID_INEXISTENT;
};
diff --git a/src/script/common/CMakeLists.txt b/src/script/common/CMakeLists.txt
index d07f6ab1b..3e84b46c7 100644
--- a/src/script/common/CMakeLists.txt
+++ b/src/script/common/CMakeLists.txt
@@ -3,6 +3,7 @@ set(common_SCRIPT_COMMON_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/c_converter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/c_types.cpp
${CMAKE_CURRENT_SOURCE_DIR}/c_internal.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/c_packer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/helper.cpp
PARENT_SCOPE)
diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp
index 8a5a3fe71..166980025 100644
--- a/src/script/common/c_content.cpp
+++ b/src/script/common/c_content.cpp
@@ -42,7 +42,7 @@ struct EnumString es_TileAnimationType[] =
{TAT_NONE, "none"},
{TAT_VERTICAL_FRAMES, "vertical_frames"},
{TAT_SHEET_2D, "sheet_2d"},
- {0, NULL},
+ {0, nullptr},
};
/******************************************************************************/
@@ -198,7 +198,7 @@ void read_object_properties(lua_State *L, int index,
prop->hp_max = (u16)rangelim(hp_max, 0, U16_MAX);
if (prop->hp_max < sao->getHP()) {
- PlayerHPChangeReason reason(PlayerHPChangeReason::SET_HP);
+ PlayerHPChangeReason reason(PlayerHPChangeReason::SET_HP_MAX);
sao->setHP(prop->hp_max, reason);
}
}
@@ -550,13 +550,6 @@ void read_content_features(lua_State *L, ContentFeatures &f, int index)
// tiles = {}
lua_getfield(L, index, "tiles");
- // If nil, try the deprecated name "tile_images" instead
- if(lua_isnil(L, -1)){
- lua_pop(L, 1);
- warn_if_field_exists(L, index, "tile_images",
- "Deprecated; new name is \"tiles\".");
- lua_getfield(L, index, "tile_images");
- }
if(lua_istable(L, -1)){
int table = lua_gettop(L);
lua_pushnil(L);
@@ -613,13 +606,6 @@ void read_content_features(lua_State *L, ContentFeatures &f, int index)
// special_tiles = {}
lua_getfield(L, index, "special_tiles");
- // If nil, try the deprecated name "special_materials" instead
- if(lua_isnil(L, -1)){
- lua_pop(L, 1);
- warn_if_field_exists(L, index, "special_materials",
- "Deprecated; new name is \"special_tiles\".");
- lua_getfield(L, index, "special_materials");
- }
if(lua_istable(L, -1)){
int table = lua_gettop(L);
lua_pushnil(L);
@@ -1000,22 +986,25 @@ void push_nodebox(lua_State *L, const NodeBox &box)
push_aabb3f(L, box.wall_side);
lua_setfield(L, -2, "wall_side");
break;
- case NODEBOX_CONNECTED:
+ case NODEBOX_CONNECTED: {
lua_pushstring(L, "connected");
lua_setfield(L, -2, "type");
- push_box(L, box.connect_top);
+ const auto &c = box.getConnected();
+ push_box(L, c.connect_top);
lua_setfield(L, -2, "connect_top");
- push_box(L, box.connect_bottom);
+ push_box(L, c.connect_bottom);
lua_setfield(L, -2, "connect_bottom");
- push_box(L, box.connect_front);
+ push_box(L, c.connect_front);
lua_setfield(L, -2, "connect_front");
- push_box(L, box.connect_back);
+ push_box(L, c.connect_back);
lua_setfield(L, -2, "connect_back");
- push_box(L, box.connect_left);
+ push_box(L, c.connect_left);
lua_setfield(L, -2, "connect_left");
- push_box(L, box.connect_right);
+ push_box(L, c.connect_right);
lua_setfield(L, -2, "connect_right");
+ // half the boxes are missing here?
break;
+ }
default:
FATAL_ERROR("Invalid box.type");
break;
@@ -1048,22 +1037,26 @@ void push_palette(lua_State *L, const std::vector<video::SColor> *palette)
/******************************************************************************/
void read_server_sound_params(lua_State *L, int index,
- ServerSoundParams &params)
+ ServerPlayingSound &params)
{
if(index < 0)
index = lua_gettop(L) + 1 + index;
- // Clear
- params = ServerSoundParams();
+
if(lua_istable(L, index)){
+ // Functional overlap: this may modify SimpleSoundSpec contents
+ getfloatfield(L, index, "fade", params.spec.fade);
+ getfloatfield(L, index, "pitch", params.spec.pitch);
+ getboolfield(L, index, "loop", params.spec.loop);
+
getfloatfield(L, index, "gain", params.gain);
+
+ // Handle positional information
getstringfield(L, index, "to_player", params.to_player);
- getfloatfield(L, index, "fade", params.fade);
- getfloatfield(L, index, "pitch", params.pitch);
lua_getfield(L, index, "pos");
if(!lua_isnil(L, -1)){
v3f p = read_v3f(L, -1)*BS;
params.pos = p;
- params.type = ServerSoundParams::SSP_POSITIONAL;
+ params.type = SoundLocation::Position;
}
lua_pop(L, 1);
lua_getfield(L, index, "object");
@@ -1072,13 +1065,12 @@ void read_server_sound_params(lua_State *L, int index,
ServerActiveObject *sao = ObjectRef::getobject(ref);
if(sao){
params.object = sao->getId();
- params.type = ServerSoundParams::SSP_OBJECT;
+ params.type = SoundLocation::Object;
}
}
lua_pop(L, 1);
params.max_hear_distance = BS*getfloatfield_default(L, index,
"max_hear_distance", params.max_hear_distance/BS);
- getboolfield(L, index, "loop", params.loop);
getstringfield(L, index, "exclude_player", params.exclude_player);
}
}
@@ -1143,20 +1135,24 @@ NodeBox read_nodebox(lua_State *L, int index)
NODEBOXREAD(nodebox.wall_top, "wall_top");
NODEBOXREAD(nodebox.wall_bottom, "wall_bottom");
NODEBOXREAD(nodebox.wall_side, "wall_side");
- NODEBOXREADVEC(nodebox.connect_top, "connect_top");
- NODEBOXREADVEC(nodebox.connect_bottom, "connect_bottom");
- NODEBOXREADVEC(nodebox.connect_front, "connect_front");
- NODEBOXREADVEC(nodebox.connect_left, "connect_left");
- NODEBOXREADVEC(nodebox.connect_back, "connect_back");
- NODEBOXREADVEC(nodebox.connect_right, "connect_right");
- NODEBOXREADVEC(nodebox.disconnected_top, "disconnected_top");
- NODEBOXREADVEC(nodebox.disconnected_bottom, "disconnected_bottom");
- NODEBOXREADVEC(nodebox.disconnected_front, "disconnected_front");
- NODEBOXREADVEC(nodebox.disconnected_left, "disconnected_left");
- NODEBOXREADVEC(nodebox.disconnected_back, "disconnected_back");
- NODEBOXREADVEC(nodebox.disconnected_right, "disconnected_right");
- NODEBOXREADVEC(nodebox.disconnected, "disconnected");
- NODEBOXREADVEC(nodebox.disconnected_sides, "disconnected_sides");
+
+ if (nodebox.type == NODEBOX_CONNECTED) {
+ auto &c = nodebox.getConnected();
+ NODEBOXREADVEC(c.connect_top, "connect_top");
+ NODEBOXREADVEC(c.connect_bottom, "connect_bottom");
+ NODEBOXREADVEC(c.connect_front, "connect_front");
+ NODEBOXREADVEC(c.connect_left, "connect_left");
+ NODEBOXREADVEC(c.connect_back, "connect_back");
+ NODEBOXREADVEC(c.connect_right, "connect_right");
+ NODEBOXREADVEC(c.disconnected_top, "disconnected_top");
+ NODEBOXREADVEC(c.disconnected_bottom, "disconnected_bottom");
+ NODEBOXREADVEC(c.disconnected_front, "disconnected_front");
+ NODEBOXREADVEC(c.disconnected_left, "disconnected_left");
+ NODEBOXREADVEC(c.disconnected_back, "disconnected_back");
+ NODEBOXREADVEC(c.disconnected_right, "disconnected_right");
+ NODEBOXREADVEC(c.disconnected, "disconnected");
+ NODEBOXREADVEC(c.disconnected_sides, "disconnected_sides");
+ }
return nodebox;
}
@@ -1351,22 +1347,27 @@ void push_tool_capabilities(lua_State *L,
}
/******************************************************************************/
-void push_inventory_list(lua_State *L, Inventory *inv, const char *name)
+void push_inventory_list(lua_State *L, const InventoryList &invlist)
{
- InventoryList *invlist = inv->getList(name);
- if(invlist == NULL){
- lua_pushnil(L);
- return;
+ push_items(L, invlist.getItems());
+}
+
+/******************************************************************************/
+void push_inventory_lists(lua_State *L, const Inventory &inv)
+{
+ const auto &lists = inv.getLists();
+ lua_createtable(L, 0, lists.size());
+ for(const InventoryList *list : lists) {
+ const std::string &name = list->getName();
+ lua_pushlstring(L, name.c_str(), name.size());
+ push_inventory_list(L, *list);
+ lua_rawset(L, -3);
}
- std::vector<ItemStack> items;
- for(u32 i=0; i<invlist->getSize(); i++)
- items.push_back(invlist->getItem(i));
- push_items(L, items);
}
/******************************************************************************/
void read_inventory_list(lua_State *L, int tableindex,
- Inventory *inv, const char *name, Server* srv, int forcesize)
+ Inventory *inv, const char *name, IGameDef *gdef, int forcesize)
{
if(tableindex < 0)
tableindex = lua_gettop(L) + 1 + tableindex;
@@ -1378,7 +1379,7 @@ void read_inventory_list(lua_State *L, int tableindex,
}
// Get Lua-specified items to insert into the list
- std::vector<ItemStack> items = read_items(L, tableindex,srv);
+ std::vector<ItemStack> items = read_items(L, tableindex, gdef);
size_t listsize = (forcesize >= 0) ? forcesize : items.size();
// Create or resize/clear list
@@ -1630,7 +1631,7 @@ void push_items(lua_State *L, const std::vector<ItemStack> &items)
}
/******************************************************************************/
-std::vector<ItemStack> read_items(lua_State *L, int index, Server *srv)
+std::vector<ItemStack> read_items(lua_State *L, int index, IGameDef *gdef)
{
if(index < 0)
index = lua_gettop(L) + 1 + index;
@@ -1646,7 +1647,7 @@ std::vector<ItemStack> read_items(lua_State *L, int index, Server *srv)
if (items.size() < (u32) key) {
items.resize(key);
}
- items[key - 1] = read_item(L, -1, srv->idef());
+ items[key - 1] = read_item(L, -1, gdef->idef());
lua_pop(L, 1);
}
return items;
@@ -1697,24 +1698,19 @@ bool read_noiseparams(lua_State *L, int index, NoiseParams *np)
void push_noiseparams(lua_State *L, NoiseParams *np)
{
lua_newtable(L);
- push_float_string(L, np->offset);
- lua_setfield(L, -2, "offset");
- push_float_string(L, np->scale);
- lua_setfield(L, -2, "scale");
- push_float_string(L, np->persist);
- lua_setfield(L, -2, "persistence");
- push_float_string(L, np->lacunarity);
- lua_setfield(L, -2, "lacunarity");
- lua_pushnumber(L, np->seed);
- lua_setfield(L, -2, "seed");
- lua_pushnumber(L, np->octaves);
- lua_setfield(L, -2, "octaves");
+ setfloatfield(L, -1, "offset", np->offset);
+ setfloatfield(L, -1, "scale", np->scale);
+ setfloatfield(L, -1, "persist", np->persist);
+ setfloatfield(L, -1, "persistence", np->persist);
+ setfloatfield(L, -1, "lacunarity", np->lacunarity);
+ setintfield( L, -1, "seed", np->seed);
+ setintfield( L, -1, "octaves", np->octaves);
push_flags_string(L, flagdesc_noiseparams, np->flags,
np->flags);
lua_setfield(L, -2, "flags");
- push_v3_float_string(L, np->spread);
+ push_v3f(L, np->spread);
lua_setfield(L, -2, "spread");
}
@@ -1977,6 +1973,12 @@ void push_hud_element(lua_State *L, HudElement *elem)
lua_pushnumber(L, elem->number);
lua_setfield(L, -2, "number");
+ if (elem->type == HUD_ELEM_WAYPOINT) {
+ // waypoints reuse the item field to store precision, precision = item - 1
+ lua_pushnumber(L, elem->item - 1);
+ lua_setfield(L, -2, "precision");
+ }
+ // push the item field for waypoints as well for backwards compatibility
lua_pushnumber(L, elem->item);
lua_setfield(L, -2, "item");
@@ -2141,3 +2143,35 @@ void push_collision_move_result(lua_State *L, const collisionMoveResult &res)
lua_setfield(L, -2, "collisions");
/**/
}
+
+
+void push_mod_spec(lua_State *L, const ModSpec &spec, bool include_unsatisfied)
+{
+ lua_newtable(L);
+
+ lua_pushstring(L, spec.name.c_str());
+ lua_setfield(L, -2, "name");
+
+ lua_pushstring(L, spec.author.c_str());
+ lua_setfield(L, -2, "author");
+
+ lua_pushinteger(L, spec.release);
+ lua_setfield(L, -2, "release");
+
+ lua_pushstring(L, spec.desc.c_str());
+ lua_setfield(L, -2, "description");
+
+ lua_pushstring(L, spec.path.c_str());
+ lua_setfield(L, -2, "path");
+
+ lua_pushstring(L, spec.virtual_path.c_str());
+ lua_setfield(L, -2, "virtual_path");
+
+ lua_newtable(L);
+ int i = 1;
+ for (const auto &dep : spec.unsatisfied_depends) {
+ lua_pushstring(L, dep.c_str());
+ lua_rawseti(L, -2, i++);
+ }
+ lua_setfield(L, -2, "unsatisfied_depends");
+}
diff --git a/src/script/common/c_content.h b/src/script/common/c_content.h
index e762604a4..ade3e4c1e 100644
--- a/src/script/common/c_content.h
+++ b/src/script/common/c_content.h
@@ -42,6 +42,7 @@ extern "C" {
// 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"
+#include "content/mods.h"
namespace Json { class Value; }
@@ -53,12 +54,13 @@ struct ItemDefinition;
struct ToolCapabilities;
struct ObjectProperties;
struct SimpleSoundSpec;
-struct ServerSoundParams;
+struct ServerPlayingSound;
class Inventory;
+class InventoryList;
struct NodeBox;
struct ContentFeatures;
struct TileDef;
-class Server;
+class IGameDef;
struct DigParams;
struct HitParams;
struct EnumString;
@@ -90,7 +92,7 @@ void read_soundspec (lua_State *L, int index,
NodeBox read_nodebox (lua_State *L, int index);
void read_server_sound_params (lua_State *L, int index,
- ServerSoundParams &params);
+ ServerPlayingSound &params);
void push_dig_params (lua_State *L,
const DigParams &params);
@@ -120,11 +122,12 @@ void push_object_properties (lua_State *L,
ObjectProperties *prop);
void push_inventory_list (lua_State *L,
- Inventory *inv,
- const char *name);
+ const InventoryList &invlist);
+void push_inventory_lists (lua_State *L,
+ const Inventory &inv);
void read_inventory_list (lua_State *L, int tableindex,
Inventory *inv, const char *name,
- Server *srv, int forcesize=-1);
+ IGameDef *gdef, int forcesize=-1);
MapNode readnode (lua_State *L, int index,
const NodeDefManager *ndef);
@@ -164,7 +167,7 @@ void push_items (lua_State *L,
std::vector<ItemStack> read_items (lua_State *L,
int index,
- Server* srv);
+ IGameDef* gdef);
void push_soundspec (lua_State *L,
const SimpleSoundSpec &spec);
@@ -202,3 +205,5 @@ void push_hud_element (lua_State *L, HudElement *elem);
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_mod_spec(lua_State *L, const ModSpec &spec, bool include_unsatisfied);
diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp
index 7898b197d..69da35b73 100644
--- a/src/script/common/c_converter.cpp
+++ b/src/script/common/c_converter.cpp
@@ -18,8 +18,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
extern "C" {
-#include "lua.h"
-#include "lauxlib.h"
+#include <lua.h>
+#include <lauxlib.h>
}
#include "util/numeric.h"
@@ -29,55 +29,52 @@ extern "C" {
#include "common/c_internal.h"
#include "constants.h"
#include <set>
+#include <cmath>
-#define CHECK_TYPE(index, name, type) { \
+#define CHECK_TYPE(index, name, type) do { \
int t = lua_type(L, (index)); \
if (t != (type)) { \
throw LuaError(std::string("Invalid ") + (name) + \
" (expected " + lua_typename(L, (type)) + \
" got " + lua_typename(L, t) + ")."); \
} \
- }
-#define CHECK_POS_COORD(name) CHECK_TYPE(-1, "position coordinate '" name "'", LUA_TNUMBER)
-#define CHECK_FLOAT_RANGE(value, name) \
-if (value < F1000_MIN || value > F1000_MAX) { \
- std::ostringstream error_text; \
- error_text << "Invalid float vector dimension range '" name "' " << \
- "(expected " << F1000_MIN << " < " name " < " << F1000_MAX << \
- " got " << value << ")." << std::endl; \
- throw LuaError(error_text.str()); \
-}
-#define CHECK_POS_TAB(index) CHECK_TYPE(index, "position", LUA_TTABLE)
+ } while(0)
+
+#define CHECK_FLOAT(value, name) do {\
+ if (std::isnan(value) || std::isinf(value)) { \
+ throw LuaError("Invalid float value for '" name \
+ "' (NaN or infinity)"); \
+ } \
+ } while (0)
+
+#define CHECK_POS_COORD(name) CHECK_TYPE(-1, "vector coordinate " name, LUA_TNUMBER)
+#define CHECK_POS_TAB(index) CHECK_TYPE(index, "vector", LUA_TTABLE)
/**
- * A helper which sets (if available) the vector metatable from builtin as metatable
- * for the table on top of the stack
+ * A helper which sets the vector 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);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_VECTOR_METATABLE);
+ lua_setmetatable(L, -2);
}
-
-void push_float_string(lua_State *L, float value)
+// Retrieve an integer vector where all components are optional
+template<class T>
+static bool getv3intfield(lua_State *L, int index,
+ const char *fieldname, T &result)
{
- auto str = ftos(value);
- lua_pushstring(L, str.c_str());
+ lua_getfield(L, index, fieldname);
+ bool got = false;
+ if (lua_istable(L, -1)) {
+ got |= getintfield(L, -1, "x", result.X);
+ got |= getintfield(L, -1, "y", result.Y);
+ got |= getintfield(L, -1, "z", result.Z);
+ }
+ lua_pop(L, 1);
+ return got;
}
void push_v3f(lua_State *L, v3f p)
@@ -101,26 +98,6 @@ void push_v2f(lua_State *L, v2f p)
lua_setfield(L, -2, "y");
}
-void push_v3_float_string(lua_State *L, v3f p)
-{
- lua_createtable(L, 0, 3);
- push_float_string(L, p.X);
- lua_setfield(L, -2, "x");
- push_float_string(L, p.Y);
- lua_setfield(L, -2, "y");
- push_float_string(L, p.Z);
- lua_setfield(L, -2, "z");
-}
-
-void push_v2_float_string(lua_State *L, v2f p)
-{
- lua_createtable(L, 0, 2);
- push_float_string(L, p.X);
- lua_setfield(L, -2, "x");
- push_float_string(L, p.Y);
- lua_setfield(L, -2, "y");
-}
-
v2s16 read_v2s16(lua_State *L, int index)
{
v2s16 p;
@@ -185,10 +162,12 @@ v2f check_v2f(lua_State *L, int index)
lua_getfield(L, index, "x");
CHECK_POS_COORD("x");
p.X = lua_tonumber(L, -1);
+ CHECK_FLOAT(p.X, "x");
lua_pop(L, 1);
lua_getfield(L, index, "y");
CHECK_POS_COORD("y");
p.Y = lua_tonumber(L, -1);
+ CHECK_FLOAT(p.Y, "y");
lua_pop(L, 1);
return p;
}
@@ -216,17 +195,17 @@ v3f check_v3f(lua_State *L, int index)
lua_getfield(L, index, "x");
CHECK_POS_COORD("x");
pos.X = lua_tonumber(L, -1);
- CHECK_FLOAT_RANGE(pos.X, "x")
+ CHECK_FLOAT(pos.X, "x");
lua_pop(L, 1);
lua_getfield(L, index, "y");
CHECK_POS_COORD("y");
pos.Y = lua_tonumber(L, -1);
- CHECK_FLOAT_RANGE(pos.Y, "y")
+ CHECK_FLOAT(pos.Y, "y");
lua_pop(L, 1);
lua_getfield(L, index, "z");
CHECK_POS_COORD("z");
pos.Z = lua_tonumber(L, -1);
- CHECK_FLOAT_RANGE(pos.Z, "z")
+ CHECK_FLOAT(pos.Z, "z");
lua_pop(L, 1);
return pos;
}
@@ -254,17 +233,17 @@ v3d check_v3d(lua_State *L, int index)
lua_getfield(L, index, "x");
CHECK_POS_COORD("x");
pos.X = lua_tonumber(L, -1);
- CHECK_FLOAT_RANGE(pos.X, "x")
+ CHECK_FLOAT(pos.X, "x");
lua_pop(L, 1);
lua_getfield(L, index, "y");
CHECK_POS_COORD("y");
pos.Y = lua_tonumber(L, -1);
- CHECK_FLOAT_RANGE(pos.Y, "y")
+ CHECK_FLOAT(pos.Y, "y");
lua_pop(L, 1);
lua_getfield(L, index, "z");
CHECK_POS_COORD("z");
pos.Z = lua_tonumber(L, -1);
- CHECK_FLOAT_RANGE(pos.Z, "z")
+ CHECK_FLOAT(pos.Z, "z");
lua_pop(L, 1);
return pos;
}
diff --git a/src/script/common/c_converter.h b/src/script/common/c_converter.h
index 6ad6f3212..2af726d16 100644
--- a/src/script/common/c_converter.h
+++ b/src/script/common/c_converter.h
@@ -61,23 +61,10 @@ bool getintfield(lua_State *L, int table,
return got;
}
-template<class T>
-bool getv3intfield(lua_State *L, int index,
- const char *fieldname, T &result)
-{
- lua_getfield(L, index, fieldname);
- bool got = false;
- if (lua_istable(L, -1)) {
- got |= getintfield(L, -1, "x", result.X);
- got |= getintfield(L, -1, "y", result.Y);
- got |= getintfield(L, -1, "z", result.Z);
- }
- lua_pop(L, 1);
- return got;
-}
-
+// Retrieve an v3s16 where all components are optional (falls back to default)
v3s16 getv3s16field_default(lua_State *L, int table,
const char *fieldname, v3s16 default_);
+
bool getstringfield(lua_State *L, int table,
const char *fieldname, std::string &result);
size_t getstringlistfield(lua_State *L, int table,
@@ -100,6 +87,7 @@ void setboolfield(lua_State *L, int table,
const char *fieldname, bool value);
v3f checkFloatPos (lua_State *L, int index);
+v2f check_v2f (lua_State *L, int index);
v3f check_v3f (lua_State *L, int index);
v3s16 check_v3s16 (lua_State *L, int index);
@@ -118,9 +106,6 @@ std::vector<aabb3f> read_aabb3f_vector (lua_State *L, int index, f32 scale);
size_t read_stringlist (lua_State *L, int index,
std::vector<std::string> *result);
-void push_float_string (lua_State *L, float value);
-void push_v3_float_string(lua_State *L, v3f p);
-void push_v2_float_string(lua_State *L, v2f p);
void push_v2s16 (lua_State *L, v2s16 p);
void push_v2s32 (lua_State *L, v2s32 p);
void push_v3s16 (lua_State *L, v3s16 p);
diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp
index df82dba14..ddd2d184c 100644
--- a/src/script/common/c_internal.cpp
+++ b/src/script/common/c_internal.cpp
@@ -166,3 +166,17 @@ void log_deprecated(lua_State *L, std::string message, int stack_depth)
infostream << script_get_backtrace(L) << std::endl;
}
+void call_string_dump(lua_State *L, int idx)
+{
+ // Retrieve string.dump from insecure env to avoid it being tampered with
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP);
+ if (!lua_isnil(L, -1))
+ lua_getfield(L, -1, "string");
+ else
+ lua_getglobal(L, "string");
+ lua_getfield(L, -1, "dump");
+ lua_remove(L, -2); // remove _G
+ lua_remove(L, -2); // remove 'string' table
+ lua_pushvalue(L, idx);
+ lua_call(L, 1, 1);
+}
diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h
index 94cfd61fb..272a39941 100644
--- a/src/script/common/c_internal.h
+++ b/src/script/common/c_internal.h
@@ -55,6 +55,8 @@ extern "C" {
#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)
+#define CUSTOM_RIDX_VECTOR_METATABLE (CUSTOM_RIDX_BASE + 5)
+#define CUSTOM_RIDX_METATABLE_MAP (CUSTOM_RIDX_BASE + 6)
// Determine if CUSTOM_RIDX_SCRIPTAPI will hold a light or full userdata
@@ -138,3 +140,7 @@ DeprecatedHandlingMode get_deprecated_handling_mode();
* @param stack_depth How far on the stack to the first user function (ie: not builtin or core)
*/
void log_deprecated(lua_State *L, std::string message, int stack_depth = 1);
+
+// Safely call string.dump on a function value
+// (does not pop, leaves one value on stack)
+void call_string_dump(lua_State *L, int idx);
diff --git a/src/script/common/c_packer.cpp b/src/script/common/c_packer.cpp
new file mode 100644
index 000000000..597f5e447
--- /dev/null
+++ b/src/script/common/c_packer.cpp
@@ -0,0 +1,596 @@
+/*
+Minetest
+Copyright (C) 2022 sfan5 <sfan5@live.de>
+
+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 <cstdio>
+#include <cstring>
+#include <cmath>
+#include <cassert>
+#include <unordered_set>
+#include <unordered_map>
+#include "c_packer.h"
+#include "c_internal.h"
+#include "log.h"
+#include "debug.h"
+#include "threading/mutex_auto_lock.h"
+
+extern "C" {
+#include <lauxlib.h>
+}
+
+//
+// Helpers
+//
+
+// convert negative index to absolute position on Lua stack
+static inline int absidx(lua_State *L, int idx)
+{
+ assert(idx < 0);
+ return lua_gettop(L) + idx + 1;
+}
+
+// does the type put anything into PackedInstr::sdata?
+static inline bool uses_sdata(int type)
+{
+ switch (type) {
+ case LUA_TSTRING:
+ case LUA_TFUNCTION:
+ case LUA_TUSERDATA:
+ return true;
+ default:
+ return false;
+ }
+}
+
+// does the type put anything into PackedInstr::<union>?
+static inline bool uses_union(int type)
+{
+ switch (type) {
+ case LUA_TNIL:
+ case LUA_TSTRING:
+ case LUA_TFUNCTION:
+ return false;
+ default:
+ return true;
+ }
+}
+
+static inline bool can_set_into(int ktype, int vtype)
+{
+ switch (ktype) {
+ case LUA_TNUMBER:
+ return !uses_union(vtype);
+ case LUA_TSTRING:
+ return !uses_sdata(vtype);
+ default:
+ return false;
+ }
+}
+
+// is the key suitable for use with set_into?
+static inline bool suitable_key(lua_State *L, int idx)
+{
+ if (lua_type(L, idx) == LUA_TSTRING) {
+ // strings may not have a NULL byte (-> lua_setfield)
+ size_t len;
+ const char *str = lua_tolstring(L, idx, &len);
+ return strlen(str) == len;
+ } else {
+ assert(lua_type(L, idx) == LUA_TNUMBER);
+ // numbers must fit into an s32 and be integers (-> lua_rawseti)
+ lua_Number n = lua_tonumber(L, idx);
+ return std::floor(n) == n && n >= S32_MIN && n <= S32_MAX;
+ }
+}
+
+namespace {
+ // checks if you left any values on the stack, for debugging
+ class StackChecker {
+ lua_State *L;
+ int top;
+ public:
+ StackChecker(lua_State *L) : L(L), top(lua_gettop(L)) {}
+ ~StackChecker() {
+ assert(lua_gettop(L) >= top);
+ if (lua_gettop(L) > top) {
+ rawstream << "Lua stack not cleaned up: "
+ << lua_gettop(L) << " != " << top
+ << " (false-positive if exception thrown)" << std::endl;
+ }
+ }
+ };
+
+ // Since an std::vector may reallocate, this is the only safe way to keep
+ // a reference to a particular element.
+ template <typename T>
+ class VectorRef {
+ std::vector<T> *vec;
+ size_t idx;
+ VectorRef(std::vector<T> *vec, size_t idx) : vec(vec), idx(idx) {}
+ public:
+ constexpr VectorRef() : vec(nullptr), idx(0) {}
+ static VectorRef<T> front(std::vector<T> &vec) {
+ return VectorRef(&vec, 0);
+ }
+ static VectorRef<T> back(std::vector<T> &vec) {
+ return VectorRef(&vec, vec.size() - 1);
+ }
+ T &operator*() { return (*vec)[idx]; }
+ T *operator->() { return &(*vec)[idx]; }
+ operator bool() const { return vec != nullptr; }
+ };
+
+ struct Packer {
+ PackInFunc fin;
+ PackOutFunc fout;
+ };
+
+ typedef std::pair<std::string, Packer> PackerTuple;
+}
+
+static inline auto emplace(PackedValue &pv, s16 type)
+{
+ pv.i.emplace_back();
+ auto ref = VectorRef<PackedInstr>::back(pv.i);
+ ref->type = type;
+ // Initialize fields that may be left untouched
+ if (type == LUA_TTABLE) {
+ ref->uidata1 = 0;
+ ref->uidata2 = 0;
+ } else if (type == LUA_TUSERDATA) {
+ ref->ptrdata = nullptr;
+ } else if (type == INSTR_POP) {
+ ref->sidata2 = 0;
+ }
+ return ref;
+}
+
+//
+// Management of registered packers
+//
+
+static std::unordered_map<std::string, Packer> g_packers;
+static std::mutex g_packers_lock;
+
+void script_register_packer(lua_State *L, const char *regname,
+ PackInFunc fin, PackOutFunc fout)
+{
+ // Store away callbacks
+ {
+ MutexAutoLock autolock(g_packers_lock);
+ auto it = g_packers.find(regname);
+ if (it == g_packers.end()) {
+ auto &ref = g_packers[regname];
+ ref.fin = fin;
+ ref.fout = fout;
+ } else {
+ FATAL_ERROR_IF(it->second.fin != fin || it->second.fout != fout,
+ "Packer registered twice with mismatching callbacks");
+ }
+ }
+
+ // Save metatable so we can identify instances later
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_METATABLE_MAP);
+ if (lua_isnil(L, -1)) {
+ lua_newtable(L);
+ lua_pushvalue(L, -1);
+ lua_rawseti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_METATABLE_MAP);
+ }
+
+ luaL_getmetatable(L, regname);
+ FATAL_ERROR_IF(lua_isnil(L, -1), "No metatable registered with that name");
+
+ // CUSTOM_RIDX_METATABLE_MAP contains { [metatable] = "regname", ... }
+ // check first
+ lua_pushstring(L, regname);
+ lua_rawget(L, -3);
+ if (!lua_isnil(L, -1)) {
+ FATAL_ERROR_IF(lua_topointer(L, -1) != lua_topointer(L, -2),
+ "Packer registered twice with inconsistent metatable");
+ }
+ lua_pop(L, 1);
+ // then set
+ lua_pushstring(L, regname);
+ lua_rawset(L, -3);
+
+ lua_pop(L, 1);
+}
+
+static bool find_packer(const char *regname, PackerTuple &out)
+{
+ MutexAutoLock autolock(g_packers_lock);
+ auto it = g_packers.find(regname);
+ if (it == g_packers.end())
+ return false;
+ // copy data for thread safety
+ out.first = it->first;
+ out.second = it->second;
+ return true;
+}
+
+static bool find_packer(lua_State *L, int idx, PackerTuple &out)
+{
+#ifndef NDEBUG
+ StackChecker checker(L);
+#endif
+
+ // retrieve metatable of the object
+ if (lua_getmetatable(L, idx) != 1)
+ return false;
+
+ // use our global table to map it to the registry name
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_METATABLE_MAP);
+ assert(lua_istable(L, -1));
+ lua_pushvalue(L, -2);
+ lua_rawget(L, -2);
+ if (lua_isnil(L, -1)) {
+ lua_pop(L, 3);
+ return false;
+ }
+
+ // load the associated data
+ bool found = find_packer(lua_tostring(L, -1), out);
+ FATAL_ERROR_IF(!found, "Inconsistent internal state");
+ lua_pop(L, 3);
+ return true;
+}
+
+//
+// Packing implementation
+//
+
+static VectorRef<PackedInstr> record_object(lua_State *L, int idx, PackedValue &pv,
+ std::unordered_map<const void *, s32> &seen)
+{
+ const void *ptr = lua_topointer(L, idx);
+ assert(ptr);
+ auto found = seen.find(ptr);
+ if (found == seen.end()) {
+ seen[ptr] = pv.i.size();
+ return VectorRef<PackedInstr>();
+ }
+ s32 ref = found->second;
+ assert(ref < (s32)pv.i.size());
+ // reuse the value from first time
+ auto r = emplace(pv, INSTR_PUSHREF);
+ r->ref = ref;
+ pv.i[ref].keep_ref = true;
+ return r;
+}
+
+static VectorRef<PackedInstr> pack_inner(lua_State *L, int idx, int vidx, PackedValue &pv,
+ std::unordered_map<const void *, s32> &seen)
+{
+#ifndef NDEBUG
+ StackChecker checker(L);
+ assert(idx > 0);
+ assert(vidx > 0);
+#endif
+
+ switch (lua_type(L, idx)) {
+ case LUA_TNONE:
+ case LUA_TNIL:
+ return emplace(pv, LUA_TNIL);
+ case LUA_TBOOLEAN: {
+ auto r = emplace(pv, LUA_TBOOLEAN);
+ r->bdata = lua_toboolean(L, idx);
+ return r;
+ }
+ case LUA_TNUMBER: {
+ auto r = emplace(pv, LUA_TNUMBER);
+ r->ndata = lua_tonumber(L, idx);
+ return r;
+ }
+ case LUA_TSTRING: {
+ auto r = emplace(pv, LUA_TSTRING);
+ size_t len;
+ const char *str = lua_tolstring(L, idx, &len);
+ assert(str);
+ r->sdata.assign(str, len);
+ return r;
+ }
+ case LUA_TTABLE: {
+ auto r = record_object(L, idx, pv, seen);
+ if (r)
+ return r;
+ break; // execution continues
+ }
+ case LUA_TFUNCTION: {
+ auto r = record_object(L, idx, pv, seen);
+ if (r)
+ return r;
+ r = emplace(pv, LUA_TFUNCTION);
+ call_string_dump(L, idx);
+ size_t len;
+ const char *str = lua_tolstring(L, -1, &len);
+ assert(str);
+ r->sdata.assign(str, len);
+ lua_pop(L, 1);
+ return r;
+ }
+ case LUA_TUSERDATA: {
+ auto r = record_object(L, idx, pv, seen);
+ if (r)
+ return r;
+ PackerTuple ser;
+ if (!find_packer(L, idx, ser))
+ throw LuaError("Cannot serialize unsupported userdata");
+ pv.contains_userdata = true;
+ r = emplace(pv, LUA_TUSERDATA);
+ r->sdata = ser.first;
+ r->ptrdata = ser.second.fin(L, idx);
+ return r;
+ }
+ default: {
+ std::string err = "Cannot serialize type ";
+ err += lua_typename(L, lua_type(L, idx));
+ throw LuaError(err);
+ }
+ }
+
+ // LUA_TTABLE
+ lua_checkstack(L, 5);
+
+ auto rtable = emplace(pv, LUA_TTABLE);
+ const int vi_table = vidx++;
+
+ lua_pushnil(L);
+ while (lua_next(L, idx) != 0) {
+ // key at -2, value at -1
+ const int ktype = lua_type(L, -2), vtype = lua_type(L, -1);
+ if (ktype == LUA_TNUMBER)
+ rtable->uidata1++; // narr
+ else
+ rtable->uidata2++; // nrec
+
+ // check if we can use a shortcut
+ if (can_set_into(ktype, vtype) && suitable_key(L, -2)) {
+ // push only the value
+ auto rval = pack_inner(L, absidx(L, -1), vidx, pv, seen);
+ rval->pop = rval->type != LUA_TTABLE;
+ // and where to put it:
+ rval->set_into = vi_table;
+ if (ktype == LUA_TSTRING)
+ rval->sdata = lua_tostring(L, -2);
+ else
+ rval->sidata1 = lua_tointeger(L, -2);
+ // pop tables after the fact
+ if (!rval->pop) {
+ auto ri1 = emplace(pv, INSTR_POP);
+ ri1->sidata1 = vidx;
+ }
+ } else {
+ // push the key and value
+ pack_inner(L, absidx(L, -2), vidx, pv, seen);
+ vidx++;
+ pack_inner(L, absidx(L, -1), vidx, pv, seen);
+ vidx++;
+ // push an instruction to set them
+ auto ri1 = emplace(pv, INSTR_SETTABLE);
+ ri1->set_into = vi_table;
+ ri1->sidata1 = vidx - 2;
+ ri1->sidata2 = vidx - 1;
+ ri1->pop = true;
+ vidx -= 2;
+ }
+
+ lua_pop(L, 1);
+ }
+
+ assert(vidx == vi_table + 1);
+ return rtable;
+}
+
+PackedValue *script_pack(lua_State *L, int idx)
+{
+ if (idx < 0)
+ idx = absidx(L, idx);
+
+ PackedValue pv;
+ std::unordered_map<const void *, s32> seen;
+ pack_inner(L, idx, 1, pv, seen);
+
+ return new PackedValue(std::move(pv));
+}
+
+//
+// Unpacking implementation
+//
+
+void script_unpack(lua_State *L, PackedValue *pv)
+{
+ lua_newtable(L); // table at index top to track ref indices -> objects
+ const int top = lua_gettop(L);
+ int ctr = 0;
+
+ for (size_t packed_idx = 0; packed_idx < pv->i.size(); packed_idx++) {
+ auto &i = pv->i[packed_idx];
+
+ // If leaving values on stack make sure there's space (every 5th iteration)
+ if (!i.pop && (ctr++) >= 5) {
+ lua_checkstack(L, 5);
+ ctr = 0;
+ }
+
+ switch (i.type) {
+ /* Instructions */
+ case INSTR_SETTABLE:
+ lua_pushvalue(L, top + i.sidata1); // key
+ lua_pushvalue(L, top + i.sidata2); // value
+ lua_rawset(L, top + i.set_into);
+ if (i.pop) {
+ if (i.sidata1 != i.sidata2) {
+ // removing moves indices so pop higher index first
+ lua_remove(L, top + std::max(i.sidata1, i.sidata2));
+ lua_remove(L, top + std::min(i.sidata1, i.sidata2));
+ } else {
+ lua_remove(L, top + i.sidata1);
+ }
+ }
+ continue;
+ case INSTR_POP:
+ lua_remove(L, top + i.sidata1);
+ if (i.sidata2 > 0)
+ lua_remove(L, top + i.sidata2);
+ continue;
+ case INSTR_PUSHREF:
+ lua_pushinteger(L, i.ref);
+ lua_rawget(L, top);
+ break;
+
+ /* Lua types */
+ case LUA_TNIL:
+ lua_pushnil(L);
+ break;
+ case LUA_TBOOLEAN:
+ lua_pushboolean(L, i.bdata);
+ break;
+ case LUA_TNUMBER:
+ lua_pushnumber(L, i.ndata);
+ break;
+ case LUA_TSTRING:
+ lua_pushlstring(L, i.sdata.data(), i.sdata.size());
+ break;
+ case LUA_TTABLE:
+ lua_createtable(L, i.uidata1, i.uidata2);
+ break;
+ case LUA_TFUNCTION:
+ luaL_loadbuffer(L, i.sdata.data(), i.sdata.size(), nullptr);
+ break;
+ case LUA_TUSERDATA: {
+ PackerTuple ser;
+ sanity_check(find_packer(i.sdata.c_str(), ser));
+ ser.second.fout(L, i.ptrdata);
+ i.ptrdata = nullptr; // ownership taken by callback
+ break;
+ }
+
+ default:
+ assert(0);
+ break;
+ }
+
+ if (i.keep_ref) {
+ lua_pushinteger(L, packed_idx);
+ lua_pushvalue(L, -2);
+ lua_rawset(L, top);
+ }
+
+ if (i.set_into) {
+ if (!i.pop)
+ lua_pushvalue(L, -1);
+ if (uses_sdata(i.type))
+ lua_rawseti(L, top + i.set_into, i.sidata1);
+ else
+ lua_setfield(L, top + i.set_into, i.sdata.c_str());
+ } else {
+ if (i.pop)
+ lua_pop(L, 1);
+ }
+ }
+
+ // as part of the unpacking process we take ownership of all userdata
+ pv->contains_userdata = false;
+ // leave exactly one value on the stack
+ lua_settop(L, top+1);
+ lua_remove(L, top);
+}
+
+//
+// PackedValue
+//
+
+PackedValue::~PackedValue()
+{
+ if (!contains_userdata)
+ return;
+ for (auto &i : this->i) {
+ if (i.type == LUA_TUSERDATA && i.ptrdata) {
+ PackerTuple ser;
+ if (find_packer(i.sdata.c_str(), ser)) {
+ // tell it to deallocate object
+ ser.second.fout(nullptr, i.ptrdata);
+ } else {
+ assert(false);
+ }
+ }
+ }
+}
+
+//
+// script_dump_packed
+//
+
+#ifndef NDEBUG
+void script_dump_packed(const PackedValue *val)
+{
+ printf("instruction stream: [\n");
+ for (const auto &i : val->i) {
+ printf("\t(");
+ switch (i.type) {
+ case INSTR_SETTABLE:
+ printf("SETTABLE(%d, %d)", i.sidata1, i.sidata2);
+ break;
+ case INSTR_POP:
+ printf(i.sidata2 ? "POP(%d, %d)" : "POP(%d)", i.sidata1, i.sidata2);
+ break;
+ case INSTR_PUSHREF:
+ printf("PUSHREF(%d)", i.ref);
+ break;
+ case LUA_TNIL:
+ printf("nil");
+ break;
+ case LUA_TBOOLEAN:
+ printf(i.bdata ? "true" : "false");
+ break;
+ case LUA_TNUMBER:
+ printf("%f", i.ndata);
+ break;
+ case LUA_TSTRING:
+ printf("\"%s\"", i.sdata.c_str());
+ break;
+ case LUA_TTABLE:
+ printf("table(%d, %d)", i.uidata1, i.uidata2);
+ break;
+ case LUA_TFUNCTION:
+ printf("function(%lu byte)", i.sdata.size());
+ break;
+ case LUA_TUSERDATA:
+ printf("userdata %s %p", i.sdata.c_str(), i.ptrdata);
+ break;
+ default:
+ printf("!!UNKNOWN!!");
+ break;
+ }
+ if (i.set_into) {
+ if (i.type >= 0 && uses_sdata(i.type))
+ printf(", k=%d, into=%d", i.sidata1, i.set_into);
+ else if (i.type >= 0)
+ printf(", k=\"%s\", into=%d", i.sdata.c_str(), i.set_into);
+ else
+ printf(", into=%d", i.set_into);
+ }
+ if (i.keep_ref)
+ printf(", keep_ref");
+ if (i.pop)
+ printf(", pop");
+ printf(")\n");
+ }
+ printf("]\n");
+}
+#endif
diff --git a/src/script/common/c_packer.h b/src/script/common/c_packer.h
new file mode 100644
index 000000000..fe072c10a
--- /dev/null
+++ b/src/script/common/c_packer.h
@@ -0,0 +1,126 @@
+/*
+Minetest
+Copyright (C) 2022 sfan5 <sfan5@live.de>
+
+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.h"
+#include "util/basic_macros.h"
+
+extern "C" {
+#include <lua.h>
+}
+
+/*
+ This file defines an in-memory representation of Lua objects including
+ support for functions and userdata. It it used to move data between Lua
+ states and cannot be used for persistence or network transfer.
+*/
+
+#define INSTR_SETTABLE (-10)
+#define INSTR_POP (-11)
+#define INSTR_PUSHREF (-12)
+
+/**
+ * Represents a single instruction that pushes a new value or works with existing ones.
+ */
+struct PackedInstr
+{
+ s16 type; // LUA_T* or INSTR_*
+ u16 set_into; // set into table on stack
+ bool keep_ref; // is referenced later by INSTR_PUSHREF?
+ bool pop; // remove from stack?
+ union {
+ bool bdata; // boolean: value
+ lua_Number ndata; // number: value
+ struct {
+ u16 uidata1, uidata2; // table: narr, nrec
+ };
+ struct {
+ /*
+ SETTABLE: key index, value index
+ POP: indices to remove
+ otherwise w/ set_into: numeric key, -
+ */
+ s32 sidata1, sidata2;
+ };
+ void *ptrdata; // userdata: implementation defined
+ s32 ref; // PUSHREF: index of referenced instr
+ };
+ /*
+ - string: value
+ - function: buffer
+ - w/ set_into: string key (no null bytes!)
+ - userdata: name in registry
+ */
+ std::string sdata;
+
+ PackedInstr() : type(0), set_into(0), keep_ref(false), pop(false) {}
+};
+
+/**
+ * A packed value can be a primitive like a string or number but also a table
+ * including all of its contents. It is made up of a linear stream of
+ * 'instructions' that build the final value when executed.
+ */
+struct PackedValue
+{
+ std::vector<PackedInstr> i;
+ // Indicates whether there are any userdata pointers that need to be deallocated
+ bool contains_userdata = false;
+
+ PackedValue() = default;
+ ~PackedValue();
+
+ DISABLE_CLASS_COPY(PackedValue)
+
+ ALLOW_CLASS_MOVE(PackedValue)
+};
+
+/*
+ * Packing callback: Turns a Lua value at given index into a void*
+ */
+typedef void *(*PackInFunc)(lua_State *L, int idx);
+/*
+ * Unpacking callback: Turns a void* back into the Lua value (left on top of stack)
+ *
+ * Note that this function must take ownership of the pointer, so make sure
+ * to free or keep the memory.
+ * `L` can be nullptr to indicate that data should just be discarded.
+ */
+typedef void (*PackOutFunc)(lua_State *L, void *ptr);
+/*
+ * Register a packable type with the name of its metatable.
+ *
+ * Even though the callbacks are global this must be called for every Lua state
+ * that supports objects of this type.
+ * This function is thread-safe.
+ */
+void script_register_packer(lua_State *L, const char *regname,
+ PackInFunc fin, PackOutFunc fout);
+
+// Pack a Lua value
+PackedValue *script_pack(lua_State *L, int idx);
+// Unpack a Lua value (left on top of stack)
+// Note that this may modify the PackedValue, reusability is not guaranteed!
+void script_unpack(lua_State *L, PackedValue *val);
+
+// Dump contents of PackedValue to stdout for debugging
+void script_dump_packed(const PackedValue *val);
diff --git a/src/script/common/helper.cpp b/src/script/common/helper.cpp
index fbf24e1b7..72de2b14a 100644
--- a/src/script/common/helper.cpp
+++ b/src/script/common/helper.cpp
@@ -17,35 +17,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+extern "C" {
+#include <lauxlib.h>
+}
+
#include "helper.h"
#include <cmath>
-#include <sstream>
#include <irr_v2d.h>
#include <irr_v3d.h>
+#include "c_converter.h"
#include "c_types.h"
-#include "c_internal.h"
-
-// imported from c_converter.cpp with pure C++ style
-static inline void check_lua_type(lua_State *L, int index, const char *name, int type)
-{
- int t = lua_type(L, index);
- if (t != type) {
- std::string traceback = script_get_backtrace(L);
- throw LuaError(std::string("Invalid ") + (name) + " (expected " +
- lua_typename(L, (type)) + " got " + lua_typename(L, t) +
- ").\n" + traceback);
- }
-}
-
-// imported from c_converter.cpp
-#define CHECK_POS_COORD(name) \
- check_lua_type(L, -1, "position coordinate '" name "'", LUA_TNUMBER)
-#define CHECK_POS_TAB(index) check_lua_type(L, index, "position", LUA_TTABLE)
-
-bool LuaHelper::isNaN(lua_State *L, int idx)
-{
- return lua_type(L, idx) == LUA_TNUMBER && std::isnan(lua_tonumber(L, idx));
-}
/*
* Read template functions
@@ -59,74 +40,41 @@ bool LuaHelper::readParam(lua_State *L, int index)
template <>
s16 LuaHelper::readParam(lua_State *L, int index)
{
- return lua_tonumber(L, index);
+ return luaL_checkinteger(L, index);
}
template <>
int LuaHelper::readParam(lua_State *L, int index)
{
- return luaL_checkint(L, index);
+ return luaL_checkinteger(L, index);
}
template <>
float LuaHelper::readParam(lua_State *L, int index)
{
- if (isNaN(L, index))
- throw LuaError("NaN value is not allowed.");
+ lua_Number v = luaL_checknumber(L, index);
+ if (std::isnan(v) && std::isinf(v))
+ throw LuaError("Invalid float value (NaN or infinity)");
- return (float)luaL_checknumber(L, index);
+ return static_cast<float>(v);
}
template <>
v2s16 LuaHelper::readParam(lua_State *L, int index)
{
- v2s16 p;
- CHECK_POS_TAB(index);
- lua_getfield(L, index, "x");
- CHECK_POS_COORD("x");
- p.X = readParam<s16>(L, -1);
- lua_pop(L, 1);
- lua_getfield(L, index, "y");
- CHECK_POS_COORD("y");
- p.Y = readParam<s16>(L, -1);
- lua_pop(L, 1);
- return p;
+ return read_v2s16(L, index);
}
template <>
v2f LuaHelper::readParam(lua_State *L, int index)
{
- v2f p;
- CHECK_POS_TAB(index);
- lua_getfield(L, index, "x");
- CHECK_POS_COORD("x");
- p.X = readParam<float>(L, -1);
- lua_pop(L, 1);
- lua_getfield(L, index, "y");
- CHECK_POS_COORD("y");
- p.Y = readParam<float>(L, -1);
- lua_pop(L, 1);
- return p;
+ return check_v2f(L, index);
}
template <>
v3f LuaHelper::readParam(lua_State *L, int index)
{
- v3f p;
- CHECK_POS_TAB(index);
- lua_getfield(L, index, "x");
- CHECK_POS_COORD("x");
- p.X = readParam<float>(L, -1);
- lua_pop(L, 1);
- lua_getfield(L, index, "y");
- CHECK_POS_COORD("y");
- p.Y = readParam<float>(L, -1);
- lua_pop(L, 1);
- lua_getfield(L, index, "z");
- CHECK_POS_COORD("z");
- p.Z = readParam<float>(L, -1);
- lua_pop(L, 1);
- return p;
+ return check_v3f(L, index);
}
template <>
diff --git a/src/script/common/helper.h b/src/script/common/helper.h
index 6491e73cf..fc462b6ef 100644
--- a/src/script/common/helper.h
+++ b/src/script/common/helper.h
@@ -21,14 +21,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
extern "C" {
#include <lua.h>
-#include <lauxlib.h>
}
class LuaHelper
{
protected:
- static bool isNaN(lua_State *L, int idx);
-
/**
* Read a value using a template type T from Lua State L and index
*
diff --git a/src/script/cpp_api/s_async.cpp b/src/script/cpp_api/s_async.cpp
index dacdcd75a..42a794ceb 100644
--- a/src/script/cpp_api/s_async.cpp
+++ b/src/script/cpp_api/s_async.cpp
@@ -21,9 +21,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <cstdlib>
extern "C" {
-#include "lua.h"
-#include "lauxlib.h"
-#include "lualib.h"
+#include <lua.h>
+#include <lauxlib.h>
+#include <lualib.h>
}
#include "server.h"
@@ -32,6 +32,7 @@ extern "C" {
#include "filesys.h"
#include "porting.h"
#include "common/c_internal.h"
+#include "common/c_packer.h"
#include "lua_api/l_base.h"
/******************************************************************************/
@@ -76,19 +77,34 @@ void AsyncEngine::initialize(unsigned int numEngines)
{
initDone = true;
- for (unsigned int i = 0; i < numEngines; i++) {
- AsyncWorkerThread *toAdd = new AsyncWorkerThread(this,
- std::string("AsyncWorker-") + itos(i));
- workerThreads.push_back(toAdd);
- toAdd->start();
+ if (numEngines == 0) {
+ // Leave one core for the main thread and one for whatever else
+ autoscaleMaxWorkers = Thread::getNumberOfProcessors();
+ if (autoscaleMaxWorkers >= 2)
+ autoscaleMaxWorkers -= 2;
+ infostream << "AsyncEngine: using at most " << autoscaleMaxWorkers
+ << " threads with automatic scaling" << std::endl;
+
+ addWorkerThread();
+ } else {
+ for (unsigned int i = 0; i < numEngines; i++)
+ addWorkerThread();
}
}
+void AsyncEngine::addWorkerThread()
+{
+ AsyncWorkerThread *toAdd = new AsyncWorkerThread(this,
+ std::string("AsyncWorker-") + itos(workerThreads.size()));
+ workerThreads.push_back(toAdd);
+ toAdd->start();
+}
+
/******************************************************************************/
u32 AsyncEngine::queueAsyncJob(std::string &&func, std::string &&params,
const std::string &mod_origin)
{
- jobQueueMutex.lock();
+ MutexAutoLock autolock(jobQueueMutex);
u32 jobId = jobIdCounter++;
jobQueue.emplace_back();
@@ -99,7 +115,23 @@ u32 AsyncEngine::queueAsyncJob(std::string &&func, std::string &&params,
to_add.mod_origin = mod_origin;
jobQueueCounter.post();
- jobQueueMutex.unlock();
+ return jobId;
+}
+
+u32 AsyncEngine::queueAsyncJob(std::string &&func, PackedValue *params,
+ const std::string &mod_origin)
+{
+ MutexAutoLock autolock(jobQueueMutex);
+ u32 jobId = jobIdCounter++;
+
+ jobQueue.emplace_back();
+ auto &to_add = jobQueue.back();
+ to_add.id = jobId;
+ to_add.function = std::move(func);
+ to_add.params_ext.reset(params);
+ to_add.mod_origin = mod_origin;
+
+ jobQueueCounter.post();
return jobId;
}
@@ -132,6 +164,12 @@ void AsyncEngine::putJobResult(LuaJobInfo &&result)
/******************************************************************************/
void AsyncEngine::step(lua_State *L)
{
+ stepJobResults(L);
+ stepAutoscale();
+}
+
+void AsyncEngine::stepJobResults(lua_State *L)
+{
int error_handler = PUSH_ERROR_HANDLER(L);
lua_getglobal(L, "core");
@@ -148,7 +186,10 @@ void AsyncEngine::step(lua_State *L)
luaL_checktype(L, -1, LUA_TFUNCTION);
lua_pushinteger(L, j.id);
- lua_pushlstring(L, j.result.data(), j.result.size());
+ if (j.result_ext)
+ script_unpack(L, j.result_ext.get());
+ else
+ lua_pushlstring(L, j.result.data(), j.result.size());
// Call handler
const char *origin = j.mod_origin.empty() ? nullptr : j.mod_origin.c_str();
@@ -161,12 +202,71 @@ void AsyncEngine::step(lua_State *L)
lua_pop(L, 2); // Pop core and error handler
}
+void AsyncEngine::stepAutoscale()
+{
+ if (workerThreads.size() >= autoscaleMaxWorkers)
+ return;
+
+ MutexAutoLock autolock(jobQueueMutex);
+
+ // 2) If the timer elapsed, check again
+ if (autoscaleTimer && porting::getTimeMs() >= autoscaleTimer) {
+ autoscaleTimer = 0;
+ // Determine overlap with previous snapshot
+ unsigned int n = 0;
+ for (const auto &it : jobQueue)
+ n += autoscaleSeenJobs.count(it.id);
+ autoscaleSeenJobs.clear();
+ infostream << "AsyncEngine: " << n << " jobs were still waiting after 1s" << std::endl;
+ // Start this many new threads
+ while (workerThreads.size() < autoscaleMaxWorkers && n > 0) {
+ addWorkerThread();
+ n--;
+ }
+ return;
+ }
+
+ // 1) Check if there's anything in the queue
+ if (!autoscaleTimer && !jobQueue.empty()) {
+ // Take a snapshot of all jobs we have seen
+ for (const auto &it : jobQueue)
+ autoscaleSeenJobs.emplace(it.id);
+ // and set a timer for 1 second
+ autoscaleTimer = porting::getTimeMs() + 1000;
+ }
+}
+
/******************************************************************************/
-void AsyncEngine::prepareEnvironment(lua_State* L, int top)
+bool AsyncEngine::prepareEnvironment(lua_State* L, int top)
{
for (StateInitializer &stateInitializer : stateInitializers) {
stateInitializer(L, top);
}
+
+ auto *script = ModApiBase::getScriptApiBase(L);
+ try {
+ script->loadMod(Server::getBuiltinLuaPath() + DIR_DELIM + "init.lua",
+ BUILTIN_MOD_NAME);
+ } catch (const ModError &e) {
+ errorstream << "Execution of async base environment failed: "
+ << e.what() << std::endl;
+ FATAL_ERROR("Execution of async base environment failed");
+ }
+
+ // Load per mod stuff
+ if (server) {
+ const auto &list = server->m_async_init_files;
+ try {
+ for (auto &it : list)
+ script->loadMod(it.second, it.first);
+ } catch (const ModError &e) {
+ errorstream << "Failed to load mod script inside async environment." << std::endl;
+ server->setAsyncFatalError(e.what());
+ return false;
+ }
+ }
+
+ return true;
}
/******************************************************************************/
@@ -178,15 +278,25 @@ AsyncWorkerThread::AsyncWorkerThread(AsyncEngine* jobDispatcher,
{
lua_State *L = getStack();
+ if (jobDispatcher->server) {
+ setGameDef(jobDispatcher->server);
+
+ if (g_settings->getBool("secure.enable_security"))
+ initializeSecurity();
+ }
+
// Prepare job lua environment
lua_getglobal(L, "core");
int top = lua_gettop(L);
// Push builtin initialization type
- lua_pushstring(L, "async");
+ lua_pushstring(L, jobDispatcher->server ? "async_game" : "async");
lua_setglobal(L, "INIT");
- jobDispatcher->prepareEnvironment(L, top);
+ if (!jobDispatcher->prepareEnvironment(L, top)) {
+ // can't throw from here so we're stuck with this
+ isErrored = true;
+ }
}
/******************************************************************************/
@@ -198,19 +308,20 @@ AsyncWorkerThread::~AsyncWorkerThread()
/******************************************************************************/
void* AsyncWorkerThread::run()
{
- lua_State *L = getStack();
+ if (isErrored)
+ return nullptr;
- try {
- 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;
- FATAL_ERROR("Execution of async base environment failed");
- }
+ lua_State *L = getStack();
int error_handler = PUSH_ERROR_HANDLER(L);
+ auto report_error = [this] (const ModError &e) {
+ if (jobDispatcher->server)
+ jobDispatcher->server->setAsyncFatalError(e.what());
+ else
+ errorstream << e.what() << std::endl;
+ };
+
lua_getglobal(L, "core");
if (lua_isnil(L, -1)) {
FATAL_ERROR("Unable to find core within async environment!");
@@ -223,6 +334,8 @@ void* AsyncWorkerThread::run()
if (!jobDispatcher->getJob(&j) || stopRequested())
continue;
+ const bool use_ext = !!j.params_ext;
+
lua_getfield(L, -1, "job_processor");
if (lua_isnil(L, -1))
FATAL_ERROR("Unable to get async job processor!");
@@ -232,7 +345,10 @@ void* AsyncWorkerThread::run()
errorstream << "ASYNC WORKER: Unable to deserialize function" << std::endl;
lua_pushnil(L);
}
- lua_pushlstring(L, j.params.data(), j.params.size());
+ if (use_ext)
+ script_unpack(L, j.params_ext.get());
+ else
+ lua_pushlstring(L, j.params.data(), j.params.size());
// Call it
setOriginDirect(j.mod_origin.empty() ? nullptr : j.mod_origin.c_str());
@@ -241,19 +357,28 @@ void* AsyncWorkerThread::run()
try {
scriptError(result, "<async>");
} catch (const ModError &e) {
- errorstream << e.what() << std::endl;
+ report_error(e);
}
} else {
// Fetch result
- size_t length;
- const char *retval = lua_tolstring(L, -1, &length);
- j.result.assign(retval, length);
+ if (use_ext) {
+ try {
+ j.result_ext.reset(script_pack(L, -1));
+ } catch (const ModError &e) {
+ report_error(e);
+ result = LUA_ERRERR;
+ }
+ } else {
+ size_t length;
+ const char *retval = lua_tolstring(L, -1, &length);
+ j.result.assign(retval, length);
+ }
}
lua_pop(L, 1); // Pop retval
// Put job result
- if (!j.result.empty())
+ if (result == 0)
jobDispatcher->putJobResult(std::move(j));
}
diff --git a/src/script/cpp_api/s_async.h b/src/script/cpp_api/s_async.h
index 697cb0221..1e34e40ea 100644
--- a/src/script/cpp_api/s_async.h
+++ b/src/script/cpp_api/s_async.h
@@ -21,11 +21,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <vector>
#include <deque>
+#include <unordered_set>
+#include <memory>
+#include <lua.h>
#include "threading/semaphore.h"
#include "threading/thread.h"
-#include "lua.h"
+#include "common/c_packer.h"
#include "cpp_api/s_base.h"
+#include "cpp_api/s_security.h"
// Forward declarations
class AsyncEngine;
@@ -42,8 +46,12 @@ struct LuaJobInfo
std::string function;
// Parameter to be passed to function (serialized)
std::string params;
+ // Alternative parameters
+ std::unique_ptr<PackedValue> params_ext;
// Result of function call (serialized)
std::string result;
+ // Alternative result
+ std::unique_ptr<PackedValue> result_ext;
// Name of the mod who invoked this call
std::string mod_origin;
// JobID used to identify a job and match it to callback
@@ -51,7 +59,8 @@ struct LuaJobInfo
};
// Asynchronous working environment
-class AsyncWorkerThread : public Thread, virtual public ScriptApiBase {
+class AsyncWorkerThread : public Thread,
+ virtual public ScriptApiBase, public ScriptApiSecurity {
friend class AsyncEngine;
public:
virtual ~AsyncWorkerThread();
@@ -63,6 +72,7 @@ protected:
private:
AsyncEngine *jobDispatcher = nullptr;
+ bool isErrored = false;
};
// Asynchornous thread and job management
@@ -71,6 +81,7 @@ class AsyncEngine {
typedef void (*StateInitializer)(lua_State *L, int top);
public:
AsyncEngine() = default;
+ AsyncEngine(Server *server) : server(server) {};
~AsyncEngine();
/**
@@ -81,7 +92,7 @@ public:
/**
* Create async engine tasks and lock function registration
- * @param numEngines Number of async threads to be started
+ * @param numEngines Number of worker threads, 0 for automatic scaling
*/
void initialize(unsigned int numEngines);
@@ -95,8 +106,16 @@ public:
const std::string &mod_origin = "");
/**
+ * Queue an async job
+ * @param func Serialized lua function
+ * @param params Serialized parameters (takes ownership!)
+ * @return ID of queued job
+ */
+ u32 queueAsyncJob(std::string &&func, PackedValue *params,
+ const std::string &mod_origin = "");
+
+ /**
* Engine step to process finished jobs
- * the engine step is one way to pass events back, PushFinishedJobs another
* @param L The Lua stack
*/
void step(lua_State *L);
@@ -117,18 +136,43 @@ protected:
void putJobResult(LuaJobInfo &&result);
/**
+ * Start an additional worker thread
+ */
+ void addWorkerThread();
+
+ /**
+ * Process finished jobs callbacks
+ */
+ void stepJobResults(lua_State *L);
+
+ /**
+ * Handle automatic scaling of worker threads
+ */
+ void stepAutoscale();
+
+ /**
* Initialize environment with current registred functions
* this function adds all functions registred by registerFunction to the
* passed lua stack
* @param L Lua stack to initialize
* @param top Stack position
+ * @return false if a mod error ocurred
*/
- void prepareEnvironment(lua_State* L, int top);
+ bool prepareEnvironment(lua_State* L, int top);
private:
// Variable locking the engine against further modification
bool initDone = false;
+ // Maximum number of worker threads for automatic scaling
+ // 0 if disabled
+ unsigned int autoscaleMaxWorkers = 0;
+ u64 autoscaleTimer = 0;
+ std::unordered_set<u32> autoscaleSeenJobs;
+
+ // Only set for the server async environment (duh)
+ Server *server = nullptr;
+
// Internal store for registred state initializers
std::vector<StateInitializer> stateInitializers;
diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp
index f7b8a5102..595c9e540 100644
--- a/src/script/cpp_api/s_base.cpp
+++ b/src/script/cpp_api/s_base.cpp
@@ -121,6 +121,14 @@ ScriptApiBase::ScriptApiBase(ScriptingType type):
lua_newtable(m_luastack);
lua_setglobal(m_luastack, "core");
+ // vector.metatable is stored in the registry for quick access from C++.
+ lua_newtable(m_luastack);
+ lua_rawseti(m_luastack, LUA_REGISTRYINDEX, CUSTOM_RIDX_VECTOR_METATABLE);
+ lua_newtable(m_luastack);
+ lua_rawgeti(m_luastack, LUA_REGISTRYINDEX, CUSTOM_RIDX_VECTOR_METATABLE);
+ lua_setfield(m_luastack, -2, "metatable");
+ lua_setglobal(m_luastack, "vector");
+
if (m_type == ScriptingType::Client)
lua_pushstring(m_luastack, "/");
else
diff --git a/src/script/cpp_api/s_client.cpp b/src/script/cpp_api/s_client.cpp
index c889fffa0..b02a0c7be 100644
--- a/src/script/cpp_api/s_client.cpp
+++ b/src/script/cpp_api/s_client.cpp
@@ -281,15 +281,7 @@ bool ScriptApiClient::on_inventory_open(Inventory *inventory)
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_inventory_open");
- std::vector<const InventoryList*> lists = inventory->getLists();
- std::vector<const InventoryList*>::iterator iter = lists.begin();
- lua_createtable(L, 0, lists.size());
- for (; iter != lists.end(); iter++) {
- const char* name = (*iter)->getName().c_str();
- lua_pushstring(L, name);
- push_inventory_list(L, inventory, name);
- lua_rawset(L, -3);
- }
+ push_inventory_lists(L, *inventory);
try {
runCallbacks(1, RUN_CALLBACKS_MODE_OR);
diff --git a/src/script/cpp_api/s_entity.cpp b/src/script/cpp_api/s_entity.cpp
index 06337b9e8..852a27ddc 100644
--- a/src/script/cpp_api/s_entity.cpp
+++ b/src/script/cpp_api/s_entity.cpp
@@ -103,7 +103,7 @@ void ScriptApiEntity::luaentity_Activate(u16 id,
lua_pop(L, 2); // Pop object and error handler
}
-void ScriptApiEntity::luaentity_Deactivate(u16 id)
+void ScriptApiEntity::luaentity_Deactivate(u16 id, bool removal)
{
SCRIPTAPI_PRECHECKHEADER
@@ -120,9 +120,9 @@ void ScriptApiEntity::luaentity_Deactivate(u16 id)
if (!lua_isnil(L, -1)) {
luaL_checktype(L, -1, LUA_TFUNCTION);
lua_pushvalue(L, object);
-
+ lua_pushboolean(L, removal);
setOriginFromTable(object);
- PCALL_RES(lua_pcall(L, 1, 0, error_handler));
+ PCALL_RES(lua_pcall(L, 2, 0, error_handler));
} else {
lua_pop(L, 1);
}
@@ -244,7 +244,7 @@ bool ScriptApiEntity::luaentity_Punch(u16 id,
{
SCRIPTAPI_PRECHECKHEADER
- //infostream<<"scriptapi_luaentity_step: id="<<id<<std::endl;
+ assert(puncher);
int error_handler = PUSH_ERROR_HANDLER(L);
@@ -294,7 +294,10 @@ bool ScriptApiEntity::luaentity_run_simple_callback(u16 id,
}
luaL_checktype(L, -1, LUA_TFUNCTION);
lua_pushvalue(L, object); // self
- objectrefGetOrCreate(L, sao); // killer reference
+ if (sao)
+ objectrefGetOrCreate(L, sao); // sao reference
+ else
+ lua_pushnil(L);
setOriginFromTable(object);
PCALL_RES(lua_pcall(L, 2, 1, error_handler));
diff --git a/src/script/cpp_api/s_entity.h b/src/script/cpp_api/s_entity.h
index 7658ae922..13f3e9aa3 100644
--- a/src/script/cpp_api/s_entity.h
+++ b/src/script/cpp_api/s_entity.h
@@ -33,7 +33,7 @@ public:
bool luaentity_Add(u16 id, const char *name);
void luaentity_Activate(u16 id,
const std::string &staticdata, u32 dtime_s);
- void luaentity_Deactivate(u16 id);
+ void luaentity_Deactivate(u16 id, bool removal);
void luaentity_Remove(u16 id);
std::string luaentity_GetStaticdata(u16 id);
void luaentity_GetProperties(u16 id,
diff --git a/src/script/cpp_api/s_env.cpp b/src/script/cpp_api/s_env.cpp
index 874c37b6e..af68f689f 100644
--- a/src/script/cpp_api/s_env.cpp
+++ b/src/script/cpp_api/s_env.cpp
@@ -140,10 +140,10 @@ 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);
diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp
index a6c5114b2..316b19926 100644
--- a/src/script/cpp_api/s_security.cpp
+++ b/src/script/cpp_api/s_security.cpp
@@ -98,6 +98,7 @@ void ScriptApiSecurity::initializeSecurity()
"type",
"unpack",
"_VERSION",
+ "vector",
"xpcall",
};
static const char *whitelist_tables[] = {
@@ -127,8 +128,6 @@ void ScriptApiSecurity::initializeSecurity()
"gethook",
"traceback",
"getinfo",
- "getmetatable",
- "setmetatable",
"upvalueid",
"sethook",
"debug",
@@ -254,6 +253,10 @@ void ScriptApiSecurity::initializeSecurity()
lua_pushnil(L);
lua_setfield(L, old_globals, "core");
+ // 'vector' as well.
+ lua_pushnil(L);
+ lua_setfield(L, old_globals, "vector");
+
lua_pop(L, 1); // Pop globals_backup
@@ -296,6 +299,7 @@ void ScriptApiSecurity::initializeSecurityClient()
"type",
"unpack",
"_VERSION",
+ "vector",
"xpcall",
// Completely safe libraries
"coroutine",
@@ -413,6 +417,12 @@ void ScriptApiSecurity::setLuaEnv(lua_State *L, int thread)
bool ScriptApiSecurity::isSecure(lua_State *L)
{
+#ifndef SERVER
+ auto script = ModApiBase::getScriptApiBase(L);
+ // CSM keeps no globals backup but is always secure
+ if (script->getType() == ScriptingType::Client)
+ return true;
+#endif
lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP);
bool secure = !lua_isnil(L, -1);
lua_pop(L, 1);
diff --git a/src/script/lua_api/l_areastore.cpp b/src/script/lua_api/l_areastore.cpp
index 45724e604..ec2656c4a 100644
--- a/src/script/lua_api/l_areastore.cpp
+++ b/src/script/lua_api/l_areastore.cpp
@@ -27,26 +27,26 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "filesys.h"
#include <fstream>
-static inline void get_data_and_border_flags(lua_State *L, u8 start_i,
- bool *borders, bool *data)
+static inline void get_data_and_corner_flags(lua_State *L, u8 start_i,
+ bool *corners, bool *data)
{
if (!lua_isboolean(L, start_i))
return;
- *borders = lua_toboolean(L, start_i);
+ *corners = lua_toboolean(L, start_i);
if (!lua_isboolean(L, start_i + 1))
return;
*data = lua_toboolean(L, start_i + 1);
}
static void push_area(lua_State *L, const Area *a,
- bool include_borders, bool include_data)
+ bool include_corners, bool include_data)
{
- if (!include_borders && !include_data) {
+ if (!include_corners && !include_data) {
lua_pushboolean(L, true);
return;
}
lua_newtable(L);
- if (include_borders) {
+ if (include_corners) {
push_v3s16(L, a->minedge);
lua_setfield(L, -2, "min");
push_v3s16(L, a->maxedge);
@@ -59,13 +59,13 @@ static void push_area(lua_State *L, const Area *a,
}
static inline void push_areas(lua_State *L, const std::vector<Area *> &areas,
- bool borders, bool data)
+ bool corners, bool data)
{
lua_newtable(L);
size_t cnt = areas.size();
for (size_t i = 0; i < cnt; i++) {
lua_pushnumber(L, areas[i]->id);
- push_area(L, areas[i], borders, data);
+ push_area(L, areas[i], corners, data);
lua_settable(L, -3);
}
}
@@ -94,7 +94,7 @@ int LuaAreaStore::gc_object(lua_State *L)
return 0;
}
-// get_area(id, include_borders, include_data)
+// get_area(id, include_corners, include_data)
int LuaAreaStore::l_get_area(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
@@ -104,9 +104,9 @@ int LuaAreaStore::l_get_area(lua_State *L)
u32 id = luaL_checknumber(L, 2);
- bool include_borders = true;
+ bool include_corners = true;
bool include_data = false;
- get_data_and_border_flags(L, 3, &include_borders, &include_data);
+ get_data_and_corner_flags(L, 3, &include_corners, &include_data);
const Area *res;
@@ -114,12 +114,12 @@ int LuaAreaStore::l_get_area(lua_State *L)
if (!res)
return 0;
- push_area(L, res, include_borders, include_data);
+ push_area(L, res, include_corners, include_data);
return 1;
}
-// get_areas_for_pos(pos, include_borders, include_data)
+// get_areas_for_pos(pos, include_corners, include_data)
int LuaAreaStore::l_get_areas_for_pos(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
@@ -129,19 +129,19 @@ int LuaAreaStore::l_get_areas_for_pos(lua_State *L)
v3s16 pos = check_v3s16(L, 2);
- bool include_borders = true;
+ bool include_corners = true;
bool include_data = false;
- get_data_and_border_flags(L, 3, &include_borders, &include_data);
+ get_data_and_corner_flags(L, 3, &include_corners, &include_data);
std::vector<Area *> res;
ast->getAreasForPos(&res, pos);
- push_areas(L, res, include_borders, include_data);
+ push_areas(L, res, include_corners, include_data);
return 1;
}
-// get_areas_in_area(edge1, edge2, accept_overlap, include_borders, include_data)
+// get_areas_in_area(corner1, corner2, accept_overlap, include_corners, include_data)
int LuaAreaStore::l_get_areas_in_area(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
@@ -149,25 +149,26 @@ int LuaAreaStore::l_get_areas_in_area(lua_State *L)
LuaAreaStore *o = checkobject(L, 1);
AreaStore *ast = o->as;
- v3s16 minedge = check_v3s16(L, 2);
- v3s16 maxedge = check_v3s16(L, 3);
+ v3s16 minp = check_v3s16(L, 2);
+ v3s16 maxp = check_v3s16(L, 3);
+ sortBoxVerticies(minp, maxp);
- bool include_borders = true;
+ bool include_corners = true;
bool include_data = false;
bool accept_overlap = false;
if (lua_isboolean(L, 4)) {
accept_overlap = readParam<bool>(L, 4);
- get_data_and_border_flags(L, 5, &include_borders, &include_data);
+ get_data_and_corner_flags(L, 5, &include_corners, &include_data);
}
std::vector<Area *> res;
- ast->getAreasInArea(&res, minedge, maxedge, accept_overlap);
- push_areas(L, res, include_borders, include_data);
+ ast->getAreasInArea(&res, minp, maxp, accept_overlap);
+ push_areas(L, res, include_corners, include_data);
return 1;
}
-// insert_area(edge1, edge2, data, id)
+// insert_area(corner1, corner2, data, id)
int LuaAreaStore::l_insert_area(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
diff --git a/src/script/lua_api/l_client.cpp b/src/script/lua_api/l_client.cpp
index aaced7cd0..05ac53cbb 100644
--- a/src/script/lua_api/l_client.cpp
+++ b/src/script/lua_api/l_client.cpp
@@ -268,30 +268,32 @@ int ModApiClient::l_sound_play(lua_State *L)
SimpleSoundSpec spec;
read_soundspec(L, 1, spec);
+ SoundLocation type = SoundLocation::Local;
float gain = 1.0f;
- float pitch = 1.0f;
- bool looped = false;
- s32 handle;
+ v3f position;
if (lua_istable(L, 2)) {
getfloatfield(L, 2, "gain", gain);
- getfloatfield(L, 2, "pitch", pitch);
- getboolfield(L, 2, "loop", looped);
+ getfloatfield(L, 2, "pitch", spec.pitch);
+ getboolfield(L, 2, "loop", spec.loop);
lua_getfield(L, 2, "pos");
if (!lua_isnil(L, -1)) {
- v3f pos = read_v3f(L, -1) * BS;
+ position = read_v3f(L, -1) * BS;
+ type = SoundLocation::Position;
lua_pop(L, 1);
- handle = sound->playSoundAt(
- spec.name, looped, gain * spec.gain, pos, pitch);
- lua_pushinteger(L, handle);
- return 1;
}
}
- handle = sound->playSound(spec.name, looped, gain * spec.gain, spec.fade, pitch);
- lua_pushinteger(L, handle);
+ spec.gain *= gain;
+ s32 handle;
+ if (type == SoundLocation::Local)
+ handle = sound->playSound(spec);
+ else
+ handle = sound->playSoundAt(spec, position);
+
+ lua_pushinteger(L, handle);
return 1;
}
diff --git a/src/script/lua_api/l_craft.cpp b/src/script/lua_api/l_craft.cpp
index 18622ee00..137b210be 100644
--- a/src/script/lua_api/l_craft.cpp
+++ b/src/script/lua_api/l_craft.cpp
@@ -371,8 +371,9 @@ int ModApiCraft::l_clear_craft(lua_State *L)
int ModApiCraft::l_get_craft_result(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
+ IGameDef *gdef = getGameDef(L);
- int input_i = 1;
+ const int input_i = 1;
std::string method_s = getstringfield_default(L, input_i, "method", "normal");
enum CraftMethod method = (CraftMethod)getenumfield(L, input_i, "method",
es_CraftMethod, CRAFT_METHOD_NORMAL);
@@ -382,10 +383,9 @@ int ModApiCraft::l_get_craft_result(lua_State *L)
width = luaL_checkinteger(L, -1);
lua_pop(L, 1);
lua_getfield(L, input_i, "items");
- std::vector<ItemStack> items = read_items(L, -1,getServer(L));
+ std::vector<ItemStack> items = read_items(L, -1, gdef);
lua_pop(L, 1); // items
- IGameDef *gdef = getServer(L);
ICraftDefManager *cdef = gdef->cdef();
CraftInput input(method, width, items);
CraftOutput output;
@@ -465,13 +465,13 @@ static void push_craft_recipes(lua_State *L, IGameDef *gdef,
const std::vector<CraftDefinition*> &recipes,
const CraftOutput &output)
{
- lua_createtable(L, recipes.size(), 0);
-
if (recipes.empty()) {
lua_pushnil(L);
return;
}
+ lua_createtable(L, recipes.size(), 0);
+
std::vector<CraftDefinition*>::const_iterator it = recipes.begin();
for (unsigned i = 0; it != recipes.end(); ++it) {
lua_newtable(L);
@@ -487,10 +487,9 @@ int ModApiCraft::l_get_craft_recipe(lua_State *L)
NO_MAP_LOCK_REQUIRED;
std::string item = luaL_checkstring(L, 1);
- Server *server = getServer(L);
+ IGameDef *gdef = getGameDef(L);
CraftOutput output(item, 0);
- std::vector<CraftDefinition*> recipes = server->cdef()
- ->getCraftRecipes(output, server, 1);
+ auto recipes = gdef->cdef()->getCraftRecipes(output, gdef, 1);
lua_createtable(L, 1, 0);
@@ -500,7 +499,7 @@ int ModApiCraft::l_get_craft_recipe(lua_State *L)
setintfield(L, -1, "width", 0);
return 1;
}
- push_craft_recipe(L, server, recipes[0], output);
+ push_craft_recipe(L, gdef, recipes[0], output);
return 1;
}
@@ -510,12 +509,11 @@ int ModApiCraft::l_get_all_craft_recipes(lua_State *L)
NO_MAP_LOCK_REQUIRED;
std::string item = luaL_checkstring(L, 1);
- Server *server = getServer(L);
+ IGameDef *gdef = getGameDef(L);
CraftOutput output(item, 0);
- std::vector<CraftDefinition*> recipes = server->cdef()
- ->getCraftRecipes(output, server);
+ auto recipes = gdef->cdef()->getCraftRecipes(output, gdef);
- push_craft_recipes(L, server, recipes, output);
+ push_craft_recipes(L, gdef, recipes, output);
return 1;
}
@@ -527,3 +525,11 @@ void ModApiCraft::Initialize(lua_State *L, int top)
API_FCT(register_craft);
API_FCT(clear_craft);
}
+
+void ModApiCraft::InitializeAsync(lua_State *L, int top)
+{
+ // all read-only functions
+ API_FCT(get_all_craft_recipes);
+ API_FCT(get_craft_recipe);
+ API_FCT(get_craft_result);
+}
diff --git a/src/script/lua_api/l_craft.h b/src/script/lua_api/l_craft.h
index 9002b23ef..5234af56f 100644
--- a/src/script/lua_api/l_craft.h
+++ b/src/script/lua_api/l_craft.h
@@ -45,4 +45,5 @@ private:
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_env.cpp b/src/script/lua_api/l_env.cpp
index 18ee3a521..b26c89e7d 100644
--- a/src/script/lua_api/l_env.cpp
+++ b/src/script/lua_api/l_env.cpp
@@ -640,7 +640,7 @@ int ModApiEnvMod::l_add_entity(lua_State *L)
v3f pos = checkFloatPos(L, 1);
const char *name = luaL_checkstring(L, 2);
- const char *staticdata = luaL_optstring(L, 3, "");
+ std::string staticdata = readParam<std::string>(L, 3, "");
ServerActiveObject *obj = new LuaEntitySAO(env, pos, name, staticdata);
int objectid = env->addActiveObject(obj);
@@ -757,7 +757,7 @@ int ModApiEnvMod::l_get_objects_in_area(lua_State *L)
{
GET_ENV_PTR;
ScriptApiBase *script = getScriptApiBase(L);
-
+
v3f minp = read_v3f(L, 1) * BS;
v3f maxp = read_v3f(L, 2) * BS;
aabb3f box(minp, maxp);
@@ -1219,7 +1219,8 @@ int ModApiEnvMod::l_emerge_area(lua_State *L)
sortBoxVerticies(bpmin, bpmax);
size_t num_blocks = VoxelArea(bpmin, bpmax).getVolume();
- assert(num_blocks != 0);
+ if (num_blocks == 0)
+ return 0;
if (lua_isfunction(L, 3)) {
callback = LuaEmergeAreaCallback;
@@ -1386,7 +1387,7 @@ int ModApiEnvMod::l_transforming_liquid_add(lua_State *L)
GET_ENV_PTR;
v3s16 p0 = read_v3s16(L, 1);
- env->getMap().transforming_liquid_add(p0);
+ env->getServerMap().transforming_liquid_add(p0);
return 1;
}
@@ -1409,7 +1410,7 @@ int ModApiEnvMod::l_compare_block_status(lua_State *L)
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
diff --git a/src/script/lua_api/l_env.h b/src/script/lua_api/l_env.h
index 67c76faae..a7d406d2a 100644
--- a/src/script/lua_api/l_env.h
+++ b/src/script/lua_api/l_env.h
@@ -114,7 +114,7 @@ private:
// get_objects_inside_radius(pos, radius)
static int l_get_objects_inside_radius(lua_State *L);
-
+
// get_objects_in_area(pos, minp, maxp)
static int l_get_objects_in_area(lua_State *L);
diff --git a/src/script/lua_api/l_internal.h b/src/script/lua_api/l_internal.h
index 672e535ca..de73ff42a 100644
--- a/src/script/lua_api/l_internal.h
+++ b/src/script/lua_api/l_internal.h
@@ -69,7 +69,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// Retrieve Environment pointer as `env` (no map lock)
#define GET_PLAIN_ENV_PTR_NO_MAP_LOCK \
- Environment *env = (Environment *)getEnv(L); \
+ Environment *env = getEnv(L); \
if (env == NULL) \
return 0
diff --git a/src/script/lua_api/l_inventory.cpp b/src/script/lua_api/l_inventory.cpp
index b0a4ee194..175047e58 100644
--- a/src/script/lua_api/l_inventory.cpp
+++ b/src/script/lua_api/l_inventory.cpp
@@ -214,11 +214,16 @@ int InvRef::l_get_list(lua_State *L)
InvRef *ref = checkobject(L, 1);
const char *listname = luaL_checkstring(L, 2);
Inventory *inv = getinv(L, ref);
- if(inv){
- push_inventory_list(L, inv, listname);
- } else {
+ if (!inv) {
lua_pushnil(L);
+ return 1;
}
+ InventoryList *invlist = inv->getList(listname);
+ if (!invlist) {
+ lua_pushnil(L);
+ return 1;
+ }
+ push_inventory_list(L, *invlist);
return 1;
}
@@ -242,7 +247,7 @@ int InvRef::l_set_list(lua_State *L)
return 0;
}
-// get_lists(self) -> list of InventoryLists
+// get_lists(self) -> table that maps listnames to InventoryLists
int InvRef::l_get_lists(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
@@ -251,15 +256,7 @@ int InvRef::l_get_lists(lua_State *L)
if (!inv) {
return 0;
}
- std::vector<const InventoryList*> lists = inv->getLists();
- std::vector<const InventoryList*>::iterator iter = lists.begin();
- lua_createtable(L, 0, lists.size());
- for (; iter != lists.end(); iter++) {
- const char* name = (*iter)->getName().c_str();
- lua_pushstring(L, name);
- push_inventory_list(L, inv, name);
- lua_rawset(L, -3);
- }
+ push_inventory_lists(L, *inv);
return 1;
}
diff --git a/src/script/lua_api/l_item.cpp b/src/script/lua_api/l_item.cpp
index 794d8a6e5..13d046d00 100644
--- a/src/script/lua_api/l_item.cpp
+++ b/src/script/lua_api/l_item.cpp
@@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "lua_api/l_internal.h"
#include "common/c_converter.h"
#include "common/c_content.h"
+#include "common/c_packer.h"
#include "itemdef.h"
#include "nodedef.h"
#include "server.h"
@@ -342,7 +343,7 @@ int LuaItemStack::l_get_tool_capabilities(lua_State *L)
}
// add_wear(self, amount) -> true/false
-// The range for "amount" is [0,65535]. Wear is only added if the item
+// The range for "amount" is [0,65536]. Wear is only added if the item
// is a tool. Adding wear might destroy the item.
// Returns true if the item is (or was) a tool.
int LuaItemStack::l_add_wear(lua_State *L)
@@ -356,6 +357,25 @@ int LuaItemStack::l_add_wear(lua_State *L)
return 1;
}
+// add_wear_by_uses(self, max_uses) -> true/false
+// The range for "max_uses" is [0,65536].
+// Adds wear to the item in such a way that, if
+// only this function is called to add wear, the item
+// will be destroyed exactly after `max_uses` times of calling it.
+// No-op if `max_uses` is 0 or item is not a tool.
+// Returns true if the item is (or was) a tool.
+int LuaItemStack::l_add_wear_by_uses(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ LuaItemStack *o = checkobject(L, 1);
+ ItemStack &item = o->m_stack;
+ u32 max_uses = readParam<int>(L, 2);
+ u32 add_wear = calculateResultWear(max_uses, item.wear);
+ bool result = item.addWear(add_wear, getGameDef(L)->idef());
+ lua_pushboolean(L, result);
+ return 1;
+}
+
// add_item(self, itemstack or itemstring or table or nil) -> itemstack
// Returns leftover item stack
int LuaItemStack::l_add_item(lua_State *L)
@@ -441,6 +461,7 @@ int LuaItemStack::create_object(lua_State *L)
lua_setmetatable(L, -2);
return 1;
}
+
// Not callable from Lua
int LuaItemStack::create(lua_State *L, const ItemStack &item)
{
@@ -457,6 +478,20 @@ LuaItemStack *LuaItemStack::checkobject(lua_State *L, int narg)
return *(LuaItemStack **)luaL_checkudata(L, narg, className);
}
+void *LuaItemStack::packIn(lua_State *L, int idx)
+{
+ LuaItemStack *o = checkobject(L, idx);
+ return new ItemStack(o->getItem());
+}
+
+void LuaItemStack::packOut(lua_State *L, void *ptr)
+{
+ ItemStack *stack = reinterpret_cast<ItemStack*>(ptr);
+ if (L)
+ create(L, *stack);
+ delete stack;
+}
+
void LuaItemStack::Register(lua_State *L)
{
lua_newtable(L);
@@ -488,6 +523,8 @@ void LuaItemStack::Register(lua_State *L)
// Can be created from Lua (ItemStack(itemstack or itemstring or table or nil))
lua_register(L, className, create_object);
+
+ script_register_packer(L, className, packIn, packOut);
}
const char LuaItemStack::className[] = "ItemStack";
@@ -514,6 +551,7 @@ const luaL_Reg LuaItemStack::methods[] = {
luamethod(LuaItemStack, get_definition),
luamethod(LuaItemStack, get_tool_capabilities),
luamethod(LuaItemStack, add_wear),
+ luamethod(LuaItemStack, add_wear_by_uses),
luamethod(LuaItemStack, add_item),
luamethod(LuaItemStack, item_fits),
luamethod(LuaItemStack, take_item),
@@ -576,6 +614,9 @@ int ModApiItemMod::l_register_item_raw(lua_State *L)
// be done
if (f.name == "ignore")
return 0;
+ // This would break everything
+ if (f.name.empty())
+ throw LuaError("Cannot register node with empty name");
content_t id = ndef->set(f.name, f);
@@ -632,8 +673,8 @@ int ModApiItemMod::l_get_content_id(lua_State *L)
NO_MAP_LOCK_REQUIRED;
std::string name = luaL_checkstring(L, 1);
- const IItemDefManager *idef = getGameDef(L)->getItemDefManager();
- const NodeDefManager *ndef = getGameDef(L)->getNodeDefManager();
+ const IItemDefManager *idef = getGameDef(L)->idef();
+ const NodeDefManager *ndef = getGameDef(L)->ndef();
// If this is called at mod load time, NodeDefManager isn't aware of
// aliases yet, so we need to handle them manually
@@ -658,7 +699,7 @@ int ModApiItemMod::l_get_name_from_content_id(lua_State *L)
NO_MAP_LOCK_REQUIRED;
content_t c = luaL_checkint(L, 1);
- const NodeDefManager *ndef = getGameDef(L)->getNodeDefManager();
+ const NodeDefManager *ndef = getGameDef(L)->ndef();
const char *name = ndef->get(c).name.c_str();
lua_pushstring(L, name);
@@ -673,3 +714,10 @@ void ModApiItemMod::Initialize(lua_State *L, int top)
API_FCT(get_content_id);
API_FCT(get_name_from_content_id);
}
+
+void ModApiItemMod::InitializeAsync(lua_State *L, int top)
+{
+ // all read-only functions
+ API_FCT(get_content_id);
+ API_FCT(get_name_from_content_id);
+}
diff --git a/src/script/lua_api/l_item.h b/src/script/lua_api/l_item.h
index 16878c101..a392555d2 100644
--- a/src/script/lua_api/l_item.h
+++ b/src/script/lua_api/l_item.h
@@ -108,11 +108,20 @@ private:
static int l_get_tool_capabilities(lua_State *L);
// add_wear(self, amount) -> true/false
- // The range for "amount" is [0,65535]. Wear is only added if the item
+ // The range for "amount" is [0,65536]. Wear is only added if the item
// is a tool. Adding wear might destroy the item.
// Returns true if the item is (or was) a tool.
static int l_add_wear(lua_State *L);
+ // add_wear_by_uses(self, max_uses) -> true/false
+ // The range for "max_uses" is [0,65536].
+ // Adds wear to the item in such a way that, if
+ // only this function is called to add wear, the item
+ // will be destroyed exactly after `max_uses` times of calling it.
+ // No-op if `max_uses` is 0 or item is not a tool.
+ // Returns true if the item is (or was) a tool.
+ static int l_add_wear_by_uses(lua_State *L);
+
// add_item(self, itemstack or itemstring or table or nil) -> itemstack
// Returns leftover item stack
static int l_add_item(lua_State *L);
@@ -141,8 +150,11 @@ public:
// Not callable from Lua
static int create(lua_State *L, const ItemStack &item);
static LuaItemStack* checkobject(lua_State *L, int narg);
- static void Register(lua_State *L);
+ static void *packIn(lua_State *L, int idx);
+ static void packOut(lua_State *L, void *ptr);
+
+ static void Register(lua_State *L);
};
class ModApiItemMod : public ModApiBase {
@@ -152,6 +164,8 @@ private:
static int l_register_alias_raw(lua_State *L);
static int l_get_content_id(lua_State *L);
static int l_get_name_from_content_id(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_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp
index 736ad022f..cf4a057e1 100644
--- a/src/script/lua_api/l_mainmenu.cpp
+++ b/src/script/lua_api/l_mainmenu.cpp
@@ -38,7 +38,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/client.h"
#include "client/renderingengine.h"
#include "network/networkprotocol.h"
-
+#include "content/mod_configuration.h"
/******************************************************************************/
std::string ModApiMainMenu::getTextData(lua_State *L, std::string name)
@@ -139,6 +139,14 @@ int ModApiMainMenu::l_start(lua_State *L)
data->password = getTextData(L,"password");
data->address = getTextData(L,"address");
data->port = getTextData(L,"port");
+
+ const auto val = getTextData(L, "allow_login_or_register");
+ if (val == "login")
+ data->allow_login_or_register = ELoginRegister::Login;
+ else if (val == "register")
+ data->allow_login_or_register = ELoginRegister::Register;
+ else
+ data->allow_login_or_register = ELoginRegister::Any;
}
data->serverdescription = getTextData(L,"serverdescription");
data->servername = getTextData(L,"servername");
@@ -304,7 +312,11 @@ int ModApiMainMenu::l_get_games(lua_State *L)
lua_settable(L, top_lvl2);
lua_pushstring(L, "name");
- lua_pushstring(L, game.name.c_str());
+ lua_pushstring(L, game.title.c_str());
+ lua_settable(L, top_lvl2);
+
+ lua_pushstring(L, "title");
+ lua_pushstring(L, game.title.c_str());
lua_settable(L, top_lvl2);
lua_pushstring(L, "author");
@@ -323,9 +335,9 @@ int ModApiMainMenu::l_get_games(lua_State *L)
lua_newtable(L);
int table2 = lua_gettop(L);
int internal_index = 1;
- for (const std::string &addon_mods_path : game.addon_mods_paths) {
+ for (const auto &addon_mods_path : game.addon_mods_paths) {
lua_pushnumber(L, internal_index);
- lua_pushstring(L, addon_mods_path.c_str());
+ lua_pushstring(L, addon_mods_path.second.c_str());
lua_settable(L, table2);
internal_index++;
}
@@ -356,6 +368,11 @@ int ModApiMainMenu::l_get_content_info(lua_State *L)
lua_pushstring(L, spec.author.c_str());
lua_setfield(L, -2, "author");
+ if (!spec.title.empty()) {
+ lua_pushstring(L, spec.title.c_str());
+ lua_setfield(L, -2, "title");
+ }
+
lua_pushinteger(L, spec.release);
lua_setfield(L, -2, "release");
@@ -393,6 +410,100 @@ int ModApiMainMenu::l_get_content_info(lua_State *L)
}
/******************************************************************************/
+int ModApiMainMenu::l_check_mod_configuration(lua_State *L)
+{
+ std::string worldpath = luaL_checkstring(L, 1);
+
+ ModConfiguration modmgr;
+
+ // Add all game mods
+ SubgameSpec gamespec = findWorldSubgame(worldpath);
+ modmgr.addGameMods(gamespec);
+ modmgr.addModsInPath(worldpath + DIR_DELIM + "worldmods", "worldmods");
+
+ // Add user-configured mods
+ std::vector<ModSpec> modSpecs;
+
+ luaL_checktype(L, 2, LUA_TTABLE);
+
+ lua_pushnil(L);
+ while (lua_next(L, 2)) {
+ // Ignore non-string keys
+ if (lua_type(L, -2) != LUA_TSTRING) {
+ throw LuaError(
+ "Unexpected non-string key in table passed to "
+ "core.check_mod_configuration");
+ }
+
+ std::string modpath = luaL_checkstring(L, -1);
+ lua_pop(L, 1);
+ std::string virtual_path = lua_tostring(L, -1);
+
+ modSpecs.emplace_back();
+ ModSpec &spec = modSpecs.back();
+ spec.name = fs::GetFilenameFromPath(modpath.c_str());
+ spec.path = modpath;
+ spec.virtual_path = virtual_path;
+ if (!parseModContents(spec)) {
+ throw LuaError("Not a mod!");
+ }
+ }
+
+ modmgr.addMods(modSpecs);
+ try {
+ modmgr.checkConflictsAndDeps();
+ } catch (const ModError &err) {
+ errorstream << err.what() << std::endl;
+
+ lua_newtable(L);
+
+ lua_pushboolean(L, false);
+ lua_setfield(L, -2, "is_consistent");
+
+ lua_newtable(L);
+ lua_setfield(L, -2, "unsatisfied_mods");
+
+ lua_newtable(L);
+ lua_setfield(L, -2, "satisfied_mods");
+
+ lua_pushstring(L, err.what());
+ lua_setfield(L, -2, "error_message");
+ return 1;
+ }
+
+
+ lua_newtable(L);
+
+ lua_pushboolean(L, modmgr.isConsistent());
+ lua_setfield(L, -2, "is_consistent");
+
+ lua_newtable(L);
+ int top = lua_gettop(L);
+ unsigned int index = 1;
+ for (const auto &spec : modmgr.getUnsatisfiedMods()) {
+ lua_pushnumber(L, index);
+ push_mod_spec(L, spec, true);
+ lua_settable(L, top);
+ index++;
+ }
+
+ lua_setfield(L, -2, "unsatisfied_mods");
+
+ lua_newtable(L);
+ top = lua_gettop(L);
+ index = 1;
+ for (const auto &spec : modmgr.getMods()) {
+ lua_pushnumber(L, index);
+ push_mod_spec(L, spec, false);
+ lua_settable(L, top);
+ index++;
+ }
+ lua_setfield(L, -2, "satisfied_mods");
+
+ return 1;
+}
+
+/******************************************************************************/
int ModApiMainMenu::l_show_keys_menu(lua_State *L)
{
GUIEngine* engine = getGuiEngine(L);
@@ -533,14 +644,14 @@ 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);
+ lua_setfield(L, -2, "mods");
+
for (const std::string &component : getEnvModPaths()) {
- index++;
lua_pushstring(L, component.c_str());
- lua_rawseti(L, -2, index);
+ lua_setfield(L, -2, fs::AbsolutePath(component).c_str());
}
return 1;
}
@@ -860,6 +971,19 @@ int ModApiMainMenu::l_open_dir(lua_State *L)
}
/******************************************************************************/
+int ModApiMainMenu::l_share_file(lua_State *L)
+{
+#ifdef __ANDROID__
+ std::string path = luaL_checkstring(L, 1);
+ porting::shareFileAndroid(path);
+ lua_pushboolean(L, true);
+#else
+ lua_pushboolean(L, false);
+#endif
+ return 1;
+}
+
+/******************************************************************************/
int ModApiMainMenu::l_do_async_callback(lua_State *L)
{
MainMenuScripting *script = getScriptApi<MainMenuScripting>(L);
@@ -891,6 +1015,7 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
API_FCT(get_worlds);
API_FCT(get_games);
API_FCT(get_content_info);
+ API_FCT(check_mod_configuration);
API_FCT(start);
API_FCT(close);
API_FCT(show_keys_menu);
@@ -924,6 +1049,7 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
API_FCT(get_max_supp_proto);
API_FCT(open_url);
API_FCT(open_dir);
+ API_FCT(share_file);
API_FCT(do_async_callback);
}
diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h
index 781185425..9dc40c7f4 100644
--- a/src/script/lua_api/l_mainmenu.h
+++ b/src/script/lua_api/l_mainmenu.h
@@ -82,6 +82,8 @@ private:
static int l_get_content_info(lua_State *L);
+ static int l_check_mod_configuration(lua_State *L);
+
//gui
static int l_show_keys_menu(lua_State *L);
@@ -152,6 +154,8 @@ private:
static int l_open_dir(lua_State *L);
+ static int l_share_file(lua_State *L);
+
// async
static int l_do_async_callback(lua_State *L);
diff --git a/src/script/lua_api/l_nodemeta.cpp b/src/script/lua_api/l_nodemeta.cpp
index 34760157d..bdc4844c0 100644
--- a/src/script/lua_api/l_nodemeta.cpp
+++ b/src/script/lua_api/l_nodemeta.cpp
@@ -40,7 +40,7 @@ NodeMetaRef* NodeMetaRef::checkobject(lua_State *L, int narg)
Metadata* NodeMetaRef::getmeta(bool auto_create)
{
if (m_is_local)
- return m_meta;
+ return m_local_meta;
NodeMetadata *meta = m_env->getMap().getNodeMetadata(m_p);
if (meta == NULL && auto_create) {
@@ -62,9 +62,14 @@ void NodeMetaRef::clearMeta()
void NodeMetaRef::reportMetadataChange(const std::string *name)
{
SANITY_CHECK(!m_is_local);
- // NOTE: This same code is in rollback_interface.cpp
// Inform other things that the metadata has changed
- NodeMetadata *meta = dynamic_cast<NodeMetadata*>(m_meta);
+ NodeMetadata *meta = dynamic_cast<NodeMetadata*>(getmeta(false));
+
+ // If the metadata is now empty, get rid of it
+ if (meta && meta->empty()) {
+ clearMeta();
+ meta = nullptr;
+ }
MapEditEvent event;
event.type = MEET_BLOCK_NODE_METADATA_CHANGED;
@@ -127,18 +132,14 @@ void NodeMetaRef::handleToTable(lua_State *L, Metadata *_meta)
// fields
MetaDataRef::handleToTable(L, _meta);
- NodeMetadata *meta = (NodeMetadata*) _meta;
+ NodeMetadata *meta = (NodeMetadata *) _meta;
// inventory
- lua_newtable(L);
Inventory *inv = meta->getInventory();
if (inv) {
- std::vector<const InventoryList *> lists = inv->getLists();
- for(std::vector<const InventoryList *>::const_iterator
- i = lists.begin(); i != lists.end(); ++i) {
- push_inventory_list(L, inv, (*i)->getName().c_str());
- lua_setfield(L, -2, (*i)->getName().c_str());
- }
+ push_inventory_lists(L, *inv);
+ } else {
+ lua_newtable(L);
}
lua_setfield(L, -2, "inventory");
}
@@ -178,8 +179,8 @@ NodeMetaRef::NodeMetaRef(v3s16 p, ServerEnvironment *env):
}
NodeMetaRef::NodeMetaRef(Metadata *meta):
- m_meta(meta),
- m_is_local(true)
+ m_is_local(true),
+ m_local_meta(meta)
{
}
diff --git a/src/script/lua_api/l_nodemeta.h b/src/script/lua_api/l_nodemeta.h
index fdc1766ed..265ece3d0 100644
--- a/src/script/lua_api/l_nodemeta.h
+++ b/src/script/lua_api/l_nodemeta.h
@@ -33,10 +33,12 @@ class NodeMetadata;
class NodeMetaRef : public MetaDataRef {
private:
+ bool m_is_local = false;
+ // Set for server metadata
v3s16 m_p;
ServerEnvironment *m_env = nullptr;
- Metadata *m_meta = nullptr;
- bool m_is_local = false;
+ // Set for client metadata
+ Metadata *m_local_meta = nullptr;
static const char className[];
static const luaL_Reg methodsServer[];
diff --git a/src/script/lua_api/l_noise.cpp b/src/script/lua_api/l_noise.cpp
index f43ba837a..5561eaebf 100644
--- a/src/script/lua_api/l_noise.cpp
+++ b/src/script/lua_api/l_noise.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_converter.h"
#include "common/c_content.h"
+#include "common/c_packer.h"
#include "log.h"
#include "porting.h"
#include "util/numeric.h"
@@ -30,7 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
LuaPerlinNoise
*/
-LuaPerlinNoise::LuaPerlinNoise(NoiseParams *params) :
+LuaPerlinNoise::LuaPerlinNoise(const NoiseParams *params) :
np(*params)
{
}
@@ -101,6 +102,25 @@ LuaPerlinNoise *LuaPerlinNoise::checkobject(lua_State *L, int narg)
}
+void *LuaPerlinNoise::packIn(lua_State *L, int idx)
+{
+ LuaPerlinNoise *o = checkobject(L, idx);
+ return new NoiseParams(o->np);
+}
+
+void LuaPerlinNoise::packOut(lua_State *L, void *ptr)
+{
+ NoiseParams *np = reinterpret_cast<NoiseParams*>(ptr);
+ if (L) {
+ LuaPerlinNoise *o = new LuaPerlinNoise(np);
+ *(void **)(lua_newuserdata(L, sizeof(void *))) = o;
+ luaL_getmetatable(L, className);
+ lua_setmetatable(L, -2);
+ }
+ delete np;
+}
+
+
void LuaPerlinNoise::Register(lua_State *L)
{
lua_newtable(L);
@@ -126,6 +146,8 @@ void LuaPerlinNoise::Register(lua_State *L)
lua_pop(L, 1);
lua_register(L, className, create_object);
+
+ script_register_packer(L, className, packIn, packOut);
}
@@ -141,12 +163,10 @@ luaL_Reg LuaPerlinNoise::methods[] = {
LuaPerlinNoiseMap
*/
-LuaPerlinNoiseMap::LuaPerlinNoiseMap(NoiseParams *params, s32 seed, v3s16 size)
+LuaPerlinNoiseMap::LuaPerlinNoiseMap(const NoiseParams *np, s32 seed, v3s16 size)
{
- m_is3d = size.Z > 1;
- np = *params;
try {
- noise = new Noise(&np, seed, size.X, size.Y, size.Z);
+ noise = new Noise(np, seed, size.X, size.Y, size.Z);
} catch (InvalidNoiseParamsException &e) {
throw LuaError(e.what());
}
@@ -217,7 +237,7 @@ int LuaPerlinNoiseMap::l_get_3d_map(lua_State *L)
LuaPerlinNoiseMap *o = checkobject(L, 1);
v3f p = check_v3f(L, 2);
- if (!o->m_is3d)
+ if (!o->is3D())
return 0;
Noise *n = o->noise;
@@ -248,7 +268,7 @@ int LuaPerlinNoiseMap::l_get_3d_map_flat(lua_State *L)
v3f p = check_v3f(L, 2);
bool use_buffer = lua_istable(L, 3);
- if (!o->m_is3d)
+ if (!o->is3D())
return 0;
Noise *n = o->noise;
@@ -289,7 +309,7 @@ int LuaPerlinNoiseMap::l_calc_3d_map(lua_State *L)
LuaPerlinNoiseMap *o = checkobject(L, 1);
v3f p = check_v3f(L, 2);
- if (!o->m_is3d)
+ if (!o->is3D())
return 0;
Noise *n = o->noise;
@@ -359,6 +379,35 @@ LuaPerlinNoiseMap *LuaPerlinNoiseMap::checkobject(lua_State *L, int narg)
}
+struct NoiseMapParams {
+ NoiseParams np;
+ s32 seed;
+ v3s16 size;
+};
+
+void *LuaPerlinNoiseMap::packIn(lua_State *L, int idx)
+{
+ LuaPerlinNoiseMap *o = checkobject(L, idx);
+ NoiseMapParams *ret = new NoiseMapParams();
+ ret->np = o->noise->np;
+ ret->seed = o->noise->seed;
+ ret->size = v3s16(o->noise->sx, o->noise->sy, o->noise->sz);
+ return ret;
+}
+
+void LuaPerlinNoiseMap::packOut(lua_State *L, void *ptr)
+{
+ NoiseMapParams *p = reinterpret_cast<NoiseMapParams*>(ptr);
+ if (L) {
+ LuaPerlinNoiseMap *o = new LuaPerlinNoiseMap(&p->np, p->seed, p->size);
+ *(void **)(lua_newuserdata(L, sizeof(void *))) = o;
+ luaL_getmetatable(L, className);
+ lua_setmetatable(L, -2);
+ }
+ delete p;
+}
+
+
void LuaPerlinNoiseMap::Register(lua_State *L)
{
lua_newtable(L);
@@ -384,6 +433,8 @@ void LuaPerlinNoiseMap::Register(lua_State *L)
lua_pop(L, 1);
lua_register(L, className, create_object);
+
+ script_register_packer(L, className, packIn, packOut);
}
diff --git a/src/script/lua_api/l_noise.h b/src/script/lua_api/l_noise.h
index 9f50dfd3f..5d34a479b 100644
--- a/src/script/lua_api/l_noise.h
+++ b/src/script/lua_api/l_noise.h
@@ -30,6 +30,7 @@ class LuaPerlinNoise : public ModApiBase
{
private:
NoiseParams np;
+
static const char className[];
static luaL_Reg methods[];
@@ -42,7 +43,7 @@ private:
static int l_get_3d(lua_State *L);
public:
- LuaPerlinNoise(NoiseParams *params);
+ LuaPerlinNoise(const NoiseParams *params);
~LuaPerlinNoise() = default;
// LuaPerlinNoise(seed, octaves, persistence, scale)
@@ -51,6 +52,9 @@ public:
static LuaPerlinNoise *checkobject(lua_State *L, int narg);
+ static void *packIn(lua_State *L, int idx);
+ static void packOut(lua_State *L, void *ptr);
+
static void Register(lua_State *L);
};
@@ -59,9 +63,8 @@ public:
*/
class LuaPerlinNoiseMap : public ModApiBase
{
- NoiseParams np;
Noise *noise;
- bool m_is3d;
+
static const char className[];
static luaL_Reg methods[];
@@ -80,16 +83,20 @@ class LuaPerlinNoiseMap : public ModApiBase
static int l_get_map_slice(lua_State *L);
public:
- LuaPerlinNoiseMap(NoiseParams *np, s32 seed, v3s16 size);
-
+ LuaPerlinNoiseMap(const NoiseParams *np, s32 seed, v3s16 size);
~LuaPerlinNoiseMap();
+ inline bool is3D() const { return noise->sz > 1; }
+
// LuaPerlinNoiseMap(np, size)
// Creates an LuaPerlinNoiseMap and leaves it on top of stack
static int create_object(lua_State *L);
static LuaPerlinNoiseMap *checkobject(lua_State *L, int narg);
+ static void *packIn(lua_State *L, int idx);
+ static void packOut(lua_State *L, void *ptr);
+
static void Register(lua_State *L);
};
diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp
index 407b48db0..6bd07a4c1 100644
--- a/src/script/lua_api/l_object.cpp
+++ b/src/script/lua_api/l_object.cpp
@@ -420,8 +420,7 @@ int ObjectRef::l_set_local_animation(lua_State *L)
float frame_speed = readParam<float>(L, 6, 30.0f);
getServer(L)->setLocalPlayerAnimations(player, frames, frame_speed);
- lua_pushboolean(L, true);
- return 1;
+ return 0;
}
// get_local_animation(self)
@@ -464,8 +463,7 @@ int ObjectRef::l_set_eye_offset(lua_State *L)
offset_third.Y = rangelim(offset_third.Y,-10,15); //1.5*BS
getServer(L)->setPlayerEyeOffset(player, offset_first, offset_third);
- lua_pushboolean(L, true);
- return 1;
+ return 0;
}
// get_eye_offset(self)
@@ -737,8 +735,7 @@ int ObjectRef::l_set_nametag_attributes(lua_State *L)
prop->validate();
sao->notifyObjectPropertiesModified();
- lua_pushboolean(L, true);
- return 1;
+ return 0;
}
// get_nametag_attributes(self)
@@ -1116,7 +1113,7 @@ int ObjectRef::l_set_look_vertical(lua_State *L)
float pitch = readParam<float>(L, 2) * core::RADTODEG;
playersao->setLookPitchAndSend(pitch);
- return 1;
+ return 0;
}
// set_look_horizontal(self, radians)
@@ -1131,7 +1128,7 @@ int ObjectRef::l_set_look_horizontal(lua_State *L)
float yaw = readParam<float>(L, 2) * core::RADTODEG;
playersao->setPlayerYawAndSend(yaw);
- return 1;
+ return 0;
}
// DEPRECATED
@@ -1151,7 +1148,7 @@ int ObjectRef::l_set_look_pitch(lua_State *L)
float pitch = readParam<float>(L, 2) * core::RADTODEG;
playersao->setLookPitchAndSend(pitch);
- return 1;
+ return 0;
}
// DEPRECATED
@@ -1171,7 +1168,7 @@ int ObjectRef::l_set_look_yaw(lua_State *L)
float yaw = readParam<float>(L, 2) * core::RADTODEG;
playersao->setPlayerYawAndSend(yaw);
- return 1;
+ return 0;
}
// set_fov(self, degrees, is_multiplier, transition_time)
@@ -1310,8 +1307,7 @@ int ObjectRef::l_set_inventory_formspec(lua_State *L)
player->inventory_formspec = formspec;
getServer(L)->reportInventoryFormspecModified(player->getName());
- lua_pushboolean(L, true);
- return 1;
+ return 0;
}
// get_inventory_formspec(self) -> formspec
@@ -1342,8 +1338,7 @@ int ObjectRef::l_set_formspec_prepend(lua_State *L)
player->formspec_prepend = formspec;
getServer(L)->reportFormspecPrependModified(player->getName());
- lua_pushboolean(L, true);
- return 1;
+ return 0;
}
// get_formspec_prepend(self)
@@ -1603,8 +1598,7 @@ int ObjectRef::l_hud_set_flags(lua_State *L)
if (!getServer(L)->hudSetFlags(player, flags, mask))
return 0;
- lua_pushboolean(L, true);
- return 1;
+ return 0;
}
// hud_get_flags(self)
@@ -1617,20 +1611,11 @@ int ObjectRef::l_hud_get_flags(lua_State *L)
return 0;
lua_newtable(L);
- lua_pushboolean(L, player->hud_flags & HUD_FLAG_HOTBAR_VISIBLE);
- lua_setfield(L, -2, "hotbar");
- lua_pushboolean(L, player->hud_flags & HUD_FLAG_HEALTHBAR_VISIBLE);
- lua_setfield(L, -2, "healthbar");
- lua_pushboolean(L, player->hud_flags & HUD_FLAG_CROSSHAIR_VISIBLE);
- lua_setfield(L, -2, "crosshair");
- lua_pushboolean(L, player->hud_flags & HUD_FLAG_WIELDITEM_VISIBLE);
- lua_setfield(L, -2, "wielditem");
- lua_pushboolean(L, player->hud_flags & HUD_FLAG_BREATHBAR_VISIBLE);
- lua_setfield(L, -2, "breathbar");
- lua_pushboolean(L, player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE);
- lua_setfield(L, -2, "minimap");
- lua_pushboolean(L, player->hud_flags & HUD_FLAG_MINIMAP_RADAR_VISIBLE);
- lua_setfield(L, -2, "minimap_radar");
+ const EnumString *esp = es_HudBuiltinElement;
+ for (int i = 0; esp[i].str; i++) {
+ lua_pushboolean(L, (player->hud_flags & esp[i].num) != 0);
+ lua_setfield(L, -2, esp[i].str);
+ }
return 1;
}
@@ -1870,11 +1855,37 @@ int ObjectRef::l_set_sky(lua_State *L)
}
getServer(L)->setSky(player, sky_params);
- lua_pushboolean(L, true);
- return 1;
+ return 0;
}
-// get_sky(self)
+static void push_sky_color(lua_State *L, const SkyboxParams &params)
+{
+ lua_newtable(L);
+ if (params.type == "regular") {
+ push_ARGB8(L, params.sky_color.day_sky);
+ lua_setfield(L, -2, "day_sky");
+ push_ARGB8(L, params.sky_color.day_horizon);
+ lua_setfield(L, -2, "day_horizon");
+ push_ARGB8(L, params.sky_color.dawn_sky);
+ lua_setfield(L, -2, "dawn_sky");
+ push_ARGB8(L, params.sky_color.dawn_horizon);
+ lua_setfield(L, -2, "dawn_horizon");
+ push_ARGB8(L, params.sky_color.night_sky);
+ lua_setfield(L, -2, "night_sky");
+ push_ARGB8(L, params.sky_color.night_horizon);
+ lua_setfield(L, -2, "night_horizon");
+ push_ARGB8(L, params.sky_color.indoors);
+ lua_setfield(L, -2, "indoors");
+ }
+ push_ARGB8(L, params.fog_sun_tint);
+ lua_setfield(L, -2, "fog_sun_tint");
+ push_ARGB8(L, params.fog_moon_tint);
+ lua_setfield(L, -2, "fog_moon_tint");
+ lua_pushstring(L, params.fog_tint_type.c_str());
+ lua_setfield(L, -2, "fog_tint_type");
+}
+
+// get_sky(self, as_table)
int ObjectRef::l_get_sky(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
@@ -1883,10 +1894,30 @@ int ObjectRef::l_get_sky(lua_State *L)
if (player == nullptr)
return 0;
- SkyboxParams skybox_params = player->getSkyParams();
+ const SkyboxParams &skybox_params = player->getSkyParams();
+ // handle the deprecated version
+ if (!readParam<bool>(L, 2, false)) {
+ log_deprecated(L, "Deprecated call to get_sky, please check lua_api.txt");
+
+ push_ARGB8(L, skybox_params.bgcolor);
+ lua_pushlstring(L, skybox_params.type.c_str(), skybox_params.type.size());
+
+ lua_newtable(L);
+ s16 i = 1;
+ for (const std::string &texture : skybox_params.textures) {
+ lua_pushlstring(L, texture.c_str(), texture.size());
+ lua_rawseti(L, -2, i++);
+ }
+ lua_pushboolean(L, skybox_params.clouds);
+ return 4;
+ }
+
+ lua_newtable(L);
push_ARGB8(L, skybox_params.bgcolor);
+ lua_setfield(L, -2, "base_color");
lua_pushlstring(L, skybox_params.type.c_str(), skybox_params.type.size());
+ lua_setfield(L, -2, "type");
lua_newtable(L);
s16 i = 1;
@@ -1894,44 +1925,30 @@ int ObjectRef::l_get_sky(lua_State *L)
lua_pushlstring(L, texture.c_str(), texture.size());
lua_rawseti(L, -2, i++);
}
+ lua_setfield(L, -2, "textures");
lua_pushboolean(L, skybox_params.clouds);
- return 4;
+ lua_setfield(L, -2, "clouds");
+
+ push_sky_color(L, skybox_params);
+ lua_setfield(L, -2, "sky_color");
+ return 1;
}
+// DEPRECATED
// get_sky_color(self)
int ObjectRef::l_get_sky_color(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
+
+ log_deprecated(L, "Deprecated call to get_sky_color, use get_sky instead");
+
ObjectRef *ref = checkobject(L, 1);
RemotePlayer *player = getplayer(ref);
if (player == nullptr)
return 0;
const SkyboxParams &skybox_params = player->getSkyParams();
-
- lua_newtable(L);
- if (skybox_params.type == "regular") {
- push_ARGB8(L, skybox_params.sky_color.day_sky);
- lua_setfield(L, -2, "day_sky");
- push_ARGB8(L, skybox_params.sky_color.day_horizon);
- lua_setfield(L, -2, "day_horizon");
- push_ARGB8(L, skybox_params.sky_color.dawn_sky);
- lua_setfield(L, -2, "dawn_sky");
- push_ARGB8(L, skybox_params.sky_color.dawn_horizon);
- lua_setfield(L, -2, "dawn_horizon");
- push_ARGB8(L, skybox_params.sky_color.night_sky);
- lua_setfield(L, -2, "night_sky");
- push_ARGB8(L, skybox_params.sky_color.night_horizon);
- lua_setfield(L, -2, "night_horizon");
- push_ARGB8(L, skybox_params.sky_color.indoors);
- lua_setfield(L, -2, "indoors");
- }
- push_ARGB8(L, skybox_params.fog_sun_tint);
- lua_setfield(L, -2, "fog_sun_tint");
- push_ARGB8(L, skybox_params.fog_moon_tint);
- lua_setfield(L, -2, "fog_moon_tint");
- lua_pushstring(L, skybox_params.fog_tint_type.c_str());
- lua_setfield(L, -2, "fog_tint_type");
+ push_sky_color(L, skybox_params);
return 1;
}
@@ -1960,8 +1977,7 @@ int ObjectRef::l_set_sun(lua_State *L)
}
getServer(L)->setSun(player, sun_params);
- lua_pushboolean(L, true);
- return 1;
+ return 0;
}
//get_sun(self)
@@ -2014,8 +2030,7 @@ int ObjectRef::l_set_moon(lua_State *L)
}
getServer(L)->setMoon(player, moon_params);
- lua_pushboolean(L, true);
- return 1;
+ return 0;
}
// get_moon(self)
@@ -2069,9 +2084,11 @@ int ObjectRef::l_set_stars(lua_State *L)
"scale", star_params.scale);
}
+ star_params.day_opacity = getfloatfield_default(L, 2,
+ "day_opacity", star_params.day_opacity);
+
getServer(L)->setStars(player, star_params);
- lua_pushboolean(L, true);
- return 1;
+ return 0;
}
// get_stars(self)
@@ -2094,6 +2111,8 @@ int ObjectRef::l_get_stars(lua_State *L)
lua_setfield(L, -2, "star_color");
lua_pushnumber(L, star_params.scale);
lua_setfield(L, -2, "scale");
+ lua_pushnumber(L, star_params.day_opacity);
+ lua_setfield(L, -2, "day_opacity");
return 1;
}
@@ -2138,8 +2157,7 @@ int ObjectRef::l_set_clouds(lua_State *L)
}
getServer(L)->setClouds(player, cloud_params);
- lua_pushboolean(L, true);
- return 1;
+ return 0;
}
int ObjectRef::l_get_clouds(lua_State *L)
@@ -2193,8 +2211,7 @@ int ObjectRef::l_override_day_night_ratio(lua_State *L)
}
getServer(L)->overrideDayNightRatio(player, do_override, ratio);
- lua_pushboolean(L, true);
- return 1;
+ return 0;
}
// get_day_night_ratio(self)
@@ -2271,6 +2288,61 @@ int ObjectRef::l_set_minimap_modes(lua_State *L)
return 0;
}
+// set_lighting(self, lighting)
+int ObjectRef::l_set_lighting(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ ObjectRef *ref = checkobject(L, 1);
+ RemotePlayer *player = getplayer(ref);
+ if (player == nullptr)
+ return 0;
+
+ luaL_checktype(L, 2, LUA_TTABLE);
+ Lighting lighting = player->getLighting();
+ lua_getfield(L, 2, "shadows");
+ if (lua_istable(L, -1)) {
+ lighting.shadow_intensity = getfloatfield_default(L, -1, "intensity", lighting.shadow_intensity);
+ }
+ lua_pop(L, -1);
+
+ getServer(L)->setLighting(player, lighting);
+ return 0;
+}
+
+// get_lighting(self)
+int ObjectRef::l_get_lighting(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ ObjectRef *ref = checkobject(L, 1);
+ RemotePlayer *player = getplayer(ref);
+ if (player == nullptr)
+ return 0;
+
+ const Lighting &lighting = player->getLighting();
+
+ lua_newtable(L); // result
+ lua_newtable(L); // "shadows"
+ lua_pushnumber(L, lighting.shadow_intensity);
+ lua_setfield(L, -2, "intensity");
+ lua_setfield(L, -2, "shadows");
+ return 1;
+}
+
+// respawn(self)
+int ObjectRef::l_respawn(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ ObjectRef *ref = checkobject(L, 1);
+ RemotePlayer *player = getplayer(ref);
+ if (player == nullptr)
+ return 0;
+
+ getServer(L)->RespawnPlayer(player->getPeerId());
+ lua_pushboolean(L, true);
+ return 1;
+}
+
+
ObjectRef::ObjectRef(ServerActiveObject *object):
m_object(object)
{}
@@ -2424,5 +2496,9 @@ luaL_Reg ObjectRef::methods[] = {
luamethod(ObjectRef, get_eye_offset),
luamethod(ObjectRef, send_mapblock),
luamethod(ObjectRef, set_minimap_modes),
+ luamethod(ObjectRef, set_lighting),
+ luamethod(ObjectRef, get_lighting),
+ luamethod(ObjectRef, respawn),
+
{0,0}
};
diff --git a/src/script/lua_api/l_object.h b/src/script/lua_api/l_object.h
index db3a3a7cf..b36bab492 100644
--- a/src/script/lua_api/l_object.h
+++ b/src/script/lua_api/l_object.h
@@ -316,9 +316,10 @@ private:
// set_sky(self, sky_parameters)
static int l_set_sky(lua_State *L);
- // get_sky(self)
+ // get_sky(self, as_table)
static int l_get_sky(lua_State *L);
+ // DEPRECATED
// get_sky_color(self)
static int l_get_sky_color(lua_State* L);
@@ -375,4 +376,13 @@ private:
// set_minimap_modes(self, modes, wanted_mode)
static int l_set_minimap_modes(lua_State *L);
+
+ // set_lighting(self, lighting)
+ static int l_set_lighting(lua_State *L);
+
+ // get_lighting(self)
+ static int l_get_lighting(lua_State *L);
+
+ // respawn(self)
+ static int l_respawn(lua_State *L);
};
diff --git a/src/script/lua_api/l_particleparams.h b/src/script/lua_api/l_particleparams.h
new file mode 100644
index 000000000..03f11c07f
--- /dev/null
+++ b/src/script/lua_api/l_particleparams.h
@@ -0,0 +1,282 @@
+/*
+Minetest
+Copyright (C) 2021 velartrill, Lexi Hale <lexi@hale.su>
+
+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 "lua_api/l_particles.h"
+#include "lua_api/l_object.h"
+#include "lua_api/l_internal.h"
+#include "common/c_converter.h"
+#include "common/c_content.h"
+#include "server.h"
+#include "particles.h"
+
+namespace LuaParticleParams
+{
+ using namespace ParticleParamTypes;
+
+ template<typename T>
+ inline void readNumericLuaValue(lua_State* L, T& ret)
+ {
+ if (lua_isnil(L,-1))
+ return;
+
+ if (std::is_integral<T>())
+ ret = lua_tointeger(L, -1);
+ else
+ ret = lua_tonumber(L, -1);
+ }
+
+ template <typename T, size_t N>
+ inline void readNumericLuaValue(lua_State* L, Parameter<T,N>& ret)
+ {
+ readNumericLuaValue<T>(L, ret.val);
+ }
+
+ // these are unfortunately necessary as C++ intentionally disallows function template
+ // specialization and there's no way to make template overloads reliably resolve correctly
+ inline void readLuaValue(lua_State* L, f32Parameter& ret) { readNumericLuaValue(L, ret); }
+ inline void readLuaValue(lua_State* L, f32& ret) { readNumericLuaValue(L, ret); }
+ inline void readLuaValue(lua_State* L, u16& ret) { readNumericLuaValue(L, ret); }
+ inline void readLuaValue(lua_State* L, u8& ret) { readNumericLuaValue(L, ret); }
+
+ inline void readLuaValue(lua_State* L, v3fParameter& ret)
+ {
+ if (lua_isnil(L, -1))
+ return;
+
+ if (lua_isnumber(L, -1)) { // shortcut for uniform vectors
+ auto n = lua_tonumber(L, -1);
+ ret = v3fParameter(n,n,n);
+ } else {
+ ret = (v3fParameter)check_v3f(L, -1);
+ }
+ }
+
+ inline void readLuaValue(lua_State* L, v2fParameter& ret)
+ {
+ if (lua_isnil(L, -1))
+ return;
+
+ if (lua_isnumber(L, -1)) { // shortcut for uniform vectors
+ auto n = lua_tonumber(L, -1);
+ ret = v2fParameter(n,n);
+ } else {
+ ret = (v2fParameter)check_v2f(L, -1);
+ }
+ }
+
+ inline void readLuaValue(lua_State* L, TweenStyle& ret)
+ {
+ if (lua_isnil(L, -1))
+ return;
+
+ static const EnumString opts[] = {
+ {(int)TweenStyle::fwd, "fwd"},
+ {(int)TweenStyle::rev, "rev"},
+ {(int)TweenStyle::pulse, "pulse"},
+ {(int)TweenStyle::flicker, "flicker"},
+ {0, nullptr},
+ };
+
+ luaL_checktype(L, -1, LUA_TSTRING);
+ int v = (int)TweenStyle::fwd;
+ if (!string_to_enum(opts, v, lua_tostring(L, -1))) {
+ throw LuaError("tween style must be one of ('fwd', 'rev', 'pulse', 'flicker')");
+ }
+ ret = (TweenStyle)v;
+ }
+
+ inline void readLuaValue(lua_State* L, AttractorKind& ret)
+ {
+ if (lua_isnil(L, -1))
+ return;
+
+ static const EnumString opts[] = {
+ {(int)AttractorKind::none, "none"},
+ {(int)AttractorKind::point, "point"},
+ {(int)AttractorKind::line, "line"},
+ {(int)AttractorKind::plane, "plane"},
+ {0, nullptr},
+ };
+
+ luaL_checktype(L, -1, LUA_TSTRING);
+ int v = (int)AttractorKind::none;
+ if (!string_to_enum(opts, v, lua_tostring(L, -1))) {
+ throw LuaError("attractor kind must be one of ('none', 'point', 'line', 'plane')");
+ }
+ ret = (AttractorKind)v;
+ }
+
+ inline void readLuaValue(lua_State* L, BlendMode& ret)
+ {
+ if (lua_isnil(L, -1))
+ return;
+
+ static const EnumString opts[] = {
+ {(int)BlendMode::alpha, "alpha"},
+ {(int)BlendMode::add, "add"},
+ {(int)BlendMode::sub, "sub"},
+ {(int)BlendMode::screen, "screen"},
+ {0, nullptr},
+ };
+
+ luaL_checktype(L, -1, LUA_TSTRING);
+ int v = (int)BlendMode::alpha;
+ if (!string_to_enum(opts, v, lua_tostring(L, -1))) {
+ throw LuaError("blend mode must be one of ('alpha', 'add', 'sub', 'screen')");
+ }
+ ret = (BlendMode)v;
+ }
+
+ template <typename T> void
+ readLuaValue(lua_State* L, RangedParameter<T>& field)
+ {
+ if (lua_isnil(L,-1))
+ return;
+ if (!lua_istable(L,-1)) // is this is just a literal value?
+ goto set_uniform;
+
+ lua_getfield(L, -1, "min");
+ // handle convenience syntax for non-range values
+ if (lua_isnil(L,-1)) {
+ lua_pop(L, 1);
+ goto set_uniform;
+ }
+ readLuaValue(L,field.min);
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "max");
+ readLuaValue(L,field.max);
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "bias");
+ if (!lua_isnil(L,-1))
+ readLuaValue(L,field.bias);
+ lua_pop(L, 1);
+ return;
+
+ set_uniform:
+ readLuaValue(L, field.min);
+ readLuaValue(L, field.max);
+ }
+
+ template <typename T> void
+ readLegacyValue(lua_State* L, const char* name, T& field) {}
+
+ template <typename T> void
+ readLegacyValue(lua_State* L, const char* name, RangedParameter<T>& field)
+ {
+ int tbl = lua_gettop(L);
+ lua_pushliteral(L, "min");
+ lua_pushstring(L, name);
+ lua_concat(L, 2);
+ lua_gettable(L, tbl);
+ if (!lua_isnil(L, -1)) {
+ readLuaValue(L, field.min);
+ }
+ lua_settop(L, tbl);
+
+ lua_pushliteral(L, "max");
+ lua_pushstring(L, name);
+ lua_concat(L, 2);
+ lua_gettable(L, tbl);
+ if (!lua_isnil(L, -1)) {
+ readLuaValue(L, field.max);
+ }
+ lua_settop(L, tbl);
+ }
+
+ template <typename T> void
+ readTweenTable(lua_State* L, const char* name, TweenedParameter<T>& field)
+ {
+ int tbl = lua_gettop(L);
+
+ lua_pushstring(L, name);
+ lua_pushliteral(L, "_tween");
+ lua_concat(L, 2);
+ lua_gettable(L, tbl);
+ if(lua_istable(L, -1)) {
+ int tween = lua_gettop(L);
+ // get the starting value
+ lua_pushinteger(L, 1), lua_gettable(L, tween);
+ readLuaValue(L, field.start);
+ lua_pop(L, 1);
+
+ // get the final value -- use len instead of 2 so that this
+ // gracefully degrades if keyframe support is later added
+ lua_pushinteger(L, (lua_Integer)lua_objlen(L, -1)), lua_gettable(L, tween);
+ readLuaValue(L, field.end);
+ lua_pop(L, 1);
+
+ // get the effect settings
+ lua_getfield(L, -1, "style");
+ if (!lua_isnil(L,-1))
+ readLuaValue(L, field.style);
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "reps");
+ if (!lua_isnil(L,-1))
+ readLuaValue(L, field.reps);
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "start");
+ if (!lua_isnil(L,-1))
+ readLuaValue(L, field.beginning);
+ lua_pop(L, 1);
+
+ goto done;
+ } else {
+ lua_pop(L,1);
+ }
+ // the table is not present; check for nonanimated values
+
+ lua_getfield(L, tbl, name);
+ if(!lua_isnil(L, -1)) {
+ readLuaValue(L, field.start);
+ lua_settop(L, tbl);
+ goto set_uniform;
+ } else {
+ lua_pop(L,1);
+ }
+
+ // the goto did not trigger, so this table is not present either
+ // check for pre-5.6.0 legacy values
+ readLegacyValue(L, name, field.start);
+
+ set_uniform:
+ field.end = field.start;
+ done:
+ lua_settop(L, tbl); // clean up after ourselves
+ }
+
+ inline u16 readAttachmentID(lua_State* L, const char* name)
+ {
+ u16 id = 0;
+ lua_getfield(L, -1, name);
+ if (!lua_isnil(L, -1)) {
+ ObjectRef *ref = ObjectRef::checkobject(L, -1);
+ if (auto obj = ObjectRef::getobject(ref))
+ id = obj->getId();
+ }
+ lua_pop(L, 1);
+ return id;
+ }
+
+ void readTexValue(lua_State* L, ServerParticleTexture& tex);
+}
diff --git a/src/script/lua_api/l_particles.cpp b/src/script/lua_api/l_particles.cpp
index a51c4fe20..586c7dc73 100644
--- a/src/script/lua_api/l_particles.cpp
+++ b/src/script/lua_api/l_particles.cpp
@@ -20,30 +20,50 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "lua_api/l_particles.h"
#include "lua_api/l_object.h"
#include "lua_api/l_internal.h"
+#include "lua_api/l_particleparams.h"
#include "common/c_converter.h"
#include "common/c_content.h"
#include "server.h"
#include "particles.h"
-// add_particle({pos=, velocity=, acceleration=, expirationtime=,
-// size=, collisiondetection=, collision_removal=, object_collision=,
-// vertical=, texture=, player=})
-// pos/velocity/acceleration = {x=num, y=num, z=num}
-// expirationtime = num (seconds)
-// size = num
-// collisiondetection = bool
-// collision_removal = bool
-// object_collision = bool
-// vertical = bool
-// texture = e.g."default_wood.png"
-// animation = TileAnimation definition
-// glow = num
+void LuaParticleParams::readTexValue(lua_State* L, ServerParticleTexture& tex)
+{
+ StackUnroller unroll(L);
+
+ tex.animated = false;
+ if (lua_isstring(L, -1)) {
+ tex.string = lua_tostring(L, -1);
+ return;
+ }
+
+ luaL_checktype(L, -1, LUA_TTABLE);
+ lua_getfield(L, -1, "name");
+ tex.string = luaL_checkstring(L, -1);
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "animation");
+ if (! lua_isnil(L, -1)) {
+ tex.animated = true;
+ tex.animation = read_animation_definition(L, -1);
+ }
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "blend");
+ LuaParticleParams::readLuaValue(L, tex.blendmode);
+ lua_pop(L, 1);
+
+ LuaParticleParams::readTweenTable(L, "alpha", tex.alpha);
+ LuaParticleParams::readTweenTable(L, "scale", tex.scale);
+
+}
+
+// add_particle({...})
int ModApiParticles::l_add_particle(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
// Get parameters
- struct ParticleParameters p;
+ ParticleParameters p;
std::string playername;
if (lua_gettop(L) > 1) // deprecated
@@ -56,7 +76,7 @@ int ModApiParticles::l_add_particle(lua_State *L)
p.expirationtime = luaL_checknumber(L, 4);
p.size = luaL_checknumber(L, 5);
p.collisiondetection = readParam<bool>(L, 6);
- p.texture = luaL_checkstring(L, 7);
+ p.texture.string = luaL_checkstring(L, 7);
if (lua_gettop(L) == 8) // only spawn for a single player
playername = luaL_checkstring(L, 8);
}
@@ -108,7 +128,12 @@ int ModApiParticles::l_add_particle(lua_State *L)
p.animation = read_animation_definition(L, -1);
lua_pop(L, 1);
- p.texture = getstringfield_default(L, 1, "texture", p.texture);
+ lua_getfield(L, 1, "texture");
+ if (!lua_isnil(L, -1)) {
+ LuaParticleParams::readTexValue(L, p.texture);
+ }
+ lua_pop(L, 1);
+
p.glow = getintfield_default(L, 1, "glow", p.glow);
lua_getfield(L, 1, "node");
@@ -119,34 +144,26 @@ int ModApiParticles::l_add_particle(lua_State *L)
p.node_tile = getintfield_default(L, 1, "node_tile", p.node_tile);
playername = getstringfield_default(L, 1, "playername", "");
+
+ lua_getfield(L, 1, "drag");
+ if (lua_istable(L, -1))
+ p.drag = check_v3f(L, -1);
+ lua_pop(L, 1);
+
+ lua_getfield(L, 1, "jitter");
+ LuaParticleParams::readLuaValue(L, p.jitter);
+ lua_pop(L, 1);
+
+ lua_getfield(L, 1, "bounce");
+ LuaParticleParams::readLuaValue(L, p.bounce);
+ lua_pop(L, 1);
}
getServer(L)->spawnParticle(playername, p);
return 1;
}
-// add_particlespawner({amount=, time=,
-// minpos=, maxpos=,
-// minvel=, maxvel=,
-// minacc=, maxacc=,
-// minexptime=, maxexptime=,
-// minsize=, maxsize=,
-// collisiondetection=,
-// collision_removal=,
-// object_collision=,
-// vertical=,
-// texture=,
-// player=})
-// minpos/maxpos/minvel/maxvel/minacc/maxacc = {x=num, y=num, z=num}
-// minexptime/maxexptime = num (seconds)
-// minsize/maxsize = num
-// collisiondetection = bool
-// collision_removal = bool
-// object_collision = bool
-// vertical = bool
-// texture = e.g."default_wood.png"
-// animation = TileAnimation definition
-// glow = num
+// add_particlespawner({...})
int ModApiParticles::l_add_particlespawner(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
@@ -156,24 +173,31 @@ int ModApiParticles::l_add_particlespawner(lua_State *L)
ServerActiveObject *attached = NULL;
std::string playername;
+ using namespace ParticleParamTypes;
if (lua_gettop(L) > 1) //deprecated
{
log_deprecated(L, "Deprecated add_particlespawner call with "
"individual parameters instead of definition");
p.amount = luaL_checknumber(L, 1);
p.time = luaL_checknumber(L, 2);
- p.minpos = check_v3f(L, 3);
- p.maxpos = check_v3f(L, 4);
- p.minvel = check_v3f(L, 5);
- p.maxvel = check_v3f(L, 6);
- p.minacc = check_v3f(L, 7);
- p.maxacc = check_v3f(L, 8);
- p.minexptime = luaL_checknumber(L, 9);
- p.maxexptime = luaL_checknumber(L, 10);
- p.minsize = luaL_checknumber(L, 11);
- p.maxsize = luaL_checknumber(L, 12);
+ auto minpos = check_v3f(L, 3);
+ auto maxpos = check_v3f(L, 4);
+ auto minvel = check_v3f(L, 5);
+ auto maxvel = check_v3f(L, 6);
+ auto minacc = check_v3f(L, 7);
+ auto maxacc = check_v3f(L, 8);
+ auto minexptime = luaL_checknumber(L, 9);
+ auto maxexptime = luaL_checknumber(L, 10);
+ auto minsize = luaL_checknumber(L, 11);
+ auto maxsize = luaL_checknumber(L, 12);
+ p.pos = v3fRange(minpos, maxpos);
+ p.vel = v3fRange(minvel, maxvel);
+ p.acc = v3fRange(minacc, maxacc);
+ p.exptime = f32Range(minexptime, maxexptime);
+ p.size = f32Range(minsize, maxsize);
+
p.collisiondetection = readParam<bool>(L, 13);
- p.texture = luaL_checkstring(L, 14);
+ p.texture.string = luaL_checkstring(L, 14);
if (lua_gettop(L) == 15) // only spawn for a single player
playername = luaL_checkstring(L, 15);
}
@@ -182,40 +206,46 @@ int ModApiParticles::l_add_particlespawner(lua_State *L)
p.amount = getintfield_default(L, 1, "amount", p.amount);
p.time = getfloatfield_default(L, 1, "time", p.time);
- lua_getfield(L, 1, "minpos");
- if (lua_istable(L, -1))
- p.minpos = check_v3f(L, -1);
- lua_pop(L, 1);
-
- lua_getfield(L, 1, "maxpos");
- if (lua_istable(L, -1))
- p.maxpos = check_v3f(L, -1);
- lua_pop(L, 1);
-
- lua_getfield(L, 1, "minvel");
- if (lua_istable(L, -1))
- p.minvel = check_v3f(L, -1);
- lua_pop(L, 1);
-
- lua_getfield(L, 1, "maxvel");
- if (lua_istable(L, -1))
- p.maxvel = check_v3f(L, -1);
- lua_pop(L, 1);
-
- lua_getfield(L, 1, "minacc");
- if (lua_istable(L, -1))
- p.minacc = check_v3f(L, -1);
- lua_pop(L, 1);
-
- lua_getfield(L, 1, "maxacc");
- if (lua_istable(L, -1))
- p.maxacc = check_v3f(L, -1);
- lua_pop(L, 1);
+ // set default values
+ p.exptime = 1;
+ p.size = 1;
+
+ // read spawner parameters from the table
+ LuaParticleParams::readTweenTable(L, "pos", p.pos);
+ LuaParticleParams::readTweenTable(L, "vel", p.vel);
+ LuaParticleParams::readTweenTable(L, "acc", p.acc);
+ LuaParticleParams::readTweenTable(L, "size", p.size);
+ LuaParticleParams::readTweenTable(L, "exptime", p.exptime);
+ LuaParticleParams::readTweenTable(L, "drag", p.drag);
+ LuaParticleParams::readTweenTable(L, "jitter", p.jitter);
+ LuaParticleParams::readTweenTable(L, "bounce", p.bounce);
+ lua_getfield(L, 1, "attract");
+ if (!lua_isnil(L, -1)) {
+ luaL_checktype(L, -1, LUA_TTABLE);
+ lua_getfield(L, -1, "kind");
+ LuaParticleParams::readLuaValue(L, p.attractor_kind);
+ lua_pop(L,1);
+
+ lua_getfield(L, -1, "die_on_contact");
+ if (!lua_isnil(L, -1))
+ p.attractor_kill = readParam<bool>(L, -1);
+ lua_pop(L,1);
+
+ if (p.attractor_kind != AttractorKind::none) {
+ LuaParticleParams::readTweenTable(L, "strength", p.attract);
+ LuaParticleParams::readTweenTable(L, "origin", p.attractor_origin);
+ p.attractor_attachment = LuaParticleParams::readAttachmentID(L, "origin_attached");
+ if (p.attractor_kind != AttractorKind::point) {
+ LuaParticleParams::readTweenTable(L, "direction", p.attractor_direction);
+ p.attractor_direction_attachment = LuaParticleParams::readAttachmentID(L, "direction_attached");
+ }
+ }
+ } else {
+ p.attractor_kind = AttractorKind::none;
+ }
+ lua_pop(L,1);
+ LuaParticleParams::readTweenTable(L, "radius", p.radius);
- p.minexptime = getfloatfield_default(L, 1, "minexptime", p.minexptime);
- p.maxexptime = getfloatfield_default(L, 1, "maxexptime", p.maxexptime);
- p.minsize = getfloatfield_default(L, 1, "minsize", p.minsize);
- p.maxsize = getfloatfield_default(L, 1, "maxsize", p.maxsize);
p.collisiondetection = getboolfield_default(L, 1,
"collisiondetection", p.collisiondetection);
p.collision_removal = getboolfield_default(L, 1,
@@ -234,11 +264,29 @@ int ModApiParticles::l_add_particlespawner(lua_State *L)
attached = ObjectRef::getobject(ref);
}
+ lua_getfield(L, 1, "texture");
+ if (!lua_isnil(L, -1)) {
+ LuaParticleParams::readTexValue(L, p.texture);
+ }
+ lua_pop(L, 1);
+
p.vertical = getboolfield_default(L, 1, "vertical", p.vertical);
- p.texture = getstringfield_default(L, 1, "texture", p.texture);
playername = getstringfield_default(L, 1, "playername", "");
p.glow = getintfield_default(L, 1, "glow", p.glow);
+ lua_getfield(L, 1, "texpool");
+ if (lua_istable(L, -1)) {
+ size_t tl = lua_objlen(L, -1);
+ p.texpool.reserve(tl);
+ for (size_t i = 0; i < tl; ++i) {
+ lua_pushinteger(L, i+1), lua_gettable(L, -2);
+ p.texpool.emplace_back();
+ LuaParticleParams::readTexValue(L, p.texpool.back());
+ lua_pop(L,1);
+ }
+ }
+ lua_pop(L, 1);
+
lua_getfield(L, 1, "node");
if (lua_istable(L, -1))
p.node = readnode(L, -1, getGameDef(L)->ndef());
diff --git a/src/script/lua_api/l_particles_local.cpp b/src/script/lua_api/l_particles_local.cpp
index cc68b13a5..62cbab8e9 100644
--- a/src/script/lua_api/l_particles_local.cpp
+++ b/src/script/lua_api/l_particles_local.cpp
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_converter.h"
#include "lua_api/l_internal.h"
#include "lua_api/l_object.h"
+#include "lua_api/l_particleparams.h"
#include "client/particles.h"
#include "client/client.h"
#include "client/clientevent.h"
@@ -49,6 +50,19 @@ int ModApiParticlesLocal::l_add_particle(lua_State *L)
p.acc = check_v3f(L, -1);
lua_pop(L, 1);
+ lua_getfield(L, 1, "drag");
+ if (lua_istable(L, -1))
+ p.drag = check_v3f(L, -1);
+ lua_pop(L, 1);
+
+ lua_getfield(L, 1, "jitter");
+ LuaParticleParams::readLuaValue(L, p.jitter);
+ lua_pop(L, 1);
+
+ lua_getfield(L, 1, "bounce");
+ LuaParticleParams::readLuaValue(L, p.bounce);
+ lua_pop(L, 1);
+
p.expirationtime = getfloatfield_default(L, 1, "expirationtime",
p.expirationtime);
p.size = getfloatfield_default(L, 1, "size", p.size);
@@ -64,7 +78,11 @@ int ModApiParticlesLocal::l_add_particle(lua_State *L)
p.animation = read_animation_definition(L, -1);
lua_pop(L, 1);
- p.texture = getstringfield_default(L, 1, "texture", p.texture);
+ lua_getfield(L, 1, "texture");
+ if (!lua_isnil(L, -1)) {
+ LuaParticleParams::readTexValue(L,p.texture);
+ }
+ lua_pop(L, 1);
p.glow = getintfield_default(L, 1, "glow", p.glow);
lua_getfield(L, 1, "node");
@@ -88,44 +106,50 @@ int ModApiParticlesLocal::l_add_particlespawner(lua_State *L)
// Get parameters
ParticleSpawnerParameters p;
-
p.amount = getintfield_default(L, 1, "amount", p.amount);
p.time = getfloatfield_default(L, 1, "time", p.time);
- lua_getfield(L, 1, "minpos");
- if (lua_istable(L, -1))
- p.minpos = check_v3f(L, -1);
- lua_pop(L, 1);
-
- lua_getfield(L, 1, "maxpos");
- if (lua_istable(L, -1))
- p.maxpos = check_v3f(L, -1);
- lua_pop(L, 1);
-
- lua_getfield(L, 1, "minvel");
- if (lua_istable(L, -1))
- p.minvel = check_v3f(L, -1);
- lua_pop(L, 1);
-
- lua_getfield(L, 1, "maxvel");
- if (lua_istable(L, -1))
- p.maxvel = check_v3f(L, -1);
- lua_pop(L, 1);
-
- lua_getfield(L, 1, "minacc");
- if (lua_istable(L, -1))
- p.minacc = check_v3f(L, -1);
- lua_pop(L, 1);
+ // set default values
+ p.exptime = 1;
+ p.size = 1;
+
+ // read spawner parameters from the table
+ using namespace ParticleParamTypes;
+ LuaParticleParams::readTweenTable(L, "pos", p.pos);
+ LuaParticleParams::readTweenTable(L, "vel", p.vel);
+ LuaParticleParams::readTweenTable(L, "acc", p.acc);
+ LuaParticleParams::readTweenTable(L, "size", p.size);
+ LuaParticleParams::readTweenTable(L, "exptime", p.exptime);
+ LuaParticleParams::readTweenTable(L, "drag", p.drag);
+ LuaParticleParams::readTweenTable(L, "jitter", p.jitter);
+ LuaParticleParams::readTweenTable(L, "bounce", p.bounce);
+ lua_getfield(L, 1, "attract");
+ if (!lua_isnil(L, -1)) {
+ luaL_checktype(L, -1, LUA_TTABLE);
+ lua_getfield(L, -1, "kind");
+ LuaParticleParams::readLuaValue(L, p.attractor_kind);
+ lua_pop(L,1);
+
+ lua_getfield(L, -1, "die_on_contact");
+ if (!lua_isnil(L, -1))
+ p.attractor_kill = readParam<bool>(L, -1);
+ lua_pop(L,1);
+
+ if (p.attractor_kind != AttractorKind::none) {
+ LuaParticleParams::readTweenTable(L, "strength", p.attract);
+ LuaParticleParams::readTweenTable(L, "origin", p.attractor_origin);
+ p.attractor_attachment = LuaParticleParams::readAttachmentID(L, "origin_attached");
+ if (p.attractor_kind != AttractorKind::point) {
+ LuaParticleParams::readTweenTable(L, "direction", p.attractor_direction);
+ p.attractor_direction_attachment = LuaParticleParams::readAttachmentID(L, "direction_attached");
+ }
+ }
+ } else {
+ p.attractor_kind = AttractorKind::none;
+ }
+ lua_pop(L,1);
+ LuaParticleParams::readTweenTable(L, "radius", p.radius);
- lua_getfield(L, 1, "maxacc");
- if (lua_istable(L, -1))
- p.maxacc = check_v3f(L, -1);
- lua_pop(L, 1);
-
- p.minexptime = getfloatfield_default(L, 1, "minexptime", p.minexptime);
- p.maxexptime = getfloatfield_default(L, 1, "maxexptime", p.maxexptime);
- p.minsize = getfloatfield_default(L, 1, "minsize", p.minsize);
- p.maxsize = getfloatfield_default(L, 1, "maxsize", p.maxsize);
p.collisiondetection = getboolfield_default(L, 1,
"collisiondetection", p.collisiondetection);
p.collision_removal = getboolfield_default(L, 1,
@@ -137,10 +161,28 @@ int ModApiParticlesLocal::l_add_particlespawner(lua_State *L)
p.animation = read_animation_definition(L, -1);
lua_pop(L, 1);
+ lua_getfield(L, 1, "texture");
+ if (!lua_isnil(L, -1)) {
+ LuaParticleParams::readTexValue(L, p.texture);
+ }
+ lua_pop(L, 1);
+
p.vertical = getboolfield_default(L, 1, "vertical", p.vertical);
- p.texture = getstringfield_default(L, 1, "texture", p.texture);
p.glow = getintfield_default(L, 1, "glow", p.glow);
+ lua_getfield(L, 1, "texpool");
+ if (lua_istable(L, -1)) {
+ size_t tl = lua_objlen(L, -1);
+ p.texpool.reserve(tl);
+ for (size_t i = 0; i < tl; ++i) {
+ lua_pushinteger(L, i+1), lua_gettable(L, -2);
+ p.texpool.emplace_back();
+ LuaParticleParams::readTexValue(L, p.texpool.back());
+ lua_pop(L,1);
+ }
+ }
+ lua_pop(L, 1);
+
lua_getfield(L, 1, "node");
if (lua_istable(L, -1))
p.node = readnode(L, -1, getGameDef(L)->ndef());
diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp
index 88ab5e16b..a5daae346 100644
--- a/src/script/lua_api/l_server.cpp
+++ b/src/script/lua_api/l_server.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_converter.h"
#include "common/c_content.h"
+#include "common/c_packer.h"
#include "cpp_api/s_base.h"
#include "cpp_api/s_security.h"
#include "scripting_server.h"
@@ -61,11 +62,8 @@ int ModApiServer::l_get_server_uptime(lua_State *L)
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());
+ GET_ENV_PTR;
+ lua_pushnumber(L, env->getMaxLagEstimate());
return 1;
}
@@ -325,12 +323,15 @@ int ModApiServer::l_disconnect_player(lua_State *L)
else
message.append("Disconnected.");
- RemotePlayer *player = dynamic_cast<ServerEnvironment *>(getEnv(L))->getPlayer(name);
- if (player == NULL) {
+ Server *server = getServer(L);
+
+ RemotePlayer *player = server->getEnv().getPlayer(name);
+ if (!player) {
lua_pushboolean(L, false); // No such player
return 1;
}
- getServer(L)->DenyAccess_Legacy(player->getPeerId(), utf8_to_wide(message));
+
+ server->DenyAccess(player->getPeerId(), SERVER_ACCESSDENIED_CUSTOM_STRING, message);
lua_pushboolean(L, true);
return 1;
}
@@ -392,12 +393,11 @@ int ModApiServer::l_get_modpath(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
std::string modname = luaL_checkstring(L, 1);
- const ModSpec *mod = getServer(L)->getModSpec(modname);
- if (!mod) {
+ const ModSpec *mod = getGameDef(L)->getModSpec(modname);
+ if (!mod)
lua_pushnil(L);
- return 1;
- }
- lua_pushstring(L, mod->path.c_str());
+ else
+ lua_pushstring(L, mod->path.c_str());
return 1;
}
@@ -409,13 +409,14 @@ int ModApiServer::l_get_modnames(lua_State *L)
// Get a list of mods
std::vector<std::string> modlist;
- getServer(L)->getModNames(modlist);
+ for (auto &it : getGameDef(L)->getMods())
+ modlist.emplace_back(it.name);
std::sort(modlist.begin(), modlist.end());
// Package them up for Lua
lua_createtable(L, modlist.size(), 0);
- std::vector<std::string>::iterator iter = modlist.begin();
+ auto iter = modlist.begin();
for (u16 i = 0; iter != modlist.end(); ++iter) {
lua_pushstring(L, iter->c_str());
lua_rawseti(L, -2, ++i);
@@ -427,8 +428,8 @@ int ModApiServer::l_get_modnames(lua_State *L)
int ModApiServer::l_get_worldpath(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- std::string worldpath = getServer(L)->getWorldPath();
- lua_pushstring(L, worldpath.c_str());
+ const Server *srv = getServer(L);
+ lua_pushstring(L, srv->getWorldPath().c_str());
return 1;
}
@@ -436,16 +437,15 @@ int ModApiServer::l_get_worldpath(lua_State *L)
int ModApiServer::l_sound_play(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- SimpleSoundSpec spec;
- read_soundspec(L, 1, spec);
- ServerSoundParams params;
+ ServerPlayingSound params;
+ read_soundspec(L, 1, params.spec);
read_server_sound_params(L, 2, params);
bool ephemeral = lua_gettop(L) > 2 && readParam<bool>(L, 3);
if (ephemeral) {
- getServer(L)->playSound(spec, params, true);
+ getServer(L)->playSound(params, true);
lua_pushnil(L);
} else {
- s32 handle = getServer(L)->playSound(spec, params);
+ s32 handle = getServer(L)->playSound(params);
lua_pushinteger(L, handle);
}
return 1;
@@ -510,7 +510,8 @@ int ModApiServer::l_dynamic_add_media(lua_State *L)
int ModApiServer::l_is_singleplayer(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- lua_pushboolean(L, getServer(L)->isSingleplayer());
+ const Server *srv = getServer(L);
+ lua_pushboolean(L, srv->isSingleplayer());
return 1;
}
@@ -525,6 +526,76 @@ int ModApiServer::l_notify_authentication_modified(lua_State *L)
return 0;
}
+// do_async_callback(func, params, mod_origin)
+int ModApiServer::l_do_async_callback(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ ServerScripting *script = getScriptApi<ServerScripting>(L);
+
+ luaL_checktype(L, 1, LUA_TFUNCTION);
+ luaL_checktype(L, 2, LUA_TTABLE);
+ luaL_checktype(L, 3, LUA_TSTRING);
+
+ call_string_dump(L, 1);
+ size_t func_length;
+ const char *serialized_func_raw = lua_tolstring(L, -1, &func_length);
+
+ PackedValue *param = script_pack(L, 2);
+
+ std::string mod_origin = readParam<std::string>(L, 3);
+
+ u32 jobId = script->queueAsync(
+ std::string(serialized_func_raw, func_length),
+ param, mod_origin);
+
+ lua_settop(L, 0);
+ lua_pushinteger(L, jobId);
+ return 1;
+}
+
+// register_async_dofile(path)
+int ModApiServer::l_register_async_dofile(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ std::string path = readParam<std::string>(L, 1);
+ CHECK_SECURE_PATH(L, path.c_str(), false);
+
+ // Find currently running mod name (only at init time)
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME);
+ if (!lua_isstring(L, -1))
+ return 0;
+ std::string modname = readParam<std::string>(L, -1);
+
+ getServer(L)->m_async_init_files.emplace_back(modname, path);
+ lua_pushboolean(L, true);
+ return 1;
+}
+
+// serialize_roundtrip(value)
+// Meant for unit testing the packer from Lua
+int ModApiServer::l_serialize_roundtrip(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ int top = lua_gettop(L);
+ auto *pv = script_pack(L, 1);
+ if (top != lua_gettop(L))
+ throw LuaError("stack values leaked");
+
+#ifndef NDEBUG
+ script_dump_packed(pv);
+#endif
+
+ top = lua_gettop(L);
+ script_unpack(L, pv);
+ delete pv;
+ if (top + 1 != lua_gettop(L))
+ throw LuaError("stack values leaked");
+
+ return 1;
+}
+
void ModApiServer::Initialize(lua_State *L, int top)
{
API_FCT(request_shutdown);
@@ -558,4 +629,18 @@ void ModApiServer::Initialize(lua_State *L, int top)
API_FCT(remove_player);
API_FCT(unban_player_or_ip);
API_FCT(notify_authentication_modified);
+
+ API_FCT(do_async_callback);
+ API_FCT(register_async_dofile);
+ API_FCT(serialize_roundtrip);
+}
+
+void ModApiServer::InitializeAsync(lua_State *L, int top)
+{
+ API_FCT(get_worldpath);
+ API_FCT(is_singleplayer);
+
+ API_FCT(get_current_modname);
+ API_FCT(get_modpath);
+ API_FCT(get_modnames);
}
diff --git a/src/script/lua_api/l_server.h b/src/script/lua_api/l_server.h
index f05c0b7c9..a4f38c34e 100644
--- a/src/script/lua_api/l_server.h
+++ b/src/script/lua_api/l_server.h
@@ -106,6 +106,16 @@ private:
// notify_authentication_modified(name)
static int l_notify_authentication_modified(lua_State *L);
+ // do_async_callback(func, params, mod_origin)
+ static int l_do_async_callback(lua_State *L);
+
+ // register_async_dofile(path)
+ static int l_register_async_dofile(lua_State *L);
+
+ // serialize_roundtrip(obj)
+ static int l_serialize_roundtrip(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_settings.cpp b/src/script/lua_api/l_settings.cpp
index 14398dda2..3f3fda56e 100644
--- a/src/script/lua_api/l_settings.cpp
+++ b/src/script/lua_api/l_settings.cpp
@@ -27,9 +27,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
-/* This protects:
- * 'secure.*' settings from being set
- * some mapgen settings from being set
+/* This protects the following from being set:
+ * 'secure.*' settings
+ * some security-relevant settings
+ * (better solution pending)
+ * some mapgen settings
* (not security-criticial, just to avoid messing up user configs)
*/
#define CHECK_SETTING_SECURITY(L, name) \
@@ -41,7 +43,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
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.");
+ throw LuaError("Attempted to set secure setting.");
bool is_mainmenu = false;
#ifndef SERVER
@@ -54,6 +56,17 @@ static inline int checkSettingSecurity(lua_State* L, const std::string &name)
return -1;
}
+ const char *disallowed[] = {
+ "main_menu_script", "shader_path", "texture_path", "screenshot_path",
+ "serverlist_file", "serverlist_url", "map-dir", "contentdb_url",
+ };
+ if (!is_mainmenu) {
+ for (const char *name2 : disallowed) {
+ if (name == name2)
+ throw LuaError("Attempted to set disallowed setting.");
+ }
+ }
+
return 0;
}
diff --git a/src/script/lua_api/l_sound.cpp b/src/script/lua_api/l_sound.cpp
index b86eda53e..934b4a07e 100644
--- a/src/script/lua_api/l_sound.cpp
+++ b/src/script/lua_api/l_sound.cpp
@@ -28,9 +28,9 @@ int ModApiSound::l_sound_play(lua_State *L)
{
SimpleSoundSpec spec;
read_soundspec(L, 1, spec);
- bool looped = readParam<bool>(L, 2);
+ spec.loop = readParam<bool>(L, 2);
- s32 handle = getGuiEngine(L)->playSound(spec, looped);
+ s32 handle = getGuiEngine(L)->playSound(spec);
lua_pushinteger(L, handle);
diff --git a/src/script/lua_api/l_storage.cpp b/src/script/lua_api/l_storage.cpp
index b8f4347a8..b6c53e353 100644
--- a/src/script/lua_api/l_storage.cpp
+++ b/src/script/lua_api/l_storage.cpp
@@ -25,12 +25,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
int ModApiStorage::l_get_mod_storage(lua_State *L)
{
- lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME);
- if (!lua_isstring(L, -1)) {
- return 0;
- }
-
- std::string mod_name = readParam<std::string>(L, -1);
+ // Note that this is wrapped in Lua, see builtin/common/mod_storage.lua
+ std::string mod_name = readParam<std::string>(L, 1);
ModMetadata *store = nullptr;
diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp
index b04f26fda..f602aed99 100644
--- a/src/script/lua_api/l_util.cpp
+++ b/src/script/lua_api/l_util.cpp
@@ -159,6 +159,17 @@ int ModApiUtil::l_write_json(lua_State *L)
return 1;
}
+// get_tool_wear_after_use(uses[, initial_wear])
+int ModApiUtil::l_get_tool_wear_after_use(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ u32 uses = readParam<int>(L, 1);
+ u16 initial_wear = readParam<int>(L, 2, 0);
+ u16 wear = calculateResultWear(uses, initial_wear);
+ lua_pushnumber(L, wear);
+ return 1;
+}
+
// get_dig_params(groups, tool_capabilities[, wear])
int ModApiUtil::l_get_dig_params(lua_State *L)
{
@@ -469,6 +480,8 @@ int ModApiUtil::l_get_version(lua_State *L)
lua_setfield(L, table, "hash");
}
+ lua_pushboolean(L, DEVELOPMENT_BUILD);
+ lua_setfield(L, table, "is_dev");
return 1;
}
@@ -586,6 +599,7 @@ void ModApiUtil::Initialize(lua_State *L, int top)
API_FCT(parse_json);
API_FCT(write_json);
+ API_FCT(get_tool_wear_after_use);
API_FCT(get_dig_params);
API_FCT(get_hit_params);
@@ -647,6 +661,9 @@ void ModApiUtil::InitializeClient(lua_State *L, int top)
API_FCT(sha1);
API_FCT(colorspec_to_colorstring);
API_FCT(colorspec_to_bytes);
+
+ LuaSettings::create(L, g_settings, g_settings_path);
+ lua_setfield(L, top, "settings");
}
void ModApiUtil::InitializeAsync(lua_State *L, int top)
@@ -671,6 +688,9 @@ void ModApiUtil::InitializeAsync(lua_State *L, int top)
API_FCT(cpdir);
API_FCT(mvdir);
API_FCT(get_dir_list);
+ API_FCT(safe_file_write);
+
+ API_FCT(request_insecure_environment);
API_FCT(encode_base64);
API_FCT(decode_base64);
@@ -680,6 +700,8 @@ void ModApiUtil::InitializeAsync(lua_State *L, int top)
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);
diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h
index fcf8a1057..ec86c6632 100644
--- a/src/script/lua_api/l_util.h
+++ b/src/script/lua_api/l_util.h
@@ -50,6 +50,9 @@ private:
// write_json(data[, styled])
static int l_write_json(lua_State *L);
+ // get_tool_wear_after_use(uses[, initial_wear])
+ static int l_get_tool_wear_after_use(lua_State *L);
+
// get_dig_params(groups, tool_capabilities[, wear])
static int l_get_dig_params(lua_State *L);
@@ -129,6 +132,4 @@ public:
static void Initialize(lua_State *L, int top);
static void InitializeAsync(lua_State *L, int top);
static void InitializeClient(lua_State *L, int top);
-
- static void InitializeAsync(AsyncEngine &engine);
};
diff --git a/src/script/lua_api/l_vmanip.cpp b/src/script/lua_api/l_vmanip.cpp
index e040e545b..6187a47db 100644
--- a/src/script/lua_api/l_vmanip.cpp
+++ b/src/script/lua_api/l_vmanip.cpp
@@ -17,11 +17,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-
+#include <map>
#include "lua_api/l_vmanip.h"
#include "lua_api/l_internal.h"
#include "common/c_content.h"
#include "common/c_converter.h"
+#include "common/c_packer.h"
#include "emerge.h"
#include "environment.h"
#include "map.h"
@@ -45,6 +46,8 @@ int LuaVoxelManip::l_read_from_map(lua_State *L)
LuaVoxelManip *o = checkobject(L, 1);
MMVManip *vm = o->vm;
+ if (vm->isOrphan())
+ return 0;
v3s16 bp1 = getNodeBlockPos(check_v3s16(L, 2));
v3s16 bp2 = getNodeBlockPos(check_v3s16(L, 3));
@@ -112,23 +115,23 @@ int LuaVoxelManip::l_write_to_map(lua_State *L)
LuaVoxelManip *o = checkobject(L, 1);
bool update_light = !lua_isboolean(L, 2) || readParam<bool>(L, 2);
+
GET_ENV_PTR;
ServerMap *map = &(env->getServerMap());
+
+ std::map<v3s16, MapBlock*> modified_blocks;
if (o->is_mapgen_vm || !update_light) {
- o->vm->blitBackAll(&(o->modified_blocks));
+ o->vm->blitBackAll(&modified_blocks);
} else {
- voxalgo::blit_back_with_light(map, o->vm,
- &(o->modified_blocks));
+ voxalgo::blit_back_with_light(map, o->vm, &modified_blocks);
}
MapEditEvent event;
event.type = MEET_OTHER;
- for (const auto &modified_block : o->modified_blocks)
- event.modified_blocks.insert(modified_block.first);
-
+ for (const auto &it : modified_blocks)
+ event.modified_blocks.insert(it.first);
map->dispatchEvent(event);
- o->modified_blocks.clear();
return 0;
}
@@ -166,7 +169,7 @@ int LuaVoxelManip::l_update_liquids(lua_State *L)
LuaVoxelManip *o = checkobject(L, 1);
- Map *map = &(env->getMap());
+ ServerMap *map = &(env->getServerMap());
const NodeDefManager *ndef = getServer(L)->getNodeDefManager();
MMVManip *vm = o->vm;
@@ -429,6 +432,34 @@ LuaVoxelManip *LuaVoxelManip::checkobject(lua_State *L, int narg)
return *(LuaVoxelManip **)ud; // unbox pointer
}
+void *LuaVoxelManip::packIn(lua_State *L, int idx)
+{
+ LuaVoxelManip *o = checkobject(L, idx);
+
+ if (o->is_mapgen_vm)
+ throw LuaError("nope");
+ return o->vm->clone();
+}
+
+void LuaVoxelManip::packOut(lua_State *L, void *ptr)
+{
+ MMVManip *vm = reinterpret_cast<MMVManip*>(ptr);
+ if (!L) {
+ delete vm;
+ return;
+ }
+
+ // Associate vmanip with map if the Lua env has one
+ Environment *env = getEnv(L);
+ if (env)
+ vm->reparent(&(env->getMap()));
+
+ LuaVoxelManip *o = new LuaVoxelManip(vm, false);
+ *(void **)(lua_newuserdata(L, sizeof(void *))) = o;
+ luaL_getmetatable(L, className);
+ lua_setmetatable(L, -2);
+}
+
void LuaVoxelManip::Register(lua_State *L)
{
lua_newtable(L);
@@ -455,6 +486,8 @@ void LuaVoxelManip::Register(lua_State *L)
// Can be created from Lua (VoxelManip())
lua_register(L, className, create_object);
+
+ script_register_packer(L, className, packIn, packOut);
}
const char LuaVoxelManip::className[] = "VoxelManip";
diff --git a/src/script/lua_api/l_vmanip.h b/src/script/lua_api/l_vmanip.h
index 15ab9eef8..005133335 100644
--- a/src/script/lua_api/l_vmanip.h
+++ b/src/script/lua_api/l_vmanip.h
@@ -19,7 +19,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
-#include <map>
#include "irr_v3d.h"
#include "lua_api/l_base.h"
@@ -33,7 +32,6 @@ class MMVManip;
class LuaVoxelManip : public ModApiBase
{
private:
- std::map<v3s16, MapBlock *> modified_blocks;
bool is_mapgen_vm = false;
static const char className[];
@@ -77,5 +75,8 @@ public:
static LuaVoxelManip *checkobject(lua_State *L, int narg);
+ static void *packIn(lua_State *L, int idx);
+ static void packOut(lua_State *L, void *ptr);
+
static void Register(lua_State *L);
};
diff --git a/src/script/scripting_client.cpp b/src/script/scripting_client.cpp
index 6643a9509..377205379 100644
--- a/src/script/scripting_client.cpp
+++ b/src/script/scripting_client.cpp
@@ -35,6 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "lua_api/l_nodemeta.h"
#include "lua_api/l_localplayer.h"
#include "lua_api/l_camera.h"
+#include "lua_api/l_settings.h"
ClientScripting::ClientScripting(Client *client):
ScriptApiBase(ScriptingType::Client)
@@ -73,6 +74,7 @@ void ClientScripting::InitializeModApi(lua_State *L, int top)
LuaLocalPlayer::Register(L);
LuaCamera::Register(L);
ModChannelRef::Register(L);
+ LuaSettings::Register(L);
ModApiUtil::InitializeClient(L, top);
ModApiClient::Initialize(L, top);
diff --git a/src/script/scripting_server.cpp b/src/script/scripting_server.cpp
index 85411ded4..b462141b0 100644
--- a/src/script/scripting_server.cpp
+++ b/src/script/scripting_server.cpp
@@ -47,11 +47,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "lua_api/l_storage.h"
extern "C" {
-#include "lualib.h"
+#include <lualib.h>
}
ServerScripting::ServerScripting(Server* server):
- ScriptApiBase(ScriptingType::Server)
+ ScriptApiBase(ScriptingType::Server),
+ asyncEngine(server)
{
setGameDef(server);
@@ -88,6 +89,48 @@ ServerScripting::ServerScripting(Server* server):
infostream << "SCRIPTAPI: Initialized game modules" << std::endl;
}
+void ServerScripting::initAsync()
+{
+ // Save globals to transfer
+ {
+ lua_State *L = getStack();
+ lua_getglobal(L, "core");
+ luaL_checktype(L, -1, LUA_TTABLE);
+ lua_getfield(L, -1, "get_globals_to_transfer");
+ lua_call(L, 0, 1);
+ auto *data = script_pack(L, -1);
+ assert(!data->contains_userdata);
+ getServer()->m_async_globals_data.reset(data);
+ lua_pushnil(L);
+ lua_setfield(L, -3, "get_globals_to_transfer"); // unset function too
+ lua_pop(L, 2); // pop 'core', return value
+ }
+
+ infostream << "SCRIPTAPI: Initializing async engine" << std::endl;
+ asyncEngine.registerStateInitializer(InitializeAsync);
+ asyncEngine.registerStateInitializer(ModApiUtil::InitializeAsync);
+ asyncEngine.registerStateInitializer(ModApiCraft::InitializeAsync);
+ asyncEngine.registerStateInitializer(ModApiItemMod::InitializeAsync);
+ asyncEngine.registerStateInitializer(ModApiServer::InitializeAsync);
+ // not added: ModApiMapgen is a minefield for thread safety
+ // not added: ModApiHttp async api can't really work together with our jobs
+ // not added: ModApiStorage is probably not thread safe(?)
+
+ asyncEngine.initialize(0);
+}
+
+void ServerScripting::stepAsync()
+{
+ asyncEngine.step(getStack());
+}
+
+u32 ServerScripting::queueAsync(std::string &&serialized_func,
+ PackedValue *param, const std::string &mod_origin)
+{
+ return asyncEngine.queueAsyncJob(std::move(serialized_func),
+ param, mod_origin);
+}
+
void ServerScripting::InitializeModApi(lua_State *L, int top)
{
// Register reference classes (userdata)
@@ -125,3 +168,24 @@ void ServerScripting::InitializeModApi(lua_State *L, int top)
ModApiStorage::Initialize(L, top);
ModApiChannels::Initialize(L, top);
}
+
+void ServerScripting::InitializeAsync(lua_State *L, int top)
+{
+ // classes
+ LuaItemStack::Register(L);
+ LuaPerlinNoise::Register(L);
+ LuaPerlinNoiseMap::Register(L);
+ LuaPseudoRandom::Register(L);
+ LuaPcgRandom::Register(L);
+ LuaSecureRandom::Register(L);
+ LuaVoxelManip::Register(L);
+ LuaSettings::Register(L);
+
+ // globals data
+ lua_getglobal(L, "core");
+ luaL_checktype(L, -1, LUA_TTABLE);
+ auto *data = ModApiBase::getServer(L)->m_async_globals_data.get();
+ script_unpack(L, data);
+ lua_setfield(L, -2, "transferred_globals");
+ lua_pop(L, 1); // pop 'core'
+}
diff --git a/src/script/scripting_server.h b/src/script/scripting_server.h
index bf06ab197..9803397c5 100644
--- a/src/script/scripting_server.h
+++ b/src/script/scripting_server.h
@@ -27,6 +27,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "cpp_api/s_player.h"
#include "cpp_api/s_server.h"
#include "cpp_api/s_security.h"
+#include "cpp_api/s_async.h"
+
+struct PackedValue;
/*****************************************************************************/
/* Scripting <-> Server Game Interface */
@@ -48,6 +51,20 @@ public:
// use ScriptApiBase::loadMod() to load mods
+ // Initialize async engine, call this AFTER loading all mods
+ void initAsync();
+
+ // Global step handler to collect async results
+ void stepAsync();
+
+ // Pass job to async threads
+ u32 queueAsync(std::string &&serialized_func,
+ PackedValue *param, const std::string &mod_origin);
+
private:
void InitializeModApi(lua_State *L, int top);
+
+ static void InitializeAsync(lua_State *L, int top);
+
+ AsyncEngine asyncEngine;
};
diff --git a/src/serialization.cpp b/src/serialization.cpp
index d3009bc83..dc34dd7b9 100644
--- a/src/serialization.cpp
+++ b/src/serialization.cpp
@@ -25,7 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <zstd.h>
/* report a zlib or i/o error */
-void zerr(int ret)
+static void zerr(int ret)
{
dstream<<"zerr: ";
switch (ret) {
@@ -52,6 +52,17 @@ void zerr(int ret)
}
}
+// Make sure that z is deleted in case of exception
+template <int (*F)(z_stream*)>
+class ZlibAutoDeleter {
+public:
+ ZlibAutoDeleter(z_stream *ptr) : ptr_(ptr) {}
+ ~ZlibAutoDeleter() { F(ptr_); }
+
+private:
+ z_stream *ptr_;
+};
+
void compressZlib(const u8 *data, size_t data_size, std::ostream &os, int level)
{
z_stream z;
@@ -68,6 +79,8 @@ void compressZlib(const u8 *data, size_t data_size, std::ostream &os, int level)
if(ret != Z_OK)
throw SerializationError("compressZlib: deflateInit failed");
+ ZlibAutoDeleter<deflateEnd> deleter(&z);
+
// Point zlib to our input buffer
z.next_in = (Bytef*)&data[0];
z.avail_in = data_size;
@@ -91,8 +104,6 @@ void compressZlib(const u8 *data, size_t data_size, std::ostream &os, int level)
if(status == Z_STREAM_END)
break;
}
-
- deflateEnd(&z);
}
void compressZlib(const std::string &data, std::ostream &os, int level)
@@ -108,7 +119,6 @@ void decompressZlib(std::istream &is, std::ostream &os, size_t limit)
char output_buffer[bufsize];
int status = 0;
int ret;
- int bytes_read = 0;
int bytes_written = 0;
int input_buffer_len = 0;
@@ -120,9 +130,9 @@ void decompressZlib(std::istream &is, std::ostream &os, size_t limit)
if(ret != Z_OK)
throw SerializationError("dcompressZlib: inflateInit failed");
- z.avail_in = 0;
+ ZlibAutoDeleter<inflateEnd> deleter(&z);
- //dstream<<"initial fail="<<is.fail()<<" bad="<<is.bad()<<std::endl;
+ z.avail_in = 0;
for(;;)
{
@@ -147,19 +157,13 @@ void decompressZlib(std::istream &is, std::ostream &os, size_t limit)
is.read(input_buffer, bufsize);
input_buffer_len = is.gcount();
z.avail_in = input_buffer_len;
- //dstream<<"read fail="<<is.fail()<<" bad="<<is.bad()<<std::endl;
}
if(z.avail_in == 0)
{
- //dstream<<"z.avail_in == 0"<<std::endl;
break;
}
- //dstream<<"1 z.avail_in="<<z.avail_in<<std::endl;
status = inflate(&z, Z_NO_FLUSH);
- //dstream<<"2 z.avail_in="<<z.avail_in<<std::endl;
- bytes_read += is.gcount() - z.avail_in;
- //dstream<<"bytes_read="<<bytes_read<<std::endl;
if(status == Z_NEED_DICT || status == Z_DATA_ERROR
|| status == Z_MEM_ERROR)
@@ -168,16 +172,11 @@ void decompressZlib(std::istream &is, std::ostream &os, size_t limit)
throw SerializationError("decompressZlib: inflate failed");
}
int count = output_size - z.avail_out;
- //dstream<<"count="<<count<<std::endl;
if(count)
os.write(output_buffer, count);
bytes_written += count;
if(status == Z_STREAM_END)
{
- //dstream<<"Z_STREAM_END"<<std::endl;
-
- //dstream<<"z.avail_in="<<z.avail_in<<std::endl;
- //dstream<<"fail="<<is.fail()<<" bad="<<is.bad()<<std::endl;
// Unget all the data that inflate didn't take
is.clear(); // Just in case EOF is set
for(u32 i=0; i < z.avail_in; i++)
@@ -194,8 +193,6 @@ void decompressZlib(std::istream &is, std::ostream &os, size_t limit)
break;
}
}
-
- inflateEnd(&z);
}
struct ZSTD_Deleter {
diff --git a/src/server.cpp b/src/server.cpp
index b3fb037b5..93767da9d 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -136,24 +136,31 @@ void *ServerThread::run()
return nullptr;
}
-v3f ServerSoundParams::getPos(ServerEnvironment *env, bool *pos_exists) const
+v3f ServerPlayingSound::getPos(ServerEnvironment *env, bool *pos_exists) const
{
- if(pos_exists) *pos_exists = false;
- switch(type){
- case SSP_LOCAL:
+ if (pos_exists)
+ *pos_exists = false;
+
+ switch (type ){
+ case SoundLocation::Local:
return v3f(0,0,0);
- case SSP_POSITIONAL:
- if(pos_exists) *pos_exists = true;
+ case SoundLocation::Position:
+ if (pos_exists)
+ *pos_exists = true;
return pos;
- case SSP_OBJECT: {
- if(object == 0)
- return v3f(0,0,0);
- ServerActiveObject *sao = env->getActiveObject(object);
- if(!sao)
- return v3f(0,0,0);
- if(pos_exists) *pos_exists = true;
- return sao->getBasePosition(); }
+ case SoundLocation::Object:
+ {
+ if (object == 0)
+ return v3f(0,0,0);
+ ServerActiveObject *sao = env->getActiveObject(object);
+ if (!sao)
+ return v3f(0,0,0);
+ if (pos_exists)
+ *pos_exists = true;
+ return sao->getBasePosition();
+ }
}
+
return v3f(0,0,0);
}
@@ -254,7 +261,7 @@ Server::Server(
#if USE_PROMETHEUS
m_metrics_backend = std::unique_ptr<MetricsBackend>(createPrometheusMetricsBackend());
#else
- m_metrics_backend = std::unique_ptr<MetricsBackend>(new MetricsBackend());
+ m_metrics_backend = std::make_unique<MetricsBackend>();
#endif
m_uptime_counter = m_metrics_backend->addCounter("minetest_core_server_uptime", "Server uptime (in seconds)");
@@ -268,9 +275,15 @@ Server::Server(
"minetest_core_latency",
"Latency value (in seconds)");
- m_aom_buffer_counter = m_metrics_backend->addCounter(
- "minetest_core_aom_generated_count",
- "Number of active object messages generated");
+
+ const std::string aom_types[] = {"reliable", "unreliable"};
+ for (u32 i = 0; i < ARRLEN(aom_types); i++) {
+ std::string help_str("Number of active object messages generated (");
+ help_str.append(aom_types[i]).append(")");
+ m_aom_buffer_counter[i] = m_metrics_backend->addCounter(
+ "minetest_core_aom_generated_count", help_str,
+ {{"type", aom_types[i]}});
+ }
m_packet_recv_counter = m_metrics_backend->addCounter(
"minetest_core_server_packet_recv",
@@ -280,6 +293,10 @@ Server::Server(
"minetest_core_server_packet_recv_processed",
"Valid received packets processed");
+ m_map_edit_event_counter = m_metrics_backend->addCounter(
+ "minetest_core_map_edit_events",
+ "Number of map edit events");
+
m_lag_gauge->set(g_settings->getFloat("dedicated_server_step"));
}
@@ -396,7 +413,7 @@ void Server::init()
}
// Create emerge manager
- m_emerge = new EmergeManager(this);
+ m_emerge = new EmergeManager(this, m_metrics_backend.get());
// Create ban manager
std::string ban_path = m_path_world + DIR_DELIM "ipban.txt";
@@ -406,11 +423,16 @@ void Server::init()
m_mod_storage_database = openModStorageDatabase(m_path_world);
m_mod_storage_database->beginSave();
- m_modmgr = std::unique_ptr<ServerModManager>(new ServerModManager(m_path_world));
+ m_modmgr = std::make_unique<ServerModManager>(m_path_world);
std::vector<ModSpec> unsatisfied_mods = m_modmgr->getUnsatisfiedMods();
+
// complain about mods with unsatisfied dependencies
if (!m_modmgr->isConsistent()) {
m_modmgr->printUnsatisfiedModsError();
+
+ warningstream
+ << "You have unsatisfied dependencies, loading your world anyway. "
+ << "This will become a fatal error in the future." << std::endl;
}
//lock environment
@@ -426,10 +448,11 @@ void Server::init()
m_script = new ServerScripting(this);
// Must be created before mod loading because we have some inventory creation
- m_inventory_mgr = std::unique_ptr<ServerInventoryManager>(new ServerInventoryManager());
+ m_inventory_mgr = std::make_unique<ServerInventoryManager>();
m_script->loadMod(getBuiltinLuaPath() + DIR_DELIM "init.lua", BUILTIN_MOD_NAME);
+ m_gamespec.checkAndLog();
m_modmgr->loadMods(m_script);
// Read Textures and calculate sha1 sums
@@ -461,7 +484,8 @@ void Server::init()
// Initialize Environment
m_startup_server_map = nullptr; // Ownership moved to ServerEnvironment
- m_env = new ServerEnvironment(servermap, m_script, this, m_path_world);
+ m_env = new ServerEnvironment(servermap, m_script, this,
+ m_path_world, m_metrics_backend.get());
m_inventory_mgr->setEnv(m_env);
m_clients.setEnv(m_env);
@@ -480,6 +504,9 @@ void Server::init()
// Give environment reference to scripting api
m_script->initializeEnvironment(m_env);
+ // Do this after regular script init is done
+ m_script->initAsync();
+
// Register us to receive map edit events
servermap->addEventReceiver(this);
@@ -521,7 +548,7 @@ void Server::start()
actionstream << "World at [" << m_path_world << "]" << std::endl;
actionstream << "Server for gameid=\"" << m_gamespec.id
<< "\" listening on ";
- m_bind_addr.print(&actionstream);
+ m_bind_addr.print(actionstream);
actionstream << "." << std::endl;
}
@@ -619,6 +646,7 @@ void Server::AsyncRunStep(bool initial_step)
max_lag = dtime;
}
m_env->reportMaxLagEstimate(max_lag);
+
// Step environment
m_env->step(dtime);
}
@@ -630,8 +658,8 @@ void Server::AsyncRunStep(bool initial_step)
// Run Map's timers and unload unused data
ScopeProfiler sp(g_profiler, "Server: map timer and unload");
m_env->getMap().timerUpdate(map_timer_and_unload_dtime,
- g_settings->getFloat("server_unload_unused_data_timeout"),
- U32_MAX);
+ std::max(g_settings->getFloat("server_unload_unused_data_timeout"), 0.0f),
+ -1);
}
/*
@@ -665,7 +693,7 @@ void Server::AsyncRunStep(bool initial_step)
ScopeProfiler sp(g_profiler, "Server: liquid transform");
std::map<v3s16, MapBlock*> modified_blocks;
- m_env->getMap().transformLiquids(modified_blocks, m_env);
+ m_env->getServerMap().transformLiquids(modified_blocks, m_env);
/*
Set the modified blocks unsent for all the clients
@@ -723,28 +751,29 @@ void Server::AsyncRunStep(bool initial_step)
//infostream<<"Server: Checking added and deleted active objects"<<std::endl;
MutexAutoLock envlock(m_env_mutex);
- m_clients.lock();
- const RemoteClientMap &clients = m_clients.getClientList();
- ScopeProfiler sp(g_profiler, "Server: update objects within range");
+ {
+ ClientInterface::AutoLock clientlock(m_clients);
+ const RemoteClientMap &clients = m_clients.getClientList();
+ ScopeProfiler sp(g_profiler, "Server: update objects within range");
- m_player_gauge->set(clients.size());
- for (const auto &client_it : clients) {
- RemoteClient *client = client_it.second;
+ m_player_gauge->set(clients.size());
+ for (const auto &client_it : clients) {
+ RemoteClient *client = client_it.second;
- if (client->getState() < CS_DefinitionsSent)
- continue;
+ if (client->getState() < CS_DefinitionsSent)
+ continue;
- // This can happen if the client times out somehow
- if (!m_env->getPlayer(client->peer_id))
- continue;
+ // This can happen if the client times out somehow
+ if (!m_env->getPlayer(client->peer_id))
+ continue;
- PlayerSAO *playersao = getPlayerSAO(client->peer_id);
- if (!playersao)
- continue;
+ PlayerSAO *playersao = getPlayerSAO(client->peer_id);
+ if (!playersao)
+ continue;
- SendActiveObjectRemoveAdd(client, playersao);
+ SendActiveObjectRemoveAdd(client, playersao);
+ }
}
- m_clients.unlock();
// Write changes to the mod storage
m_mod_storage_save_timer -= dtime;
@@ -768,10 +797,14 @@ void Server::AsyncRunStep(bool initial_step)
// Get active object messages from environment
ActiveObjectMessage aom(0);
- u32 aom_count = 0;
+ u32 count_reliable = 0, count_unreliable = 0;
for(;;) {
if (!m_env->getActiveObjectMessage(&aom))
break;
+ if (aom.reliable)
+ count_reliable++;
+ else
+ count_unreliable++;
std::vector<ActiveObjectMessage>* message_list = nullptr;
auto n = buffered_messages.find(aom.id);
@@ -782,68 +815,69 @@ void Server::AsyncRunStep(bool initial_step)
message_list = n->second;
}
message_list->push_back(std::move(aom));
- aom_count++;
}
- m_aom_buffer_counter->increment(aom_count);
-
- m_clients.lock();
- const RemoteClientMap &clients = m_clients.getClientList();
- // Route data to every client
- std::string reliable_data, unreliable_data;
- for (const auto &client_it : clients) {
- reliable_data.clear();
- unreliable_data.clear();
- RemoteClient *client = client_it.second;
- PlayerSAO *player = getPlayerSAO(client->peer_id);
- // Go through all objects in message buffer
- for (const auto &buffered_message : buffered_messages) {
- // If object does not exist or is not known by client, skip it
- u16 id = buffered_message.first;
- ServerActiveObject *sao = m_env->getActiveObject(id);
- if (!sao || client->m_known_objects.find(id) == client->m_known_objects.end())
- continue;
+ m_aom_buffer_counter[0]->increment(count_reliable);
+ m_aom_buffer_counter[1]->increment(count_unreliable);
- // Get message list of object
- std::vector<ActiveObjectMessage>* list = buffered_message.second;
- // Go through every message
- for (const ActiveObjectMessage &aom : *list) {
- // Send position updates to players who do not see the attachment
- if (aom.datastring[0] == AO_CMD_UPDATE_POSITION) {
- if (sao->getId() == player->getId())
- continue;
-
- // Do not send position updates for attached players
- // as long the parent is known to the client
- ServerActiveObject *parent = sao->getParent();
- if (parent && client->m_known_objects.find(parent->getId()) !=
- client->m_known_objects.end())
- continue;
- }
+ {
+ ClientInterface::AutoLock clientlock(m_clients);
+ const RemoteClientMap &clients = m_clients.getClientList();
+ // Route data to every client
+ std::string reliable_data, unreliable_data;
+ for (const auto &client_it : clients) {
+ reliable_data.clear();
+ unreliable_data.clear();
+ RemoteClient *client = client_it.second;
+ PlayerSAO *player = getPlayerSAO(client->peer_id);
+ // Go through all objects in message buffer
+ for (const auto &buffered_message : buffered_messages) {
+ // If object does not exist or is not known by client, skip it
+ u16 id = buffered_message.first;
+ ServerActiveObject *sao = m_env->getActiveObject(id);
+ if (!sao || client->m_known_objects.find(id) == client->m_known_objects.end())
+ continue;
- // Add full new data to appropriate buffer
- std::string &buffer = aom.reliable ? reliable_data : unreliable_data;
- char idbuf[2];
- writeU16((u8*) idbuf, aom.id);
- // u16 id
- // std::string data
- buffer.append(idbuf, sizeof(idbuf));
- buffer.append(serializeString16(aom.datastring));
+ // Get message list of object
+ std::vector<ActiveObjectMessage>* list = buffered_message.second;
+ // Go through every message
+ for (const ActiveObjectMessage &aom : *list) {
+ // Send position updates to players who do not see the attachment
+ if (aom.datastring[0] == AO_CMD_UPDATE_POSITION) {
+ if (sao->getId() == player->getId())
+ continue;
+
+ // Do not send position updates for attached players
+ // as long the parent is known to the client
+ ServerActiveObject *parent = sao->getParent();
+ if (parent && client->m_known_objects.find(parent->getId()) !=
+ client->m_known_objects.end())
+ continue;
+ }
+
+ // Add full new data to appropriate buffer
+ std::string &buffer = aom.reliable ? reliable_data : unreliable_data;
+ char idbuf[2];
+ writeU16((u8*) idbuf, aom.id);
+ // u16 id
+ // std::string data
+ buffer.append(idbuf, sizeof(idbuf));
+ buffer.append(serializeString16(aom.datastring));
+ }
+ }
+ /*
+ reliable_data and unreliable_data are now ready.
+ Send them.
+ */
+ if (!reliable_data.empty()) {
+ SendActiveObjectMessages(client->peer_id, reliable_data);
}
- }
- /*
- reliable_data and unreliable_data are now ready.
- Send them.
- */
- if (!reliable_data.empty()) {
- SendActiveObjectMessages(client->peer_id, reliable_data);
- }
- if (!unreliable_data.empty()) {
- SendActiveObjectMessages(client->peer_id, unreliable_data, false);
+ if (!unreliable_data.empty()) {
+ SendActiveObjectMessages(client->peer_id, unreliable_data, false);
+ }
}
}
- m_clients.unlock();
// Clear buffered_messages
for (auto &buffered_message : buffered_messages) {
@@ -858,20 +892,18 @@ void Server::AsyncRunStep(bool initial_step)
// We will be accessing the environment
MutexAutoLock lock(m_env_mutex);
- // Don't send too many at a time
- //u32 count = 0;
-
- // Single change sending is disabled if queue size is not small
+ // Single change sending is disabled if queue size is big
bool disable_single_change_sending = false;
if(m_unsent_map_edit_queue.size() >= 4)
disable_single_change_sending = true;
- int event_count = m_unsent_map_edit_queue.size();
+ const auto event_count = m_unsent_map_edit_queue.size();
+ m_map_edit_event_counter->increment(event_count);
// We'll log the amount of each
Profiler prof;
- std::list<v3s16> node_meta_updates;
+ std::unordered_set<v3s16> node_meta_updates;
while (!m_unsent_map_edit_queue.empty()) {
MapEditEvent* event = m_unsent_map_edit_queue.front();
@@ -898,9 +930,7 @@ void Server::AsyncRunStep(bool initial_step)
case MEET_BLOCK_NODE_METADATA_CHANGED: {
prof.add("MEET_BLOCK_NODE_METADATA_CHANGED", 1);
if (!event->is_private_change) {
- // Don't send the change yet. Collect them to eliminate dupes.
- node_meta_updates.remove(event->p);
- node_meta_updates.push_back(event->p);
+ node_meta_updates.emplace(event->p);
}
if (MapBlock *block = m_env->getMap().getBlockNoCreateNoEx(
@@ -953,7 +983,7 @@ void Server::AsyncRunStep(bool initial_step)
}
// Send all metadata updates
- if (node_meta_updates.size())
+ if (!node_meta_updates.empty())
sendMetadataChanged(node_meta_updates);
}
@@ -1036,8 +1066,7 @@ void Server::Receive()
} catch (const ClientStateError &e) {
errorstream << "ProcessData: peer=" << peer_id << " what()="
<< e.what() << std::endl;
- DenyAccess_Legacy(peer_id, L"Your client sent something server didn't expect."
- L"Try reconnecting or updating your client");
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_UNEXPECTED_DATA);
} catch (const con::PeerNotFoundException &e) {
// Do nothing
} catch (const con::NoIncomingDataException &e) {
@@ -1050,18 +1079,14 @@ PlayerSAO* Server::StageTwoClientInit(session_t peer_id)
{
std::string playername;
PlayerSAO *playersao = NULL;
- m_clients.lock();
- try {
+ {
+ ClientInterface::AutoLock clientlock(m_clients);
RemoteClient* client = m_clients.lockedGetClientNoEx(peer_id, CS_InitDone);
if (client) {
playername = client->getName();
playersao = emergePlayer(playername.c_str(), peer_id, client->net_proto_version);
}
- } catch (std::exception &e) {
- m_clients.unlock();
- throw;
}
- m_clients.unlock();
RemotePlayer *player = m_env->getPlayer(playername.c_str());
@@ -1070,15 +1095,13 @@ PlayerSAO* Server::StageTwoClientInit(session_t peer_id)
if (player && player->getPeerId() != PEER_ID_INEXISTENT) {
actionstream << "Server: Failed to emerge player \"" << playername
<< "\" (player allocated to an another client)" << std::endl;
- DenyAccess_Legacy(peer_id, L"Another client is connected with this "
- L"name. If your client closed unexpectedly, try again in "
- L"a minute.");
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_ALREADY_CONNECTED);
} else {
errorstream << "Server: " << playername << ": Failed to emerge player"
<< std::endl;
- DenyAccess_Legacy(peer_id, L"Could not allocate player.");
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_SERVER_FAIL);
}
- return NULL;
+ return nullptr;
}
/*
@@ -1096,7 +1119,7 @@ PlayerSAO* Server::StageTwoClientInit(session_t peer_id)
SendInventory(playersao, false);
// Send HP
- SendPlayerHP(playersao);
+ SendPlayerHP(playersao, false);
// Send death screen
if (playersao->isDead())
@@ -1143,18 +1166,16 @@ void Server::ProcessData(NetworkPacket *pkt)
Address address = getPeerAddress(peer_id);
std::string addr_s = address.serializeString();
- if(m_banmanager->isIpBanned(addr_s)) {
+ // FIXME: Isn't it a bit excessive to check this for every packet?
+ if (m_banmanager->isIpBanned(addr_s)) {
std::string ban_name = m_banmanager->getBanName(addr_s);
infostream << "Server: A banned client tried to connect from "
- << addr_s << "; banned name was "
- << ban_name << std::endl;
- // This actually doesn't seem to transfer to the client
- DenyAccess_Legacy(peer_id, L"Your ip is banned. Banned name was "
- + utf8_to_wide(ban_name));
+ << addr_s << "; banned name was " << ban_name << std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_CUSTOM_STRING,
+ "Your IP is banned. Banned name was " + ban_name);
return;
}
- }
- catch(con::PeerNotFoundException &e) {
+ } catch (con::PeerNotFoundException &e) {
/*
* no peer for this packet found
* most common reason is peer timeout, e.g. peer didn't
@@ -1234,13 +1255,12 @@ void Server::onMapEditEvent(const MapEditEvent &event)
void Server::SetBlocksNotSent(std::map<v3s16, MapBlock *>& block)
{
std::vector<session_t> clients = m_clients.getClientIDs();
- m_clients.lock();
+ ClientInterface::AutoLock clientlock(m_clients);
// Set the modified blocks unsent for all the clients
for (const session_t client_id : clients) {
if (RemoteClient *client = m_clients.lockedGetClientNoEx(client_id))
client->SetBlocksNotSent(block);
}
- m_clients.unlock();
}
void Server::peerAdded(con::Peer *peer)
@@ -1268,13 +1288,11 @@ bool Server::getClientConInfo(session_t peer_id, con::rtt_stat_type type, float*
bool Server::getClientInfo(session_t peer_id, ClientInfo &ret)
{
- m_clients.lock();
+ ClientInterface::AutoLock clientlock(m_clients);
RemoteClient* client = m_clients.lockedGetClientNoEx(peer_id, CS_Invalid);
- if (!client) {
- m_clients.unlock();
+ if (!client)
return false;
- }
ret.state = client->getState();
ret.addr = client->getAddress();
@@ -1289,8 +1307,6 @@ bool Server::getClientInfo(session_t peer_id, ClientInfo &ret)
ret.lang_code = client->getLangCode();
- m_clients.unlock();
-
return true;
}
@@ -1370,7 +1386,7 @@ void Server::SendMovement(session_t peer_id)
void Server::HandlePlayerHPChange(PlayerSAO *playersao, const PlayerHPChangeReason &reason)
{
m_script->player_event(playersao, "health_changed");
- SendPlayerHP(playersao);
+ SendPlayerHP(playersao, reason.type != PlayerHPChangeReason::SET_HP_MAX);
// Send to other clients
playersao->sendPunchCommand();
@@ -1379,15 +1395,15 @@ void Server::HandlePlayerHPChange(PlayerSAO *playersao, const PlayerHPChangeReas
HandlePlayerDeath(playersao, reason);
}
-void Server::SendPlayerHP(PlayerSAO *playersao)
+void Server::SendPlayerHP(PlayerSAO *playersao, bool effect)
{
- SendHP(playersao->getPeerID(), playersao->getHP());
+ SendHP(playersao->getPeerID(), playersao->getHP(), effect);
}
-void Server::SendHP(session_t peer_id, u16 hp)
+void Server::SendHP(session_t peer_id, u16 hp, bool effect)
{
- NetworkPacket pkt(TOCLIENT_HP, 1, peer_id);
- pkt << hp;
+ NetworkPacket pkt(TOCLIENT_HP, 3, peer_id);
+ pkt << hp << effect;
Send(&pkt);
}
@@ -1413,13 +1429,6 @@ void Server::SendAccessDenied(session_t peer_id, AccessDeniedCode reason,
Send(&pkt);
}
-void Server::SendAccessDenied_Legacy(session_t peer_id,const std::wstring &reason)
-{
- NetworkPacket pkt(TOCLIENT_ACCESS_DENIED_LEGACY, 0, peer_id);
- pkt << reason;
- Send(&pkt);
-}
-
void Server::SendDeathscreen(session_t peer_id, bool set_camera_point_target,
v3f camera_point_target)
{
@@ -1596,7 +1605,12 @@ void Server::SendAddParticleSpawner(session_t peer_id, u16 protocol_version,
if (peer_id == PEER_ID_INEXISTENT) {
std::vector<session_t> clients = m_clients.getClientIDs();
- const v3f pos = (p.minpos + p.maxpos) / 2.0f * BS;
+ const v3f pos = (
+ p.pos.start.min.val +
+ p.pos.start.max.val +
+ p.pos.end.min.val +
+ p.pos.end.max.val
+ ) / 4.0f * BS;
const float radius_sq = radius * radius;
/* Don't send short-lived spawners to distant players.
* This could be replaced with proper tracking at some point. */
@@ -1624,11 +1638,19 @@ void Server::SendAddParticleSpawner(session_t peer_id, u16 protocol_version,
NetworkPacket pkt(TOCLIENT_ADD_PARTICLESPAWNER, 100, peer_id);
- pkt << p.amount << p.time << p.minpos << p.maxpos << p.minvel
- << p.maxvel << p.minacc << p.maxacc << p.minexptime << p.maxexptime
- << p.minsize << p.maxsize << p.collisiondetection;
+ pkt << p.amount << p.time;
+ { // serialize legacy fields
+ std::ostringstream os(std::ios_base::binary);
+ p.pos.start.legacySerialize(os);
+ p.vel.start.legacySerialize(os);
+ p.acc.start.legacySerialize(os);
+ p.exptime.start.legacySerialize(os);
+ p.size.start.legacySerialize(os);
+ pkt.putRawString(os.str());
+ }
+ pkt << p.collisiondetection;
- pkt.putLongString(p.texture);
+ pkt.putLongString(p.texture.string);
pkt << id << p.vertical << p.collision_removal << attached_id;
{
@@ -1639,6 +1661,51 @@ void Server::SendAddParticleSpawner(session_t peer_id, u16 protocol_version,
pkt << p.glow << p.object_collision;
pkt << p.node.param0 << p.node.param2 << p.node_tile;
+ { // serialize new fields
+ // initial bias for older properties
+ pkt << p.pos.start.bias
+ << p.vel.start.bias
+ << p.acc.start.bias
+ << p.exptime.start.bias
+ << p.size.start.bias;
+
+ std::ostringstream os(std::ios_base::binary);
+
+ // final tween frames of older properties
+ p.pos.end.serialize(os);
+ p.vel.end.serialize(os);
+ p.acc.end.serialize(os);
+ p.exptime.end.serialize(os);
+ p.size.end.serialize(os);
+
+ // properties for legacy texture field
+ p.texture.serialize(os, protocol_version, true);
+
+ // new properties
+ p.drag.serialize(os);
+ p.jitter.serialize(os);
+ p.bounce.serialize(os);
+ ParticleParamTypes::serializeParameterValue(os, p.attractor_kind);
+ if (p.attractor_kind != ParticleParamTypes::AttractorKind::none) {
+ p.attract.serialize(os);
+ p.attractor_origin.serialize(os);
+ writeU16(os, p.attractor_attachment); /* object ID */
+ writeU8(os, p.attractor_kill);
+ if (p.attractor_kind != ParticleParamTypes::AttractorKind::point) {
+ p.attractor_direction.serialize(os);
+ writeU16(os, p.attractor_direction_attachment);
+ }
+ }
+ p.radius.serialize(os);
+
+ ParticleParamTypes::serializeParameterValue(os, (u16)p.texpool.size());
+ for (const auto& tex : p.texpool) {
+ tex.serialize(os, protocol_version);
+ }
+
+ pkt.putRawString(os.str());
+ }
+
Send(&pkt);
}
@@ -1778,7 +1845,8 @@ void Server::SendSetStars(session_t peer_id, const StarParams &params)
NetworkPacket pkt(TOCLIENT_SET_STARS, 0, peer_id);
pkt << params.visible << params.count
- << params.starcolor << params.scale;
+ << params.starcolor << params.scale
+ << params.day_opacity;
Send(&pkt);
}
@@ -1802,6 +1870,16 @@ void Server::SendOverrideDayNightRatio(session_t peer_id, bool do_override,
Send(&pkt);
}
+void Server::SendSetLighting(session_t peer_id, const Lighting &lighting)
+{
+ NetworkPacket pkt(TOCLIENT_SET_LIGHTING,
+ 4, peer_id);
+
+ pkt << lighting.shadow_intensity;
+
+ Send(&pkt);
+}
+
void Server::SendTimeOfDay(session_t peer_id, u16 time, f32 time_speed)
{
NetworkPacket pkt(TOCLIENT_TIME_OF_DAY, 0, peer_id);
@@ -2059,14 +2137,13 @@ inline s32 Server::nextSoundId()
return ret;
}
-s32 Server::playSound(const SimpleSoundSpec &spec,
- const ServerSoundParams &params, bool ephemeral)
+s32 Server::playSound(ServerPlayingSound &params, bool ephemeral)
{
// Find out initial position of sound
bool pos_exists = false;
- v3f pos = params.getPos(m_env, &pos_exists);
+ const v3f pos = params.getPos(m_env, &pos_exists);
// If position is not found while it should be, cancel sound
- if(pos_exists != (params.type != ServerSoundParams::SSP_LOCAL))
+ if(pos_exists != (params.type != SoundLocation::Local))
return -1;
// Filter destination clients
@@ -2111,101 +2188,68 @@ s32 Server::playSound(const SimpleSoundSpec &spec,
if(dst_clients.empty())
return -1;
- // Create the sound
- s32 id;
- ServerPlayingSound *psound = nullptr;
- if (ephemeral) {
- id = -1; // old clients will still use this, so pick a reserved ID
- } else {
- id = nextSoundId();
- // The sound will exist as a reference in m_playing_sounds
- m_playing_sounds[id] = ServerPlayingSound();
- psound = &m_playing_sounds[id];
- psound->params = params;
- psound->spec = spec;
- }
+ // old clients will still use this, so pick a reserved ID (-1)
+ const s32 id = ephemeral ? -1 : nextSoundId();
- float gain = params.gain * spec.gain;
+ float gain = params.gain * params.spec.gain;
NetworkPacket pkt(TOCLIENT_PLAY_SOUND, 0);
- pkt << id << spec.name << gain
+ pkt << id << params.spec.name << gain
<< (u8) params.type << pos << params.object
- << params.loop << params.fade << params.pitch
+ << params.spec.loop << params.spec.fade << params.spec.pitch
<< ephemeral;
bool as_reliable = !ephemeral;
- for (const u16 dst_client : dst_clients) {
- if (psound)
- psound->clients.insert(dst_client);
- m_clients.send(dst_client, 0, &pkt, as_reliable);
+ for (const session_t peer_id : dst_clients) {
+ if (!ephemeral)
+ params.clients.insert(peer_id);
+ m_clients.send(peer_id, 0, &pkt, as_reliable);
}
+
+ if (!ephemeral)
+ m_playing_sounds[id] = std::move(params);
return id;
}
void Server::stopSound(s32 handle)
{
- // Get sound reference
- std::unordered_map<s32, ServerPlayingSound>::iterator i =
- m_playing_sounds.find(handle);
- if (i == m_playing_sounds.end())
+ auto it = m_playing_sounds.find(handle);
+ if (it == m_playing_sounds.end())
return;
- ServerPlayingSound &psound = i->second;
+
+ ServerPlayingSound &psound = it->second;
NetworkPacket pkt(TOCLIENT_STOP_SOUND, 4);
pkt << handle;
- for (std::unordered_set<session_t>::const_iterator si = psound.clients.begin();
- si != psound.clients.end(); ++si) {
+ for (session_t peer_id : psound.clients) {
// Send as reliable
- m_clients.send(*si, 0, &pkt, true);
+ m_clients.send(peer_id, 0, &pkt, true);
}
+
// Remove sound reference
- m_playing_sounds.erase(i);
+ m_playing_sounds.erase(it);
}
void Server::fadeSound(s32 handle, float step, float gain)
{
- // Get sound reference
- std::unordered_map<s32, ServerPlayingSound>::iterator i =
- m_playing_sounds.find(handle);
- if (i == m_playing_sounds.end())
+ auto it = m_playing_sounds.find(handle);
+ if (it == m_playing_sounds.end())
return;
- ServerPlayingSound &psound = i->second;
- psound.params.gain = gain;
+ ServerPlayingSound &psound = it->second;
+ psound.gain = gain; // destination gain
NetworkPacket pkt(TOCLIENT_FADE_SOUND, 4);
pkt << handle << step << gain;
- // Backwards compability
- bool play_sound = gain > 0;
- ServerPlayingSound compat_psound = psound;
- compat_psound.clients.clear();
-
- NetworkPacket compat_pkt(TOCLIENT_STOP_SOUND, 4);
- compat_pkt << handle;
-
- for (std::unordered_set<u16>::iterator it = psound.clients.begin();
- it != psound.clients.end();) {
- if (m_clients.getProtocolVersion(*it) >= 32) {
- // Send as reliable
- m_clients.send(*it, 0, &pkt, true);
- ++it;
- } else {
- compat_psound.clients.insert(*it);
- // Stop old sound
- m_clients.send(*it, 0, &compat_pkt, true);
- psound.clients.erase(it++);
- }
+ for (session_t peer_id : psound.clients) {
+ // Send as reliable
+ m_clients.send(peer_id, 0, &pkt, true);
}
// Remove sound reference
- if (!play_sound || psound.clients.empty())
- m_playing_sounds.erase(i);
-
- if (play_sound && !compat_psound.clients.empty()) {
- // Play new sound volume on older clients
- playSound(compat_psound.spec, compat_psound.params);
- }
+ if (gain <= 0 || psound.clients.empty())
+ m_playing_sounds.erase(it);
}
void Server::sendRemoveNode(v3s16 p, std::unordered_set<u16> *far_players,
@@ -2219,7 +2263,7 @@ void Server::sendRemoveNode(v3s16 p, std::unordered_set<u16> *far_players,
pkt << p;
std::vector<session_t> clients = m_clients.getClientIDs();
- m_clients.lock();
+ ClientInterface::AutoLock clientlock(m_clients);
for (session_t client_id : clients) {
RemoteClient *client = m_clients.lockedGetClientNoEx(client_id);
@@ -2242,8 +2286,6 @@ void Server::sendRemoveNode(v3s16 p, std::unordered_set<u16> *far_players,
// Send as reliable
m_clients.send(client_id, 0, &pkt, true);
}
-
- m_clients.unlock();
}
void Server::sendAddNode(v3s16 p, MapNode n, std::unordered_set<u16> *far_players,
@@ -2258,7 +2300,7 @@ void Server::sendAddNode(v3s16 p, MapNode n, std::unordered_set<u16> *far_player
<< (u8) (remove_metadata ? 0 : 1);
std::vector<session_t> clients = m_clients.getClientIDs();
- m_clients.lock();
+ ClientInterface::AutoLock clientlock(m_clients);
for (session_t client_id : clients) {
RemoteClient *client = m_clients.lockedGetClientNoEx(client_id);
@@ -2281,35 +2323,35 @@ void Server::sendAddNode(v3s16 p, MapNode n, std::unordered_set<u16> *far_player
// Send as reliable
m_clients.send(client_id, 0, &pkt, true);
}
-
- m_clients.unlock();
}
-void Server::sendMetadataChanged(const std::list<v3s16> &meta_updates, float far_d_nodes)
+void Server::sendMetadataChanged(const std::unordered_set<v3s16> &positions, float far_d_nodes)
{
- float maxd = far_d_nodes * BS;
NodeMetadataList meta_updates_list(false);
- std::vector<session_t> clients = m_clients.getClientIDs();
+ std::ostringstream os(std::ios::binary);
- m_clients.lock();
+ std::vector<session_t> clients = m_clients.getClientIDs();
+ ClientInterface::AutoLock clientlock(m_clients);
for (session_t i : clients) {
RemoteClient *client = m_clients.lockedGetClientNoEx(i);
if (!client)
continue;
- ServerActiveObject *player = m_env->getActiveObject(i);
- v3f player_pos = player ? player->getBasePosition() : v3f();
+ ServerActiveObject *player = getPlayerSAO(i);
+ v3s16 player_pos;
+ if (player)
+ player_pos = floatToInt(player->getBasePosition(), BS);
- for (const v3s16 &pos : meta_updates) {
+ for (const v3s16 pos : positions) {
NodeMetadata *meta = m_env->getMap().getNodeMetadata(pos);
if (!meta)
continue;
v3s16 block_pos = getNodeBlockPos(pos);
- if (!client->isBlockSent(block_pos) || (player &&
- player_pos.getDistanceFrom(intToFloat(pos, BS)) > maxd)) {
+ if (!client->isBlockSent(block_pos) ||
+ player_pos.getDistanceFrom(pos) > far_d_nodes) {
client->SetBlockNotSent(block_pos);
continue;
}
@@ -2321,38 +2363,49 @@ void Server::sendMetadataChanged(const std::list<v3s16> &meta_updates, float far
continue;
// Send the meta changes
- std::ostringstream os(std::ios::binary);
+ os.str("");
meta_updates_list.serialize(os, client->serialization_version, false, true, true);
- std::ostringstream oss(std::ios::binary);
- compressZlib(os.str(), oss);
+ std::string raw = os.str();
+ os.str("");
+ compressZlib(raw, os);
- NetworkPacket pkt(TOCLIENT_NODEMETA_CHANGED, 0);
- pkt.putLongString(oss.str());
- m_clients.send(i, 0, &pkt, true);
+ NetworkPacket pkt(TOCLIENT_NODEMETA_CHANGED, 0, i);
+ pkt.putLongString(os.str());
+ Send(&pkt);
meta_updates_list.clear();
}
-
- m_clients.unlock();
}
void Server::SendBlockNoLock(session_t peer_id, MapBlock *block, u8 ver,
- u16 net_proto_version)
+ u16 net_proto_version, SerializedBlockCache *cache)
{
- /*
- Create a packet with the block in the right format
- */
thread_local const int net_compression_level = rangelim(g_settings->getS16("map_compression_level_net"), -1, 9);
- std::ostringstream os(std::ios_base::binary);
- block->serialize(os, ver, false, net_compression_level);
- block->serializeNetworkSpecific(os);
- std::string s = os.str();
+ std::string s, *sptr = nullptr;
- NetworkPacket pkt(TOCLIENT_BLOCKDATA, 2 + 2 + 2 + s.size(), peer_id);
+ if (cache) {
+ auto it = cache->find({block->getPos(), ver});
+ if (it != cache->end())
+ sptr = &it->second;
+ }
+ // Serialize the block in the right format
+ if (!sptr) {
+ std::ostringstream os(std::ios_base::binary);
+ block->serialize(os, ver, false, net_compression_level);
+ block->serializeNetworkSpecific(os);
+ s = os.str();
+ sptr = &s;
+ }
+
+ NetworkPacket pkt(TOCLIENT_BLOCKDATA, 2 + 2 + 2 + sptr->size(), peer_id);
pkt << block->getPos();
- pkt.putRawString(s.c_str(), s.size());
+ pkt.putRawString(*sptr);
Send(&pkt);
+
+ // Store away in cache
+ if (cache && sptr == &s)
+ (*cache)[{block->getPos(), ver}] = std::move(s);
}
void Server::SendBlocks(float dtime)
@@ -2362,14 +2415,14 @@ void Server::SendBlocks(float dtime)
std::vector<PrioritySortedBlockTransfer> queue;
- u32 total_sending = 0;
+ u32 total_sending = 0, unique_clients = 0;
{
ScopeProfiler sp2(g_profiler, "Server::SendBlocks(): Collect list");
std::vector<session_t> clients = m_clients.getClientIDs();
- m_clients.lock();
+ ClientInterface::AutoLock clientlock(m_clients);
for (const session_t client_id : clients) {
RemoteClient *client = m_clients.lockedGetClientNoEx(client_id, CS_Active);
@@ -2377,9 +2430,10 @@ void Server::SendBlocks(float dtime)
continue;
total_sending += client->getSendingCount();
+ const auto old_count = queue.size();
client->GetNextBlocks(m_env,m_emerge, dtime, queue);
+ unique_clients += queue.size() > old_count ? 1 : 0;
}
- m_clients.unlock();
}
// Sort.
@@ -2387,7 +2441,7 @@ void Server::SendBlocks(float dtime)
// Lowest is most important.
std::sort(queue.begin(), queue.end());
- m_clients.lock();
+ ClientInterface::AutoLock clientlock(m_clients);
// Maximal total count calculation
// The per-client block sends is halved with the maximal online users
@@ -2397,6 +2451,12 @@ void Server::SendBlocks(float dtime)
ScopeProfiler sp(g_profiler, "Server::SendBlocks(): Send to clients");
Map &map = m_env->getMap();
+ SerializedBlockCache cache, *cache_ptr = nullptr;
+ if (unique_clients > 1) {
+ // caching is pointless with a single client
+ cache_ptr = &cache;
+ }
+
for (const PrioritySortedBlockTransfer &block_to_send : queue) {
if (total_sending >= max_blocks_to_send)
break;
@@ -2411,12 +2471,11 @@ void Server::SendBlocks(float dtime)
continue;
SendBlockNoLock(block_to_send.peer_id, block, client->serialization_version,
- client->net_proto_version);
+ client->net_proto_version, cache_ptr);
client->SentBlock(block_to_send.pos);
total_sending++;
}
- m_clients.unlock();
}
bool Server::SendBlock(session_t peer_id, const v3s16 &blockpos)
@@ -2425,15 +2484,12 @@ bool Server::SendBlock(session_t peer_id, const v3s16 &blockpos)
if (!block)
return false;
- m_clients.lock();
+ ClientInterface::AutoLock clientlock(m_clients);
RemoteClient *client = m_clients.lockedGetClientNoEx(peer_id, CS_Active);
- if (!client || client->isBlockSent(blockpos)) {
- m_clients.unlock();
+ if (!client || client->isBlockSent(blockpos))
return false;
- }
SendBlockNoLock(peer_id, block, client->serialization_version,
client->net_proto_version);
- m_clients.unlock();
return true;
}
@@ -2766,9 +2822,10 @@ void Server::RespawnPlayer(session_t peer_id)
<< playersao->getPlayer()->getName()
<< " respawns" << std::endl;
- playersao->setHP(playersao->accessObjectProperties()->hp_max,
+ const auto *prop = playersao->accessObjectProperties();
+ playersao->setHP(prop->hp_max,
PlayerHPChangeReason(PlayerHPChangeReason::RESPAWN));
- playersao->setBreath(playersao->accessObjectProperties()->breath_max);
+ playersao->setBreath(prop->breath_max);
bool repositioned = m_script->on_respawnplayer(playersao);
if (!repositioned) {
@@ -2785,29 +2842,10 @@ void Server::DenySudoAccess(session_t peer_id)
}
-void Server::DenyAccessVerCompliant(session_t peer_id, u16 proto_ver, AccessDeniedCode reason,
- const std::string &str_reason, bool reconnect)
-{
- SendAccessDenied(peer_id, reason, str_reason, reconnect);
-
- m_clients.event(peer_id, CSE_SetDenied);
- DisconnectPeer(peer_id);
-}
-
-
void Server::DenyAccess(session_t peer_id, AccessDeniedCode reason,
- const std::string &custom_reason)
-{
- SendAccessDenied(peer_id, reason, custom_reason);
- m_clients.event(peer_id, CSE_SetDenied);
- DisconnectPeer(peer_id);
-}
-
-// 13/03/15: remove this function when protocol version 25 will become
-// the minimum version for MT users, maybe in 1 year
-void Server::DenyAccess_Legacy(session_t peer_id, const std::wstring &reason)
+ const std::string &custom_reason, bool reconnect)
{
- SendAccessDenied_Legacy(peer_id, reason);
+ SendAccessDenied(peer_id, reason, custom_reason, reconnect);
m_clients.event(peer_id, CSE_SetDenied);
DisconnectPeer(peer_id);
}
@@ -2993,8 +3031,8 @@ std::wstring Server::handleChat(const std::string &name,
return ws.str();
}
case RPLAYER_CHATRESULT_KICK:
- DenyAccess_Legacy(player->getPeerId(),
- L"You have been kicked due to message flooding.");
+ DenyAccess(player->getPeerId(), SERVER_ACCESSDENIED_CUSTOM_STRING,
+ "You have been kicked due to message flooding.");
return L"";
case RPLAYER_CHATRESULT_OK:
break;
@@ -3111,7 +3149,7 @@ std::string Server::getStatusString()
// Version
os << "version: " << g_version_string;
// Game
- os << " | game: " << (m_gamespec.name.empty() ? m_gamespec.id : m_gamespec.name);
+ os << " | game: " << (m_gamespec.title.empty() ? m_gamespec.id : m_gamespec.title);
// Uptime
os << " | uptime: " << duration_to_string((int) m_uptime_counter->get());
// Max lag estimate
@@ -3290,9 +3328,12 @@ bool Server::hudSetFlags(RemotePlayer *player, u32 flags, u32 mask)
if (!player)
return false;
+ u32 new_hud_flags = (player->hud_flags & ~mask) | flags;
+ if (new_hud_flags == player->hud_flags) // no change
+ return true;
+
SendHUDSetFlags(player->getPeerId(), flags, mask);
- player->hud_flags &= ~mask;
- player->hud_flags |= flags;
+ player->hud_flags = new_hud_flags;
PlayerSAO* playersao = player->getPlayerSAO();
@@ -3401,6 +3442,13 @@ void Server::overrideDayNightRatio(RemotePlayer *player, bool do_override,
SendOverrideDayNightRatio(player->getPeerId(), do_override, ratio);
}
+void Server::setLighting(RemotePlayer *player, const Lighting &lighting)
+{
+ sanity_check(player);
+ player->setLighting(lighting);
+ SendSetLighting(player->getPeerId(), lighting);
+}
+
void Server::notifyPlayers(const std::wstring &msg)
{
SendChatMessage(PEER_ID_INEXISTENT, ChatMessage(msg));
@@ -3535,48 +3583,49 @@ bool Server::dynamicAddMedia(std::string filepath,
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 && !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->getState() < CS_Active)
- continue;
+ {
+ ClientInterface::AutoLock clientlock(m_clients);
+ for (auto &pair : m_clients.getClientList()) {
+ 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->getState() < CS_Active)
+ continue;
- const auto proto_ver = pair.second->net_proto_version;
- if (proto_ver < 39)
- continue;
+ 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;
+ 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);
+ 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) {
@@ -3686,11 +3735,6 @@ const ModSpec *Server::getModSpec(const std::string &modname) const
return m_modmgr->getModSpec(modname);
}
-void Server::getModNames(std::vector<std::string> &modlist)
-{
- m_modmgr->getModNames(modlist);
-}
-
std::string Server::getBuiltinLuaPath()
{
return porting::path_share + DIR_DELIM + "builtin";
@@ -3712,8 +3756,8 @@ v3f Server::findSpawnPos()
s32 range = MYMIN(1 + i, range_max);
// We're going to try to throw the player to this position
v2s16 nodepos2d = v2s16(
- -range + (myrand() % (range * 2)),
- -range + (myrand() % (range * 2)));
+ -range + myrand_range(0, range*2),
+ -range + myrand_range(0, range*2));
// Get spawn level at point
s16 spawn_level = m_emerge->getSpawnLevelAtPoint(nodepos2d);
// Continue if MAX_MAP_GENERATION_LIMIT was returned by the mapgen to
diff --git a/src/server.h b/src/server.h
index 2741b3157..cb7d77067 100644
--- a/src/server.h
+++ b/src/server.h
@@ -69,9 +69,11 @@ struct SkyboxParams;
struct SunParams;
struct MoonParams;
struct StarParams;
+struct Lighting;
class ServerThread;
class ServerModManager;
class ServerInventoryManager;
+struct PackedValue;
enum ClientDeletionReason {
CDR_LEAVE,
@@ -94,30 +96,22 @@ struct MediaInfo
}
};
-struct ServerSoundParams
+// Combines the pure sound (SimpleSoundSpec) with positional information
+struct ServerPlayingSound
{
- enum Type {
- SSP_LOCAL,
- SSP_POSITIONAL,
- SSP_OBJECT
- } type = SSP_LOCAL;
- float gain = 1.0f;
- float fade = 0.0f;
- float pitch = 1.0f;
- bool loop = false;
+ SoundLocation type = SoundLocation::Local;
+
+ float gain = 1.0f; // for amplification of the base sound
float max_hear_distance = 32 * BS;
v3f pos;
u16 object = 0;
- std::string to_player = "";
- std::string exclude_player = "";
+ std::string to_player;
+ std::string exclude_player;
v3f getPos(ServerEnvironment *env, bool *pos_exists) const;
-};
-struct ServerPlayingSound
-{
- ServerSoundParams params;
SimpleSoundSpec spec;
+
std::unordered_set<session_t> clients; // peer ids
};
@@ -234,8 +228,7 @@ public:
// Returns -1 if failed, sound handle on success
// Envlock
- s32 playSound(const SimpleSoundSpec &spec, const ServerSoundParams &params,
- bool ephemeral=false);
+ s32 playSound(ServerPlayingSound &params, bool ephemeral=false);
void stopSound(s32 handle);
void fadeSound(s32 handle, float step, float gain);
@@ -291,11 +284,10 @@ public:
virtual const std::vector<ModSpec> &getMods() const;
virtual const ModSpec* getModSpec(const std::string &modname) const;
- void getModNames(std::vector<std::string> &modlist);
- std::string getBuiltinLuaPath();
+ static std::string getBuiltinLuaPath();
virtual std::string getWorldPath() const { return m_path_world; }
- inline bool isSingleplayer()
+ inline bool isSingleplayer() const
{ return m_simple_singleplayer_mode; }
inline void setAsyncFatalError(const std::string &error)
@@ -333,17 +325,18 @@ public:
void overrideDayNightRatio(RemotePlayer *player, bool do_override, float brightness);
+ void setLighting(RemotePlayer *player, const Lighting &lighting);
+
+ void RespawnPlayer(session_t peer_id);
+
/* con::PeerHandler implementation. */
void peerAdded(con::Peer *peer);
void deletingPeer(con::Peer *peer, bool timeout);
void DenySudoAccess(session_t peer_id);
- void DenyAccessVerCompliant(session_t peer_id, u16 proto_ver, AccessDeniedCode reason,
- const std::string &str_reason = "", bool reconnect = false);
void DenyAccess(session_t peer_id, AccessDeniedCode reason,
- const std::string &custom_reason = "");
+ const std::string &custom_reason = "", bool reconnect = false);
void acceptAuth(session_t peer_id, bool forSudoMode);
- void DenyAccess_Legacy(session_t peer_id, const std::wstring &reason);
void DisconnectPeer(session_t peer_id);
bool getClientConInfo(session_t peer_id, con::rtt_stat_type type, float *retval);
bool getClientInfo(session_t peer_id, ClientInfo &ret);
@@ -351,7 +344,7 @@ public:
void printToConsoleOnly(const std::string &text);
void HandlePlayerHPChange(PlayerSAO *sao, const PlayerHPChangeReason &reason);
- void SendPlayerHP(PlayerSAO *sao);
+ void SendPlayerHP(PlayerSAO *sao, bool effect);
void SendPlayerBreath(PlayerSAO *sao);
void SendInventory(PlayerSAO *playerSAO, bool incremental);
void SendMovePlayer(session_t peer_id);
@@ -386,6 +379,12 @@ public:
static bool migrateModStorageDatabase(const GameParams &game_params,
const Settings &cmd_args);
+ // Lua files registered for init of async env, pair of modname + path
+ std::vector<std::pair<std::string, std::string>> m_async_init_files;
+
+ // Data transferred into async envs at init time
+ std::unique_ptr<PackedValue> m_async_globals_data;
+
// Bind address
Address m_bind_addr;
@@ -419,10 +418,19 @@ private:
std::unordered_set<session_t> waiting_players;
};
+ // The standard library does not implement std::hash for pairs so we have this:
+ struct SBCHash {
+ size_t operator() (const std::pair<v3s16, u16> &p) const {
+ return std::hash<v3s16>()(p.first) ^ p.second;
+ }
+ };
+
+ typedef std::unordered_map<std::pair<v3s16, u16>, std::string, SBCHash> SerializedBlockCache;
+
void init();
void SendMovement(session_t peer_id);
- void SendHP(session_t peer_id, u16 hp);
+ void SendHP(session_t peer_id, u16 hp, bool effect);
void SendBreath(session_t peer_id, u16 breath);
void SendAccessDenied(session_t peer_id, AccessDeniedCode reason,
const std::string &custom_reason, bool reconnect = false);
@@ -459,6 +467,7 @@ private:
void SendSetStars(session_t peer_id, const StarParams &params);
void SendCloudParams(session_t peer_id, const CloudParams &params);
void SendOverrideDayNightRatio(session_t peer_id, bool do_override, float ratio);
+ void SendSetLighting(session_t peer_id, const Lighting &lighting);
void broadcastModChannelMessage(const std::string &channel,
const std::string &message, session_t from_peer);
@@ -474,11 +483,13 @@ private:
std::unordered_set<u16> *far_players = nullptr,
float far_d_nodes = 100, bool remove_metadata = true);
- void sendMetadataChanged(const std::list<v3s16> &meta_updates,
+ void sendMetadataChanged(const std::unordered_set<v3s16> &positions,
float far_d_nodes = 100);
// Environment and Connection must be locked when called
- void SendBlockNoLock(session_t peer_id, MapBlock *block, u8 ver, u16 net_proto_version);
+ // `cache` may only be very short lived! (invalidation not handeled)
+ void SendBlockNoLock(session_t peer_id, MapBlock *block, u8 ver,
+ u16 net_proto_version, SerializedBlockCache *cache = nullptr);
// Sends blocks to clients (locks env and con on its own)
void SendBlocks(float dtime);
@@ -511,7 +522,6 @@ private:
*/
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);
bool checkInteractDistance(RemotePlayer *player, const f32 d, const std::string &what);
@@ -706,11 +716,11 @@ private:
MetricCounterPtr m_uptime_counter;
MetricGaugePtr m_player_gauge;
MetricGaugePtr m_timeofday_gauge;
- // current server step lag
MetricGaugePtr m_lag_gauge;
- MetricCounterPtr m_aom_buffer_counter;
+ MetricCounterPtr m_aom_buffer_counter[2]; // [0] = rel, [1] = unrel
MetricCounterPtr m_packet_recv_counter;
MetricCounterPtr m_packet_recv_processed_counter;
+ MetricCounterPtr m_map_edit_event_counter;
};
/*
diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp
index 82f6da231..ab4a9e3f2 100644
--- a/src/server/luaentity_sao.cpp
+++ b/src/server/luaentity_sao.cpp
@@ -117,13 +117,13 @@ void LuaEntitySAO::addedToEnvironment(u32 dtime_s)
}
}
-void LuaEntitySAO::dispatchScriptDeactivate()
+void LuaEntitySAO::dispatchScriptDeactivate(bool removal)
{
// Ensure that this is in fact a registered entity,
// and that it isn't already gone.
// The latter also prevents this from ever being called twice.
if (m_registered && !isGone())
- m_env->getScriptIface()->luaentity_Deactivate(m_id);
+ m_env->getScriptIface()->luaentity_Deactivate(m_id, removal);
}
void LuaEntitySAO::step(float dtime, bool send_recommended)
@@ -290,7 +290,7 @@ void LuaEntitySAO::getStaticData(std::string *result) const
os<<serializeString32(m_init_state);
}
writeU16(os, m_hp);
- writeV3F1000(os, m_velocity);
+ writeV3F1000(os, clampToF1000(m_velocity));
// yaw
writeF1000(os, m_rotation.Y);
@@ -337,19 +337,9 @@ u32 LuaEntitySAO::punch(v3f dir,
if (result.did_punch) {
setHP((s32)getHP() - result.damage,
PlayerHPChangeReason(PlayerHPChangeReason::PLAYER_PUNCH, puncher));
-
- // create message and add to list
- sendPunchCommand();
}
}
- if (getHP() == 0 && !isGone()) {
- clearParentAttachment();
- clearChildAttachments();
- m_env->getScriptIface()->luaentity_on_death(m_id, puncher);
- markForRemoval();
- }
-
actionstream << puncher->getDescription() << " (id=" << puncher->getId() <<
", hp=" << puncher->getHP() << ") punched " <<
getDescription() << " (id=" << m_id << ", hp=" << m_hp <<
@@ -402,6 +392,20 @@ std::string LuaEntitySAO::getDescription()
void LuaEntitySAO::setHP(s32 hp, const PlayerHPChangeReason &reason)
{
m_hp = rangelim(hp, 0, U16_MAX);
+
+ sendPunchCommand();
+
+ if (m_hp == 0 && !isGone()) {
+ clearParentAttachment();
+ clearChildAttachments();
+ if (m_registered) {
+ ServerActiveObject *killer = nullptr;
+ if (reason.type == PlayerHPChangeReason::PLAYER_PUNCH)
+ killer = reason.object;
+ m_env->getScriptIface()->luaentity_on_death(m_id, killer);
+ }
+ markForRemoval();
+ }
}
u16 LuaEntitySAO::getHP() const
diff --git a/src/server/luaentity_sao.h b/src/server/luaentity_sao.h
index 87b664a8b..1dc72b150 100644
--- a/src/server/luaentity_sao.h
+++ b/src/server/luaentity_sao.h
@@ -36,23 +36,30 @@ public:
{
}
~LuaEntitySAO();
+
ActiveObjectType getType() const { return ACTIVEOBJECT_TYPE_LUAENTITY; }
ActiveObjectType getSendType() const { return ACTIVEOBJECT_TYPE_GENERIC; }
virtual void addedToEnvironment(u32 dtime_s);
void step(float dtime, bool send_recommended);
std::string getClientInitializationData(u16 protocol_version);
+
bool isStaticAllowed() const { return m_prop.static_save; }
bool shouldUnload() const { return true; }
void getStaticData(std::string *result) const;
+
u32 punch(v3f dir, const ToolCapabilities *toolcap = nullptr,
ServerActiveObject *puncher = nullptr,
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);
float getMinimumSavedMovement();
+
std::string getDescription();
+
void setHP(s32 hp, const PlayerHPChangeReason &reason);
u16 getHP() const;
@@ -73,9 +80,9 @@ public:
bool collideWithObjects() const;
protected:
- void dispatchScriptDeactivate();
- virtual void onMarkedForDeactivation() { dispatchScriptDeactivate(); }
- virtual void onMarkedForRemoval() { dispatchScriptDeactivate(); }
+ void dispatchScriptDeactivate(bool removal);
+ virtual void onMarkedForDeactivation() { dispatchScriptDeactivate(false); }
+ virtual void onMarkedForRemoval() { dispatchScriptDeactivate(true); }
private:
std::string getPropertyPacket();
diff --git a/src/server/mods.cpp b/src/server/mods.cpp
index 609d8c346..f302d4240 100644
--- a/src/server/mods.cpp
+++ b/src/server/mods.cpp
@@ -23,7 +23,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "scripting_server.h"
#include "content/subgames.h"
#include "porting.h"
-#include "util/metricsbackend.h"
/**
* Manage server mods
@@ -35,18 +34,19 @@ with this program; if not, write to the Free Software Foundation, Inc.,
* Creates a ServerModManager which targets worldpath
* @param worldpath
*/
-ServerModManager::ServerModManager(const std::string &worldpath) :
- ModConfiguration(worldpath)
+ServerModManager::ServerModManager(const std::string &worldpath):
+ configuration()
{
SubgameSpec gamespec = findWorldSubgame(worldpath);
// Add all game mods and all world mods
- addModsInPath(gamespec.gamemods_path);
- addModsInPath(worldpath + DIR_DELIM + "worldmods");
+ configuration.addGameMods(gamespec);
+ configuration.addModsInPath(worldpath + DIR_DELIM + "worldmods", "worldmods");
// Load normal mods
std::string worldmt = worldpath + DIR_DELIM + "world.mt";
- addModsFromConfig(worldmt, gamespec.addon_mods_paths);
+ configuration.addModsFromConfig(worldmt, gamespec.addon_mods_paths);
+ configuration.checkConflictsAndDeps();
}
// clang-format off
@@ -55,12 +55,13 @@ void ServerModManager::loadMods(ServerScripting *script)
{
// Print mods
infostream << "Server: Loading mods: ";
- for (const ModSpec &mod : m_sorted_mods) {
+ for (const ModSpec &mod : configuration.getMods()) {
infostream << mod.name << " ";
}
+
infostream << std::endl;
// Load and run "mod" scripts
- for (const ModSpec &mod : m_sorted_mods) {
+ for (const ModSpec &mod : configuration.getMods()) {
mod.checkAndLog();
std::string script_path = mod.path + DIR_DELIM + "init.lua";
@@ -77,24 +78,26 @@ void ServerModManager::loadMods(ServerScripting *script)
// clang-format on
const ModSpec *ServerModManager::getModSpec(const std::string &modname) const
{
- std::vector<ModSpec>::const_iterator it;
- for (it = m_sorted_mods.begin(); it != m_sorted_mods.end(); ++it) {
- const ModSpec &mod = *it;
+ for (const auto &mod : configuration.getMods()) {
if (mod.name == modname)
return &mod;
}
- return NULL;
+
+ return nullptr;
}
void ServerModManager::getModNames(std::vector<std::string> &modlist) const
{
- for (const ModSpec &spec : m_sorted_mods)
+ for (const ModSpec &spec : configuration.getMods())
modlist.push_back(spec.name);
}
void ServerModManager::getModsMediaPaths(std::vector<std::string> &paths) const
{
- for (auto it = m_sorted_mods.crbegin(); it != m_sorted_mods.crend(); it++) {
+ // Iterate mods in reverse load order: Media loading expects higher priority media files first
+ // and mods loading later should be able to override media of already loaded mods
+ const auto &mods = configuration.getMods();
+ for (auto it = mods.crbegin(); it != mods.crend(); it++) {
const ModSpec &spec = *it;
fs::GetRecursiveDirs(paths, spec.path + DIR_DELIM + "textures");
fs::GetRecursiveDirs(paths, spec.path + DIR_DELIM + "sounds");
diff --git a/src/server/mods.h b/src/server/mods.h
index 8954bbf72..1d1b42d0f 100644
--- a/src/server/mods.h
+++ b/src/server/mods.h
@@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
-#include "content/mods.h"
+#include "content/mod_configuration.h"
#include <memory>
class MetricsBackend;
@@ -31,8 +31,10 @@ class ServerScripting;
*
* All new calls to this class must be tested in test_servermodmanager.cpp
*/
-class ServerModManager : public ModConfiguration
+class ServerModManager
{
+ ModConfiguration configuration;
+
public:
/**
* Creates a ServerModManager which targets worldpath
@@ -42,6 +44,23 @@ public:
void loadMods(ServerScripting *script);
const ModSpec *getModSpec(const std::string &modname) const;
void getModNames(std::vector<std::string> &modlist) const;
+
+ inline const std::vector<ModSpec> &getMods() const {
+ return configuration.getMods();
+ }
+
+ inline const std::vector<ModSpec> &getUnsatisfiedMods() const {
+ return configuration.getUnsatisfiedMods();
+ }
+
+ inline bool isConsistent() const {
+ return configuration.isConsistent();
+ }
+
+ inline void printUnsatisfiedModsError() const {
+ return configuration.printUnsatisfiedModsError();
+ }
+
/**
* Recursively gets all paths of mod folders that can contain media files.
*
diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp
index d076d5783..a58a0397f 100644
--- a/src/server/player_sao.cpp
+++ b/src/server/player_sao.cpp
@@ -319,7 +319,7 @@ std::string PlayerSAO::generateUpdatePhysicsOverrideCommand() const
return os.str();
}
-void PlayerSAO::setBasePosition(const v3f &position)
+void PlayerSAO::setBasePosition(v3f position)
{
if (m_player && position != m_base_position)
m_player->setDirty(true);
@@ -344,7 +344,7 @@ void PlayerSAO::setPos(const v3f &pos)
setBasePosition(pos);
// Movement caused by this command is always valid
- m_last_good_position = pos;
+ m_last_good_position = getBasePosition();
m_move_pool.empty();
m_time_from_last_teleport = 0.0;
m_env->getGameDef()->SendMovePlayer(m_peer_id);
@@ -357,7 +357,7 @@ void PlayerSAO::moveTo(v3f pos, bool continuous)
setBasePosition(pos);
// Movement caused by this command is always valid
- m_last_good_position = pos;
+ m_last_good_position = getBasePosition();
m_move_pool.empty();
m_time_from_last_teleport = 0.0;
m_env->getGameDef()->SendMovePlayer(m_peer_id);
@@ -489,7 +489,7 @@ void PlayerSAO::setHP(s32 target_hp, const PlayerHPChangeReason &reason, bool fr
m_hp = hp;
m_env->getGameDef()->HandlePlayerHPChange(this, reason);
} else if (from_client)
- m_env->getGameDef()->SendPlayerHP(this);
+ m_env->getGameDef()->SendPlayerHP(this, true);
}
void PlayerSAO::setBreath(const u16 breath, bool send)
diff --git a/src/server/player_sao.h b/src/server/player_sao.h
index 96d8f7189..5f48cae67 100644
--- a/src/server/player_sao.h
+++ b/src/server/player_sao.h
@@ -72,24 +72,24 @@ public:
PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t peer_id_,
bool is_singleplayer);
- ActiveObjectType getType() const { return ACTIVEOBJECT_TYPE_PLAYER; }
- ActiveObjectType getSendType() const { return ACTIVEOBJECT_TYPE_GENERIC; }
- std::string getDescription();
+ ActiveObjectType getType() const override { return ACTIVEOBJECT_TYPE_PLAYER; }
+ ActiveObjectType getSendType() const override { return ACTIVEOBJECT_TYPE_GENERIC; }
+ std::string getDescription() override;
/*
Active object <-> environment interface
*/
- void addedToEnvironment(u32 dtime_s);
- void removingFromEnvironment();
- bool isStaticAllowed() const { return false; }
- bool shouldUnload() const { return false; }
- std::string getClientInitializationData(u16 protocol_version);
- void getStaticData(std::string *result) const;
- void step(float dtime, bool send_recommended);
- void setBasePosition(const v3f &position);
- void setPos(const v3f &pos);
- void moveTo(v3f pos, bool continuous);
+ void addedToEnvironment(u32 dtime_s) override;
+ void removingFromEnvironment() override;
+ bool isStaticAllowed() const override { return false; }
+ bool shouldUnload() const override { return false; }
+ std::string getClientInitializationData(u16 protocol_version) override;
+ void getStaticData(std::string *result) const override;
+ void step(float dtime, bool send_recommended) override;
+ void setBasePosition(v3f position);
+ void setPos(const v3f &pos) override;
+ void moveTo(v3f pos, bool continuous) override;
void setPlayerYaw(const float yaw);
// Data should not be sent at player initialization
void setPlayerYawAndSend(const float yaw);
@@ -110,8 +110,8 @@ public:
*/
u32 punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher,
- float time_from_last_punch, u16 initial_wear = 0);
- void rightClick(ServerActiveObject *clicker);
+ float time_from_last_punch, u16 initial_wear = 0) override;
+ void rightClick(ServerActiveObject *clicker) override;
void setHP(s32 hp, const PlayerHPChangeReason &reason) override
{
return setHP(hp, reason, false);
@@ -124,13 +124,13 @@ public:
/*
Inventory interface
*/
- Inventory *getInventory() const;
- InventoryLocation getInventoryLocation() const;
- void setInventoryModified() {}
- std::string getWieldList() const { return "main"; }
- u16 getWieldIndex() const;
- ItemStack getWieldedItem(ItemStack *selected, ItemStack *hand = nullptr) const;
- bool setWieldedItem(const ItemStack &item);
+ Inventory *getInventory() const override;
+ InventoryLocation getInventoryLocation() const override;
+ void setInventoryModified() override {}
+ std::string getWieldList() const override { return "main"; }
+ u16 getWieldIndex() const override;
+ ItemStack getWieldedItem(ItemStack *selected, ItemStack *hand = nullptr) const override;
+ bool setWieldedItem(const ItemStack &item) override;
/*
PlayerSAO-specific
@@ -171,9 +171,9 @@ public:
m_is_singleplayer = is_singleplayer;
}
- bool getCollisionBox(aabb3f *toset) const;
- bool getSelectionBox(aabb3f *toset) const;
- bool collideWithObjects() const { return true; }
+ bool getCollisionBox(aabb3f *toset) const override;
+ bool getSelectionBox(aabb3f *toset) const override;
+ bool collideWithObjects() const override { return true; }
void finalize(RemotePlayer *player, const std::set<std::string> &privs);
@@ -235,6 +235,7 @@ struct PlayerHPChangeReason
enum Type : u8
{
SET_HP,
+ SET_HP_MAX, // internal type to allow distinguishing hp reset and damage (for effects)
PLAYER_PUNCH,
FALL,
NODE_DAMAGE,
@@ -277,6 +278,7 @@ struct PlayerHPChangeReason
{
switch (type) {
case PlayerHPChangeReason::SET_HP:
+ case PlayerHPChangeReason::SET_HP_MAX:
return "set_hp";
case PlayerHPChangeReason::PLAYER_PUNCH:
return "punch";
diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp
index f3711652c..8989fb05f 100644
--- a/src/serverenvironment.cpp
+++ b/src/serverenvironment.cpp
@@ -258,23 +258,23 @@ void LBMManager::applyLBMs(ServerEnvironment *env, MapBlock *block, u32 stamp)
v3s16 pos;
MapNode n;
content_t c;
- lbm_lookup_map::const_iterator it = getLBMsIntroducedAfter(stamp);
+ bool pos_valid; // dummy, we know it's valid
+ auto it = getLBMsIntroducedAfter(stamp);
for (; it != m_lbm_lookup.end(); ++it) {
// Cache previous version to speedup lookup which has a very high performance
// penalty on each call
- content_t previous_c{};
- std::vector<LoadingBlockModifierDef *> *lbm_list = nullptr;
+ content_t previous_c = CONTENT_IGNORE;
+ const std::vector<LoadingBlockModifierDef *> *lbm_list = nullptr;
for (pos.X = 0; pos.X < MAP_BLOCKSIZE; pos.X++)
for (pos.Y = 0; pos.Y < MAP_BLOCKSIZE; pos.Y++)
for (pos.Z = 0; pos.Z < MAP_BLOCKSIZE; pos.Z++) {
- n = block->getNodeNoEx(pos);
+ n = block->getNodeNoCheck(pos, &pos_valid);
c = n.getContent();
// If content_t are not matching perform an LBM lookup
if (previous_c != c) {
- lbm_list = (std::vector<LoadingBlockModifierDef *> *)
- it->second.lookup(c);
+ lbm_list = it->second.lookup(c);
previous_c = c;
}
@@ -378,10 +378,7 @@ void ActiveBlockList::update(std::vector<PlayerSAO*> &active_players,
/*
Update m_list
*/
- m_list.clear();
- for (v3s16 p : newlist) {
- m_list.insert(p);
- }
+ m_list = std::move(newlist);
}
/*
@@ -393,7 +390,7 @@ static std::random_device seed;
ServerEnvironment::ServerEnvironment(ServerMap *map,
ServerScripting *scriptIface, Server *server,
- const std::string &path_world):
+ const std::string &path_world, MetricsBackend *mb):
Environment(server),
m_map(map),
m_script(scriptIface),
@@ -460,6 +457,15 @@ ServerEnvironment::ServerEnvironment(ServerMap *map,
m_player_database = openPlayerDatabase(player_backend_name, path_world, conf);
m_auth_database = openAuthDatabase(auth_backend_name, path_world, conf);
+
+ m_step_time_counter = mb->addCounter(
+ "minetest_env_step_time", "Time spent in environment step (in microseconds)");
+
+ m_active_block_gauge = mb->addGauge(
+ "minetest_env_active_blocks", "Number of active blocks");
+
+ m_active_object_gauge = mb->addGauge(
+ "minetest_env_active_objects", "Number of active objects");
}
ServerEnvironment::~ServerEnvironment()
@@ -552,10 +558,8 @@ bool ServerEnvironment::removePlayerFromDatabase(const std::string &name)
void ServerEnvironment::kickAllPlayers(AccessDeniedCode reason,
const std::string &str_reason, bool reconnect)
{
- for (RemotePlayer *player : m_players) {
- m_server->DenyAccessVerCompliant(player->getPeerId(),
- player->protocol_version, reason, str_reason, reconnect);
- }
+ for (RemotePlayer *player : m_players)
+ m_server->DenyAccess(player->getPeerId(), reason, str_reason, reconnect);
}
void ServerEnvironment::saveLoadedPlayers(bool force)
@@ -619,6 +623,9 @@ PlayerSAO *ServerEnvironment::loadPlayer(RemotePlayer *player, bool *new_player,
/* Add object to environment */
addActiveObject(playersao);
+ // Update active blocks asap so objects in those blocks appear on the client
+ m_force_update_active_blocks = true;
+
return playersao;
}
@@ -892,7 +899,7 @@ public:
for (ActiveABM &aabm : *m_aabms[c]) {
if ((p.Y < aabm.min_y) || (p.Y > aabm.max_y))
continue;
-
+
if (myrand() % aabm.chance != 0)
continue;
@@ -1285,6 +1292,8 @@ void ServerEnvironment::clearObjects(ClearObjectsMode mode)
void ServerEnvironment::step(float dtime)
{
ScopeProfiler sp2(g_profiler, "ServerEnv::step()", SPT_AVG);
+ const auto start_time = porting::getTimeUs();
+
/* Step time of day */
stepTimeOfDay(dtime);
@@ -1323,13 +1332,16 @@ void ServerEnvironment::step(float dtime)
/*
Manage active block list
*/
- if (m_active_blocks_management_interval.step(dtime, m_cache_active_block_mgmt_interval)) {
+ if (m_active_blocks_mgmt_interval.step(dtime, m_cache_active_block_mgmt_interval) ||
+ m_force_update_active_blocks) {
ScopeProfiler sp(g_profiler, "ServerEnv: update active blocks", SPT_AVG);
+
/*
Get player block positions
*/
std::vector<PlayerSAO*> players;
- for (RemotePlayer *player: m_players) {
+ players.reserve(m_players.size());
+ for (RemotePlayer *player : m_players) {
// Ignore disconnected players
if (player->getPeerId() == PEER_ID_INEXISTENT)
continue;
@@ -1377,14 +1389,21 @@ void ServerEnvironment::step(float dtime)
for (const v3s16 &p: blocks_added) {
MapBlock *block = m_map->getBlockOrEmerge(p);
if (!block) {
- m_active_blocks.m_list.erase(p);
- m_active_blocks.m_abm_list.erase(p);
+ // TODO: The blocks removed here will only be picked up again
+ // on the next cycle. To minimize the latency of objects being
+ // activated we could remember the blocks pending activating
+ // and activate them instantly as soon as they're loaded.
+ m_active_blocks.remove(p);
continue;
}
activateBlock(block);
}
+
+ // Some blocks may be removed again by the code above so do this here
+ m_active_block_gauge->set(m_active_blocks.size());
}
+ m_force_update_active_blocks = false;
/*
Mess around in active blocks
@@ -1483,6 +1502,8 @@ void ServerEnvironment::step(float dtime)
*/
m_script->environment_Step(dtime);
+ m_script->stepAsync();
+
/*
Step active objects
*/
@@ -1497,9 +1518,12 @@ void ServerEnvironment::step(float dtime)
send_recommended = true;
}
- auto cb_state = [this, dtime, send_recommended] (ServerActiveObject *obj) {
+ u32 object_count = 0;
+
+ auto cb_state = [&] (ServerActiveObject *obj) {
if (obj->isGone())
return;
+ object_count++;
// Step object
obj->step(dtime, send_recommended);
@@ -1507,6 +1531,8 @@ void ServerEnvironment::step(float dtime)
obj->dumpAOMessagesToQueue(m_active_object_messages);
};
m_ao_manager.step(dtime, cb_state);
+
+ m_active_object_gauge->set(object_count);
}
/*
@@ -1548,6 +1574,9 @@ void ServerEnvironment::step(float dtime)
// Send outdated detached inventories
m_server->sendDetachedInventories(PEER_ID_INEXISTENT, true);
+
+ const auto end_time = porting::getTimeUs();
+ m_step_time_counter->increment(end_time - start_time);
}
ServerEnvironment::BlockStatus ServerEnvironment::getBlockStatus(v3s16 blockpos)
diff --git a/src/serverenvironment.h b/src/serverenvironment.h
index 8733c2dd2..00184421e 100644
--- a/src/serverenvironment.h
+++ b/src/serverenvironment.h
@@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "settings.h"
#include "server/activeobjectmgr.h"
#include "util/numeric.h"
+#include "util/metricsbackend.h"
#include <set>
#include <random>
@@ -167,19 +168,27 @@ public:
std::set<v3s16> &blocks_removed,
std::set<v3s16> &blocks_added);
- bool contains(v3s16 p){
+ bool contains(v3s16 p) const {
return (m_list.find(p) != m_list.end());
}
- void clear(){
+ auto size() const {
+ return m_list.size();
+ }
+
+ void clear() {
m_list.clear();
}
+ void remove(v3s16 p) {
+ m_list.erase(p);
+ m_abm_list.erase(p);
+ }
+
std::set<v3s16> m_list;
std::set<v3s16> m_abm_list;
+ // list of blocks that are always active, not modified by this class
std::set<v3s16> m_forceloaded_list;
-
-private:
};
/*
@@ -198,7 +207,7 @@ class ServerEnvironment : public Environment
{
public:
ServerEnvironment(ServerMap *map, ServerScripting *scriptIface,
- Server *server, const std::string &path_world);
+ Server *server, const std::string &path_world, MetricsBackend *mb);
~ServerEnvironment();
Map & getMap();
@@ -451,7 +460,8 @@ private:
IntervalLimiter m_object_management_interval;
// List of active blocks
ActiveBlockList m_active_blocks;
- IntervalLimiter m_active_blocks_management_interval;
+ bool m_force_update_active_blocks = false;
+ IntervalLimiter m_active_blocks_mgmt_interval;
IntervalLimiter m_active_block_modifier_interval;
IntervalLimiter m_active_blocks_nodemetadata_interval;
// Whether the variables below have been read from file yet
@@ -487,5 +497,10 @@ private:
std::unordered_map<u32, float> m_particle_spawners;
std::unordered_map<u32, u16> m_particle_spawner_attachments;
+ // Environment metrics
+ MetricCounterPtr m_step_time_counter;
+ MetricGaugePtr m_active_block_gauge;
+ MetricGaugePtr m_active_object_gauge;
+
ServerActiveObject* createSAO(ActiveObjectType type, v3f pos, const std::string &data);
};
diff --git a/src/settings.cpp b/src/settings.cpp
index 0e44ee0bc..a0225bc2c 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes_bloated.h"
#include "exceptions.h"
#include "threading/mutex_auto_lock.h"
+#include "util/numeric.h" // rangelim
#include "util/strfnd.h"
#include <iostream>
#include <fstream>
@@ -534,6 +535,13 @@ float Settings::getFloat(const std::string &name) const
}
+float Settings::getFloat(const std::string &name, float min, float max) const
+{
+ float val = stof(get(name));
+ return rangelim(val, min, max);
+}
+
+
u64 Settings::getU64(const std::string &name) const
{
std::string s = get(name);
diff --git a/src/settings.h b/src/settings.h
index 767d057f9..4b0787343 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -164,6 +164,7 @@ public:
s32 getS32(const std::string &name) const;
u64 getU64(const std::string &name) const;
float getFloat(const std::string &name) const;
+ float getFloat(const std::string &name, float min, float max) const;
v2f getV2F(const std::string &name) const;
v3f getV3F(const std::string &name) const;
u32 getFlagStr(const std::string &name, const FlagDesc *flagdesc,
diff --git a/src/settings_translation_file.cpp b/src/settings_translation_file.cpp
index ebb7ba9be..03bb564fb 100644
--- a/src/settings_translation_file.cpp
+++ b/src/settings_translation_file.cpp
@@ -1,34 +1,23 @@
// This file is automatically generated
-// It conatins a bunch of fake gettext calls, to tell xgettext about the strings in config files
+// It contains a bunch of fake gettext calls, to tell xgettext about the strings in config files
// To update it, refer to the bottom of builtin/mainmenu/dlg_settings_advanced.lua
fake_function() {
gettext("Controls");
+ gettext("General");
gettext("Build inside player");
gettext("If enabled, you can place blocks at the position (feet + eye level) where you stand.\nThis is helpful when working with nodeboxes in small areas.");
- gettext("Flying");
- gettext("Player is able to fly without being affected by gravity.\nThis requires the \"fly\" privilege on the server.");
- gettext("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 \"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");
gettext("Smooths camera when looking around. Also called look or mouse smoothing.\nUseful for recording videos.");
gettext("Camera smoothing");
gettext("Smooths rotation of camera. 0 to disable.");
gettext("Camera smoothing in cinematic mode");
gettext("Smooths rotation of camera in cinematic mode. 0 to disable.");
- gettext("Invert mouse");
- gettext("Invert vertical mouse movement.");
- gettext("Mouse sensitivity");
- gettext("Mouse sensitivity multiplier.");
gettext("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("Always fly fast");
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.");
@@ -36,179 +25,45 @@ fake_function() {
gettext("Automatically jump up single-node obstacles.");
gettext("Safe digging and placing");
gettext("Prevent digging and placing from repeating when holding the mouse buttons.\nEnable this when you dig or place too often by accident.");
- gettext("Random input");
- gettext("Enable random user input (only used for testing).");
- gettext("Continuous forward");
- gettext("Continuous forward movement, toggled by autoforward key.\nPress the autoforward key again or the backwards movement to disable.");
+ gettext("Keyboard and Mouse");
+ gettext("Invert mouse");
+ gettext("Invert vertical mouse movement.");
+ gettext("Mouse sensitivity");
+ gettext("Mouse sensitivity multiplier.");
+ gettext("Touchscreen");
gettext("Touch screen threshold");
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 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");
- gettext("The identifier of the joystick to use");
- gettext("Joystick type");
- 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 dead zone");
- gettext("The dead zone of the joystick");
- gettext("Joystick frustum sensitivity");
- 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");
- gettext("Key for moving the player backward.\nWill also disable autoforward, when active.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Left key");
- gettext("Key for moving the player left.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Right key");
- gettext("Key for moving the player right.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Jump key");
- gettext("Key for jumping.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Sneak key");
- gettext("Key for sneaking.\nAlso used for climbing down and descending in water if aux1_descends is disabled.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Dig key");
- gettext("Key for digging.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Place key");
- 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("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");
- gettext("Command key");
- gettext("Key for opening the chat window to type commands.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Command key");
- gettext("Key for opening the chat window to type local commands.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Range select key");
- gettext("Key for toggling unlimited view range.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Fly key");
- gettext("Key for toggling flying.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Pitch move key");
- gettext("Key for toggling pitch move mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Fast key");
- gettext("Key for toggling fast mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Noclip key");
- gettext("Key for toggling noclip mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar next key");
- gettext("Key for selecting the next item in the hotbar.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar previous key");
- gettext("Key for selecting the previous item in the hotbar.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Mute key");
- gettext("Key for muting the game.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Inc. volume key");
- gettext("Key for increasing the volume.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Dec. volume key");
- gettext("Key for decreasing the volume.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Automatic forward key");
- gettext("Key for toggling autoforward.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Cinematic mode key");
- gettext("Key for toggling cinematic mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Minimap key");
- gettext("Key for toggling display of minimap.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Screenshot");
- gettext("Key for taking screenshots.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Drop item key");
- gettext("Key for dropping the currently selected item.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("View zoom key");
- gettext("Key to use view zoom when possible.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 1 key");
- gettext("Key for selecting the first hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 2 key");
- gettext("Key for selecting the second hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 3 key");
- gettext("Key for selecting the third hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 4 key");
- gettext("Key for selecting the fourth hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 5 key");
- gettext("Key for selecting the fifth hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 6 key");
- gettext("Key for selecting the sixth hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 7 key");
- gettext("Key for selecting the seventh hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 8 key");
- gettext("Key for selecting the eighth hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 9 key");
- gettext("Key for selecting the ninth hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 10 key");
- gettext("Key for selecting the tenth hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 11 key");
- gettext("Key for selecting the 11th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 12 key");
- gettext("Key for selecting the 12th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 13 key");
- gettext("Key for selecting the 13th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 14 key");
- gettext("Key for selecting the 14th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 15 key");
- gettext("Key for selecting the 15th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 16 key");
- gettext("Key for selecting the 16th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 17 key");
- gettext("Key for selecting the 17th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 18 key");
- gettext("Key for selecting the 18th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 19 key");
- gettext("Key for selecting the 19th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 20 key");
- gettext("Key for selecting the 20th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 21 key");
- gettext("Key for selecting the 21st hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 22 key");
- gettext("Key for selecting the 22nd hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 23 key");
- gettext("Key for selecting the 23rd hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 24 key");
- gettext("Key for selecting the 24th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 25 key");
- gettext("Key for selecting the 25th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 26 key");
- gettext("Key for selecting the 26th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 27 key");
- gettext("Key for selecting the 27th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 28 key");
- gettext("Key for selecting the 28th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 29 key");
- gettext("Key for selecting the 29th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 30 key");
- gettext("Key for selecting the 30th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 31 key");
- gettext("Key for selecting the 31st hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Hotbar slot 32 key");
- gettext("Key for selecting the 32nd hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("HUD toggle key");
- gettext("Key for toggling the display of the HUD.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Chat toggle key");
- gettext("Key for toggling the display of chat.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Large chat console key");
- gettext("Key for toggling the display of the large chat console.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Fog toggle key");
- gettext("Key for toggling the display of fog.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Camera update toggle key");
- gettext("Key for toggling the camera update. Only used for development\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Debug info toggle key");
- gettext("Key for toggling the display of debug info.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Profiler toggle key");
- gettext("Key for toggling the display of the profiler. Used for development.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("Toggle camera mode key");
- gettext("Key for switching between first- and third-person camera.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("View range increase key");
- gettext("Key for increasing the viewing range.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
- gettext("View range decrease key");
- gettext("Key for decreasing the viewing range.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Graphics and Audio");
gettext("Graphics");
- gettext("In-Game");
- gettext("Basic");
- 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");
- gettext("Whether to fog out the end of the visible area.");
+ gettext("Screen");
+ gettext("Screen width");
+ gettext("Width component of the initial window size. Ignored in fullscreen mode.");
+ gettext("Screen height");
+ 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("Pause on lost window focus");
+ gettext("Open the pause menu when the window's focus is lost. Does not pause if a formspec is\nopen.");
+ gettext("FPS");
+ gettext("Maximum FPS");
+ gettext("If FPS would go higher than this, limit it by sleeping\nto not waste CPU power for no benefit.");
+ gettext("VSync");
+ gettext("Vertical screen synchronization.");
+ gettext("FPS when unfocused or paused");
+ gettext("Maximum FPS when the window is not focused, or when the game is paused.");
+ gettext("Viewing range");
+ gettext("View distance in nodes.");
+ gettext("Undersampling");
+ gettext("Undersampling is similar to using a lower screen resolution, but it applies\nto the game world only, keeping the GUI intact.\nIt should give a significant performance boost at the cost of less detailed image.\nHigher values result in a less detailed image.");
+ gettext("Graphics Effects");
+ gettext("Opaque liquids");
+ gettext("Makes all liquids opaque");
gettext("Leaves style");
gettext("Leaves style:\n- Fancy: all faces visible\n- Simple: only outer faces, if defined special_tiles are used\n- Opaque: disable transparency");
gettext("Connect glass");
@@ -217,15 +72,62 @@ fake_function() {
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("Digging particles");
+ gettext("Adds particles when digging a node.");
+ gettext("3d");
+ gettext("3D mode");
+ gettext("3D support.\nCurrently supported:\n- none: no 3d output.\n- anaglyph: cyan/magenta color 3d.\n- interlaced: odd/even line based polarisation screen support.\n- topbottom: split screen top/bottom.\n- sidebyside: split screen side by side.\n- crossview: Cross-eyed 3d\n- pageflip: quadbuffer based 3d.\nNote that the interlaced mode requires shaders to be enabled.");
+ gettext("3D mode parallax strength");
+ gettext("Strength of 3D mode parallax.");
+ gettext("Bobbing");
+ gettext("Arm inertia");
+ gettext("Arm inertia, gives a more realistic movement of\nthe arm when the camera moves.");
+ gettext("View bobbing factor");
+ gettext("Enable view bobbing and amount of view bobbing.\nFor example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.");
+ gettext("Fall bobbing factor");
+ gettext("Multiplier for fall bobbing.\nFor example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.");
+ gettext("Camera");
+ 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("Field of view");
+ gettext("Field of view in degrees.");
+ gettext("Light curve gamma");
+ gettext("Alters the light curve by applying 'gamma correction' to it.\nHigher values make middle and lower light levels brighter.\nValue '1.0' leaves the light curve unaltered.\nThis only has significant effect on daylight and artificial\nlight, it has very little effect on natural night light.");
+ gettext("Ambient occlusion gamma");
+ gettext("The strength (darkness) of node ambient-occlusion shading.\nLower is darker, Higher is lighter. The valid range of values for this\nsetting is 0.25 to 4.0 inclusive. If the value is out of range it will be\nset to the nearest valid value.");
+ gettext("Screenshots");
+ gettext("Screenshot folder");
+ gettext("Path to save screenshots at. Can be an absolute or relative path.\nThe folder will be created if it doesn't already exist.");
+ gettext("Screenshot format");
+ gettext("Format of screenshots.");
+ gettext("Screenshot quality");
+ gettext("Screenshot quality. Only used for JPEG format.\n1 means worst quality; 100 means best quality.\nUse 0 for default quality.");
+ gettext("Node and Entity Highlighting");
+ gettext("Node highlighting");
+ gettext("Method used to highlight selected object.");
+ gettext("Show entity selection boxes");
+ gettext("Show entity selection boxes\nA restart is required after changing this.");
+ gettext("Selection box color");
+ gettext("Selection box border color (R,G,B).");
+ gettext("Selection box width");
+ gettext("Width of the selection box lines around nodes.");
+ 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).\nThis also applies to the object crosshair.");
+ gettext("Fog");
+ gettext("Fog");
+ gettext("Whether to fog out the end of the visible area.");
+ gettext("Colored fog");
+ gettext("Make fog and sky colors depend on daytime (dawn/sunset) and view direction.");
+ gettext("Fog start");
+ gettext("Fraction of the visible distance at which fog starts to be rendered");
+ gettext("Clouds");
gettext("Clouds");
gettext("Clouds are a client side effect.");
gettext("3D clouds");
gettext("Use 3D cloud look instead of flat.");
- gettext("Node highlighting");
- gettext("Method used to highlight selected object.");
- gettext("Digging particles");
- gettext("Adds particles when digging a node.");
- gettext("Filtering");
+ gettext("Filtering and Antialiasing");
gettext("Mipmapping");
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");
@@ -240,17 +142,17 @@ fake_function() {
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");
- gettext("Undersampling is similar to using a lower screen resolution, but it applies\nto the game world only, keeping the GUI intact.\nIt should give a significant performance boost at the cost of less detailed image.\nHigher values result in a less detailed image.");
gettext("Shaders");
gettext("Shaders");
gettext("Shaders allow advanced visual effects and may increase performance on some video\ncards.\nThis only works with the OpenGL video backend.");
- gettext("Shader path");
- gettext("Path to shader directory. If no path is defined, default location will be used.");
gettext("Tone Mapping");
gettext("Filmic tone mapping");
gettext("Enables Hable's 'Uncharted 2' filmic tone mapping.\nSimulates the tone curve of photographic film and how this approximates the\nappearance of high dynamic range images. Mid-range contrast is slightly\nenhanced, highlights and shadows are gradually compressed.");
gettext("Waving Nodes");
+ gettext("Waving leaves");
+ 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("Waving liquids");
gettext("Set to true to enable waving liquids (like water).\nRequires shaders to be enabled.");
gettext("Waving liquids wave height");
@@ -259,15 +161,11 @@ fake_function() {
gettext("Length of liquid waves.\nRequires waving liquids to be enabled.");
gettext("Waving liquids wave speed");
gettext("How fast liquid waves will move. Higher = faster.\nIf negative, liquid waves will move backwards.\nRequires waving liquids to be enabled.");
- gettext("Waving leaves");
- 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 strength gamma");
+ gettext("Set the shadow strength gamma.\nAdjusts the intensity of in-game dynamic shadows.\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");
@@ -283,123 +181,26 @@ fake_function() {
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("Set the soft shadow radius size.\nLower values mean sharper shadows, bigger values mean softer shadows.\nMinimum value: 1.0; maximum value: 15.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.");
- gettext("Maximum FPS");
- gettext("If FPS would go higher than this, limit it by sleeping\nto not waste CPU power for no benefit.");
- gettext("FPS when unfocused or paused");
- gettext("Maximum FPS when the window is not focused, or when the game is paused.");
- gettext("Pause on lost window focus");
- gettext("Open the pause menu when the window's focus is lost. Does not pause if a formspec is\nopen.");
- gettext("Viewing range");
- gettext("View distance in nodes.");
- 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. Ignored in fullscreen mode.");
- gettext("Screen height");
- 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("VSync");
- gettext("Vertical screen synchronization.");
- gettext("Field of view");
- gettext("Field of view in degrees.");
- gettext("Light curve gamma");
- gettext("Alters the light curve by applying 'gamma correction' to it.\nHigher values make middle and lower light levels brighter.\nValue '1.0' leaves the light curve unaltered.\nThis only has significant effect on daylight and artificial\nlight, it has very little effect on natural night light.");
- gettext("Light curve low gradient");
- gettext("Gradient of light curve at minimum light level.\nControls the contrast of the lowest light levels.");
- gettext("Light curve high gradient");
- gettext("Gradient of light curve at maximum light level.\nControls the contrast of the highest light levels.");
- gettext("Light curve boost");
- gettext("Strength of light curve boost.\nThe 3 'boost' parameters define a range of the light\ncurve that is boosted in brightness.");
- gettext("Light curve boost center");
- gettext("Center of light curve boost range.\nWhere 0.0 is minimum light level, 1.0 is maximum light level.");
- gettext("Light curve boost spread");
- gettext("Spread of light curve boost range.\nControls the width of the range to be boosted.\nStandard deviation of the light curve boost Gaussian.");
- gettext("Texture path");
- gettext("Path to texture directory. All textures are first searched from here.");
- gettext("Video driver");
- 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");
- gettext("Enable view bobbing and amount of view bobbing.\nFor example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.");
- gettext("Fall bobbing factor");
- gettext("Multiplier for fall bobbing.\nFor example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.");
- gettext("3D mode");
- gettext("3D support.\nCurrently supported:\n- none: no 3d output.\n- anaglyph: cyan/magenta color 3d.\n- interlaced: odd/even line based polarisation screen support.\n- topbottom: split screen top/bottom.\n- sidebyside: split screen side by side.\n- crossview: Cross-eyed 3d\n- pageflip: quadbuffer based 3d.\nNote that the interlaced mode requires shaders to be enabled.");
- gettext("3D mode parallax strength");
- gettext("Strength of 3D mode parallax.");
- gettext("Console height");
- gettext("In-game chat console height, between 0.1 (10%) and 1.0 (100%).");
- gettext("Console color");
- gettext("In-game chat console background color (R,G,B).");
- gettext("Console alpha");
- gettext("In-game chat console background alpha (opaqueness, between 0 and 255).");
+ gettext("Audio");
+ gettext("Volume");
+ gettext("Volume of all sounds.\nRequires the sound system to be enabled.");
+ 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("User Interfaces");
+ gettext("Language");
+ gettext("Set the language. Leave empty to use the system language.\nA restart is required after changing this.");
+ gettext("GUIs");
+ gettext("GUI scaling");
+ gettext("Scale GUI by a user specified value.\nUse a nearest-neighbor-anti-alias filter to scale the GUI.\nThis will smooth over some of the rough edges, and blend\npixels when scaling down, at the cost of blurring some\nedge pixels when images are scaled by non-integer sizes.");
+ gettext("Inventory items animations");
+ gettext("Enables animation of inventory items.");
gettext("Formspec Full-Screen Background Opacity");
gettext("Formspec full-screen background opacity (between 0 and 255).");
gettext("Formspec Full-Screen Background Color");
gettext("Formspec full-screen background color (R,G,B).");
- gettext("Formspec Default Background Opacity");
- gettext("Formspec default background opacity (between 0 and 255).");
- gettext("Formspec Default Background Color");
- gettext("Formspec default background color (R,G,B).");
- gettext("Selection box color");
- gettext("Selection box border color (R,G,B).");
- gettext("Selection box width");
- gettext("Width of the selection box lines around nodes.");
- 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).\nThis also applies to the object crosshair.");
- gettext("Recent Chat Messages");
- gettext("Maximum number of recent chat messages to show");
- gettext("Desynchronize block animation");
- gettext("Whether node texture animations should be desynchronized per mapblock.");
- gettext("Maximum hotbar width");
- gettext("Maximum proportion of current window to be used for hotbar.\nUseful if there's something to be displayed right or left of hotbar.");
- gettext("HUD scale factor");
- gettext("Modifies the size of the HUD elements.");
- gettext("Mesh cache");
- gettext("Enables caching of facedir rotated meshes.");
- gettext("Mapblock mesh generation delay");
- gettext("Delay between mesh updates on the client in ms. Increasing this will slow\ndown the rate of mesh updates, thus reducing jitter on slower clients.");
- gettext("Mapblock mesh generator's MapBlock cache size in MB");
- gettext("Size of the MapBlock cache of the mesh generator. Increasing this will\nincrease the cache hit %, reducing the data being copied from the main\nthread, thus reducing jitter.");
- gettext("Minimap");
- gettext("Enables minimap.");
- gettext("Round minimap");
- gettext("Shape of the minimap. Enabled = round, disabled = square.");
- gettext("Minimap scan height");
- gettext("True = 256\nFalse = 128\nUsable to make minimap smoother on slower machines.");
- gettext("Colored fog");
- gettext("Make fog and sky colors depend on daytime (dawn/sunset) and view direction.");
- gettext("Ambient occlusion gamma");
- gettext("The strength (darkness) of node ambient-occlusion shading.\nLower is darker, Higher is lighter. The valid range of values for this\nsetting is 0.25 to 4.0 inclusive. If the value is out of range it will be\nset to the nearest valid value.");
- gettext("Inventory items animations");
- gettext("Enables animation of inventory items.");
- gettext("Fog start");
- gettext("Fraction of the visible distance at which fog starts to be rendered");
- gettext("Opaque liquids");
- gettext("Makes all liquids opaque");
- gettext("World-aligned textures mode");
- gettext("Textures on a node may be aligned either to the node or to the world.\nThe former mode suits better things like machines, furniture, etc., while\nthe latter makes stairs and microblocks fit surroundings better.\nHowever, as this possibility is new, thus may not be used by older servers,\nthis option allows enforcing it for certain node types. Note though that\nthat is considered EXPERIMENTAL and may not work properly.");
- gettext("Autoscaling mode");
- gettext("World-aligned textures may be scaled to span several nodes. However,\nthe server may not send the scale you want, especially if you use\na specially-designed texture pack; with this option, the client tries\nto determine the scale automatically basing on the texture size.\nSee also texture_min_size.\nWarning: This option is EXPERIMENTAL!");
- gettext("Show entity selection boxes");
- gettext("Show entity selection boxes\nA restart is required after changing this.");
- gettext("Menus");
- gettext("Clouds in menu");
- gettext("Use a cloud animation for the main menu background.");
- gettext("GUI scaling");
- gettext("Scale GUI by a user specified value.\nUse a nearest-neighbor-anti-alias filter to scale the GUI.\nThis will smooth over some of the rough edges, and blend\npixels when scaling down, at the cost of blurring some\nedge pixels when images are scaled by non-integer sizes.");
gettext("GUI scaling filter");
gettext("When gui_scaling_filter is true, all GUI images need to be\nfiltered in software, but some images are generated directly\nto hardware (e.g. render-to-texture for nodes in inventory).");
gettext("GUI scaling filter txr2img");
@@ -408,88 +209,49 @@ fake_function() {
gettext("Delay showing tooltips, stated in milliseconds.");
gettext("Append item name");
gettext("Append item name to tooltip.");
- gettext("Font bold by default");
- gettext("Font italic by default");
- gettext("Font shadow");
- gettext("Shadow offset (in pixels) of the default font. If 0, then shadow will not be drawn.");
- 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 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. 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 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. 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 path");
- 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");
- gettext("Path to save screenshots at. Can be an absolute or relative path.\nThe folder will be created if it doesn't already exist.");
- gettext("Screenshot format");
- gettext("Format of screenshots.");
- gettext("Screenshot quality");
- gettext("Screenshot quality. Only used for JPEG format.\n1 means worst quality; 100 means best quality.\nUse 0 for default quality.");
- 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");
- gettext("Sound");
- gettext("Enables the sound system.\nIf disabled, this completely disables all sounds everywhere and the in-game\nsound controls will be non-functional.\nChanging this setting requires a restart.");
- gettext("Volume");
- gettext("Volume of all sounds.\nRequires the sound system to be enabled.");
- 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("Clouds in menu");
+ gettext("Use a cloud animation for the main menu background.");
+ gettext("HUD");
+ gettext("HUD scaling");
+ gettext("Modifies the size of the HUD elements.");
+ gettext("Show name tag backgrounds by default");
+ gettext("Whether name tag backgrounds should be shown by default.\nMods may still set a background.");
+ gettext("Chat");
+ gettext("Recent Chat Messages");
+ gettext("Maximum number of recent chat messages to show");
+ gettext("Console height");
+ gettext("In-game chat console height, between 0.1 (10%) and 1.0 (100%).");
+ gettext("Console color");
+ gettext("In-game chat console background color (R,G,B).");
+ gettext("Console alpha");
+ gettext("In-game chat console background alpha (opaqueness, between 0 and 255).");
+ gettext("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("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 fetched on http://127.0.0.1:30000/metrics");
+ 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("Content Repository");
+ gettext("ContentDB URL");
+ gettext("The URL for the content repository");
+ gettext("ContentDB Flag Blacklist");
+ gettext("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',\nas defined by the Free Software Foundation.\nYou can also specify content ratings.\nThese flags are independent from Minetest versions,\nso see a full list at https://content.minetest.net/help/content_flags/");
+ gettext("ContentDB Max Concurrent Downloads");
+ gettext("Maximum number of concurrent downloads. Downloads exceeding this limit will be queued.\nThis should be lower than curl_parallel_limit.");
+ gettext("Client and Server");
+ gettext("Client");
gettext("Saving map received from server");
gettext("Save the map received by the client on disk.");
- gettext("Connect to external media server");
- gettext("Enable usage of remote media server (if provided by server).\nRemote servers offer a significantly faster way to download media (e.g. textures)\nwhen connecting to the server.");
- gettext("Client modding");
- gettext("Enable Lua modding support on client.\nThis support is experimental and API can change.");
gettext("Serverlist URL");
gettext("URL to the server list displayed in the Multiplayer Tab.");
- gettext("Serverlist file");
- gettext("File in client/serverlist/ that contains your favorite servers displayed in the\nMultiplayer Tab.");
- gettext("Maximum size of the out chat queue");
- gettext("Maximum size of the out chat queue.\n0 to disable queueing and -1 to make the queue size unlimited.");
- gettext("Enable register confirmation");
- gettext("Enable register confirmation when connecting to server.\nIf disabled, new account will be registered automatically.");
- gettext("Advanced");
- gettext("Mapblock unload timeout");
- gettext("Timeout for client to remove unused map data from memory.");
- gettext("Mapblock limit");
- gettext("Maximum number of mapblocks for client to be kept in memory.\nSet to -1 for unlimited amount.");
- gettext("Show debug info");
- gettext("Whether to show the client debug info (has the same effect as hitting F5).");
- gettext("Server / Singleplayer");
+ gettext("Enable split login/register");
+ gettext("If enabled, account registration is separate from login in the UI.\nIf disabled, new accounts will be registered automatically when logging in.");
+ gettext("Server");
+ gettext("Admin name");
+ gettext("Name of the player.\nWhen running a server, clients connecting with this name are admins.\nWhen starting from the main menu, this is overridden.");
+ gettext("Serverlist and MOTD");
gettext("Server name");
gettext("Name of the server, to be displayed when players join and in the serverlist.");
gettext("Server description");
@@ -502,9 +264,13 @@ fake_function() {
gettext("Automatically report to the serverlist.");
gettext("Serverlist URL");
gettext("Announce to this serverlist.");
- gettext("Strip color codes");
- gettext("Remove color codes from incoming chat messages\nUse this to stop players from being able to use color in their messages");
- gettext("Network");
+ gettext("Message of the day");
+ gettext("Message of the day displayed to players connecting.");
+ gettext("Maximum users");
+ gettext("Maximum number of players that can be connected simultaneously.");
+ gettext("Static spawnpoint");
+ gettext("If this is set, players will always (re)spawn at the given position.");
+ gettext("Networking");
gettext("Server port");
gettext("Network port to listen (UDP).\nThis value will be overridden when starting from the main menu.");
gettext("Bind address");
@@ -515,88 +281,42 @@ fake_function() {
gettext("Specifies URL from which client fetches media instead of using UDP.\n$filename should be accessible from $remote_media$filename via cURL\n(obviously, remote_media should end with a slash).\nFiles that are not present will be fetched the usual way.");
gettext("IPv6 server");
gettext("Enable/disable running an IPv6 server.\nIgnored if bind_address is set.\nNeeds enable_ipv6 to be enabled.");
- gettext("Advanced");
- gettext("Maximum simultaneous block sends per client");
- gettext("Maximum number of blocks that are simultaneously sent per client.\nThe maximum total count is calculated dynamically:\nmax_total = ceil((#clients + max_users) * per_client / 4)");
- gettext("Delay in sending blocks after building");
- gettext("To reduce lag, block transfers are slowed down when a player is building something.\nThis determines how long they are slowed down after placing or removing a node.");
- gettext("Max. packets per iteration");
- gettext("Maximum number of packets sent per send step, if you have a slow connection\ntry reducing it, but don't reduce it to a number below double of targeted\nclient number.");
- gettext("Map Compression Level for Network Transfer");
- 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.");
- gettext("Message of the day");
- gettext("Message of the day displayed to players connecting.");
- gettext("Maximum users");
- gettext("Maximum number of players that can be connected simultaneously.");
- gettext("Map directory");
- gettext("World directory (everything in the world is stored here).\nNot needed if starting from the main menu.");
- gettext("Item entity TTL");
- gettext("Time in seconds for item entity (dropped items) to live.\nSetting it to -1 disables the feature.");
- gettext("Default stack size");
- gettext("Specifies the default stack size of nodes, items and tools.\nNote that mods or games may explicitly set a stack for certain (or all) items.");
- gettext("Damage");
- gettext("Enable players getting damage and dying.");
- gettext("Creative");
- gettext("Enable creative mode for all players");
- gettext("Fixed map seed");
- gettext("A chosen map seed for a new map, leave empty for random.\nWill be overridden when creating a new world in the main menu.");
+ gettext("Server Security");
gettext("Default password");
gettext("New users need to input this password.");
+ gettext("Disallow empty passwords");
+ gettext("If enabled, players cannot join without a password or change theirs to an empty password.");
gettext("Default privileges");
gettext("The privileges that new users automatically get.\nSee /privs in game for a full list on your server and mod configuration.");
gettext("Basic privileges");
gettext("Privileges that players with basic_privs can grant");
- gettext("Unlimited player transfer distance");
- gettext("Whether players are shown to clients without any range limit.\nDeprecated, use the setting player_transfer_distance instead.");
- gettext("Player transfer distance");
- gettext("Defines the maximal player transfer distance in blocks (0 = unlimited).");
- gettext("Player versus player");
- gettext("Whether to allow players to damage and kill each other.");
- gettext("Mod channels");
- gettext("Enable mod channels support.");
- gettext("Static spawnpoint");
- gettext("If this is set, players will always (re)spawn at the given position.");
- gettext("Disallow empty passwords");
- gettext("If enabled, new players cannot join with an empty password.");
gettext("Disable anticheat");
gettext("If enabled, disable cheat prevention in multiplayer.");
gettext("Rollback recording");
gettext("If enabled, actions are recorded for rollback.\nThis option is only read when server starts.");
- gettext("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");
- gettext("A message to be displayed to all clients when the server crashes.");
- gettext("Ask to reconnect after crash");
- gettext("Whether to ask clients to reconnect after a (Lua) crash.\nSet this to true if your server is set up to restart automatically.");
- gettext("Active object send range");
- gettext("From how far clients know about objects, stated in mapblocks (16 nodes).\n\nSetting this larger than active_block_range will also cause the server\nto maintain active objects up to this distance in the direction the\nplayer is looking. (This can avoid mobs suddenly disappearing from view)");
- gettext("Active block range");
- gettext("The radius of the volume of blocks around every player that is subject to the\nactive block stuff, stated in mapblocks (16 nodes).\nIn active blocks objects are loaded and ABMs run.\nThis is also the minimum range in which active objects (mobs) are maintained.\nThis should be configured together with active_object_send_range_blocks.");
- gettext("Max block send distance");
- gettext("From how far blocks are sent to clients, stated in mapblocks (16 nodes).");
- gettext("Maximum forceloaded blocks");
- gettext("Maximum number of forceloaded mapblocks.");
- gettext("Time send interval");
- gettext("Interval of sending time of day to clients.");
- gettext("Time speed");
- gettext("Controls length of day/night cycle.\nExamples:\n72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged.");
- gettext("World start time");
- gettext("Time of day when a new world is started, in millihours (0-23999).");
- gettext("Map save interval");
- gettext("Interval of saving important changes in the world, stated in seconds.");
+ gettext("Client-side Modding");
+ gettext("Client side modding restrictions");
+ gettext("Restricts the access of certain client-side functions on servers.\nCombine the byteflags below to restrict client-side features, or set to 0\nfor no restrictions:\nLOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\nCHAT_MESSAGES: 2 (disable send_chat_message call client-side)\nREAD_ITEMDEFS: 4 (disable get_item_def call client-side)\nREAD_NODEDEFS: 8 (disable get_node_def call client-side)\nLOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\ncsm_restriction_noderange)\nREAD_PLAYERINFO: 32 (disable get_player_names call client-side)");
+ gettext("Client side node lookup range restriction");
+ gettext("If the CSM restriction for node range is enabled, get_node calls are limited\nto this distance from the player to the node.");
+ gettext("Chat");
+ gettext("Strip color codes");
+ gettext("Remove color codes from incoming chat messages\nUse this to stop players from being able to use color in their messages");
gettext("Chat message max length");
- gettext("Set the maximum character length of a chat message sent by clients.");
+ gettext("Set the maximum length of a chat message (in characters) sent by clients.");
gettext("Chat message count limit");
gettext("Amount of messages a player may send per 10 seconds.");
gettext("Chat message kick threshold");
gettext("Kick players who sent more than X messages per 10 seconds.");
+ gettext("Server Gameplay");
+ gettext("Time speed");
+ gettext("Controls length of day/night cycle.\nExamples:\n72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged.");
+ gettext("World start time");
+ gettext("Time of day when a new world is started, in millihours (0-23999).");
+ gettext("Item entity TTL");
+ gettext("Time in seconds for item entity (dropped items) to live.\nSetting it to -1 disables the feature.");
+ gettext("Default stack size");
+ gettext("Specifies the default stack size of nodes, items and tools.\nNote that mods or games may explicitly set a stack for certain (or all) items.");
gettext("Physics");
gettext("Default acceleration");
gettext("Horizontal and vertical acceleration on ground or when climbing,\nin nodes per second per second.");
@@ -615,108 +335,16 @@ fake_function() {
gettext("Jumping speed");
gettext("Initial vertical speed when jumping, in nodes per second.");
gettext("Liquid fluidity");
- gettext("Decrease this to increase liquid resistance to movement.");
+ gettext("How much you are slowed down when moving inside a liquid.\nDecrease this to increase liquid resistance to movement.");
gettext("Liquid fluidity smoothing");
gettext("Maximum liquid resistance. Controls deceleration when entering liquid at\nhigh speed.");
gettext("Liquid sinking");
- gettext("Controls sinking speed in liquid.");
+ gettext("Controls sinking speed in liquid when idling. Negative values will cause\nyou to rise instead.");
gettext("Gravity");
gettext("Acceleration of gravity, in nodes per second per second.");
- gettext("Advanced");
- 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("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");
- gettext("Maximum number of statically stored objects in a block.");
- gettext("Synchronous SQLite");
- gettext("See https://www.sqlite.org/pragma.html#pragma_synchronous");
- gettext("Map Compression Level for Disk Storage");
- 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");
- gettext("Length of time between active block management cycles");
- gettext("ABM interval");
- gettext("Length of time between Active Block Modifier (ABM) execution cycles");
- gettext("ABM time budget");
- gettext("The time budget allowed for ABMs to execute on each step\n(as a fraction of the ABM Interval)");
- gettext("NodeTimer interval");
- gettext("Length of time between NodeTimer execution cycles");
- gettext("Ignore world errors");
- gettext("If enabled, invalid world data won't cause the server to shut down.\nOnly enable this if you know what you are doing.");
- gettext("Liquid loop max");
- gettext("Max liquids processed per step.");
- gettext("Liquid queue purge time");
- gettext("The time (in seconds) that the liquids queue may grow beyond processing\ncapacity until an attempt is made to decrease its size by dumping old queue\nitems. A value of 0 disables the functionality.");
- gettext("Liquid update tick");
- gettext("Liquid update interval in seconds.");
- gettext("Block send optimize distance");
- gettext("At this distance the server will aggressively optimize which blocks are sent to\nclients.\nSmall values potentially improve performance a lot, at the expense of visible\nrendering glitches (some blocks will not be rendered under water and in caves,\nas well as sometimes on land).\nSetting this to a value greater than max_block_send_distance disables this\noptimization.\nStated in mapblocks (16 nodes).");
- gettext("Server side occlusion culling");
- gettext("If enabled the server will perform map block occlusion culling based on\non the eye position of the player. This can reduce the number of blocks\nsent to the client 50-80%. The client will not longer receive most invisible\nso that the utility of noclip mode is reduced.");
- gettext("Client side modding restrictions");
- gettext("Restricts the access of certain client-side functions on servers.\nCombine the byteflags below to restrict client-side features, or set to 0\nfor no restrictions:\nLOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\nCHAT_MESSAGES: 2 (disable send_chat_message call client-side)\nREAD_ITEMDEFS: 4 (disable get_item_def call client-side)\nREAD_NODEDEFS: 8 (disable get_node_def call client-side)\nLOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\ncsm_restriction_noderange)\nREAD_PLAYERINFO: 32 (disable get_player_names call client-side)");
- gettext("Client side node lookup range restriction");
- gettext("If the CSM restriction for node range is enabled, get_node calls are limited\nto this distance from the player to the node.");
- gettext("Security");
- gettext("Enable mod security");
- gettext("Prevent mods from doing insecure things like running shell commands.");
- gettext("Trusted mods");
- gettext("Comma-separated list of trusted mods that are allowed to access insecure\nfunctions even when mod security is on (via request_insecure_environment()).");
- gettext("HTTP mods");
- gettext("Comma-separated list of mods that are allowed to access HTTP APIs, which\nallow them to upload and download data to/from the internet.");
- gettext("Advanced");
- gettext("Profiling");
- gettext("Load the game profiler");
- gettext("Load the game profiler to collect game profiling data.\nProvides a /profiler command to access the compiled profile.\nUseful for mod developers and server operators.");
- gettext("Default report format");
- gettext("The default format in which profiles are being saved,\nwhen calling `/profiler save [format]` without format.");
- gettext("Report path");
- gettext("The file path relative to your worldpath in which profiles will be saved to.");
- gettext("Instrumentation");
- gettext("Entity methods");
- gettext("Instrument the methods of entities on registration.");
- gettext("Active Block Modifiers");
- 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("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");
- gettext("Builtin");
- gettext("Instrument builtin.\nThis is usually only needed by core/builtin contributors");
- gettext("Profiler");
- gettext("Have the profiler instrument itself:\n* Instrument an empty function.\nThis estimates the overhead, that instrumentation is adding (+1 function call).\n* Instrument the sampler being used to update the statistics.");
- gettext("Client and Server");
- gettext("Player name");
- gettext("Name of the player.\nWhen running a server, clients connecting with this name are admins.\nWhen starting from the main menu, this is overridden.");
- gettext("Language");
- gettext("Set the language. Leave empty to use the system language.\nA restart is required after changing this.");
- gettext("Debug log level");
- gettext("Level of logging to be written to debug.txt:\n- <nothing> (no logging)\n- none (messages with no level)\n- error\n- warning\n- action\n- info\n- verbose");
- gettext("Debug log file size threshold");
- gettext("If the file size of debug.txt exceeds the number of megabytes specified in\nthis setting when it is opened, the file is moved to debug.txt.1,\ndeleting an older debug.txt.1 if it exists.\ndebug.txt is only moved if this setting is positive.");
- gettext("Chat log level");
- gettext("Minimal level of logging to be written to chat.");
- gettext("IPv6");
- gettext("Enable IPv6 support (for both client and server).\nRequired for IPv6 connections to work at all.");
- gettext("Advanced");
- 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 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");
- gettext("Print the engine's profiling data in regular intervals (in seconds).\n0 = disable. Useful for developers.");
gettext("Mapgen");
+ gettext("Fixed map seed");
+ gettext("A chosen map seed for a new map, leave empty for random.\nWill be overridden when creating a new world in the main menu.");
gettext("Mapgen name");
gettext("Name of map generator to be used when creating a new world.\nCreating a world in the main menu will override this.\nCurrent mapgens in a highly unstable state:\n- The optional floatlands of v7 (disabled by default).");
gettext("Water level");
@@ -727,7 +355,7 @@ fake_function() {
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 jungle grass, in all other mapgens this flag controls all decorations.");
- gettext("Biome API temperature and humidity noise parameters");
+ gettext("Biome API noise parameters");
gettext("Heat noise");
gettext("Temperature variation for biomes.");
gettext("Heat blend noise");
@@ -1111,6 +739,195 @@ fake_function() {
gettext("Dungeon noise");
gettext("3D noise that determines number of dungeons per mapchunk.");
gettext("Advanced");
+ gettext("Developer Options");
+ gettext("Client modding");
+ gettext("Enable Lua modding support on client.\nThis support is experimental and API can change.");
+ gettext("Main menu script");
+ gettext("Replaces the default main menu with a custom one.");
+ gettext("Mod Security");
+ gettext("Enable mod security");
+ gettext("Prevent mods from doing insecure things like running shell commands.");
+ gettext("Trusted mods");
+ gettext("Comma-separated list of trusted mods that are allowed to access insecure\nfunctions even when mod security is on (via request_insecure_environment()).");
+ gettext("HTTP mods");
+ gettext("Comma-separated list of mods that are allowed to access HTTP APIs, which\nallow them to upload and download data to/from the internet.");
+ gettext("Debugging");
+ gettext("Debug log level");
+ gettext("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\n- trace");
+ gettext("Debug log file size threshold");
+ gettext("If the file size of debug.txt exceeds the number of megabytes specified in\nthis setting when it is opened, the file is moved to debug.txt.1,\ndeleting an older debug.txt.1 if it exists.\ndebug.txt is only moved if this setting is positive.");
+ gettext("Chat log level");
+ gettext("Minimal level of logging to be written to chat.");
+ 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("Random input");
+ gettext("Enable random user input (only used for testing).");
+ gettext("Mod channels");
+ gettext("Enable mod channels support.");
+ gettext("Mod Profiler");
+ gettext("Load the game profiler");
+ gettext("Load the game profiler to collect game profiling data.\nProvides a /profiler command to access the compiled profile.\nUseful for mod developers and server operators.");
+ gettext("Default report format");
+ gettext("The default format in which profiles are being saved,\nwhen calling `/profiler save [format]` without format.");
+ gettext("Report path");
+ gettext("The file path relative to your worldpath in which profiles will be saved to.");
+ gettext("Entity methods");
+ gettext("Instrument the methods of entities on registration.");
+ gettext("Active Block Modifiers");
+ 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("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("Builtin");
+ gettext("Instrument builtin.\nThis is usually only needed by core/builtin contributors");
+ gettext("Profiler");
+ gettext("Have the profiler instrument itself:\n* Instrument an empty function.\nThis estimates the overhead, that instrumentation is adding (+1 function call).\n* Instrument the sampler being used to update the statistics.");
+ gettext("Engine profiler");
+ gettext("Engine profiling data print interval");
+ gettext("Print the engine's profiling data in regular intervals (in seconds).\n0 = disable. Useful for developers.");
+ gettext("Advanced");
+ gettext("IPv6");
+ gettext("Enable IPv6 support (for both client and server).\nRequired for IPv6 connections to work at all.");
+ gettext("Ignore world errors");
+ gettext("If enabled, invalid world data won't cause the server to shut down.\nOnly enable this if you know what you are doing.");
+ gettext("Graphics");
+ gettext("Shader path");
+ gettext("Path to shader directory. If no path is defined, default location will be used.");
+ gettext("Video driver");
+ 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("Transparency Sorting Distance");
+ gettext("Distance in nodes at which transparency depth sorting is enabled\nUse this to limit the performance impact of transparency depth sorting");
+ gettext("VBO");
+ gettext("Enable vertex buffer objects.\nThis should greatly improve graphics performance.");
+ 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("Desynchronize block animation");
+ gettext("Whether node texture animations should be desynchronized per mapblock.");
+ gettext("Mesh cache");
+ gettext("Enables caching of facedir rotated meshes.");
+ gettext("Mapblock mesh generation delay");
+ gettext("Delay between mesh updates on the client in ms. Increasing this will slow\ndown the rate of mesh updates, thus reducing jitter on slower clients.");
+ gettext("Mapblock mesh generator's MapBlock cache size in MB");
+ gettext("Size of the MapBlock cache of the mesh generator. Increasing this will\nincrease the cache hit %, reducing the data being copied from the main\nthread, thus reducing jitter.");
+ gettext("Minimap scan height");
+ gettext("True = 256\nFalse = 128\nUsable to make minimap smoother on slower machines.");
+ gettext("World-aligned textures mode");
+ gettext("Textures on a node may be aligned either to the node or to the world.\nThe former mode suits better things like machines, furniture, etc., while\nthe latter makes stairs and microblocks fit surroundings better.\nHowever, as this possibility is new, thus may not be used by older servers,\nthis option allows enforcing it for certain node types. Note though that\nthat is considered EXPERIMENTAL and may not work properly.");
+ gettext("Autoscaling mode");
+ gettext("World-aligned textures may be scaled to span several nodes. However,\nthe server may not send the scale you want, especially if you use\na specially-designed texture pack; with this option, the client tries\nto determine the scale automatically basing on the texture size.\nSee also texture_min_size.\nWarning: This option is EXPERIMENTAL!");
+ gettext("Font");
+ gettext("Font bold by default");
+ gettext("Font italic by default");
+ gettext("Font shadow");
+ gettext("Shadow offset (in pixels) of the default font. If 0, then shadow will not be drawn.");
+ 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 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. 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 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. 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 path");
+ 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("Lighting");
+ gettext("Light curve low gradient");
+ gettext("Gradient of light curve at minimum light level.\nControls the contrast of the lowest light levels.");
+ gettext("Light curve high gradient");
+ gettext("Gradient of light curve at maximum light level.\nControls the contrast of the highest light levels.");
+ gettext("Light curve boost");
+ gettext("Strength of light curve boost.\nThe 3 'boost' parameters define a range of the light\ncurve that is boosted in brightness.");
+ gettext("Light curve boost center");
+ gettext("Center of light curve boost range.\nWhere 0.0 is minimum light level, 1.0 is maximum light level.");
+ gettext("Light curve boost spread");
+ gettext("Spread of light curve boost range.\nControls the width of the range to be boosted.\nStandard deviation of the light curve boost Gaussian.");
+ gettext("Networking");
+ 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 fetched on http://127.0.0.1:30000/metrics");
+ gettext("Maximum size of the out chat queue");
+ gettext("Maximum size of the out chat queue.\n0 to disable queueing and -1 to make the queue size unlimited.");
+ gettext("Mapblock unload timeout");
+ gettext("Timeout for client to remove unused map data from memory, in seconds.");
+ gettext("Mapblock limit");
+ gettext("Maximum number of mapblocks for client to be kept in memory.\nSet to -1 for unlimited amount.");
+ gettext("Show debug info");
+ gettext("Whether to show the client debug info (has the same effect as hitting F5).");
+ gettext("Maximum simultaneous block sends per client");
+ gettext("Maximum number of blocks that are simultaneously sent per client.\nThe maximum total count is calculated dynamically:\nmax_total = ceil((#clients + max_users) * per_client / 4)");
+ gettext("Delay in sending blocks after building");
+ gettext("To reduce lag, block transfers are slowed down when a player is building something.\nThis determines how long they are slowed down after placing or removing a node.");
+ gettext("Max. packets per iteration");
+ gettext("Maximum number of packets sent per send step, if you have a slow connection\ntry reducing it, but don't reduce it to a number below double of targeted\nclient number.");
+ gettext("Map Compression Level for Network Transfer");
+ 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("Server");
+ 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");
+ gettext("A message to be displayed to all clients when the server crashes.");
+ gettext("Ask to reconnect after crash");
+ gettext("Whether to ask clients to reconnect after a (Lua) crash.\nSet this to true if your server is set up to restart automatically.");
+ gettext("Server/Env Performance");
+ gettext("Dedicated server step");
+ gettext("Length of a server tick and the interval at which objects are generally updated over\nnetwork, stated in seconds.");
+ gettext("Unlimited player transfer distance");
+ gettext("Whether players are shown to clients without any range limit.\nDeprecated, use the setting player_transfer_distance instead.");
+ gettext("Player transfer distance");
+ gettext("Defines the maximal player transfer distance in blocks (0 = unlimited).");
+ gettext("Active object send range");
+ gettext("From how far clients know about objects, stated in mapblocks (16 nodes).\n\nSetting this larger than active_block_range will also cause the server\nto maintain active objects up to this distance in the direction the\nplayer is looking. (This can avoid mobs suddenly disappearing from view)");
+ gettext("Active block range");
+ gettext("The radius of the volume of blocks around every player that is subject to the\nactive block stuff, stated in mapblocks (16 nodes).\nIn active blocks objects are loaded and ABMs run.\nThis is also the minimum range in which active objects (mobs) are maintained.\nThis should be configured together with active_object_send_range_blocks.");
+ gettext("Max block send distance");
+ gettext("From how far blocks are sent to clients, stated in mapblocks (16 nodes).");
+ gettext("Maximum forceloaded blocks");
+ gettext("Maximum number of forceloaded mapblocks.");
+ gettext("Time send interval");
+ gettext("Interval of sending time of day to clients, stated in seconds.");
+ gettext("Map save interval");
+ gettext("Interval of saving important changes in the world, stated in seconds.");
+ gettext("Unload unused server data");
+ gettext("How long the server will wait before unloading unused mapblocks, stated in seconds.\nHigher value is smoother, but will use more RAM.");
+ gettext("Maximum objects per block");
+ gettext("Maximum number of statically stored objects in a block.");
+ gettext("Active block management interval");
+ gettext("Length of time between active block management cycles, stated in seconds.");
+ gettext("ABM interval");
+ gettext("Length of time between Active Block Modifier (ABM) execution cycles, stated in seconds.");
+ gettext("ABM time budget");
+ gettext("The time budget allowed for ABMs to execute on each step\n(as a fraction of the ABM Interval)");
+ gettext("NodeTimer interval");
+ gettext("Length of time between NodeTimer execution cycles, stated in seconds.");
+ gettext("Liquid loop max");
+ gettext("Max liquids processed per step.");
+ gettext("Liquid queue purge time");
+ gettext("The time (in seconds) that the liquids queue may grow beyond processing\ncapacity until an attempt is made to decrease its size by dumping old queue\nitems. A value of 0 disables the functionality.");
+ gettext("Liquid update tick");
+ gettext("Liquid update interval in seconds.");
+ gettext("Block send optimize distance");
+ gettext("At this distance the server will aggressively optimize which blocks are sent to\nclients.\nSmall values potentially improve performance a lot, at the expense of visible\nrendering glitches (some blocks will not be rendered under water and in caves,\nas well as sometimes on land).\nSetting this to a value greater than max_block_send_distance disables this\noptimization.\nStated in mapblocks (16 nodes).");
+ gettext("Server side occlusion culling");
+ gettext("If enabled the server will perform map block occlusion culling based on\non the eye position of the player. This can reduce the number of blocks\nsent to the client 50-80%. The client will not longer receive most invisible\nso that the utility of noclip mode is reduced.");
+ gettext("Mapgen");
gettext("Chunk size");
gettext("Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\nWARNING!: There is no benefit, and there are several dangers, in\nincreasing this value above 5.\nReducing this value increases cave and dungeon density.\nAltering this value is for special usage, leaving it unchanged is\nrecommended.");
gettext("Mapgen debug");
@@ -1123,11 +940,222 @@ fake_function() {
gettext("Maximum number of blocks to be queued that are to be generated.\nThis limit is enforced per player.");
gettext("Number of emerge threads");
gettext("Number of emerge threads to use.\nValue 0:\n- Automatic selection. The number of emerge threads will be\n- 'number of processors - 2', with a lower limit of 1.\nAny other value:\n- Specifies the number of emerge threads, with a lower limit of 1.\nWARNING: Increasing the number of emerge threads increases engine mapgen\nspeed, but this may harm game performance by interfering with other\nprocesses, especially in singleplayer and/or when running Lua code in\n'on_generated'. For many users the optimum setting may be '1'.");
- gettext("Online Content Repository");
- gettext("ContentDB URL");
- gettext("The URL for the content repository");
- gettext("ContentDB Flag Blacklist");
- gettext("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',\nas defined by the Free Software Foundation.\nYou can also specify content ratings.\nThese flags are independent from Minetest versions,\nso see a full list at https://content.minetest.net/help/content_flags/");
- gettext("ContentDB Max Concurrent Downloads");
- gettext("Maximum number of concurrent downloads. Downloads exceeding this limit will be queued.\nThis should be lower than curl_parallel_limit.");
+ gettext("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 a file download (e.g. a mod download) may take, stated in milliseconds.");
+ gettext("Misc");
+ 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("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("Map directory");
+ gettext("World directory (everything in the world is stored here).\nNot needed if starting from the main menu.");
+ gettext("Synchronous SQLite");
+ gettext("See https://www.sqlite.org/pragma.html#pragma_synchronous");
+ gettext("Map Compression Level for Disk Storage");
+ 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("Connect to external media server");
+ gettext("Enable usage of remote media server (if provided by server).\nRemote servers offer a significantly faster way to download media (e.g. textures)\nwhen connecting to the server.");
+ gettext("Serverlist file");
+ gettext("File in client/serverlist/ that contains your favorite servers displayed in the\nMultiplayer Tab.");
+ gettext("Gamepads");
+ gettext("Enable joysticks");
+ gettext("Enable joysticks. Requires a restart to take effect");
+ gettext("Joystick ID");
+ gettext("The identifier of the joystick to use");
+ gettext("Joystick type");
+ 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 dead zone");
+ gettext("The dead zone of the joystick");
+ gettext("Joystick frustum sensitivity");
+ gettext("The sensitivity of the joystick axes for moving the\nin-game view frustum around.");
+ gettext("Temporary Settings");
+ gettext("Texture path");
+ gettext("Path to texture directory. All textures are first searched from here.");
+ gettext("Minimap");
+ gettext("Enables minimap.");
+ gettext("Round minimap");
+ gettext("Shape of the minimap. Enabled = round, disabled = square.");
+ 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("Default game");
+ gettext("Default game when creating a new world.\nThis will be overridden when creating a world from the main menu.");
+ gettext("Damage");
+ gettext("Enable players getting damage and dying.");
+ gettext("Creative");
+ gettext("Enable creative mode for all players");
+ gettext("Player versus player");
+ gettext("Whether to allow players to damage and kill each other.");
+ gettext("Flying");
+ gettext("Player is able to fly without being affected by gravity.\nThis requires the \"fly\" privilege on the server.");
+ 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 \"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("Continuous forward");
+ gettext("Continuous forward movement, toggled by autoforward key.\nPress the autoforward key again or the backwards movement to disable.");
+ gettext("Formspec Default Background Opacity");
+ gettext("Formspec default background opacity (between 0 and 255).");
+ gettext("Formspec Default Background Color");
+ gettext("Formspec default background color (R,G,B).");
+ gettext("Show technical names");
+ gettext("Whether to show technical names.\nAffects mods and texture packs in the Content and Select Mods menus, as well as\nsetting names in All Settings.\nControlled by the checkbox in the \"All settings\" menu.");
+ gettext("Sound");
+ gettext("Enables the sound system.\nIf disabled, this completely disables all sounds everywhere and the in-game\nsound controls will be non-functional.\nChanging this setting requires a restart.");
+ gettext("Forward key");
+ gettext("Key for moving the player forward.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Backward key");
+ gettext("Key for moving the player backward.\nWill also disable autoforward, when active.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Left key");
+ gettext("Key for moving the player left.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Right key");
+ gettext("Key for moving the player right.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Jump key");
+ gettext("Key for jumping.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Sneak key");
+ gettext("Key for sneaking.\nAlso used for climbing down and descending in water if aux1_descends is disabled.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Dig key");
+ gettext("Key for digging.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Place key");
+ 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("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");
+ gettext("Command key");
+ gettext("Key for opening the chat window to type commands.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Command key");
+ gettext("Key for opening the chat window to type local commands.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Range select key");
+ gettext("Key for toggling unlimited view range.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Fly key");
+ gettext("Key for toggling flying.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Pitch move key");
+ gettext("Key for toggling pitch move mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Fast key");
+ gettext("Key for toggling fast mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Noclip key");
+ gettext("Key for toggling noclip mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar next key");
+ gettext("Key for selecting the next item in the hotbar.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar previous key");
+ gettext("Key for selecting the previous item in the hotbar.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Mute key");
+ gettext("Key for muting the game.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Inc. volume key");
+ gettext("Key for increasing the volume.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Dec. volume key");
+ gettext("Key for decreasing the volume.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Automatic forward key");
+ gettext("Key for toggling autoforward.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Cinematic mode key");
+ gettext("Key for toggling cinematic mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Minimap key");
+ gettext("Key for toggling display of minimap.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Screenshot");
+ gettext("Key for taking screenshots.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Drop item key");
+ gettext("Key for dropping the currently selected item.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("View zoom key");
+ gettext("Key to use view zoom when possible.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 1 key");
+ gettext("Key for selecting the first hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 2 key");
+ gettext("Key for selecting the second hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 3 key");
+ gettext("Key for selecting the third hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 4 key");
+ gettext("Key for selecting the fourth hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 5 key");
+ gettext("Key for selecting the fifth hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 6 key");
+ gettext("Key for selecting the sixth hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 7 key");
+ gettext("Key for selecting the seventh hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 8 key");
+ gettext("Key for selecting the eighth hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 9 key");
+ gettext("Key for selecting the ninth hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 10 key");
+ gettext("Key for selecting the tenth hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 11 key");
+ gettext("Key for selecting the 11th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 12 key");
+ gettext("Key for selecting the 12th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 13 key");
+ gettext("Key for selecting the 13th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 14 key");
+ gettext("Key for selecting the 14th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 15 key");
+ gettext("Key for selecting the 15th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 16 key");
+ gettext("Key for selecting the 16th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 17 key");
+ gettext("Key for selecting the 17th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 18 key");
+ gettext("Key for selecting the 18th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 19 key");
+ gettext("Key for selecting the 19th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 20 key");
+ gettext("Key for selecting the 20th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 21 key");
+ gettext("Key for selecting the 21st hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 22 key");
+ gettext("Key for selecting the 22nd hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 23 key");
+ gettext("Key for selecting the 23rd hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 24 key");
+ gettext("Key for selecting the 24th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 25 key");
+ gettext("Key for selecting the 25th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 26 key");
+ gettext("Key for selecting the 26th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 27 key");
+ gettext("Key for selecting the 27th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 28 key");
+ gettext("Key for selecting the 28th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 29 key");
+ gettext("Key for selecting the 29th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 30 key");
+ gettext("Key for selecting the 30th hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 31 key");
+ gettext("Key for selecting the 31st hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Hotbar slot 32 key");
+ gettext("Key for selecting the 32nd hotbar slot.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("HUD toggle key");
+ gettext("Key for toggling the display of the HUD.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Chat toggle key");
+ gettext("Key for toggling the display of chat.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Large chat console key");
+ gettext("Key for toggling the display of the large chat console.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Fog toggle key");
+ gettext("Key for toggling the display of fog.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Camera update toggle key");
+ gettext("Key for toggling the camera update. Only used for development\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Debug info toggle key");
+ gettext("Key for toggling the display of debug info.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Profiler toggle key");
+ gettext("Key for toggling the display of the profiler. Used for development.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Toggle camera mode key");
+ gettext("Key for switching between first- and third-person camera.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("View range increase key");
+ gettext("Key for increasing the viewing range.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("View range decrease key");
+ gettext("Key for decreasing the viewing range.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
}
diff --git a/src/skyparams.h b/src/skyparams.h
index f7f694427..07068634b 100644
--- a/src/skyparams.h
+++ b/src/skyparams.h
@@ -66,6 +66,7 @@ struct StarParams
u32 count;
video::SColor starcolor;
f32 scale;
+ f32 day_opacity;
};
struct CloudParams
@@ -141,6 +142,7 @@ public:
stars.count = 1000;
stars.starcolor = video::SColor(105, 235, 235, 255);
stars.scale = 1;
+ stars.day_opacity = 0;
return stars;
}
diff --git a/src/sound.h b/src/sound.h
index 6f7b0a1af..801c552a9 100644
--- a/src/sound.h
+++ b/src/sound.h
@@ -24,30 +24,28 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/serialize.h"
#include "irrlichttypes_bloated.h"
+// This class describes the basic sound information for playback.
+// Positional handling is done separately.
+
struct SimpleSoundSpec
{
SimpleSoundSpec(const std::string &name = "", float gain = 1.0f,
- float fade = 0.0f, float pitch = 1.0f) :
- name(name),
- gain(gain), fade(fade), pitch(pitch)
+ bool loop = false, float fade = 0.0f, float pitch = 1.0f) :
+ name(name), gain(gain), fade(fade), pitch(pitch), loop(loop)
{
}
bool exists() const { return !name.empty(); }
- // Take cf_version from ContentFeatures::serialize to
- // keep in sync with item definitions
- void serialize(std::ostream &os, u8 cf_version) const
+ void serialize(std::ostream &os, u16 protocol_version) const
{
os << serializeString16(name);
writeF32(os, gain);
writeF32(os, pitch);
writeF32(os, fade);
- // if (cf_version < ?)
- // return;
}
- void deSerialize(std::istream &is, u8 cf_version)
+ void deSerialize(std::istream &is, u16 protocol_version)
{
name = deSerializeString16(is);
gain = readF32(is);
@@ -59,4 +57,13 @@ struct SimpleSoundSpec
float gain = 1.0f;
float fade = 0.0f;
float pitch = 1.0f;
+ bool loop = false;
+};
+
+
+// The order must not be changed. This is sent over the network.
+enum class SoundLocation : u8 {
+ Local,
+ Position,
+ Object
};
diff --git a/src/staticobject.cpp b/src/staticobject.cpp
index 1160ec68f..f92995d0b 100644
--- a/src/staticobject.cpp
+++ b/src/staticobject.cpp
@@ -28,12 +28,12 @@ StaticObject::StaticObject(const ServerActiveObject *s_obj, const v3f &pos_):
s_obj->getStaticData(&data);
}
-void StaticObject::serialize(std::ostream &os)
+void StaticObject::serialize(std::ostream &os) const
{
// type
writeU8(os, type);
// pos
- writeV3F1000(os, pos);
+ writeV3F1000(os, clampToF1000(pos));
// data
os<<serializeString16(data);
}
diff --git a/src/staticobject.h b/src/staticobject.h
index 6fb486193..03cd23cc8 100644
--- a/src/staticobject.h
+++ b/src/staticobject.h
@@ -37,7 +37,7 @@ struct StaticObject
StaticObject() = default;
StaticObject(const ServerActiveObject *s_obj, const v3f &pos_);
- void serialize(std::ostream &os);
+ void serialize(std::ostream &os) const;
void deSerialize(std::istream &is, u8 version);
};
diff --git a/src/terminal_chat_console.cpp b/src/terminal_chat_console.cpp
index 9e3d33736..b12261c3b 100644
--- a/src/terminal_chat_console.cpp
+++ b/src/terminal_chat_console.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 <inttypes.h>
#include "config.h"
#if USE_CURSES
#include "version.h"
@@ -398,7 +399,7 @@ void TerminalChatConsole::step(int ch)
minutes = (float)minutes / 1000 * 60;
if (m_game_time)
- printw(" | Game %d Time of day %02d:%02d ",
+ printw(" | Game %" PRIu64 " Time of day %02d:%02d ",
m_game_time, hours, minutes);
// draw text
diff --git a/src/tileanimation.cpp b/src/tileanimation.cpp
index 930fd9473..a79a36e57 100644
--- a/src/tileanimation.cpp
+++ b/src/tileanimation.cpp
@@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "tileanimation.h"
#include "util/serialize.h"
-void TileAnimationParams::serialize(std::ostream &os, u8 tiledef_version) const
+void TileAnimationParams::serialize(std::ostream &os, u16 protocol_version) const
{
writeU8(os, type);
if (type == TAT_VERTICAL_FRAMES) {
@@ -33,7 +33,7 @@ void TileAnimationParams::serialize(std::ostream &os, u8 tiledef_version) const
}
}
-void TileAnimationParams::deSerialize(std::istream &is, u8 tiledef_version)
+void TileAnimationParams::deSerialize(std::istream &is, u16 protocol_version)
{
type = (TileAnimationType) readU8(is);
diff --git a/src/tileanimation.h b/src/tileanimation.h
index 7e3285ed7..0449de0b8 100644
--- a/src/tileanimation.h
+++ b/src/tileanimation.h
@@ -50,8 +50,8 @@ struct TileAnimationParams
} sheet_2d;
};
- void serialize(std::ostream &os, u8 tiledef_version) const;
- void deSerialize(std::istream &is, u8 tiledef_version);
+ void serialize(std::ostream &os, u16 protocol_version) const;
+ void deSerialize(std::istream &is, u16 protocol_version);
void determineParams(v2u32 texture_size, int *frame_count, int *frame_length_ms,
v2u32 *frame_size) const;
void getTextureModifer(std::ostream &os, v2u32 texture_size, int frame) const;
diff --git a/src/tool.cpp b/src/tool.cpp
index 075c6b3c5..821ddf07d 100644
--- a/src/tool.cpp
+++ b/src/tool.cpp
@@ -183,7 +183,7 @@ void ToolCapabilities::deserializeJson(std::istream &is)
}
}
-static u32 calculateResultWear(const u32 uses, const u16 initial_wear)
+u32 calculateResultWear(const u32 uses, const u16 initial_wear)
{
if (uses == 0) {
// Trivial case: Infinite uses
diff --git a/src/tool.h b/src/tool.h
index 8409f59af..c2444a834 100644
--- a/src/tool.h
+++ b/src/tool.h
@@ -142,4 +142,5 @@ PunchDamageResult getPunchDamage(
u16 initial_wear = 0
);
+u32 calculateResultWear(const u32 uses, const u16 initial_wear);
f32 getToolRange(const ItemDefinition &def_selected, const ItemDefinition &def_hand);
diff --git a/src/translation.cpp b/src/translation.cpp
index 1e43b0894..eabd0ec0a 100644
--- a/src/translation.cpp
+++ b/src/translation.cpp
@@ -1,6 +1,6 @@
/*
Minetest
-Copyright (C) 2017 Nore, Nathanaël Courant <nore@mesecons.net>
+Copyright (C) 2017 Nore, Nathanaëlle Courant <nore@mesecons.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/translation.h b/src/translation.h
index f1a336fca..e3f5b21ea 100644
--- a/src/translation.h
+++ b/src/translation.h
@@ -1,6 +1,6 @@
/*
Minetest
-Copyright (C) 2017 Nore, Nathanaël Courant <nore@mesecons.net>
+Copyright (C) 2017 Nore, Nathanaëlle Courant <nore@mesecons.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt
index 92f31ecac..84f769e87 100644
--- a/src/unittest/CMakeLists.txt
+++ b/src/unittest/CMakeLists.txt
@@ -11,6 +11,7 @@ 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_lua.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_map.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_map_settings_manager.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_mapnode.cpp
diff --git a/src/unittest/test.cpp b/src/unittest/test.cpp
index f223d567e..af30c209d 100644
--- a/src/unittest/test.cpp
+++ b/src/unittest/test.cpp
@@ -360,7 +360,7 @@ struct TestMapBlock: public TestBase
MapNode node;
bool position_valid;
- core::list<v3s16> validity_exceptions;
+ std::list<v3s16> validity_exceptions;
TC()
{
@@ -371,7 +371,7 @@ struct TestMapBlock: public TestBase
{
//return position_valid ^ (p==position_valid_exception);
bool exception = false;
- for(core::list<v3s16>::Iterator i=validity_exceptions.begin();
+ for(std::list<v3s16>::iterator i=validity_exceptions.begin();
i != validity_exceptions.end(); i++)
{
if(p == *i)
@@ -533,7 +533,7 @@ struct TestMapBlock: public TestBase
parent.node.setContent(CONTENT_AIR);
parent.node.setLight(LIGHTBANK_DAY, LIGHT_SUN);
parent.node.setLight(LIGHTBANK_NIGHT, 0);
- core::map<v3s16, bool> light_sources;
+ std::map<v3s16, bool> light_sources;
// The bottom block is invalid, because we have a shadowing node
UASSERT(b.propagateSunlight(light_sources) == false);
UASSERT(b.getNode(v3s16(1,4,0)).getLight(LIGHTBANK_DAY) == LIGHT_SUN);
@@ -560,7 +560,7 @@ struct TestMapBlock: public TestBase
parent.position_valid = true;
b.setIsUnderground(true);
parent.node.setLight(LIGHTBANK_DAY, LIGHT_MAX/2);
- core::map<v3s16, bool> light_sources;
+ std::map<v3s16, bool> light_sources;
// The block below should be valid because there shouldn't be
// sunlight in there either
UASSERT(b.propagateSunlight(light_sources, true) == true);
@@ -601,7 +601,7 @@ struct TestMapBlock: public TestBase
}
// Lighting value for the valid nodes
parent.node.setLight(LIGHTBANK_DAY, LIGHT_MAX/2);
- core::map<v3s16, bool> light_sources;
+ std::map<v3s16, bool> light_sources;
// Bottom block is not valid
UASSERT(b.propagateSunlight(light_sources) == false);
}
diff --git a/src/unittest/test.h b/src/unittest/test.h
index 1102f6d33..79ea09471 100644
--- a/src/unittest/test.h
+++ b/src/unittest/test.h
@@ -80,7 +80,7 @@ class TestFailedException : public std::exception {
<< #expected << std::endl \
<< " at " << fs::GetFilenameFromPath(__FILE__) << ":" \
<< __LINE__ << std::endl \
- << " actual: " << a << std::endl << " expected: " \
+ << " actual : " << a << std::endl << " expected: " \
<< e << std::endl; \
throw TestFailedException(); \
} \
diff --git a/src/unittest/test_address.cpp b/src/unittest/test_address.cpp
index 35d4effb6..f46135577 100644
--- a/src/unittest/test_address.cpp
+++ b/src/unittest/test_address.cpp
@@ -56,7 +56,7 @@ void TestAddress::testIsLocalhost()
UASSERT(!Address(172, 45, 37, 68, 0).isLocalhost());
// v6
- std::unique_ptr<IPv6AddressBytes> ipv6Bytes(new IPv6AddressBytes());
+ auto ipv6Bytes = std::make_unique<IPv6AddressBytes>();
std::vector<u8> ipv6RawAddr = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
memcpy(ipv6Bytes->bytes, &ipv6RawAddr[0], 16);
UASSERT(Address(ipv6Bytes.get(), 0).isLocalhost())
diff --git a/src/unittest/test_eventmanager.cpp b/src/unittest/test_eventmanager.cpp
index bb0e59336..fec57f9fe 100644
--- a/src/unittest/test_eventmanager.cpp
+++ b/src/unittest/test_eventmanager.cpp
@@ -82,7 +82,7 @@ void TestEventManager::testDeregister()
void TestEventManager::testRealEvent()
{
EventManager ev;
- std::unique_ptr<EventManagerTest> emt(new EventManagerTest());
+ auto emt = std::make_unique<EventManagerTest>();
ev.reg(MtEvent::PLAYER_REGAIN_GROUND, EventManagerTest::eventTest, emt.get());
// Put event & verify event value
@@ -93,7 +93,7 @@ void TestEventManager::testRealEvent()
void TestEventManager::testRealEventAfterDereg()
{
EventManager ev;
- std::unique_ptr<EventManagerTest> emt(new EventManagerTest());
+ auto emt = std::make_unique<EventManagerTest>();
ev.reg(MtEvent::PLAYER_REGAIN_GROUND, EventManagerTest::eventTest, emt.get());
// Put event & verify event value
diff --git a/src/unittest/test_irrptr.cpp b/src/unittest/test_irrptr.cpp
index 3484f1514..2fb7cfcd6 100644
--- a/src/unittest/test_irrptr.cpp
+++ b/src/unittest/test_irrptr.cpp
@@ -93,7 +93,9 @@ void TestIrrPtr::testRefCounting()
#if defined(__clang__)
#pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wself-assign-overloaded"
+ #if __clang_major__ >= 7
+ #pragma GCC diagnostic ignored "-Wself-assign-overloaded"
+ #endif
#pragma GCC diagnostic ignored "-Wself-move"
#endif
diff --git a/src/unittest/test_lua.cpp b/src/unittest/test_lua.cpp
new file mode 100644
index 000000000..fc8f895af
--- /dev/null
+++ b/src/unittest/test_lua.cpp
@@ -0,0 +1,79 @@
+/*
+Minetest
+Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+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.
+*/
+
+#include "test.h"
+
+extern "C" {
+#include <lua.h>
+#include <lauxlib.h>
+}
+
+class TestLua : public TestBase
+{
+public:
+ TestLua() { TestManager::registerTestModule(this); }
+ const char *getName() { return "TestLua"; }
+
+ void runTests(IGameDef *gamedef);
+
+ void testLuaDestructors();
+};
+
+static TestLua g_test_instance;
+
+void TestLua::runTests(IGameDef *gamedef)
+{
+ TEST(testLuaDestructors);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+namespace
+{
+
+ class DestructorDetector {
+ bool *did_destruct;
+ public:
+ DestructorDetector(bool *did_destruct) : did_destruct(did_destruct)
+ {
+ *did_destruct = false;
+ }
+ ~DestructorDetector()
+ {
+ *did_destruct = true;
+ }
+ };
+
+}
+
+void TestLua::testLuaDestructors()
+{
+ bool did_destruct = false;
+
+ lua_State *L = luaL_newstate();
+ lua_cpcall(L, [](lua_State *L) -> int {
+ DestructorDetector d(reinterpret_cast<bool*>(lua_touserdata(L, 1)));
+ luaL_error(L, "error");
+ return 0;
+ }, &did_destruct);
+ lua_close(L);
+
+ UASSERT(did_destruct);
+}
diff --git a/src/unittest/test_nodedef.cpp b/src/unittest/test_nodedef.cpp
index 66ca0ccbc..acf669783 100644
--- a/src/unittest/test_nodedef.cpp
+++ b/src/unittest/test_nodedef.cpp
@@ -60,7 +60,7 @@ void TestNodeDef::testContentFeaturesSerialization()
std::istringstream is(os.str(), std::ios::binary);
ContentFeatures f2;
- f2.deSerialize(is);
+ f2.deSerialize(is, LATEST_PROTOCOL_VERSION);
UASSERT(f.walkable == f2.walkable);
UASSERT(f.node_box.type == f2.node_box.type);
diff --git a/src/unittest/test_noise.cpp b/src/unittest/test_noise.cpp
index 421f3b66e..12b155f46 100644
--- a/src/unittest/test_noise.cpp
+++ b/src/unittest/test_noise.cpp
@@ -30,8 +30,14 @@ public:
void runTests(IGameDef *gamedef);
+ void testNoise2dAtOriginWithZeroSeed();
+ void testNoise2dWithMaxSeed();
+ void testNoise2dWithFunPrimes();
void testNoise2dPoint();
void testNoise2dBulk();
+ void testNoise3dAtOriginWithZeroSeed();
+ void testNoise3dWithMaxSeed();
+ void testNoise3dWithFunPrimes();
void testNoise3dPoint();
void testNoise3dBulk();
void testNoiseInvalidParams();
@@ -44,8 +50,14 @@ static TestNoise g_test_instance;
void TestNoise::runTests(IGameDef *gamedef)
{
+ TEST(testNoise2dAtOriginWithZeroSeed);
+ TEST(testNoise2dWithMaxSeed);
+ TEST(testNoise2dWithFunPrimes);
TEST(testNoise2dPoint);
TEST(testNoise2dBulk);
+ TEST(testNoise3dAtOriginWithZeroSeed);
+ TEST(testNoise3dWithMaxSeed);
+ TEST(testNoise3dWithFunPrimes);
TEST(testNoise3dPoint);
TEST(testNoise3dBulk);
TEST(testNoiseInvalidParams);
@@ -53,6 +65,27 @@ void TestNoise::runTests(IGameDef *gamedef)
////////////////////////////////////////////////////////////////////////////////
+void TestNoise::testNoise2dAtOriginWithZeroSeed()
+{
+ float actual{ noise2d(0, 0, 0) };
+ constexpr float expected{ -0.281791f };
+ UASSERT(std::fabs(actual - expected) <= 0.00001);
+}
+
+void TestNoise::testNoise2dWithMaxSeed()
+{
+ float actual{ noise2d(4096, 4096, 2147483647) };
+ constexpr float expected{ 0.950606f };
+ UASSERT(std::fabs(actual - expected) <= 0.00001);
+}
+
+void TestNoise::testNoise2dWithFunPrimes()
+{
+ float actual{ noise2d(-3947, -2333, 7027) };
+ constexpr float expected{ -0.294907f };
+ UASSERT(std::fabs(actual - expected) <= 0.00001);
+}
+
void TestNoise::testNoise2dPoint()
{
NoiseParams np_normal(20, 40, v3f(50, 50, 50), 9, 5, 0.6, 2.0);
@@ -79,6 +112,27 @@ void TestNoise::testNoise2dBulk()
}
}
+void TestNoise::testNoise3dAtOriginWithZeroSeed()
+{
+ float actual{ noise2d(0, 0, 0) };
+ constexpr float expected{ -0.281791f };
+ UASSERT(std::fabs(actual - expected) <= 0.00001);
+}
+
+void TestNoise::testNoise3dWithMaxSeed()
+{
+ float actual{ noise3d(4096, 4096, 4096, 2147483647) };
+ constexpr float expected{ -0.775243f };
+ UASSERT(std::fabs(actual - expected) <= 0.00001);
+}
+
+void TestNoise::testNoise3dWithFunPrimes()
+{
+ float actual{ noise2d(3903, -1723, 7411) };
+ constexpr float expected{ 0.989124f };
+ UASSERT(std::fabs(actual - expected) <= 0.00001);
+}
+
void TestNoise::testNoise3dPoint()
{
NoiseParams np_normal(20, 40, v3f(50, 50, 50), 9, 5, 0.6, 2.0);
diff --git a/src/unittest/test_serialization.cpp b/src/unittest/test_serialization.cpp
index 660d77d02..ff6b57507 100644
--- a/src/unittest/test_serialization.cpp
+++ b/src/unittest/test_serialization.cpp
@@ -169,23 +169,50 @@ void TestSerialization::testDeSerializeLongString()
void TestSerialization::testSerializeJsonString()
{
+ std::istringstream is(std::ios::binary);
+ const auto reset_is = [&] (const std::string &s) {
+ is.clear();
+ is.str(s);
+ };
+ const auto assert_at_eof = [] (std::istream &is) {
+ is.get();
+ UASSERT(is.eof());
+ };
+
// Test blank string
- UASSERT(serializeJsonString("") == "\"\"");
+ UASSERTEQ(std::string, serializeJsonString(""), "\"\"");
+ reset_is("\"\"");
+ UASSERTEQ(std::string, deSerializeJsonString(is), "");
+ assert_at_eof(is);
// Test basic string
- UASSERT(serializeJsonString("Hello world!") == "\"Hello world!\"");
+ UASSERTEQ(std::string, serializeJsonString("Hello world!"), "\"Hello world!\"");
+ reset_is("\"Hello world!\"");
+ UASSERTEQ(std::string, deSerializeJsonString(is), "Hello world!");
+ assert_at_eof(is);
+
+ // Test optional serialization
+ const std::pair<const char*, const char*> test_pairs[] = {
+ { "abc", "abc" },
+ { "x y z", "\"x y z\"" },
+ { "\"", "\"\\\"\"" },
+ };
+ for (auto it : test_pairs) {
+ UASSERTEQ(std::string, serializeJsonStringIfNeeded(it.first), it.second);
+ reset_is(it.second);
+ UASSERTEQ(std::string, deSerializeJsonStringIfNeeded(is), it.first);
+ assert_at_eof(is);
+ }
- // MSVC fails when directly using "\\\\"
- std::string backslash = "\\";
- UASSERT(serializeJsonString(teststring2) ==
- mkstr("\"") +
+ // Test all byte values
+ const std::string bs = "\\"; // MSVC fails when directly using "\\\\"
+ const std::string expected = mkstr("\"") +
"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007" +
"\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f" +
"\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017" +
"\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f" +
- " !\\\"" + teststring2.substr(0x23, 0x2f-0x23) +
- "\\/" + teststring2.substr(0x30, 0x5c-0x30) +
- backslash + backslash + teststring2.substr(0x5d, 0x7f-0x5d) + "\\u007f" +
+ " !\\\"" + teststring2.substr(0x23, 0x5c-0x23) +
+ bs + bs + teststring2.substr(0x5d, 0x7f-0x5d) + "\\u007f" +
"\\u0080\\u0081\\u0082\\u0083\\u0084\\u0085\\u0086\\u0087" +
"\\u0088\\u0089\\u008a\\u008b\\u008c\\u008d\\u008e\\u008f" +
"\\u0090\\u0091\\u0092\\u0093\\u0094\\u0095\\u0096\\u0097" +
@@ -202,14 +229,31 @@ void TestSerialization::testSerializeJsonString()
"\\u00e8\\u00e9\\u00ea\\u00eb\\u00ec\\u00ed\\u00ee\\u00ef" +
"\\u00f0\\u00f1\\u00f2\\u00f3\\u00f4\\u00f5\\u00f6\\u00f7" +
"\\u00f8\\u00f9\\u00fa\\u00fb\\u00fc\\u00fd\\u00fe\\u00ff" +
- "\"");
-
- // Test deserialize
- std::istringstream is(serializeJsonString(teststring2), std::ios::binary);
- UASSERT(deSerializeJsonString(is) == teststring2);
- UASSERT(!is.eof());
- is.get();
- UASSERT(is.eof());
+ "\"";
+ std::string serialized = serializeJsonString(teststring2);
+ UASSERTEQ(std::string, serialized, expected);
+
+ reset_is(serialized);
+ UASSERTEQ(std::string, deSerializeJsonString(is), teststring2);
+ UASSERT(!is.eof()); // should have stopped at " so eof must not be set yet
+ assert_at_eof(is);
+
+ // Test that deserialization leaves rest of stream alone
+ std::string tmp;
+ reset_is("\"foo\"bar");
+ UASSERTEQ(std::string, deSerializeJsonString(is), "foo");
+ std::getline(is, tmp, '\0');
+ UASSERTEQ(std::string, tmp, "bar");
+
+ reset_is("\"x y z\"bar");
+ UASSERTEQ(std::string, deSerializeJsonStringIfNeeded(is), "x y z");
+ std::getline(is, tmp, '\0');
+ UASSERTEQ(std::string, tmp, "bar");
+
+ reset_is("foo bar");
+ UASSERTEQ(std::string, deSerializeJsonStringIfNeeded(is), "foo");
+ std::getline(is, tmp, '\0');
+ UASSERTEQ(std::string, tmp, " bar");
}
diff --git a/src/unittest/test_server_shutdown_state.cpp b/src/unittest/test_server_shutdown_state.cpp
index fbb76ff6a..50305e725 100644
--- a/src/unittest/test_server_shutdown_state.cpp
+++ b/src/unittest/test_server_shutdown_state.cpp
@@ -26,12 +26,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class FakeServer : public Server
{
public:
- // clang-format off
FakeServer() : Server("fakeworld", SubgameSpec("fakespec", "fakespec"), true,
Address(), true, nullptr)
{
}
- // clang-format on
private:
void SendChatMessage(session_t peer_id, const ChatMessage &message)
@@ -95,7 +93,7 @@ void TestServerShutdownState::testTrigger()
void TestServerShutdownState::testTick()
{
- std::unique_ptr<FakeServer> fakeServer(new FakeServer());
+ auto fakeServer = std::make_unique<FakeServer>();
Server::ShutdownState ss;
ss.trigger(28.0f, "testtrigger", true);
ss.tick(0.0f, fakeServer.get());
diff --git a/src/unittest/test_servermodmanager.cpp b/src/unittest/test_servermodmanager.cpp
index 4c473d8b5..91bf5d3a4 100644
--- a/src/unittest/test_servermodmanager.cpp
+++ b/src/unittest/test_servermodmanager.cpp
@@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "server/mods.h"
#include "settings.h"
#include "test_config.h"
+#include "util/string.h"
class TestServerModManager : public TestBase
{
@@ -190,4 +191,11 @@ void TestServerModManager::testGetModMediaPaths()
std::vector<std::string> result;
sm.getModsMediaPaths(result);
UASSERTEQ(bool, result.empty(), false);
+
+ // Test media overriding:
+ // unittests depends on basenodes to override default_dirt.png,
+ // thus the unittests texture path must come first in the returned media paths to take priority
+ auto it = std::find(result.begin(), result.end(), sm.getModSpec("unittests")->path + DIR_DELIM + "textures");
+ UASSERT(it != result.end());
+ UASSERT(std::find(++it, result.end(), sm.getModSpec("basenodes")->path + DIR_DELIM + "textures") != result.end());
}
diff --git a/src/unittest/test_utilities.cpp b/src/unittest/test_utilities.cpp
index 743fe4462..98a143d1f 100644
--- a/src/unittest/test_utilities.cpp
+++ b/src/unittest/test_utilities.cpp
@@ -43,7 +43,6 @@ public:
void testPadString();
void testStartsWith();
void testStrEqual();
- void testStringTrim();
void testStrToIntConversion();
void testStringReplace();
void testStringAllowed();
@@ -58,6 +57,7 @@ public:
void testStringJoin();
void testEulerConversion();
void testBase64();
+ void testSanitizeDirName();
};
static TestUtilities g_test_instance;
@@ -75,7 +75,6 @@ void TestUtilities::runTests(IGameDef *gamedef)
TEST(testPadString);
TEST(testStartsWith);
TEST(testStrEqual);
- TEST(testStringTrim);
TEST(testStrToIntConversion);
TEST(testStringReplace);
TEST(testStringAllowed);
@@ -90,6 +89,7 @@ void TestUtilities::runTests(IGameDef *gamedef)
TEST(testStringJoin);
TEST(testEulerConversion);
TEST(testBase64);
+ TEST(testSanitizeDirName);
}
////////////////////////////////////////////////////////////////////////////////
@@ -190,6 +190,8 @@ void TestUtilities::testTrim()
UASSERT(trim("dirt_with_grass") == "dirt_with_grass");
UASSERT(trim("\n \t\r Foo bAR \r\n\t\t ") == "Foo bAR");
UASSERT(trim("\n \t\r \r\n\t\t ") == "");
+ UASSERT(trim(" a") == "a");
+ UASSERT(trim("a ") == "a");
}
@@ -255,15 +257,6 @@ void TestUtilities::testStrEqual()
}
-void TestUtilities::testStringTrim()
-{
- UASSERT(trim(" a") == "a");
- UASSERT(trim(" a ") == "a");
- UASSERT(trim("a ") == "a");
- UASSERT(trim("") == "");
-}
-
-
void TestUtilities::testStrToIntConversion()
{
UASSERT(mystoi("123", 0, 1000) == 123);
@@ -630,3 +623,16 @@ void TestUtilities::testBase64()
UASSERT(base64_is_valid("AAAA=A") == false);
UASSERT(base64_is_valid("AAAAA=A") == false);
}
+
+
+void TestUtilities::testSanitizeDirName()
+{
+ UASSERT(sanitizeDirName("a", "~") == "a");
+ UASSERT(sanitizeDirName(" ", "~") == "__");
+ UASSERT(sanitizeDirName(" a ", "~") == "_a_");
+ UASSERT(sanitizeDirName("COM1", "~") == "~COM1");
+ UASSERT(sanitizeDirName("COM1", ":") == "_COM1");
+ UASSERT(sanitizeDirName("cOm\u00B2", "~") == "~cOm\u00B2");
+ UASSERT(sanitizeDirName("cOnIn$", "~") == "~cOnIn$");
+ UASSERT(sanitizeDirName(" cOnIn$ ", "~") == "_cOnIn$_");
+}
diff --git a/src/unittest/test_voxelarea.cpp b/src/unittest/test_voxelarea.cpp
index 9826d2ee7..a79c9778e 100644
--- a/src/unittest/test_voxelarea.cpp
+++ b/src/unittest/test_voxelarea.cpp
@@ -120,7 +120,7 @@ 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));
+ VoxelArea v2(v3s16(32493, -32507, 32752), v3s16(32508, -32492, 32767));
UASSERT(v2.getExtent() == v3s16(16, 16, 16));
}
@@ -129,7 +129,7 @@ void TestVoxelArea::test_volume()
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));
+ VoxelArea v2(v3s16(32493, -32507, 32752), v3s16(32508, -32492, 32767));
UASSERTEQ(s32, v2.getVolume(), 4096);
}
diff --git a/src/util/basic_macros.h b/src/util/basic_macros.h
index 334e342e0..3910c6185 100644
--- a/src/util/basic_macros.h
+++ b/src/util/basic_macros.h
@@ -29,13 +29,19 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define CONTAINS(c, v) (std::find((c).begin(), (c).end(), (v)) != (c).end())
// To disable copy constructors and assignment operations for some class
-// 'Foobar', add the macro DISABLE_CLASS_COPY(Foobar) as a private member.
+// 'Foobar', add the macro DISABLE_CLASS_COPY(Foobar) in the class definition.
// Note this also disables copying for any classes derived from 'Foobar' as well
// as classes having a 'Foobar' member.
#define DISABLE_CLASS_COPY(C) \
C(const C &) = delete; \
C &operator=(const C &) = delete;
+// If you have used DISABLE_CLASS_COPY with a class but still want to permit moving
+// use this macro to add the default move constructors back.
+#define ALLOW_CLASS_MOVE(C) \
+ C(C &&other) = default; \
+ C &operator=(C &&) = default;
+
#ifndef _MSC_VER
#define UNUSED_ATTRIBUTE __attribute__ ((unused))
#else
diff --git a/src/util/enriched_string.cpp b/src/util/enriched_string.cpp
index b1f95215e..941f8b08d 100644
--- a/src/util/enriched_string.cpp
+++ b/src/util/enriched_string.cpp
@@ -1,6 +1,6 @@
/*
Copyright (C) 2013 xyz, Ilya Zhuravlev <whatever@xyz.is>
-Copyright (C) 2016 Nore, Nathanaël Courant <nore@mesecons.net>
+Copyright (C) 2016 Nore, Nathanaëlle Courant <nore@mesecons.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/util/enriched_string.h b/src/util/enriched_string.h
index 16a0eef74..4e249eac5 100644
--- a/src/util/enriched_string.h
+++ b/src/util/enriched_string.h
@@ -1,6 +1,6 @@
/*
Copyright (C) 2013 xyz, Ilya Zhuravlev <whatever@xyz.is>
-Copyright (C) 2016 Nore, Nathanaël Courant <nore@mesecons.net>
+Copyright (C) 2016 Nore, Nathanaëlle Courant <nore@mesecons.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/util/ieee_float.cpp b/src/util/ieee_float.cpp
index 887258921..b73763c55 100644
--- a/src/util/ieee_float.cpp
+++ b/src/util/ieee_float.cpp
@@ -39,7 +39,7 @@ f32 u32Tof32Slow(u32 i)
if (exp == 0xFF) {
// Inf/NaN
if (imant == 0) {
- if (std::numeric_limits<f32>::has_infinity)
+ if (std::numeric_limits<f32>::has_infinity)
return sign ? -std::numeric_limits<f32>::infinity() :
std::numeric_limits<f32>::infinity();
return sign ? std::numeric_limits<f32>::max() :
diff --git a/src/util/metricsbackend.cpp b/src/util/metricsbackend.cpp
index 4454557a3..63b49ac0a 100644
--- a/src/util/metricsbackend.cpp
+++ b/src/util/metricsbackend.cpp
@@ -18,6 +18,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "metricsbackend.h"
+#include "util/thread.h"
#if USE_PROMETHEUS
#include <prometheus/exposer.h>
#include <prometheus/registry.h>
@@ -27,18 +28,78 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "settings.h"
#endif
+/* Plain implementation */
+
+class SimpleMetricCounter : public MetricCounter
+{
+public:
+ SimpleMetricCounter() : MetricCounter(), m_counter(0.0) {}
+
+ virtual ~SimpleMetricCounter() {}
+
+ void increment(double number) override
+ {
+ MutexAutoLock lock(m_mutex);
+ m_counter += number;
+ }
+ double get() const override
+ {
+ MutexAutoLock lock(m_mutex);
+ return m_counter;
+ }
+
+private:
+ mutable std::mutex m_mutex;
+ double m_counter;
+};
+
+class SimpleMetricGauge : public MetricGauge
+{
+public:
+ SimpleMetricGauge() : MetricGauge(), m_gauge(0.0) {}
+
+ virtual ~SimpleMetricGauge() {}
+
+ void increment(double number) override
+ {
+ MutexAutoLock lock(m_mutex);
+ m_gauge += number;
+ }
+ void decrement(double number) override
+ {
+ MutexAutoLock lock(m_mutex);
+ m_gauge -= number;
+ }
+ void set(double number) override
+ {
+ MutexAutoLock lock(m_mutex);
+ m_gauge = number;
+ }
+ double get() const override
+ {
+ MutexAutoLock lock(m_mutex);
+ return m_gauge;
+ }
+
+private:
+ mutable std::mutex m_mutex;
+ double m_gauge;
+};
+
MetricCounterPtr MetricsBackend::addCounter(
- const std::string &name, const std::string &help_str)
+ const std::string &name, const std::string &help_str, Labels labels)
{
- return std::make_shared<SimpleMetricCounter>(name, help_str);
+ return std::make_shared<SimpleMetricCounter>();
}
MetricGaugePtr MetricsBackend::addGauge(
- const std::string &name, const std::string &help_str)
+ const std::string &name, const std::string &help_str, Labels labels)
{
- return std::make_shared<SimpleMetricGauge>(name, help_str);
+ return std::make_shared<SimpleMetricGauge>();
}
+/* Prometheus backend */
+
#if USE_PROMETHEUS
class PrometheusMetricCounter : public MetricCounter
@@ -47,13 +108,14 @@ public:
PrometheusMetricCounter() = delete;
PrometheusMetricCounter(const std::string &name, const std::string &help_str,
+ MetricsBackend::Labels labels,
std::shared_ptr<prometheus::Registry> registry) :
MetricCounter(),
m_family(prometheus::BuildCounter()
.Name(name)
.Help(help_str)
.Register(*registry)),
- m_counter(m_family.Add({}))
+ m_counter(m_family.Add(labels))
{
}
@@ -73,13 +135,14 @@ public:
PrometheusMetricGauge() = delete;
PrometheusMetricGauge(const std::string &name, const std::string &help_str,
+ MetricsBackend::Labels labels,
std::shared_ptr<prometheus::Registry> registry) :
MetricGauge(),
m_family(prometheus::BuildGauge()
.Name(name)
.Help(help_str)
.Register(*registry)),
- m_gauge(m_family.Add({}))
+ m_gauge(m_family.Add(labels))
{
}
@@ -99,8 +162,7 @@ class PrometheusMetricsBackend : public MetricsBackend
{
public:
PrometheusMetricsBackend(const std::string &addr) :
- MetricsBackend(), m_exposer(std::unique_ptr<prometheus::Exposer>(
- new prometheus::Exposer(addr))),
+ MetricsBackend(), m_exposer(std::make_unique<prometheus::Exposer>(addr)),
m_registry(std::make_shared<prometheus::Registry>())
{
m_exposer->RegisterCollectable(m_registry);
@@ -108,10 +170,12 @@ public:
virtual ~PrometheusMetricsBackend() {}
- virtual MetricCounterPtr addCounter(
- const std::string &name, const std::string &help_str);
- virtual MetricGaugePtr addGauge(
- const std::string &name, const std::string &help_str);
+ MetricCounterPtr addCounter(
+ const std::string &name, const std::string &help_str,
+ Labels labels = {}) override;
+ MetricGaugePtr addGauge(
+ const std::string &name, const std::string &help_str,
+ Labels labels = {}) override;
private:
std::unique_ptr<prometheus::Exposer> m_exposer;
@@ -119,15 +183,15 @@ private:
};
MetricCounterPtr PrometheusMetricsBackend::addCounter(
- const std::string &name, const std::string &help_str)
+ const std::string &name, const std::string &help_str, Labels labels)
{
- return std::make_shared<PrometheusMetricCounter>(name, help_str, m_registry);
+ return std::make_shared<PrometheusMetricCounter>(name, help_str, labels, m_registry);
}
MetricGaugePtr PrometheusMetricsBackend::addGauge(
- const std::string &name, const std::string &help_str)
+ const std::string &name, const std::string &help_str, Labels labels)
{
- return std::make_shared<PrometheusMetricGauge>(name, help_str, m_registry);
+ return std::make_shared<PrometheusMetricGauge>(name, help_str, labels, m_registry);
}
MetricsBackend *createPrometheusMetricsBackend()
diff --git a/src/util/metricsbackend.h b/src/util/metricsbackend.h
index c37306392..644c73325 100644
--- a/src/util/metricsbackend.h
+++ b/src/util/metricsbackend.h
@@ -19,8 +19,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include <memory>
+#include <string>
+#include <utility>
#include "config.h"
-#include "util/thread.h"
class MetricCounter
{
@@ -35,38 +36,6 @@ public:
typedef std::shared_ptr<MetricCounter> MetricCounterPtr;
-class SimpleMetricCounter : public MetricCounter
-{
-public:
- SimpleMetricCounter() = delete;
-
- virtual ~SimpleMetricCounter() {}
-
- SimpleMetricCounter(const std::string &name, const std::string &help_str) :
- MetricCounter(), m_name(name), m_help_str(help_str),
- m_counter(0.0)
- {
- }
-
- virtual void increment(double number)
- {
- MutexAutoLock lock(m_mutex);
- m_counter += number;
- }
- virtual double get() const
- {
- MutexAutoLock lock(m_mutex);
- return m_counter;
- }
-
-private:
- std::string m_name;
- std::string m_help_str;
-
- mutable std::mutex m_mutex;
- double m_counter;
-};
-
class MetricGauge
{
public:
@@ -81,47 +50,6 @@ public:
typedef std::shared_ptr<MetricGauge> MetricGaugePtr;
-class SimpleMetricGauge : public MetricGauge
-{
-public:
- SimpleMetricGauge() = delete;
-
- SimpleMetricGauge(const std::string &name, const std::string &help_str) :
- MetricGauge(), m_name(name), m_help_str(help_str), m_gauge(0.0)
- {
- }
-
- virtual ~SimpleMetricGauge() {}
-
- virtual void increment(double number)
- {
- MutexAutoLock lock(m_mutex);
- m_gauge += number;
- }
- virtual void decrement(double number)
- {
- MutexAutoLock lock(m_mutex);
- m_gauge -= number;
- }
- virtual void set(double number)
- {
- MutexAutoLock lock(m_mutex);
- m_gauge = number;
- }
- virtual double get() const
- {
- MutexAutoLock lock(m_mutex);
- return m_gauge;
- }
-
-private:
- std::string m_name;
- std::string m_help_str;
-
- mutable std::mutex m_mutex;
- double m_gauge;
-};
-
class MetricsBackend
{
public:
@@ -129,10 +57,14 @@ public:
virtual ~MetricsBackend() {}
+ typedef std::initializer_list<std::pair<const std::string, std::string>> Labels;
+
virtual MetricCounterPtr addCounter(
- const std::string &name, const std::string &help_str);
+ const std::string &name, const std::string &help_str,
+ Labels labels = {});
virtual MetricGaugePtr addGauge(
- const std::string &name, const std::string &help_str);
+ const std::string &name, const std::string &help_str,
+ Labels labels = {});
};
#if USE_PROMETHEUS
diff --git a/src/util/numeric.cpp b/src/util/numeric.cpp
index 702ddce95..aa3bb843d 100644
--- a/src/util/numeric.cpp
+++ b/src/util/numeric.cpp
@@ -46,11 +46,22 @@ void myrand_bytes(void *out, size_t len)
g_pcgrand.bytes(out, len);
}
+float myrand_float()
+{
+ u32 uv = g_pcgrand.next();
+ return (float)uv / (float)U32_MAX;
+}
+
int myrand_range(int min, int max)
{
return g_pcgrand.range(min, max);
}
+float myrand_range(float min, float max)
+{
+ return (max-min) * myrand_float() + min;
+}
+
/*
64-bit unaligned version of MurmurHash
diff --git a/src/util/numeric.h b/src/util/numeric.h
index 32a6f4312..265046a63 100644
--- a/src/util/numeric.h
+++ b/src/util/numeric.h
@@ -223,6 +223,8 @@ u32 myrand();
void mysrand(unsigned int seed);
void myrand_bytes(void *out, size_t len);
int myrand_range(int min, int max);
+float myrand_range(float min, float max);
+float myrand_float();
/*
Miscellaneous functions
@@ -446,3 +448,24 @@ inline irr::video::SColor multiplyColorValue(const irr::video::SColor &color, fl
core::clamp<u32>(color.getGreen() * mod, 0, 255),
core::clamp<u32>(color.getBlue() * mod, 0, 255));
}
+
+template <typename T> inline T numericAbsolute(T v) { return v < 0 ? T(-v) : v; }
+template <typename T> inline T numericSign(T v) { return T(v < 0 ? -1 : (v == 0 ? 0 : 1)); }
+
+inline v3f vecAbsolute(v3f v)
+{
+ return v3f(
+ numericAbsolute(v.X),
+ numericAbsolute(v.Y),
+ numericAbsolute(v.Z)
+ );
+}
+
+inline v3f vecSign(v3f v)
+{
+ return v3f(
+ numericSign(v.X),
+ numericSign(v.Y),
+ numericSign(v.Z)
+ );
+}
diff --git a/src/util/pointer.h b/src/util/pointer.h
index 245ac85bf..b659cea0e 100644
--- a/src/util/pointer.h
+++ b/src/util/pointer.h
@@ -45,7 +45,7 @@ public:
Buffer()
{
m_size = 0;
- data = NULL;
+ data = nullptr;
}
Buffer(unsigned int size)
{
@@ -53,7 +53,7 @@ public:
if(size != 0)
data = new T[size];
else
- data = NULL;
+ data = nullptr;
}
// Disable class copy
@@ -82,7 +82,7 @@ public:
memcpy(data, t, size);
}
else
- data = NULL;
+ data = nullptr;
}
~Buffer()
@@ -166,7 +166,7 @@ public:
if(m_size != 0)
data = new T[m_size];
else
- data = NULL;
+ data = nullptr;
refcount = new unsigned int;
memset(data,0,sizeof(T)*m_size);
(*refcount) = 1;
@@ -201,7 +201,7 @@ public:
memcpy(data, t, m_size);
}
else
- data = NULL;
+ data = nullptr;
refcount = new unsigned int;
(*refcount) = 1;
}
@@ -216,7 +216,7 @@ public:
memcpy(data, *buffer, buffer.getSize());
}
else
- data = NULL;
+ data = nullptr;
refcount = new unsigned int;
(*refcount) = 1;
}
@@ -256,3 +256,4 @@ private:
unsigned int m_size;
unsigned int *refcount;
};
+
diff --git a/src/util/serialize.cpp b/src/util/serialize.cpp
index 281061229..ee46fd941 100644
--- a/src/util/serialize.cpp
+++ b/src/util/serialize.cpp
@@ -18,15 +18,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "serialize.h"
-#include "pointer.h"
#include "porting.h"
#include "util/string.h"
+#include "util/hex.h"
#include "exceptions.h"
#include "irrlichttypes.h"
-#include <sstream>
-#include <iomanip>
-#include <vector>
+#include <iostream>
+#include <cassert>
FloatType g_serialize_f32_type = FLOATTYPE_UNKNOWN;
@@ -120,121 +119,148 @@ std::string deSerializeString32(std::istream &is)
}
////
-//// JSON
+//// JSON-like strings
////
std::string serializeJsonString(const std::string &plain)
{
- std::ostringstream os(std::ios::binary);
- os << "\"";
+ std::string tmp;
+
+ tmp.reserve(plain.size() + 2);
+ tmp.push_back('"');
for (char c : plain) {
switch (c) {
case '"':
- os << "\\\"";
+ tmp.append("\\\"");
break;
case '\\':
- os << "\\\\";
- break;
- case '/':
- os << "\\/";
+ tmp.append("\\\\");
break;
case '\b':
- os << "\\b";
+ tmp.append("\\b");
break;
case '\f':
- os << "\\f";
+ tmp.append("\\f");
break;
case '\n':
- os << "\\n";
+ tmp.append("\\n");
break;
case '\r':
- os << "\\r";
+ tmp.append("\\r");
break;
case '\t':
- os << "\\t";
+ tmp.append("\\t");
break;
default: {
if (c >= 32 && c <= 126) {
- os << c;
+ tmp.push_back(c);
} else {
- u32 cnum = (u8)c;
- os << "\\u" << std::hex << std::setw(4)
- << std::setfill('0') << cnum;
+ // We pretend that Unicode codepoints map to bytes (they don't)
+ u8 cnum = static_cast<u8>(c);
+ tmp.append("\\u00");
+ tmp.push_back(hex_chars[cnum >> 4]);
+ tmp.push_back(hex_chars[cnum & 0xf]);
}
break;
}
}
}
- os << "\"";
- return os.str();
+ tmp.push_back('"');
+ return tmp;
+}
+
+static void deSerializeJsonString(std::string &s)
+{
+ assert(s.size() >= 2);
+ assert(s.front() == '"' && s.back() == '"');
+
+ size_t w = 0; // write index
+ size_t i = 1; // read index
+ const size_t len = s.size() - 1; // string length with trailing quote removed
+
+ while (i < len) {
+ char c = s[i++];
+ assert(c != '"');
+
+ if (c != '\\') {
+ s[w++] = c;
+ continue;
+ }
+
+ if (i >= len)
+ throw SerializationError("JSON string ended prematurely");
+ char c2 = s[i++];
+ switch (c2) {
+ case 'b':
+ s[w++] = '\b';
+ break;
+ case 'f':
+ s[w++] = '\f';
+ break;
+ case 'n':
+ s[w++] = '\n';
+ break;
+ case 'r':
+ s[w++] = '\r';
+ break;
+ case 't':
+ s[w++] = '\t';
+ break;
+ case 'u': {
+ if (i + 3 >= len)
+ throw SerializationError("JSON string ended prematurely");
+ unsigned char v[4] = {};
+ for (int j = 0; j < 4; j++)
+ hex_digit_decode(s[i+j], v[j]);
+ i += 4;
+ u32 hexnumber = (v[0] << 12) | (v[1] << 8) | (v[2] << 4) | v[3];
+ // Note that this does not work for anything other than ASCII
+ // but these functions do not actually interact with real JSON input.
+ s[w++] = (int) hexnumber;
+ break;
+ }
+ default:
+ s[w++] = c2;
+ break;
+ }
+ }
+
+ assert(w <= i && i <= len);
+ // Truncate string to current write index
+ s.resize(w);
}
std::string deSerializeJsonString(std::istream &is)
{
- std::ostringstream os(std::ios::binary);
- char c, c2;
+ std::string tmp;
+ char c;
+ bool was_backslash = false;
// Parse initial doublequote
- is >> c;
+ c = is.get();
if (c != '"')
throw SerializationError("JSON string must start with doublequote");
+ tmp.push_back(c);
- // Parse characters
+ // Grab the entire json string
for (;;) {
c = is.get();
if (is.eof())
throw SerializationError("JSON string ended prematurely");
- if (c == '"') {
- return os.str();
- }
-
- if (c == '\\') {
- c2 = is.get();
- if (is.eof())
- throw SerializationError("JSON string ended prematurely");
- switch (c2) {
- case 'b':
- os << '\b';
- break;
- case 'f':
- os << '\f';
- break;
- case 'n':
- os << '\n';
- break;
- case 'r':
- os << '\r';
- break;
- case 't':
- os << '\t';
- break;
- case 'u': {
- int hexnumber;
- char hexdigits[4 + 1];
-
- is.read(hexdigits, 4);
- if (is.eof())
- throw SerializationError("JSON string ended prematurely");
- hexdigits[4] = 0;
-
- std::istringstream tmp_is(hexdigits, std::ios::binary);
- tmp_is >> std::hex >> hexnumber;
- os << (char)hexnumber;
- break;
- }
- default:
- os << c2;
- break;
- }
- } else {
- os << c;
- }
+ tmp.push_back(c);
+ if (was_backslash)
+ was_backslash = false;
+ else if (c == '\\')
+ was_backslash = true;
+ else if (c == '"')
+ break; // found end of string
}
- return os.str();
+ deSerializeJsonString(tmp);
+ return tmp;
}
std::string serializeJsonStringIfNeeded(const std::string &s)
@@ -248,41 +274,21 @@ std::string serializeJsonStringIfNeeded(const std::string &s)
std::string deSerializeJsonStringIfNeeded(std::istream &is)
{
- 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;
- for (;;) {
- char c = is.get();
- if (is.eof())
- break;
-
- if (expect_initial_quote && c == '"') {
- tmp_os << c;
- is_json = true;
- } else if(is_json) {
- tmp_os << c;
- if (was_backslash)
- was_backslash = false;
- else if (c == '\\')
- was_backslash = true;
- else if (c == '"')
- break; // Found end of string
- } else {
- if (c == ' ') {
- // Found end of word
- is.unget();
- break;
- }
-
- tmp_os << c;
- }
- expect_initial_quote = false;
- }
- if (is_json) {
- return deSerializeJsonString(tmp_os);
+ // Check for initial quote
+ char c = is.peek();
+ if (is.eof())
+ return "";
+
+ if (c == '"') {
+ // json string: defer to the right implementation
+ return deSerializeJsonString(is);
}
- return tmp_os.str();
+ // not a json string:
+ std::string tmp;
+ std::getline(is, tmp, ' ');
+ if (!is.eof())
+ is.unget(); // we hit a space, put it back
+ return tmp;
}
diff --git a/src/util/serialize.h b/src/util/serialize.h
index 15bdd050d..4dc1a54c6 100644
--- a/src/util/serialize.h
+++ b/src/util/serialize.h
@@ -439,6 +439,16 @@ MAKE_STREAM_WRITE_FXN(video::SColor, ARGB8, 4);
//// More serialization stuff
////
+inline float clampToF1000(float v)
+{
+ return core::clamp(v, F1000_MIN, F1000_MAX);
+}
+
+inline v3f clampToF1000(v3f v)
+{
+ return {clampToF1000(v.X), clampToF1000(v.Y), clampToF1000(v.Z)};
+}
+
// Creates a string with the length as the first two bytes
std::string serializeString16(const std::string &plain);
diff --git a/src/util/srp.cpp b/src/util/srp.cpp
index ceb2fef9e..daa7f332b 100644
--- a/src/util/srp.cpp
+++ b/src/util/srp.cpp
@@ -354,7 +354,7 @@ static size_t hash_length(SRP_HashAlgorithm alg)
case SRP_SHA384: return SHA384_DIGEST_LENGTH;
case SRP_SHA512: return SHA512_DIGEST_LENGTH;
*/
- default: return -1;
+ default: return 0;
};
}
// clang-format on
@@ -422,7 +422,7 @@ static SRP_Result H_nn(
}
static SRP_Result H_ns(mpz_t result, SRP_HashAlgorithm alg, const unsigned char *n,
- size_t len_n, const unsigned char *bytes, uint32_t len_bytes)
+ size_t len_n, const unsigned char *bytes, size_t len_bytes)
{
unsigned char buff[SHA512_DIGEST_LENGTH];
size_t nbytes = len_n + len_bytes;
diff --git a/src/util/stream.h b/src/util/stream.h
new file mode 100644
index 000000000..2e61b46d2
--- /dev/null
+++ b/src/util/stream.h
@@ -0,0 +1,70 @@
+/*
+Minetest
+Copyright (C) 2022 Minetest Authors
+
+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 <iostream>
+#include <string>
+#include <functional>
+
+template<int BufferLength, typename Emitter = std::function<void(const std::string &)> >
+class StringStreamBuffer : public std::streambuf {
+public:
+ StringStreamBuffer(Emitter emitter) : m_emitter(emitter) {
+ buffer_index = 0;
+ }
+
+ int overflow(int c) {
+ push_back(c);
+ return c;
+ }
+
+ void push_back(char c) {
+ if (c == '\n' || c == '\r') {
+ if (buffer_index)
+ m_emitter(std::string(buffer, buffer_index));
+ buffer_index = 0;
+ } else {
+ buffer[buffer_index++] = c;
+ if (buffer_index >= BufferLength) {
+ m_emitter(std::string(buffer, buffer_index));
+ buffer_index = 0;
+ }
+ }
+ }
+
+ std::streamsize xsputn(const char *s, std::streamsize n) {
+ for (int i = 0; i < n; ++i)
+ push_back(s[i]);
+ return n;
+ }
+private:
+ Emitter m_emitter;
+ char buffer[BufferLength];
+ int buffer_index;
+};
+
+class DummyStreamBuffer : public std::streambuf {
+ int overflow(int c) {
+ return c;
+ }
+ std::streamsize xsputn(const char *s, std::streamsize n) {
+ return n;
+ }
+};
diff --git a/src/util/string.cpp b/src/util/string.cpp
index bc4664997..778e4d1e1 100644
--- a/src/util/string.cpp
+++ b/src/util/string.cpp
@@ -39,16 +39,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <windows.h>
#endif
-#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
-
#ifndef _WIN32
static bool convert(const char *to, const char *from, char *outbuf,
@@ -56,11 +46,7 @@ static bool convert(const char *to, const char *from, char *outbuf,
{
iconv_t cd = iconv_open(to, from);
-#ifdef BSD_ICONV_USED
- const char *inbuf_ptr = inbuf;
-#else
char *inbuf_ptr = inbuf;
-#endif
char *outbuf_ptr = outbuf;
size_t *inbuf_left_ptr = &inbuf_size;
@@ -84,7 +70,7 @@ 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__)
+#elif defined(__NetBSD__) || defined(__OpenBSD__)
// NetBSD does not allow "WCHAR_T" as a charset input to iconv.
#include <sys/endian.h>
#if BYTE_ORDER == BIG_ENDIAN
@@ -107,8 +93,8 @@ std::wstring utf8_to_wide(const std::string &input)
std::wstring out;
out.resize(outbuf_size / sizeof(wchar_t));
-#if defined(__ANDROID__) || defined(__NetBSD__)
- SANITY_CHECK(sizeof(wchar_t) == 4);
+#if defined(__ANDROID__) || defined(__NetBSD__) || defined(__OpenBSD__)
+ static_assert(sizeof(wchar_t) == 4, "Unexpected wide char size");
#endif
char *outbuf = reinterpret_cast<char*>(&out[0]);
@@ -494,6 +480,7 @@ const static std::unordered_map<std::string, u32> s_named_colors = {
{"plum", 0xdda0dd},
{"powderblue", 0xb0e0e6},
{"purple", 0x800080},
+ {"rebeccapurple", 0x663399},
{"red", 0xff0000},
{"rosybrown", 0xbc8f8f},
{"royalblue", 0x4169e1},
@@ -821,9 +808,11 @@ std::wstring translate_string(const std::wstring &s)
#endif
}
-static const std::array<std::wstring, 22> disallowed_dir_names = {
+static const std::array<std::wstring, 30> disallowed_dir_names = {
// Problematic filenames from here:
// https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#file-and-directory-names
+ // Plus undocumented values from here:
+ // https://googleprojectzero.blogspot.com/2016/02/the-definitive-guide-on-win32-to-nt.html
L"CON",
L"PRN",
L"AUX",
@@ -837,6 +826,9 @@ static const std::array<std::wstring, 22> disallowed_dir_names = {
L"COM7",
L"COM8",
L"COM9",
+ L"COM\u00B2",
+ L"COM\u00B3",
+ L"COM\u00B9",
L"LPT1",
L"LPT2",
L"LPT3",
@@ -846,6 +838,11 @@ static const std::array<std::wstring, 22> disallowed_dir_names = {
L"LPT7",
L"LPT8",
L"LPT9",
+ L"LPT\u00B2",
+ L"LPT\u00B3",
+ L"LPT\u00B9",
+ L"CONIN$",
+ L"CONOUT$",
};
/**
@@ -853,12 +850,7 @@ static const std::array<std::wstring, 22> disallowed_dir_names = {
*/
static const std::wstring disallowed_path_chars = L"<>:\"/\\|?*.";
-/**
- * Sanitize the name of a new directory. This consists of two stages:
- * 1. Check for 'reserved filenames' that can't be used on some filesystems
- * and add a prefix to them
- * 2. Remove 'unsafe' characters from the name by replacing them with '_'
- */
+
std::string sanitizeDirName(const std::string &str, const std::string &optional_prefix)
{
std::wstring safe_name = utf8_to_wide(str);
@@ -870,7 +862,18 @@ std::string sanitizeDirName(const std::string &str, const std::string &optional_
}
}
- for (unsigned long i = 0; i < safe_name.length(); i++) {
+ // Replace leading and trailing spaces with underscores.
+ size_t start = safe_name.find_first_not_of(L' ');
+ size_t end = safe_name.find_last_not_of(L' ');
+ if (start == std::wstring::npos || end == std::wstring::npos)
+ start = end = safe_name.size();
+ for (size_t i = 0; i < start; i++)
+ safe_name[i] = L'_';
+ for (size_t i = end + 1; i < safe_name.size(); i++)
+ safe_name[i] = L'_';
+
+ // Replace other disallowed characters with underscores
+ for (size_t i = 0; i < safe_name.length(); i++) {
bool is_valid = true;
// Unlikely, but control characters should always be blacklisted
@@ -882,7 +885,7 @@ std::string sanitizeDirName(const std::string &str, const std::string &optional_
}
if (!is_valid)
- safe_name[i] = '_';
+ safe_name[i] = L'_';
}
return wide_to_utf8(safe_name);
diff --git a/src/util/string.h b/src/util/string.h
index d73540ceb..aa4329f2f 100644
--- a/src/util/string.h
+++ b/src/util/string.h
@@ -410,7 +410,7 @@ DEFINE_STD_TOSTRING_FLOATINGPOINT(long double)
template <typename T>
inline wstring to_wstring(T val)
{
- return utf8_to_wide(to_string(val));
+ return utf8_to_wide(to_string(val));
}
}
#endif
@@ -749,7 +749,7 @@ inline irr::core::stringw utf8_to_stringw(const std::string &input)
/**
* Sanitize the name of a new directory. This consists of two stages:
* 1. Check for 'reserved filenames' that can't be used on some filesystems
- * and prefix them
+ * and add a prefix to them
* 2. Remove 'unsafe' characters from the name by replacing them with '_'
*/
std::string sanitizeDirName(const std::string &str, const std::string &optional_prefix);
diff --git a/textures/base/pack/checkbox_16_white.png b/textures/base/pack/checkbox_16_white.png
new file mode 100644
index 000000000..0cf0f3e65
--- /dev/null
+++ b/textures/base/pack/checkbox_16_white.png
Binary files differ
diff --git a/textures/base/pack/error_icon_orange.png b/textures/base/pack/error_icon_orange.png
new file mode 100644
index 000000000..1f1586f21
--- /dev/null
+++ b/textures/base/pack/error_icon_orange.png
Binary files differ
diff --git a/textures/base/pack/error_icon_red.png b/textures/base/pack/error_icon_red.png
new file mode 100644
index 000000000..1f5bafbf4
--- /dev/null
+++ b/textures/base/pack/error_icon_red.png
Binary files differ
diff --git a/textures/base/pack/no_screenshot.png b/textures/base/pack/no_screenshot.png
index 8c7089897..14df091a2 100644
--- a/textures/base/pack/no_screenshot.png
+++ b/textures/base/pack/no_screenshot.png
Binary files differ
diff --git a/textures/base/pack/server_favorite_delete.png b/textures/base/pack/server_favorite_delete.png
new file mode 100644
index 000000000..e35c6aaf0
--- /dev/null
+++ b/textures/base/pack/server_favorite_delete.png
Binary files differ
diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh
index 9eb9a4050..3df48f178 100755
--- a/util/buildbot/buildwin32.sh
+++ b/util/buildbot/buildwin32.sh
@@ -8,7 +8,7 @@ GAME_GIT=https://github.com/minetest/minetest_game
GAME_BRANCH=master
GAME_NAME=minetest_game
-dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+topdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
if [ $# -ne 1 ]; then
echo "Usage: $0 <build directory>"
exit 1
@@ -28,7 +28,7 @@ if [ -z "$compiler" ]; then
echo "Unable to determine which MinGW compiler to use"
exit 1
fi
-toolchain_file=$dir/toolchain_${compiler/-gcc/}.cmake
+toolchain_file=$topdir/toolchain_${compiler/-gcc/}.cmake
echo "Using $toolchain_file"
# Try to find runtime DLLs in various paths (varies by distribution, sigh)
@@ -45,17 +45,18 @@ done
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
+irrlicht_version=$(cat $topdir/../../misc/irrlichtmt_tag.txt)
+ogg_version=1.3.5
+openal_version=1.21.1
vorbis_version=1.3.7
-curl_version=7.76.1
+curl_version=7.81.0
gettext_version=0.20.1
-freetype_version=2.10.4
-sqlite3_version=3.35.5
+freetype_version=2.11.1
+sqlite3_version=3.37.2
luajit_version=2.1.0-beta3
leveldb_version=1.23
zlib_version=1.2.11
-zstd_version=1.4.9
+zstd_version=1.5.2
mkdir -p $libdir
@@ -78,19 +79,22 @@ download () {
fi
}
+# 'dw2' just points to rebuilt versions after a toolchain change
+# this distinction should be gotten rid of next time
+
cd $libdir
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/dw2/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/dw2/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/dw2/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
+download "http://minetest.kitsunemimi.pw/dw2/luajit-$luajit_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/dw2/libleveldb-$leveldb_version-win32.zip" leveldb-$leveldb_version.zip
+download "http://minetest.kitsunemimi.pw/openal-soft-$openal_version-win32.zip"
# Set source dir, downloading Minetest as needed
if [ -n "$EXISTING_MINETEST_DIR" ]; then
@@ -112,14 +116,12 @@ git_hash=$(cd $sourcedir && git rev-parse --short HEAD)
# Build the thing
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 . \
+cmake -S $sourcedir -B build \
-DCMAKE_TOOLCHAIN_FILE=$toolchain_file \
-DCMAKE_INSTALL_PREFIX=/tmp \
-DVERSION_EXTRA=$git_hash \
@@ -154,9 +156,9 @@ cmake -S $sourcedir -B . \
-DVORBIS_DLL="$vorbis_dlls" \
-DVORBISFILE_LIBRARY=$libdir/libvorbis/lib/libvorbisfile.dll.a \
\
- -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 \
+ -DOPENAL_INCLUDE_DIR=$libdir/openal/include/AL \
+ -DOPENAL_LIBRARY=$libdir/openal/lib/libOpenAL32.dll.a \
+ -DOPENAL_DLL=$libdir/openal/bin/OpenAL32.dll \
\
-DCURL_DLL=$libdir/curl/bin/libcurl-4.dll \
-DCURL_INCLUDE_DIR=$libdir/curl/include \
@@ -180,9 +182,9 @@ cmake -S $sourcedir -B . \
-DLEVELDB_LIBRARY=$libdir/leveldb/lib/libleveldb.dll.a \
-DLEVELDB_DLL=$libdir/leveldb/bin/libleveldb.dll
-make -j$(nproc)
+cmake --build build -j$(nproc)
-[ -z "$NO_PACKAGE" ] && make package
+[ -z "$NO_PACKAGE" ] && cmake --build build --target package
exit 0
# EOF
diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh
index eb1eae4c2..9d222ab42 100755
--- a/util/buildbot/buildwin64.sh
+++ b/util/buildbot/buildwin64.sh
@@ -8,7 +8,7 @@ GAME_GIT=https://github.com/minetest/minetest_game
GAME_BRANCH=master
GAME_NAME=minetest_game
-dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+topdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
if [ $# -ne 1 ]; then
echo "Usage: $0 <build directory>"
exit 1
@@ -28,7 +28,7 @@ if [ -z "$compiler" ]; then
echo "Unable to determine which MinGW compiler to use"
exit 1
fi
-toolchain_file=$dir/toolchain_${compiler/-gcc/}.cmake
+toolchain_file=$topdir/toolchain_${compiler/-gcc/}.cmake
echo "Using $toolchain_file"
# Try to find runtime DLLs in various paths (varies by distribution, sigh)
@@ -45,17 +45,18 @@ done
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
+irrlicht_version=$(cat $topdir/../../misc/irrlichtmt_tag.txt)
+ogg_version=1.3.5
+openal_version=1.21.1
vorbis_version=1.3.7
-curl_version=7.76.1
+curl_version=7.81.0
gettext_version=0.20.1
-freetype_version=2.10.4
-sqlite3_version=3.35.5
+freetype_version=2.11.1
+sqlite3_version=3.37.2
luajit_version=2.1.0-beta3
leveldb_version=1.23
zlib_version=1.2.11
-zstd_version=1.4.9
+zstd_version=1.5.2
mkdir -p $libdir
@@ -90,7 +91,7 @@ download "http://minetest.kitsunemimi.pw/freetype2-$freetype_version-win64.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
+download "http://minetest.kitsunemimi.pw/openal-soft-$openal_version-win64.zip"
# Set source dir, downloading Minetest as needed
if [ -n "$EXISTING_MINETEST_DIR" ]; then
@@ -112,14 +113,12 @@ git_hash=$(cd $sourcedir && git rev-parse --short HEAD)
# Build the thing
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 . \
+cmake -S $sourcedir -B build \
-DCMAKE_TOOLCHAIN_FILE=$toolchain_file \
-DCMAKE_INSTALL_PREFIX=/tmp \
-DVERSION_EXTRA=$git_hash \
@@ -154,9 +153,9 @@ cmake -S $sourcedir -B . \
-DVORBIS_DLL="$vorbis_dlls" \
-DVORBISFILE_LIBRARY=$libdir/libvorbis/lib/libvorbisfile.dll.a \
\
- -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 \
+ -DOPENAL_INCLUDE_DIR=$libdir/openal/include/AL \
+ -DOPENAL_LIBRARY=$libdir/openal/lib/libOpenAL32.dll.a \
+ -DOPENAL_DLL=$libdir/openal/bin/OpenAL32.dll \
\
-DCURL_DLL=$libdir/curl/bin/libcurl-4.dll \
-DCURL_INCLUDE_DIR=$libdir/curl/include \
@@ -180,9 +179,9 @@ cmake -S $sourcedir -B . \
-DLEVELDB_LIBRARY=$libdir/leveldb/lib/libleveldb.dll.a \
-DLEVELDB_DLL=$libdir/leveldb/bin/libleveldb.dll
-make -j$(nproc)
+cmake --build build -j$(nproc)
-[ -z "$NO_PACKAGE" ] && make package
+[ -z "$NO_PACKAGE" ] && cmake --build build --target package
exit 0
# EOF
diff --git a/util/bump_version.sh b/util/bump_version.sh
index 3e64bfd86..271886d68 100755
--- a/util/bump_version.sh
+++ b/util/bump_version.sh
@@ -26,6 +26,7 @@ perform_release() {
sed -i -re "s/^set\(DEVELOPMENT_BUILD TRUE\)$/set(DEVELOPMENT_BUILD FALSE)/" CMakeLists.txt
sed -i 's/project.ext.set("versionExtra", "-dev")/project.ext.set("versionExtra", "")/' android/build.gradle
+ sed -i 's/project.ext.set("developmentBuild", 1)/project.ext.set("developmentBuild", 0)/' android/build.gradle
sed -i -re "s/\"versionCode\", [0-9]+/\"versionCode\", $NEW_ANDROID_VERSION_CODE/" android/build.gradle
sed -i '/\<release/s/\(version\)="[^"]*"/\1="'"$RELEASE_VERSION"'"/' misc/net.minetest.minetest.appdata.xml
@@ -55,6 +56,7 @@ back_to_devel() {
# Update Android versions
sed -i 's/set("versionExtra", "")/set("versionExtra", "-dev")/' android/build.gradle
+ sed -i 's/project.ext.set("developmentBuild", 0)/project.ext.set("developmentBuild", 1)/' android/build.gradle
sed -i -re "s/set\(\"versionMajor\", [0-9]+\)/set(\"versionMajor\", $NEXT_VERSION_MAJOR)/" android/build.gradle
sed -i -re "s/set\(\"versionMinor\", [0-9]+\)/set(\"versionMinor\", $NEXT_VERSION_MINOR)/" android/build.gradle
sed -i -re "s/set\(\"versionPatch\", [0-9]+\)/set(\"versionPatch\", $NEXT_VERSION_PATCH)/" android/build.gradle
diff --git a/util/ci/build.sh b/util/ci/build.sh
index ba77cd645..88349b852 100755
--- a/util/ci/build.sh
+++ b/util/ci/build.sh
@@ -1,8 +1,10 @@
#! /bin/bash -e
-mkdir cmakebuild
-cd cmakebuild
-cmake -DCMAKE_BUILD_TYPE=Debug \
- -DRUN_IN_PLACE=TRUE -DENABLE_GETTEXT=TRUE \
- -DBUILD_SERVER=TRUE ${CMAKE_FLAGS} ..
-make -j2
+cmake -B build \
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Debug} \
+ -DRUN_IN_PLACE=TRUE \
+ -DENABLE_GETTEXT=${CMAKE_ENABLE_GETTEXT:-TRUE} \
+ -DBUILD_SERVER=${CMAKE_BUILD_SERVER:-TRUE} \
+ ${CMAKE_FLAGS}
+
+cmake --build build --parallel $(($(nproc) + 1))
diff --git a/util/ci/build_prometheus_cpp.sh b/util/ci/build_prometheus_cpp.sh
index edfd574cd..f3e4a5559 100755
--- a/util/ci/build_prometheus_cpp.sh
+++ b/util/ci/build_prometheus_cpp.sh
@@ -8,6 +8,6 @@ cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_TESTING=0
-make -j2
+make -j$(nproc)
sudo make install
diff --git a/util/ci/clang-tidy.sh b/util/ci/clang-tidy.sh
index bb4e99fef..e678cf3b9 100755
--- a/util/ci/clang-tidy.sh
+++ b/util/ci/clang-tidy.sh
@@ -1,17 +1,13 @@
#! /bin/bash -eu
-mkdir -p cmakebuild
-cd cmakebuild
-cmake -DCMAKE_BUILD_TYPE=Debug \
+cmake -B build -DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DRUN_IN_PLACE=TRUE \
-DENABLE_{GETTEXT,SOUND}=FALSE \
- -DBUILD_SERVER=TRUE ..
-make GenerateVersion
-
-cd ..
+ -DBUILD_SERVER=TRUE
+cmake --build build --target GenerateVersion
./util/ci/run-clang-tidy.py \
- -clang-tidy-binary=clang-tidy-9 -p cmakebuild \
+ -clang-tidy-binary=clang-tidy-9 -p build \
-quiet -config="$(cat .clang-tidy)" \
'src/.*'
diff --git a/util/ci/common.sh b/util/ci/common.sh
index f9df54c4a..3015680c4 100644
--- a/util/ci/common.sh
+++ b/util/ci/common.sh
@@ -7,19 +7,16 @@ install_linux_deps() {
libhiredis-dev libogg-dev libgmp-dev libvorbis-dev libopenal-dev \
gettext libpq-dev libleveldb-dev libcurl4-openssl-dev libzstd-dev)
- if [[ "$1" == "--old-irr" ]]; then
+ if [[ "$1" == "--no-irr" ]]; then
shift
- pkgs+=(libirrlicht-dev)
else
- wget "https://github.com/minetest/irrlicht/releases/download/1.9.0mt4/ubuntu-bionic.tar.gz"
+ local ver=$(cat misc/irrlichtmt_tag.txt)
+ wget "https://github.com/minetest/irrlicht/releases/download/$ver/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/generate-texture-normals.sh b/util/generate-texture-normals.sh
deleted file mode 100755
index 6279dfa69..000000000
--- a/util/generate-texture-normals.sh
+++ /dev/null
@@ -1,255 +0,0 @@
-#!/bin/bash
-
-# This script generates normalmaps using The GIMP to do the heavy lifting.
-# give any unrecognized switch (say, -h) for usage info.
-
-rm /tmp/normals_filelist.txt
-
-numprocs=6
-
-skiptools=false
-skipinventory=false
-invresolution=64
-dryrun=false
-pattern="*.png *.jpg"
-
-filter=0
-scale=8
-wrap=0
-heightsource=0
-conversion=0
-invertx=0
-inverty=0
-
-while test -n "$1"; do
- case "$1" in
- --scale|-s)
- if [ -z "$2" ] ; then echo "Missing scale parameter"; exit 1; fi
- scale=$2
- shift
- shift
- ;;
- --pattern|-p)
- if [ -z "$2" ] ; then echo "Missing pattern parameter"; exit 1; fi
- pattern=$2
- shift
- shift
- ;;
- --skiptools|-t)
- skiptools=true
- shift
- ;;
- --skipinventory|-i)
- if [[ $2 =~ ^[0-9]+$ ]]; then
- invresolution=$2
- shift
- fi
- skipinventory=true
- shift
- ;;
- --filter|-f)
- if [ -z "$2" ] ; then echo "Missing filter parameter"; exit 1; fi
-
- case "$2" in
- sobel3|1)
- filter=1
- ;;
- sobel5|2)
- filter=2
- ;;
- prewitt3|3)
- filter=3
- ;;
- prewitt5|4)
- filter=4
- ;;
- 3x3|5)
- filter=5
- ;;
- 5x5|6)
- filter=6
- ;;
- 7x7|7)
- filter=7
- ;;
- 9x9|8)
- filter=8
- ;;
- *)
- filter=0
- ;;
- esac
-
- shift
- shift
- ;;
- --heightalpha|-a)
- heightsource=1
- shift
- ;;
- --conversion|-c)
- if [ -z "$2" ] ; then echo "Missing conversion parameter"; exit 1; fi
-
- case "$2" in
- biased|1)
- conversion=1
- ;;
- red|2)
- conversion=2
- ;;
- green|3)
- conversion=3
- ;;
- blue|4)
- conversion=4
- ;;
- maxrgb|5)
- conversion=5
- ;;
- minrgb|6)
- conversion=6
- ;;
- colorspace|7)
- conversion=7
- ;;
- normalize-only|8)
- conversion=8
- ;;
- heightmap|9)
- conversion=9
- ;;
- *)
- conversion=0
- ;;
- esac
-
- shift
- shift
- ;;
- --wrap|-w)
- wrap=1
- shift
- ;;
- --invertx|-x)
- invertx=1
- shift
- ;;
- --inverty|-y)
- inverty=1
- shift
- ;;
- --dryrun|-d)
- dryrun=true
- shift
- ;;
- *)
- echo -e "\nUsage:\n"
- echo "`basename $0` [--scale|-s <value>] [--filter|-f <string>]"
- echo " [--wrap|-w] [--heightalpha|-a] [--invertx|-x] [--inverty|-y]"
- echo " [--conversion|-c <string>] [--skiptools|-t] [--skipinventory|-i [<value>]]"
- echo " [--dryrun|-d] [--pattern|-p <pattern>]"
- echo -e "\nDefaults to a scale of 8, checking all files in the current directory, and not"
- echo "skipping apparent tools or inventory images. Filter, if specified, may be one"
- echo "of: sobel3, sobel5, prewitt3, prewitt5, 3x3, 5x5, 7x7, or 9x9, or a value 1"
- echo "through 8 (1=sobel3, 2=sobel5, etc.). Defaults to 0 (four-sample). The height"
- echo "source is taken from the image's alpha channel if heightalpha is specified.\n"
- echo ""
- echo "If inventory skip is specified, an optional resolution may also be included"
- echo "(default is 64). Conversion can be one of: biased, red, green, blue, maxrgb,"
- echo "minrgb, colorspace, normalize-only, heightmap or a value from 1 to 9"
- echo "corresponding respectively to those keywords. Defaults to 0 (simple"
- echo "normalize) if not specified. Wrap, if specified, enables wrapping of the"
- echo "normalmap around the edges of the texture (defaults to no). Invert X/Y"
- echo "reverses the calculated gradients for the X and/or Y dimensions represented"
- echo "by the normalmap (both default to non-inverted)."
- echo ""
- echo "The pattern, can be an escaped pattern string such as \*apple\* or"
- echo "default_\*.png or similar (defaults to all PNG and JPG images in the current"
- echo "directory that do not contain \"_normal\" or \"_specular\" in their filenames)."
- echo ""
- echo "If set for dry-run, the actions this script will take will be printed, but no"
- echo "images will be generated. Passing an invalid value to a switch will generally"
- echo "cause that switch to revert to its default value."
- echo ""
- exit 1
- ;;
- esac
-done
-
-echo -e "\nProcessing files based on pattern \"$pattern\" ..."
-
-normalMap()
-{
- out=`echo "$1" | sed 's/.png/_normal.png/' | sed 's/.jpg/_normal.png/'`
-
- echo "Launched process to generate normalmap: \"$1\" --> \"$out\"" >&2
-
- gimp -i -b "
- (define
- (normalMap-fbx-conversion fileName newFileName filter nscale wrap heightsource conversion invertx inverty)
- (let*
- (
- (image (car (gimp-file-load RUN-NONINTERACTIVE fileName fileName)))
- (drawable (car (gimp-image-get-active-layer image)))
- (drawable (car (gimp-image-flatten image)))
- )
- (if (> (car (gimp-drawable-type drawable)) 1)
- (gimp-convert-rgb image) ()
- )
-
- (plug-in-normalmap
- RUN-NONINTERACTIVE
- image
- drawable
- filter
- 0.0
- nscale
- wrap
- heightsource
- 0
- conversion
- 0
- invertx
- inverty
- 0
- 0.0
- drawable)
- (gimp-file-save RUN-NONINTERACTIVE image drawable newFileName newFileName)
- (gimp-image-delete image)
- )
- )
- (normalMap-fbx-conversion \"$1\" \"$out\" $2 $3 $4 $5 $6 $7 $8)" -b '(gimp-quit 0)'
-}
-
-export -f normalMap
-
-for file in `ls $pattern |grep -v "_normal.png"|grep -v "_specular"` ; do
-
- invtest=`file "$file" |grep "$invresolution x $invresolution"`
- if $skipinventory && [ -n "$invtest" ] ; then
- echo "Skipped presumed "$invresolution"px inventory image: $file" >&2
- continue
- fi
-
- tooltest=`echo "$file" \
- | grep -v "_tool" \
- | grep -v "_shovel" \
- | grep -v "_pick" \
- | grep -v "_axe" \
- | grep -v "_sword" \
- | grep -v "_hoe" \
- | grep -v "bucket_"`
-
- if $skiptools && [ -z "$tooltest" ] ; then
- echo "Skipped presumed tool image: $file" >&2
- continue
- fi
-
- if $dryrun ; then
- echo "Would have generated a normalmap for $file" >&2
- continue
- else
- echo \"$file\" $filter $scale $wrap $heightsource $conversion $invertx $inverty
- fi
-done | xargs -P $numprocs -n 8 -I{} bash -c normalMap\ \{\}\ \{\}\ \{\}\ \{\}\ \{\}\ \{\}\ \{\}\ \{\}
-
diff --git a/util/helper_mod/init.lua b/util/helper_mod/init.lua
new file mode 100644
index 000000000..4da832ed7
--- /dev/null
+++ b/util/helper_mod/init.lua
@@ -0,0 +1,51 @@
+local mode = core.settings:get("helper_mode")
+
+if mode == "devtest" then
+
+ -- Provide feedback to script by creating files in world path
+ 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 tests are enabled exit when they're done, otherwise exit on player join
+ if core.settings:get_bool("devtest_unittests_autostart") and core.global_exists("unittests") then
+ unittests.on_finished = callback
+ else
+ core.register_on_joinplayer(function() callback(true) end)
+ end
+
+elseif mode == "mapgen" then
+
+ -- Stress-test mapgen by constantly generating new area
+ local csize = tonumber(core.settings:get("chunksize")) * core.MAP_BLOCKSIZE
+ local MINP, MAXP = vector.new(0, -csize, 0), vector.new(csize*3, csize*2, csize)
+ local DIR = "x"
+ local pstart = vector.new(0, 0, 0)
+ local next_, callback
+ next_ = function(arg)
+ print("emerging " .. core.pos_to_string(pstart))
+ core.emerge_area(
+ vector.add(pstart, MINP), vector.add(pstart, MAXP),
+ callback, arg
+ )
+ end
+ local trig = {}
+ callback = function(blockpos, action, calls_rem, n)
+ if action == core.EMERGE_CANCELLED or action == core.EMERGE_ERRORED then
+ return
+ end
+ if calls_rem <= 20 and not trig[n] then
+ trig[n] = true
+ pstart[DIR] = pstart[DIR] + (MAXP[DIR] - MINP[DIR])
+ next_(n + 1)
+ end
+ end
+ core.after(0, next_, 1)
+
+end
diff --git a/util/helper_mod/mod.conf b/util/helper_mod/mod.conf
new file mode 100644
index 000000000..efdd9eaf3
--- /dev/null
+++ b/util/helper_mod/mod.conf
@@ -0,0 +1,3 @@
+name = helper_mod
+description = Helper used by various test scripts
+optional_depends = unittests
diff --git a/util/stress_mapgen.sh b/util/stress_mapgen.sh
new file mode 100755
index 000000000..6bbe57483
--- /dev/null
+++ b/util/stress_mapgen.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+gameid=${gameid:-devtest}
+minetest=$dir/../bin/minetest
+testspath=$dir/../tests
+conf_server=$testspath/server.conf
+worldpath=$testspath/world
+
+run () {
+ if [ -n "$PERF" ]; then
+ perf record -z --call-graph dwarf -- "$@"
+ else
+ "$@"
+ fi
+}
+
+[ -e "$minetest" ] || { echo "executable $minetest missing"; exit 1; }
+
+rm -rf "$worldpath"
+mkdir -p "$worldpath/worldmods"
+
+settings=(sqlite_synchronous=0 helper_mode=mapgen)
+[ -n "$PROFILER" ] && settings+=(profiler_print_interval=15)
+printf '%s\n' "${settings[@]}" >"$testspath/server.conf" \
+
+ln -s "$dir/helper_mod" "$worldpath/worldmods/"
+
+args=(--config "$conf_server" --world "$worldpath" --gameid $gameid)
+[ -n "$PROFILER" ] && args+=(--verbose)
+run "$minetest" --server "${args[@]}"
diff --git a/util/test_multiplayer.sh b/util/test_multiplayer.sh
index 5ffc044e0..1fcf298e8 100755
--- a/util/test_multiplayer.sh
+++ b/util/test_multiplayer.sh
@@ -1,6 +1,6 @@
#!/bin/bash
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-gameid=devtest
+gameid=${gameid:-devtest}
minetest=$dir/../bin/minetest
testspath=$dir/../tests
conf_client1=$testspath/client1.conf
@@ -23,50 +23,33 @@ gdbrun () {
gdb -q -batch -ex 'set confirm off' -ex 'r' -ex 'bt' --args "$@"
}
-[ -e $minetest ] || { echo "executable $minetest missing"; exit 1; }
+[ -e "$minetest" ] || { echo "executable $minetest missing"; exit 1; }
-rm -rf $worldpath
-mkdir -p $worldpath/worldmods/test
+rm -rf "$worldpath"
+mkdir -p "$worldpath/worldmods"
-printf '%s\n' >$testspath/client1.conf \
+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
+printf '%s\n' >"$testspath/server.conf" \
+ max_block_send_distance=1 devtest_unittests_autostart=true \
+ helper_mode=devtest
-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
+ln -s "$dir/helper_mod" "$worldpath/worldmods/"
echo "Starting server"
-gdbrun $minetest --server --config $conf_server --world $worldpath --gameid $gameid 2>&1 | sed -u 's/^/(server) /' &
-waitfor $worldpath/startup
+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
+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
+if [ -f "$worldpath/test_failure" ]; then
echo "There were test failures."
exit 1
fi