summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.clang-format1
-rw-r--r--.github/workflows/build.yml7
-rw-r--r--.github/workflows/cpp_lint.yml27
-rw-r--r--.gitignore3
-rw-r--r--.gitlab-ci.yml45
-rw-r--r--.mailmap74
-rw-r--r--CMakeLists.txt34
-rw-r--r--Dockerfile2
-rw-r--r--LICENSE.txt10
-rw-r--r--README.md40
-rw-r--r--build/android/build.gradle4
-rw-r--r--build/android/icons/aux1_btn.svg143
-rw-r--r--build/android/icons/aux_btn.svg411
-rw-r--r--builtin/client/chatcommands.lua9
-rw-r--r--builtin/client/death_formspec.lua2
-rw-r--r--builtin/common/chatcommands.lua69
-rw-r--r--builtin/common/information_formspecs.lua30
-rw-r--r--builtin/fstk/tabview.lua50
-rw-r--r--builtin/game/chat.lua715
-rw-r--r--builtin/game/item.lua2
-rw-r--r--builtin/game/knockback.lua2
-rw-r--r--builtin/game/misc.lua8
-rw-r--r--builtin/game/privileges.lua40
-rw-r--r--builtin/game/register.lua15
-rw-r--r--builtin/game/statbars.lua4
-rw-r--r--builtin/init.lua15
-rw-r--r--builtin/locale/__builtin.de.tr225
-rw-r--r--builtin/locale/__builtin.it.tr224
-rw-r--r--builtin/locale/template.txt224
-rw-r--r--builtin/mainmenu/common.lua108
-rw-r--r--builtin/mainmenu/dlg_config_world.lua2
-rw-r--r--builtin/mainmenu/dlg_contentstore.lua18
-rw-r--r--builtin/mainmenu/dlg_create_world.lua2
-rw-r--r--builtin/mainmenu/pkgmgr.lua49
-rw-r--r--builtin/mainmenu/serverlistmgr.lua9
-rw-r--r--builtin/mainmenu/tab_content.lua15
-rw-r--r--builtin/mainmenu/tab_credits.lua54
-rw-r--r--builtin/mainmenu/tab_online.lua456
-rw-r--r--builtin/profiler/init.lua18
-rw-r--r--builtin/profiler/reporter.lua19
-rw-r--r--builtin/settingtypes.txt24
-rw-r--r--client/shaders/3d_interlaced_merge/opengl_fragment.glsl2
-rw-r--r--client/shaders/3d_interlaced_merge/opengl_vertex.glsl2
-rw-r--r--clientmods/preview/mod.conf1
-rw-r--r--cmake/Modules/FindGMP.cmake2
-rw-r--r--cmake/Modules/FindGettextLib.cmake9
-rw-r--r--cmake/Modules/FindIrrlicht.cmake51
-rw-r--r--cmake/Modules/FindJson.cmake23
-rw-r--r--doc/client_lua_api.txt2
-rw-r--r--doc/lua_api.txt50
-rw-r--r--doc/menu_lua_api.txt2
-rw-r--r--games/devtest/mods/basenodes/textures/default_dirt.pngbin790 -> 7303 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/dirt_with_grass/info.txt3
-rw-r--r--games/devtest/mods/basenodes/textures/info.txt7
-rw-r--r--games/devtest/mods/chest/init.lua16
-rw-r--r--games/devtest/mods/experimental/commands.lua2
-rw-r--r--games/devtest/mods/testentities/visuals.lua16
-rw-r--r--games/devtest/mods/testformspec/formspec.lua37
-rw-r--r--games/devtest/mods/testtools/README.md21
-rw-r--r--games/devtest/mods/testtools/init.lua196
-rw-r--r--games/devtest/mods/testtools/light.lua31
-rw-r--r--games/devtest/mods/testtools/textures/testtools_children_getter.pngbin0 -> 281 bytes
-rw-r--r--games/devtest/mods/testtools/textures/testtools_node_meta_editor.pngbin0 -> 135 bytes
-rw-r--r--games/devtest/mods/unittests/itemdescription.lua11
-rw-r--r--games/devtest/mods/unittests/mod.conf1
-rw-r--r--games/devtest/mods/unittests/textures/default_dirt.pngbin0 -> 790 bytes
-rw-r--r--minetest.conf.example7
-rw-r--r--misc/Info.plist6
-rw-r--r--misc/debpkg-control11
-rw-r--r--misc/net.minetest.minetest.appdata.xml2
-rw-r--r--po/ar/minetest.po19
-rw-r--r--po/be/minetest.po20
-rw-r--r--po/bg/minetest.po22
-rw-r--r--po/ca/minetest.po18
-rw-r--r--po/cs/minetest.po39
-rw-r--r--po/da/minetest.po19
-rw-r--r--po/de/minetest.po308
-rw-r--r--po/dv/minetest.po18
-rw-r--r--po/el/minetest.po26
-rw-r--r--po/eo/minetest.po21
-rw-r--r--po/es/minetest.po126
-rw-r--r--po/et/minetest.po19
-rw-r--r--po/eu/minetest.po115
-rw-r--r--po/fi/minetest.po30
-rw-r--r--po/fr/minetest.po44
-rw-r--r--po/gd/minetest.po18
-rw-r--r--po/gl/minetest.po18
-rw-r--r--po/he/minetest.po1036
-rw-r--r--po/hi/minetest.po19
-rw-r--r--po/hu/minetest.po40
-rw-r--r--po/id/minetest.po278
-rw-r--r--po/it/minetest.po217
-rw-r--r--po/ja/minetest.po231
-rw-r--r--po/jbo/minetest.po100
-rw-r--r--po/kk/minetest.po18
-rw-r--r--po/kn/minetest.po18
-rw-r--r--po/ko/minetest.po20
-rw-r--r--po/ky/minetest.po18
-rw-r--r--po/lt/minetest.po38
-rw-r--r--po/lv/minetest.po19
-rw-r--r--po/minetest.pot18
-rw-r--r--po/ms/minetest.po214
-rw-r--r--po/ms_Arab/minetest.po21
-rw-r--r--po/nb/minetest.po21
-rw-r--r--po/nl/minetest.po196
-rw-r--r--po/nn/minetest.po390
-rw-r--r--po/pl/minetest.po20
-rw-r--r--po/pt/minetest.po109
-rw-r--r--po/pt_BR/minetest.po801
-rw-r--r--po/ro/minetest.po19
-rw-r--r--po/ru/minetest.po154
-rw-r--r--po/sk/minetest.po191
-rw-r--r--po/sl/minetest.po20
-rw-r--r--po/sr_Cyrl/minetest.po18
-rw-r--r--po/sr_Latn/minetest.po22
-rw-r--r--po/sv/minetest.po18
-rw-r--r--po/sw/minetest.po18
-rw-r--r--po/th/minetest.po20
-rw-r--r--po/tr/minetest.po227
-rw-r--r--po/uk/minetest.po19
-rw-r--r--po/vi/minetest.po18
-rw-r--r--po/zh_CN/minetest.po202
-rw-r--r--po/zh_TW/minetest.po559
-rw-r--r--src/CMakeLists.txt48
-rw-r--r--src/activeobjectmgr.h3
-rw-r--r--src/client/camera.cpp35
-rw-r--r--src/client/camera.h47
-rw-r--r--src/client/client.cpp16
-rw-r--r--src/client/client.h10
-rw-r--r--src/client/clientevent.h55
-rw-r--r--src/client/clientmap.cpp45
-rw-r--r--src/client/content_cao.cpp12
-rw-r--r--src/client/game.cpp261
-rw-r--r--src/client/guiscalingfilter.cpp2
-rw-r--r--src/client/hud.cpp2
-rw-r--r--src/client/inputhandler.cpp15
-rw-r--r--src/client/inputhandler.h2
-rw-r--r--src/client/joystick_controller.cpp6
-rw-r--r--src/client/keys.h2
-rw-r--r--src/client/mapblock_mesh.cpp6
-rw-r--r--src/client/minimap.cpp11
-rw-r--r--src/client/render/anaglyph.cpp2
-rw-r--r--src/client/render/interlaced.cpp4
-rw-r--r--src/client/renderingengine.cpp4
-rw-r--r--src/client/shader.h5
-rw-r--r--src/client/sky.cpp5
-rw-r--r--src/client/sound_openal.cpp4
-rw-r--r--src/client/tile.cpp11
-rw-r--r--src/client/wieldmesh.cpp33
-rw-r--r--src/content/mods.cpp55
-rw-r--r--src/convert_json.cpp11
-rw-r--r--src/convert_json.h3
-rw-r--r--src/defaultsettings.cpp5
-rw-r--r--src/emerge.cpp16
-rw-r--r--src/emerge.h7
-rw-r--r--src/gui/CMakeLists.txt1
-rw-r--r--src/gui/guiButton.cpp7
-rw-r--r--src/gui/guiButton.h35
-rw-r--r--src/gui/guiChatConsole.cpp8
-rw-r--r--src/gui/guiConfirmRegistration.cpp9
-rw-r--r--src/gui/guiEditBox.cpp23
-rw-r--r--src/gui/guiFormSpecMenu.cpp31
-rw-r--r--src/gui/guiKeyChangeMenu.cpp6
-rw-r--r--src/gui/guiScene.cpp15
-rw-r--r--src/gui/guiScene.h1
-rw-r--r--src/gui/intlGUIEditBox.cpp626
-rw-r--r--src/gui/intlGUIEditBox.h68
-rw-r--r--src/gui/touchscreengui.cpp18
-rw-r--r--src/gui/touchscreengui.h8
-rw-r--r--src/inventorymanager.cpp35
-rw-r--r--src/irrlicht_changes/CGUITTFont.cpp6
-rw-r--r--src/irrlicht_changes/static_text.cpp6
-rw-r--r--src/irrlicht_changes/static_text.h5
-rw-r--r--src/itemdef.cpp14
-rw-r--r--src/itemdef.h1
-rw-r--r--src/mapgen/mapgen.cpp4
-rw-r--r--src/mapgen/mapgen_valleys.cpp3
-rw-r--r--src/mapgen/mg_biome.cpp90
-rw-r--r--src/mapgen/mg_biome.h27
-rw-r--r--src/mapgen/mg_ore.h12
-rw-r--r--src/mapgen/mg_schematic.cpp129
-rw-r--r--src/mapgen/mg_schematic.h16
-rw-r--r--src/network/clientpackethandler.cpp74
-rw-r--r--src/network/serverpackethandler.cpp63
-rw-r--r--src/nodedef.cpp16
-rw-r--r--src/nodedef.h31
-rw-r--r--src/noise.cpp6
-rw-r--r--src/noise.h6
-rw-r--r--src/object_properties.cpp22
-rw-r--r--src/object_properties.h2
-rw-r--r--src/porting.h6
-rw-r--r--src/script/common/c_content.cpp26
-rw-r--r--src/script/common/helper.cpp24
-rw-r--r--src/script/common/helper.h3
-rw-r--r--src/script/lua_api/l_mapgen.cpp121
-rw-r--r--src/script/lua_api/l_object.cpp29
-rw-r--r--src/script/lua_api/l_settings.cpp78
-rw-r--r--src/server.cpp7
-rw-r--r--src/server/luaentity_sao.cpp13
-rw-r--r--src/server/mods.cpp3
-rw-r--r--src/server/mods.h8
-rw-r--r--src/server/player_sao.cpp32
-rw-r--r--src/server/serverinventorymgr.cpp12
-rw-r--r--src/server/serverinventorymgr.h1
-rw-r--r--src/serverlist.cpp5
-rw-r--r--src/settings.h2
-rw-r--r--src/settings_translation_file.cpp4
-rw-r--r--src/tool.cpp3
-rw-r--r--src/unittest/test_noderesolver.cpp2
-rw-r--r--src/unittest/test_schematic.cpp40
-rw-r--r--src/util/Optional.h77
-rw-r--r--src/util/numeric.cpp8
-rw-r--r--src/util/numeric.h4
-rw-r--r--src/util/serialize.h2
-rw-r--r--src/util/string.h10
-rw-r--r--textures/base/pack/aux1_btn.pngbin0 -> 1652 bytes
-rw-r--r--textures/base/pack/aux_btn.pngbin1900 -> 0 bytes
-rw-r--r--textures/base/pack/server_favorite.png (renamed from textures/base/pack/server_flags_favorite.png)bin916 -> 916 bytes
-rw-r--r--textures/base/pack/server_incompatible.pngbin0 -> 385 bytes
-rw-r--r--textures/base/pack/server_public.pngbin0 -> 492 bytes
-rwxr-xr-xutil/buildbot/buildwin32.sh26
-rwxr-xr-xutil/buildbot/buildwin64.sh20
-rw-r--r--util/buildbot/toolchain_i686-w64-mingw32-posix.cmake (renamed from util/buildbot/toolchain_i586-mingw32msvc.cmake)10
-rw-r--r--util/buildbot/toolchain_i686-w64-mingw32.cmake (renamed from util/buildbot/toolchain_i646-w64-mingw32.cmake)0
-rwxr-xr-xutil/ci/clang-format.sh (renamed from util/ci/lint.sh)25
-rw-r--r--util/ci/common.sh10
-rwxr-xr-xutil/fix_format.sh5
-rwxr-xr-xutil/gather_git_credits.py67
-rwxr-xr-xutil/updatepo.sh1
229 files changed, 7002 insertions, 5796 deletions
diff --git a/.clang-format b/.clang-format
index dc7380ffd..0db8ab167 100644
--- a/.clang-format
+++ b/.clang-format
@@ -29,3 +29,4 @@ AlignAfterOpenBracket: DontAlign
ContinuationIndentWidth: 16
ConstructorInitializerIndentWidth: 16
BreakConstructorInitializers: AfterColon
+AlwaysBreakTemplateDeclarations: Yes
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a3cc92a8e..ae24dc574 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -124,7 +124,7 @@ jobs:
- name: Install deps
run: |
source ./util/ci/common.sh
- install_linux_deps clang-9
+ install_linux_deps --old-irr clang-9
- name: Build prometheus-cpp
run: |
@@ -212,7 +212,10 @@ jobs:
msvc:
name: VS 2019 ${{ matrix.config.arch }}-${{ matrix.type }}
- runs-on: windows-2019
+ runs-on: windows-2019
+ #### Disabled due to Irrlicht switch
+ if: false
+ #### Disabled due to Irrlicht switch
env:
VCPKG_VERSION: 0bf3923f9fab4001c00f0f429682a0853b5749e0
# 2020.11
diff --git a/.github/workflows/cpp_lint.yml b/.github/workflows/cpp_lint.yml
index 1f97d105a..2bd884c7a 100644
--- a/.github/workflows/cpp_lint.yml
+++ b/.github/workflows/cpp_lint.yml
@@ -24,20 +24,21 @@ on:
- '.github/workflows/**.yml'
jobs:
- clang_format:
- runs-on: ubuntu-18.04
- steps:
- - uses: actions/checkout@v2
- - name: Install clang-format
- run: |
- sudo apt-get install clang-format-9 -qyy
- - name: Run clang-format
- run: |
- source ./util/ci/lint.sh
- perform_lint
- env:
- CLANG_FORMAT: clang-format-9
+# clang_format:
+# runs-on: ubuntu-18.04
+# steps:
+# - uses: actions/checkout@v2
+# - name: Install clang-format
+# run: |
+# sudo apt-get install clang-format-9 -qyy
+#
+# - name: Run clang-format
+# run: |
+# source ./util/ci/clang-format.sh
+# check_format
+# env:
+# CLANG_FORMAT: clang-format-9
clang_tidy:
runs-on: ubuntu-18.04
diff --git a/.gitignore b/.gitignore
index 52f8bc4f4..d951f2222 100644
--- a/.gitignore
+++ b/.gitignore
@@ -86,8 +86,7 @@ src/test_config.h
src/cmake_config.h
src/cmake_config_githash.h
src/unittest/test_world/world.mt
-src/lua/build/
-locale/
+/locale/
.directory
*.cbp
*.layout
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0441aeaa1..39ff576cf 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -9,16 +9,24 @@ stages:
- deploy
variables:
+ IRRLICHT_TAG: "1.9.0mt0"
MINETEST_GAME_REPO: "https://github.com/minetest/minetest_game.git"
CONTAINER_IMAGE: registry.gitlab.com/$CI_PROJECT_PATH
.build_template:
stage: build
+ before_script:
+ - apt-get update
+ - 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
script:
+ - git clone https://github.com/minetest/irrlicht -b $IRRLICHT_TAG
+ - cd irrlicht
+ - cmake . -DBUILD_SHARED_LIBS=OFF
+ - make -j2
+ - cd ..
- mkdir cmakebuild
- - mkdir -p artifact/minetest/usr/
- cd cmakebuild
- - cmake -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DCMAKE_BUILD_TYPE=Release -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE -DENABLE_SYSTEM_JSONCPP=TRUE -DBUILD_SERVER=TRUE ..
+ - cmake -DIRRLICHT_LIBRARY=$PWD/../irrlicht/lib/Linux/libIrrlicht.a -DIRRLICHT_INCLUDE_DIR=$PWD/../irrlicht/include -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DCMAKE_BUILD_TYPE=Release -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE -DBUILD_SERVER=TRUE ..
- make -j2
- make install
artifacts:
@@ -30,7 +38,7 @@ variables:
.debpkg_template:
stage: package
before_script:
- - apt-get update -y
+ - apt-get update
- apt-get install -y git
- mkdir -p build/deb/minetest/DEBIAN/
- cp misc/debpkg-control build/deb/minetest/DEBIAN/control
@@ -39,6 +47,7 @@ variables:
- git clone $MINETEST_GAME_REPO build/deb/minetest/usr/share/minetest/games/minetest_game
- rm -rf build/deb/minetest/usr/share/minetest/games/minetest/.git
- sed -i 's/DATEPLACEHOLDER/'$(date +%y.%m.%d)'/g' build/deb/minetest/DEBIAN/control
+ - sed -i 's/JPEG_PLACEHOLDER/'$JPEG_PKG'/g' build/deb/minetest/DEBIAN/control
- sed -i 's/LEVELDB_PLACEHOLDER/'$LEVELDB_PKG'/g' build/deb/minetest/DEBIAN/control
- cd build/deb/ && dpkg-deb -b minetest/ && mv minetest.deb ../../
artifacts:
@@ -49,7 +58,7 @@ variables:
.debpkg_install:
stage: deploy
before_script:
- - apt-get update -y
+ - apt-get update
script:
- apt-get install -y ./*.deb
- minetest --version
@@ -63,9 +72,6 @@ variables:
build:debian-9:
extends: .build_template
image: debian:9
- before_script:
- - apt-get update -y
- - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
package:debian-9:
extends: .debpkg_template
@@ -74,6 +80,7 @@ package:debian-9:
- build:debian-9
variables:
LEVELDB_PKG: libleveldb1v5
+ JPEG_PKG: libjpeg62-turbo
deploy:debian-9:
extends: .debpkg_install
@@ -86,9 +93,6 @@ deploy:debian-9:
build:debian-10:
extends: .build_template
image: debian:10
- before_script:
- - apt-get update -y
- - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
package:debian-10:
extends: .debpkg_template
@@ -97,6 +101,7 @@ package:debian-10:
- build:debian-10
variables:
LEVELDB_PKG: libleveldb1d
+ JPEG_PKG: libjpeg62-turbo
deploy:debian-10:
extends: .debpkg_install
@@ -113,9 +118,6 @@ deploy:debian-10:
build:ubuntu-16.04:
extends: .build_template
image: ubuntu:xenial
- before_script:
- - apt-get update -y
- - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
package:ubuntu-16.04:
extends: .debpkg_template
@@ -124,6 +126,7 @@ package:ubuntu-16.04:
- build:ubuntu-16.04
variables:
LEVELDB_PKG: libleveldb1v5
+ JPEG_PKG: libjpeg-turbo8
deploy:ubuntu-16.04:
extends: .debpkg_install
@@ -136,9 +139,6 @@ deploy:ubuntu-16.04:
build:ubuntu-18.04:
extends: .build_template
image: ubuntu:bionic
- before_script:
- - apt-get update -y
- - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
package:ubuntu-18.04:
extends: .debpkg_template
@@ -147,6 +147,7 @@ package:ubuntu-18.04:
- build:ubuntu-18.04
variables:
LEVELDB_PKG: libleveldb1v5
+ JPEG_PKG: libjpeg-turbo8
deploy:ubuntu-18.04:
extends: .debpkg_install
@@ -163,7 +164,7 @@ build:fedora-28:
extends: .build_template
image: fedora:28
before_script:
- - dnf -y install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel irrlicht-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel
+ - dnf -y install make git gcc gcc-c++ kernel-devel cmake libjpeg-devel libpng-devel libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel
##
## MinGW for Windows
@@ -172,7 +173,7 @@ build:fedora-28:
.generic_win_template:
image: ubuntu:bionic
before_script:
- - apt-get update -y
+ - apt-get update
- apt-get install -y wget xz-utils unzip git cmake gettext
- wget -nv http://minetest.kitsunemimi.pw/mingw-w64-${WIN_ARCH}_9.2.0_ubuntu18.04.tar.xz -O mingw.tar.xz
- tar -xaf mingw.tar.xz -C /usr
@@ -183,13 +184,13 @@ build:fedora-28:
artifacts:
expire_in: 1h
paths:
- - build/minetest/_build/*
+ - _build/*
.package_win_template:
extends: .generic_win_template
stage: package
script:
- - unzip build/minetest/_build/minetest-*.zip
+ - unzip _build/minetest-*.zip
- cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libgcc*.dll minetest-*-win*/bin/
- cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libstdc++*.dll minetest-*-win*/bin/
- cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libwinpthread*.dll minetest-*-win*/bin/
@@ -201,7 +202,7 @@ build:fedora-28:
build:win32:
extends: .build_win_template
script:
- - ./util/buildbot/buildwin32.sh build
+ - EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin32.sh build
variables:
WIN_ARCH: "i686"
@@ -216,7 +217,7 @@ package:win32:
build:win64:
extends: .build_win_template
script:
- - ./util/buildbot/buildwin64.sh build
+ - EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin64.sh build
variables:
WIN_ARCH: "x86_64"
diff --git a/.mailmap b/.mailmap
index c487460a0..fcc763411 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1,33 +1,67 @@
+# Documentation: https://git-scm.com/docs/git-check-mailmap#_mapping_authors
+
0gb.us <0gb.us@0gb.us> <us_0gb@laptop-0gb-us.0gb.us>
-Calinou <calinou9999@gmail.com> <calinou9999spam@gmail.com>
-Perttu Ahola <celeron55@gmail.com> celeron55 <celeron55@gmail.com>
+Calinou <calinou@opmbx.org> <calinou9999@gmail.com>
+Calinou <calinou@opmbx.org> <calinou9999spam@gmail.com>
+Perttu Ahola <celeron55@gmail.com>
Perttu Ahola <celeron55@gmail.com> celeron55 <celeron55@armada.(none)>
-Craig Robbins <kde.psych@gmail.com> <crobbins@localhost.localdomain>
+Zeno- <kde.psych@gmail.com>
+Zeno- <kde.psych@gmail.com> <crobbins@localhost.localdomain>
+Diego Martínez <kaeza@users.sf.net>
Diego Martínez <kaeza@users.sf.net> <lkaezadl3@gmail.com>
+Ilya Zhuravlev <zhuravlevilya@ya.ru>
Ilya Zhuravlev <zhuravlevilya@ya.ru> <whatever@xyz.is>
kwolekr <kwolekr@minetest.net> <mirrorisim@gmail.com>
-PilzAdam <pilzadam@minetest.net> PilzAdam <adam-k@outlook.com>
-PilzAdam <pilzadam@minetest.net> Pilz Adam <PilzAdam@gmx.de>
-PilzAdam <pilzadam@minetest.net> PilzAdam <PilzAdam@gmx.de>
+PilzAdam <pilzadam@minetest.net> <adam-k@outlook.com>
+PilzAdam <pilzadam@minetest.net> <PilzAdam@gmx.de>
proller <proller@github.com> <proler@github.com>
proller <proller@github.com> <proler@gmail.com>
RealBadAngel <maciej.kasatkin@o2.pl> <mk@realbadangel.pl>
RealBadAngel <maciej.kasatkin@o2.pl> <maciej.kasatkin@yahoo.com>
Selat <LongExampleTestName@gmail.com> <LongExampletestName@gmail.com>
ShadowNinja <shadowninja@minetest.net> ShadowNinja <noreply@gmail.com>
-Shen Zheyu <arsdragonfly@gmail.com> arsdragonfly <arsdragonfly@gmail.com>
-Pavel Elagin <elagin.pasha@gmail.com> elagin <elagin.pasha@gmail.com>
-Esteban I. Ruiz Moreno <exio4.com@gmail.com> Esteban I. RM <exio4.com@gmail.com>
-manuel duarte <ffrogger0@yahoo.com> manuel joaquim <ffrogger0@yahoo.com>
-manuel duarte <ffrogger0@yahoo.com> sweetbomber <ffrogger _zero_ at yahoo dot com>
-Diego Martínez <kaeza@users.sf.net> kaeza <kaeza@users.sf.net>
-Diego Martínez <kaeza@users.sf.net> Diego Martinez <kaeza@users.sf.net>
-Lord James <neftali_dtctv@hotmail.com> Lord89James <neftali_dtctv@hotmail.com>
-BlockMen <nmuelll@web.de> Block Men <nmuelll@web.de>
-sfan5 <sfan5@live.de> Sfan5 <sfan5@live.de>
-DannyDark <the_skeleton_of_a_child@yahoo.co.uk> dannydark <the_skeleton_of_a_child@yahoo.co.uk>
-Ilya Pavlov <TTChangeTheWorld@gmail.com> Ilya <TTChangeTheWorld@gmail.com>
-Ilya Zhuravlev <zhuravlevilya@ya.ru> xyzz <zhuravlevilya@ya.ru>
+Esteban I. Ruiz Moreno <exio4.com@gmail.com>
+Esteban I. Ruiz Moreno <exio4.com@gmail.com> <me@exio4.xyz>
+Lord James <neftali_dtctv@hotmail.com>
+BlockMen <nmuelll@web.de>
+sfan5 <sfan5@live.de>
+DannyDark <the_skeleton_of_a_child@yahoo.co.uk>
+Ilya Pavlov <TTChangeTheWorld@gmail.com>
sapier <Sapier at GMX dot net> sapier <sapier AT gmx DOT net>
sapier <Sapier at GMX dot net> sapier <sapier at gmx dot net>
-
+SmallJoker <SmallJoker@users.noreply.github.com> <mk939@ymail.com>
+Loïc Blot <nerzhul@users.noreply.github.com>
+Loïc Blot <nerzhul@users.noreply.github.com> <loic.blot@unix-experience.fr>
+numzero <numzer0@yandex.ru> Vitaliy <numzer0@yandex.ru>
+numzero <numzer0@yandex.ru> <silverunicorn2011@yandex.ru>
+Jean-Patrick Guerrero <kilbith@users.noreply.github.com>
+Jean-Patrick Guerrero <kilbith@users.noreply.github.com> <jeanpatrick.guerrero@gmail.com>
+HybridDog <3192173+HybridDog@users.noreply.github.com> <ovvv@web.de>
+srfqi <muhammadrifqipriyosusanto@gmail.com>
+Dániel Juhász <juhdanad@gmail.com>
+rubenwardy <rw@rubenwardy.com>
+rubenwardy <rw@rubenwardy.com> <rubenwardy@gmail.com>
+Paul Ouellette <oue.paul18@gmail.com>
+Vanessa Dannenberg <vanessa.e.dannenberg@gmail.com> <vanessaezekowitz@gmail.com>
+ClobberXD <ClobberXD@gmail.com>
+ClobberXD <ClobberXD@gmail.com> <ClobberXD@protonmail.com>
+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>
+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>
+Jordach <jordach.snelling@gmail.com>
+MoNTE48 <MoNTE48@mail.ua>
+v-rob <robinsonvincent89@gmail.com>
+v-rob <robinsonvincent89@gmail.com> <31123645+v-rob@users.noreply.github.com>
+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>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2549bd25d..e4bda3afb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,5 @@
cmake_minimum_required(VERSION 3.5)
-cmake_policy(SET CMP0025 OLD)
-
# This can be read from ${PROJECT_NAME} after project() is called
project(minetest)
set(PROJECT_NAME_CAPITALIZED "Minetest")
@@ -12,7 +10,7 @@ set(CLANG_MINIMUM_VERSION "3.4")
# Also remember to set PROTOCOL_VERSION in network/networkprotocol.h when releasing
set(VERSION_MAJOR 5)
-set(VERSION_MINOR 4)
+set(VERSION_MINOR 5)
set(VERSION_PATCH 0)
set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
@@ -61,6 +59,29 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
# This is done here so that relative search paths are more reasonable
find_package(Irrlicht)
+if(BUILD_CLIENT AND NOT IRRLICHT_FOUND)
+ message(FATAL_ERROR "Irrlicht is required to build the client, but it was not found.")
+elseif(IRRLICHT_INCLUDE_DIR STREQUAL "")
+ message(FATAL_ERROR "Irrlicht headers are required to build the server, but none found.")
+endif()
+
+include(CheckSymbolExists)
+set(CMAKE_REQUIRED_INCLUDES ${IRRLICHT_INCLUDE_DIR})
+unset(HAS_FORKED_IRRLICHT CACHE)
+check_symbol_exists(IRRLICHT_VERSION_MT "IrrCompileConfig.h" HAS_FORKED_IRRLICHT)
+if(NOT HAS_FORKED_IRRLICHT)
+ string(CONCAT EXPLANATION_MSG
+ "Irrlicht found, but it is not Minetest's Irrlicht fork. "
+ "The Minetest team has forked Irrlicht to make their own customizations. "
+ "It can be found here: https://github.com/minetest/irrlicht")
+ if(BUILD_CLIENT)
+ message(FATAL_ERROR "${EXPLANATION_MSG}\n"
+ "Building the client with upstream Irrlicht is no longer possible.")
+ else()
+ message(WARNING "${EXPLANATION_MSG}\n"
+ "The server can still be built with upstream Irrlicht but this is DISCOURAGED.")
+ endif()
+endif()
# Installation
@@ -169,7 +190,6 @@ install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/devtest" DESTINATION "${SHA
if(BUILD_CLIENT)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/client/shaders" DESTINATION "${SHAREDIR}/client")
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/textures/base/pack" DESTINATION "${SHAREDIR}/textures/base")
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fonts" DESTINATION "${SHAREDIR}")
if(RUN_IN_PLACE)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/clientmods" DESTINATION "${SHAREDIR}")
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/client/serverlist" DESTINATION "${SHAREDIR}/client")
@@ -204,8 +224,8 @@ find_package(GMP REQUIRED)
find_package(Json REQUIRED)
find_package(Lua REQUIRED)
-# JsonCPP doesn't compile well on GCC 4.8
-if(NOT ENABLE_SYSTEM_JSONCPP)
+# JsonCpp doesn't compile well on GCC 4.8
+if(NOT USE_SYSTEM_JSONCPP)
set(GCC_MINIMUM_VERSION "4.9")
endif()
@@ -214,7 +234,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
message(FATAL_ERROR "Insufficient gcc version, found ${CMAKE_CXX_COMPILER_VERSION}. "
"Version ${GCC_MINIMUM_VERSION} or higher is required.")
endif()
-elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+elseif(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?Clang")
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "${CLANG_MINIMUM_VERSION}")
message(FATAL_ERROR "Insufficient clang version, found ${CMAKE_CXX_COMPILER_VERSION}. "
"Version ${CLANG_MINIMUM_VERSION} or higher is required.")
diff --git a/Dockerfile b/Dockerfile
index 871ca9825..33eba64ca 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -51,7 +51,7 @@ RUN mkdir build && \
FROM alpine:3.11
-RUN apk add --no-cache sqlite-libs curl gmp libstdc++ libgcc libpq luajit && \
+RUN apk add --no-cache sqlite-libs curl gmp libstdc++ libgcc libpq luajit jsoncpp && \
adduser -D minetest --uid 30000 -h /var/lib/minetest && \
chown -R minetest:minetest /var/lib/minetest
diff --git a/LICENSE.txt b/LICENSE.txt
index 9b8ee851a..2d1c0c795 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -14,6 +14,9 @@ https://www.apache.org/licenses/LICENSE-2.0.html
Textures by Zughy are under CC BY-SA 4.0
https://creativecommons.org/licenses/by-sa/4.0/
+textures/base/pack/server_public.png is under CC-BY 4.0, taken from Twitter's Twemoji set
+https://creativecommons.org/licenses/by/4.0/
+
Authors of media files
-----------------------
Everything not listed in here:
@@ -39,10 +42,10 @@ erlehmann:
misc/minetest.svg
textures/base/pack/logo.png
-JRottm
+JRottm:
textures/base/pack/player_marker.png
-srifqi
+srifqi:
textures/base/pack/chat_hide_btn.png
textures/base/pack/chat_show_btn.png
textures/base/pack/joystick_bg.png
@@ -58,6 +61,9 @@ Zughy:
textures/base/pack/cdb_update.png
textures/base/pack/cdb_viewonline.png
+appgurueu:
+ textures/base/pack/server_incompatible.png
+
License of Minetest source code
-------------------------------
diff --git a/README.md b/README.md
index a06c3e257..e767f1fe3 100644
--- a/README.md
+++ b/README.md
@@ -31,10 +31,10 @@ Table of Contents
Further documentation
----------------------
-- Website: http://minetest.net/
-- Wiki: http://wiki.minetest.net/
-- Developer wiki: http://dev.minetest.net/
-- Forum: http://forum.minetest.net/
+- Website: https://minetest.net/
+- Wiki: https://wiki.minetest.net/
+- Developer wiki: https://dev.minetest.net/
+- Forum: https://forum.minetest.net/
- GitHub: https://github.com/minetest/minetest/
- [doc/](doc/) directory of source distribution
@@ -68,7 +68,7 @@ Some can be changed in the key config dialog in the settings tab.
| P | Enable/disable pitch move mode |
| J | Enable/disable fast mode (needs fast privilege) |
| H | Enable/disable noclip mode (needs noclip privilege) |
-| E | Move fast in fast mode |
+| E | Aux1 (Move fast in fast mode. Games may add special features) |
| C | Cycle through camera modes |
| V | Cycle through minimap modes |
| Shift + V | Change minimap orientation |
@@ -134,7 +134,7 @@ Compiling
|------------|---------|------------|
| GCC | 4.9+ | Can be replaced with Clang 3.4+ |
| CMake | 2.6+ | |
-| Irrlicht | 1.7.3+ | |
+| Irrlicht | - | Custom version required, see https://github.com/minetest/irrlicht |
| SQLite3 | 3.0+ | |
| LuaJIT | 2.0+ | Bundled Lua 5.1 is used if not present |
| GMP | 5.0.0+ | Bundled mini-GMP is used if not present |
@@ -142,19 +142,19 @@ Compiling
For Debian/Ubuntu users:
- sudo apt install g++ make libc6-dev libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
+ sudo apt install g++ make libc6-dev cmake libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
For Fedora users:
- sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel irrlicht-devel bzip2-libs gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel doxygen spatialindex-devel bzip2-devel
+ sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel
For Arch users:
- sudo pacman -S base-devel libcurl-gnutls cmake libxxf86vm irrlicht libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses
+ sudo pacman -S base-devel libcurl-gnutls cmake libxxf86vm libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses
For Alpine users:
- sudo apk add build-base irrlicht-dev cmake bzip2-dev libpng-dev jpeg-dev libxxf86vm-dev mesa-dev sqlite-dev libogg-dev libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev gmp-dev jsoncpp-dev luajit-dev
+ sudo apk add build-base cmake libpng-dev jpeg-dev libxxf86vm-dev mesa-dev sqlite-dev libogg-dev libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev gmp-dev jsoncpp-dev luajit-dev
#### Download
@@ -209,8 +209,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 Irrlicht installed.
- - In that case use `-DIRRLICHT_SOURCE_DIR=/the/irrlicht/source`.
+- If you build a bare server you don't need to have the Irrlicht library installed.
+ - In that case use `-DIRRLICHT_INCLUDE_DIR=/some/where/irrlicht/include`.
### CMake options
@@ -238,7 +238,7 @@ General options and their default values:
ENABLE_LUAJIT=ON - Build with LuaJIT (much faster than non-JIT Lua)
ENABLE_PROMETHEUS=OFF - Build with Prometheus metrics exporter (listens on tcp/30000 by default)
ENABLE_SYSTEM_GMP=ON - Use GMP from system (much faster than bundled mini-gmp)
- ENABLE_SYSTEM_JSONCPP=OFF - Use JsonCPP from system
+ ENABLE_SYSTEM_JSONCPP=ON - Use JsonCPP from system
OPENGL_GL_PREFERENCE=LEGACY - Linux client build only; See CMake Policy CMP0072 for reference
RUN_IN_PLACE=FALSE - Create a portable install (worlds, settings etc. in current directory)
USE_GPROF=FALSE - Enable profiling using GProf
@@ -246,8 +246,6 @@ General options and their default values:
Library specific options:
- BZIP2_INCLUDE_DIR - Linux only; directory where bzlib.h is located
- BZIP2_LIBRARY - Linux only; path to libbz2.a/libbz2.so
CURL_DLL - Only if building with cURL on Windows; path to libcurl.dll
CURL_INCLUDE_DIR - Only if building with cURL; directory where curl.h is located
CURL_LIBRARY - Only if building with cURL; path to libcurl.a/libcurl.so/libcurl.lib
@@ -257,8 +255,7 @@ Library specific options:
FREETYPE_INCLUDE_DIR_ft2build - Only if building with FreeType 2; directory that contains ft2build.h
FREETYPE_LIBRARY - Only if building with FreeType 2; path to libfreetype.a/libfreetype.so/freetype.lib
FREETYPE_DLL - Only if building with FreeType 2 on Windows; path to libfreetype.dll
- GETTEXT_DLL - Only when building with gettext on Windows; path to libintl3.dll
- GETTEXT_ICONV_DLL - Only when building with gettext on Windows; path to libiconv2.dll
+ GETTEXT_DLL - Only when building with gettext on Windows; paths to libintl + libiconv DLLs
GETTEXT_INCLUDE_DIR - Only when building with gettext; directory that contains iconv.h
GETTEXT_LIBRARY - Only when building with gettext on Windows; path to libintl.dll.a
GETTEXT_MSGFMT - Only when building with gettext; path to msgfmt/msgfmt.exe
@@ -276,7 +273,6 @@ Library specific options:
SPATIAL_LIBRARY - Only when building with LibSpatial; path to libspatialindex_c.so/spatialindex-32.lib
LUA_INCLUDE_DIR - Only if you want to use LuaJIT; directory where luajit.h is located
LUA_LIBRARY - Only if you want to use LuaJIT; path to libluajit.a/libluajit.so
- MINGWM10_DLL - Only if compiling with MinGW; path to mingwm10.dll
OGG_DLL - Only if building with sound on Windows; path to libogg.dll
OGG_INCLUDE_DIR - Only if building with sound; directory that contains an ogg directory which contains ogg.h
OGG_LIBRARY - Only if building with sound; path to libogg.a/libogg.so/libogg.dll.a
@@ -287,9 +283,8 @@ Library specific options:
OPENGLES2_LIBRARY - Only if building with GLES; path to libGLESv2.a/libGLESv2.so
SQLITE3_INCLUDE_DIR - Directory that contains sqlite3.h
SQLITE3_LIBRARY - Path to libsqlite3.a/libsqlite3.so/sqlite3.lib
- VORBISFILE_DLL - Only if building with sound on Windows; path to libvorbisfile-3.dll
VORBISFILE_LIBRARY - Only if building with sound; path to libvorbisfile.a/libvorbisfile.so/libvorbisfile.dll.a
- VORBIS_DLL - Only if building with sound on Windows; path to libvorbis-0.dll
+ VORBIS_DLL - Only if building with sound on Windows; paths to vorbis DLLs
VORBIS_INCLUDE_DIR - Only if building with sound; directory that contains a directory vorbis with vorbisenc.h inside
VORBIS_LIBRARY - Only if building with sound; path to libvorbis.a/libvorbis.so/libvorbis.dll.a
XXF86VM_LIBRARY - Only on Linux; path to libXXf86vm.a/libXXf86vm.so
@@ -314,9 +309,10 @@ It is highly recommended to use vcpkg as package manager.
After you successfully built vcpkg you can easily install the required libraries:
```powershell
-vcpkg install irrlicht zlib curl[winssl] openal-soft libvorbis libogg sqlite3 freetype luajit gmp jsoncpp --triplet x64-windows
+vcpkg install zlib curl[winssl] openal-soft libvorbis libogg sqlite3 freetype luajit gmp jsoncpp --triplet x64-windows
```
+- **Note that you currently need to build irrlicht on your own**
- `curl` is optional, but required to read the serverlist, `curl[winssl]` is required to use the content store.
- `openal-soft`, `libvorbis` and `libogg` are optional, but required to use sound.
- `freetype` is optional, it allows true-type font rendering.
@@ -354,7 +350,7 @@ This is outdated and not recommended. Follow the instructions on https://dev.min
Run the following script in PowerShell:
```powershell
-cmake . -G"Visual Studio 15 2017 Win64" -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GETTEXT=OFF -DENABLE_CURSES=OFF -DENABLE_SYSTEM_JSONCPP=ON
+cmake . -G"Visual Studio 15 2017 Win64" -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GETTEXT=OFF -DENABLE_CURSES=OFF
cmake --build . --config Release
```
Make sure that the right compiler is selected and the path to the vcpkg toolchain is correct.
diff --git a/build/android/build.gradle b/build/android/build.gradle
index 61b24caab..3ba51a4bb 100644
--- a/build/android/build.gradle
+++ b/build/android/build.gradle
@@ -1,10 +1,10 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
project.ext.set("versionMajor", 5) // Version Major
-project.ext.set("versionMinor", 4) // Version Minor
+project.ext.set("versionMinor", 5) // Version Minor
project.ext.set("versionPatch", 0) // Version Patch
project.ext.set("versionExtra", "-dev") // Version Extra
-project.ext.set("versionCode", 30) // Android Version Code
+project.ext.set("versionCode", 32) // Android Version Code
// NOTE: +2 after each release!
// +1 for ARM and +1 for ARM64 APK's, because
// each APK must have a larger `versionCode` than the previous
diff --git a/build/android/icons/aux1_btn.svg b/build/android/icons/aux1_btn.svg
new file mode 100644
index 000000000..e0ee97c0c
--- /dev/null
+++ b/build/android/icons/aux1_btn.svg
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ inkscape:export-ydpi="24.000002"
+ inkscape:export-xdpi="24.000002"
+ inkscape:export-filename="/home/stu/Desktop/icons/png/aux_btn.png"
+ sodipodi:docname="aux_btn.svg"
+ inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+ id="svg8"
+ version="1.1"
+ viewBox="0 0 135.46666 135.46667"
+ height="512"
+ width="512">
+ <defs
+ id="defs2" />
+ <sodipodi:namedview
+ inkscape:document-rotation="0"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-others="true"
+ inkscape:snap-object-midpoints="false"
+ inkscape:snap-to-guides="true"
+ inkscape:snap-bbox="true"
+ showguides="true"
+ inkscape:snap-page="true"
+ inkscape:snap-grids="false"
+ inkscape:pagecheckerboard="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="31"
+ inkscape:window-x="0"
+ inkscape:window-height="1024"
+ inkscape:window-width="1920"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer2"
+ inkscape:document-units="mm"
+ inkscape:cy="212.91276"
+ inkscape:cx="201.43176"
+ inkscape:zoom="1.4633894"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#404040"
+ id="base">
+ <inkscape:grid
+ empopacity="0.25098039"
+ empcolor="#40ff40"
+ opacity="0.1254902"
+ color="#40ff40"
+ empspacing="4"
+ spacingy="0.26458333"
+ spacingx="0.26458333"
+ id="grid16"
+ type="xygrid" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Notice" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Attribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ style="display:inline"
+ inkscape:label="Layer 2"
+ id="layer2"
+ inkscape:groupmode="layer">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7055"
+ d=""
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7035"
+ d=""
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7005"
+ d=""
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5127"
+ d=""
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <text
+ transform="scale(1.0078883,0.99217343)"
+ id="text4716"
+ y="85.59491"
+ x="67.78315"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48.4785px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#d9d9d9;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="fill:#d9d9d9;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ y="85.59491"
+ x="67.78315"
+ id="tspan4714"
+ sodipodi:role="line">Aux1</tspan></text>
+ <flowRoot
+ transform="scale(0.26458333)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
+ id="flowRoot4718"
+ xml:space="preserve"><flowRegion
+ style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
+ id="flowRegion4720"><rect
+ style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
+ y="124.10143"
+ x="264.65997"
+ height="136.37059"
+ width="157.5838"
+ id="rect4722" /></flowRegion><flowPara
+ id="flowPara4724" /></flowRoot>
+ </g>
+</svg>
diff --git a/build/android/icons/aux_btn.svg b/build/android/icons/aux_btn.svg
deleted file mode 100644
index 6bbefff67..000000000
--- a/build/android/icons/aux_btn.svg
+++ /dev/null
@@ -1,411 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="512"
- height="512"
- viewBox="0 0 135.46666 135.46667"
- version="1.1"
- id="svg8"
- inkscape:version="0.92.1 r15371"
- sodipodi:docname="aux_btn.svg"
- inkscape:export-filename="/home/stu/Desktop/icons/png/aux_btn.png"
- inkscape:export-xdpi="24.000002"
- inkscape:export-ydpi="24.000002">
- <defs
- id="defs2">
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Colorize"
- id="filter4628">
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="0"
- k2="1"
- result="composite1"
- id="feComposite4614" />
- <feColorMatrix
- in="composite1"
- values="1"
- type="saturate"
- result="colormatrix1"
- id="feColorMatrix4616" />
- <feFlood
- flood-opacity="1"
- flood-color="rgb(158,0,0)"
- result="flood1"
- id="feFlood4618" />
- <feBlend
- in="flood1"
- in2="colormatrix1"
- mode="multiply"
- result="blend1"
- id="feBlend4620" />
- <feBlend
- in2="blend1"
- mode="screen"
- result="blend2"
- id="feBlend4622" />
- <feColorMatrix
- in="blend2"
- values="1"
- type="saturate"
- result="colormatrix2"
- id="feColorMatrix4624" />
- <feComposite
- in="colormatrix2"
- in2="SourceGraphic"
- operator="in"
- k2="1"
- result="composite2"
- id="feComposite4626" />
- </filter>
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Sharpen More"
- id="filter5109"
- inkscape:menu="Image Effects"
- inkscape:menu-tooltip="Sharpen edges and boundaries within the object, force=0.3">
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="0"
- k2="1"
- result="composite1"
- id="feComposite5095" />
- <feColorMatrix
- in="composite1"
- values="1"
- type="saturate"
- result="colormatrix1"
- id="feColorMatrix5097" />
- <feFlood
- flood-opacity="1"
- flood-color="rgb(158,67,0)"
- result="flood1"
- id="feFlood5099" />
- <feBlend
- in="flood1"
- in2="colormatrix1"
- mode="multiply"
- result="blend1"
- id="feBlend5101" />
- <feBlend
- in2="blend1"
- mode="screen"
- result="blend2"
- id="feBlend5103" />
- <feColorMatrix
- in="blend2"
- values="1"
- type="saturate"
- result="colormatrix2"
- id="feColorMatrix5105" />
- <feComposite
- in="colormatrix2"
- in2="SourceGraphic"
- operator="in"
- k2="1"
- result="fbSourceGraphic"
- id="feComposite5107" />
- <feColorMatrix
- result="fbSourceGraphicAlpha"
- in="fbSourceGraphic"
- values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
- id="feColorMatrix5111" />
- <feComposite
- in2="fbSourceGraphic"
- id="feComposite5113"
- operator="arithmetic"
- k1="0"
- k2="1"
- result="composite1"
- in="fbSourceGraphic" />
- <feColorMatrix
- id="feColorMatrix5115"
- in="composite1"
- values="1"
- type="saturate"
- result="colormatrix1" />
- <feFlood
- id="feFlood5117"
- flood-opacity="1"
- flood-color="rgb(158,0,0)"
- result="flood1" />
- <feBlend
- in2="colormatrix1"
- id="feBlend5119"
- in="flood1"
- mode="multiply"
- result="blend1" />
- <feBlend
- in2="blend1"
- id="feBlend5121"
- mode="screen"
- result="blend2" />
- <feColorMatrix
- id="feColorMatrix5123"
- in="blend2"
- values="1"
- type="saturate"
- result="colormatrix2" />
- <feComposite
- in2="fbSourceGraphic"
- id="feComposite5125"
- in="colormatrix2"
- operator="in"
- k2="1"
- result="fbSourceGraphic" />
- <feColorMatrix
- result="fbSourceGraphicAlpha"
- in="fbSourceGraphic"
- values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
- id="feColorMatrix7007" />
- <feConvolveMatrix
- id="feConvolveMatrix7009"
- order="3 3"
- kernelMatrix="0 -0.15 0 -0.15 1.6 -0.15 0 -0.15 0"
- divisor="1"
- in="fbSourceGraphic"
- targetX="1"
- targetY="1"
- result="fbSourceGraphic" />
- <feColorMatrix
- result="fbSourceGraphicAlpha"
- in="fbSourceGraphic"
- values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
- id="feColorMatrix7011" />
- <feConvolveMatrix
- id="feConvolveMatrix7013"
- targetY="1"
- targetX="1"
- in="fbSourceGraphic"
- divisor="1"
- kernelMatrix="0 -0.3 0 -0.3 2.2 -0.3 0 -0.3 0"
- order="3 3"
- result="result1" />
- <feBlend
- in2="fbSourceGraphic"
- id="feBlend7015"
- mode="normal"
- result="result2" />
- </filter>
- <marker
- style="overflow:visible"
- refY="0.0"
- refX="0.0"
- orient="auto"
- id="DistanceX">
- <path
- id="path7410"
- style="stroke:#000000; stroke-width:0.5"
- d="M 3,-3 L -3,3 M 0,-5 L 0,5" />
- </marker>
- <pattern
- y="0"
- x="0"
- width="8"
- patternUnits="userSpaceOnUse"
- id="Hatch"
- height="8">
- <path
- id="path7413"
- stroke-width="0.25"
- stroke="#000000"
- linecap="square"
- d="M8 4 l-4,4" />
- <path
- id="path7415"
- stroke-width="0.25"
- stroke="#000000"
- linecap="square"
- d="M6 2 l-4,4" />
- <path
- id="path7417"
- stroke-width="0.25"
- stroke="#000000"
- linecap="square"
- d="M4 0 l-4,4" />
- </pattern>
- <symbol
- id="*Model_Space" />
- <symbol
- id="*Paper_Space" />
- <symbol
- id="*Paper_Space0" />
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Colorize"
- id="filter4883">
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="0"
- k2="1"
- result="composite1"
- id="feComposite4869" />
- <feColorMatrix
- in="composite1"
- values="1"
- type="saturate"
- result="colormatrix1"
- id="feColorMatrix4871" />
- <feFlood
- flood-opacity="1"
- flood-color="rgb(158,21,0)"
- result="flood1"
- id="feFlood4873" />
- <feBlend
- in="flood1"
- in2="colormatrix1"
- mode="multiply"
- result="blend1"
- id="feBlend4875" />
- <feBlend
- in2="blend1"
- mode="screen"
- result="blend2"
- id="feBlend4877" />
- <feColorMatrix
- in="blend2"
- values="1"
- type="saturate"
- result="colormatrix2"
- id="feColorMatrix4879" />
- <feComposite
- in="colormatrix2"
- in2="SourceGraphic"
- operator="in"
- k2="1"
- result="composite2"
- id="feComposite4881" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#404040"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.98994949"
- inkscape:cx="-341.34157"
- inkscape:cy="210.02973"
- inkscape:document-units="mm"
- inkscape:current-layer="layer2"
- showgrid="true"
- units="px"
- inkscape:window-width="1920"
- inkscape:window-height="1023"
- inkscape:window-x="0"
- inkscape:window-y="34"
- inkscape:window-maximized="1"
- inkscape:pagecheckerboard="false"
- inkscape:snap-grids="false"
- inkscape:snap-page="true"
- showguides="true"
- inkscape:snap-bbox="true"
- inkscape:snap-to-guides="true"
- inkscape:snap-object-midpoints="false"
- inkscape:snap-others="true"
- inkscape:snap-bbox-midpoints="true">
- <inkscape:grid
- type="xygrid"
- id="grid16"
- spacingx="0.26458333"
- spacingy="0.26458333"
- empspacing="4"
- color="#40ff40"
- opacity="0.1254902"
- empcolor="#40ff40"
- empopacity="0.25098039" />
- </sodipodi:namedview>
- <metadata
- id="metadata5">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- <cc:license
- rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
- </cc:Work>
- <cc:License
- rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Reproduction" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Distribution" />
- <cc:requires
- rdf:resource="http://creativecommons.org/ns#Notice" />
- <cc:requires
- rdf:resource="http://creativecommons.org/ns#Attribution" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
- <cc:requires
- rdf:resource="http://creativecommons.org/ns#ShareAlike" />
- </cc:License>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="Layer 2"
- style="display:inline">
- <path
- style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d=""
- id="path7055"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d=""
- id="path7035"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d=""
- id="path7005"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d=""
- id="path5127"
- inkscape:connector-curvature="0" />
- <text
- xml:space="preserve"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48.47851181px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#d9d9d9;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- x="67.78315"
- y="85.59491"
- id="text4716"
- transform="scale(1.0078883,0.99217343)"><tspan
- sodipodi:role="line"
- id="tspan4714"
- x="67.78315"
- y="85.59491"
- style="fill:#d9d9d9;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">AUX</tspan></text>
- <flowRoot
- xml:space="preserve"
- id="flowRoot4718"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
- transform="scale(0.26458333)"><flowRegion
- id="flowRegion4720"
- style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"><rect
- id="rect4722"
- width="157.5838"
- height="136.37059"
- x="264.65997"
- y="124.10143"
- style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" /></flowRegion><flowPara
- id="flowPara4724" /></flowRoot> </g>
-</svg>
diff --git a/builtin/client/chatcommands.lua b/builtin/client/chatcommands.lua
index 0e8d4dd03..a563a6627 100644
--- a/builtin/client/chatcommands.lua
+++ b/builtin/client/chatcommands.lua
@@ -1,6 +1,5 @@
-- Minetest: builtin/client/chatcommands.lua
-
core.register_on_sending_chat_message(function(message)
if message:sub(1,2) == ".." then
return false
@@ -8,7 +7,7 @@ core.register_on_sending_chat_message(function(message)
local first_char = message:sub(1,1)
if first_char == "/" or first_char == "." then
- core.display_chat_message(core.gettext("issued command: ") .. message)
+ core.display_chat_message(core.gettext("Issued command: ") .. message)
end
if first_char ~= "." then
@@ -19,7 +18,7 @@ core.register_on_sending_chat_message(function(message)
param = param or ""
if not cmd then
- core.display_chat_message(core.gettext("-!- Empty command"))
+ core.display_chat_message("-!- " .. core.gettext("Empty command."))
return true
end
@@ -36,7 +35,7 @@ core.register_on_sending_chat_message(function(message)
core.display_chat_message(result)
end
else
- core.display_chat_message(core.gettext("-!- Invalid command: ") .. cmd)
+ core.display_chat_message("-!- " .. core.gettext("Invalid command: ") .. cmd)
end
return true
@@ -66,7 +65,7 @@ core.register_chatcommand("clear_chat_queue", {
description = core.gettext("Clear the out chat queue"),
func = function(param)
core.clear_out_chat_queue()
- return true, core.gettext("The out chat queue is now empty")
+ return true, core.gettext("The out chat queue is now empty.")
end,
})
diff --git a/builtin/client/death_formspec.lua b/builtin/client/death_formspec.lua
index e755ac5c1..7df0cbd75 100644
--- a/builtin/client/death_formspec.lua
+++ b/builtin/client/death_formspec.lua
@@ -2,7 +2,7 @@
-- handled by the engine.
core.register_on_death(function()
- core.display_chat_message("You died.")
+ core.display_chat_message(core.gettext("You died."))
local formspec = "size[11,5.5]bgcolor[#320000b4;true]" ..
"label[4.85,1.35;" .. fgettext("You died") ..
"]button_exit[4,3;3,0.5;btn_respawn;".. fgettext("Respawn") .."]"
diff --git a/builtin/common/chatcommands.lua b/builtin/common/chatcommands.lua
index 52edda659..c945e7bdb 100644
--- a/builtin/common/chatcommands.lua
+++ b/builtin/common/chatcommands.lua
@@ -1,5 +1,9 @@
-- Minetest: builtin/common/chatcommands.lua
+-- For server-side translations (if INIT == "game")
+-- Otherwise, use core.gettext
+local S = core.get_translator("__builtin")
+
core.registered_chatcommands = {}
function core.register_chatcommand(cmd, def)
@@ -29,25 +33,12 @@ function core.override_chatcommand(name, redefinition)
core.registered_chatcommands[name] = chatcommand
end
-local cmd_marker = "/"
-
-local function gettext(...)
- return ...
-end
-
-local function gettext_replace(text, replace)
- return text:gsub("$1", replace)
-end
-
-
-if INIT == "client" then
- cmd_marker = "."
- gettext = core.gettext
- gettext_replace = fgettext_ne
-end
-
local function do_help_cmd(name, param)
local function format_help_line(cmd, def)
+ local cmd_marker = "/"
+ if INIT == "client" then
+ cmd_marker = "."
+ end
local msg = core.colorize("#00ffff", cmd_marker .. cmd)
if def.params and def.params ~= "" then
msg = msg .. " " .. def.params
@@ -65,9 +56,21 @@ local function do_help_cmd(name, param)
end
end
table.sort(cmds)
- return true, gettext("Available commands: ") .. table.concat(cmds, " ") .. "\n"
- .. gettext_replace("Use '$1help <cmd>' to get more information,"
- .. " or '$1help all' to list everything.", cmd_marker)
+ local msg
+ if INIT == "game" then
+ msg = S("Available commands: @1",
+ table.concat(cmds, " ")) .. "\n"
+ .. S("Use '/help <cmd>' to get more "
+ .. "information, or '/help all' to list "
+ .. "everything.")
+ else
+ msg = core.gettext("Available commands: ")
+ .. table.concat(cmds, " ") .. "\n"
+ .. core.gettext("Use '.help <cmd>' to get more "
+ .. "information, or '.help all' to list "
+ .. "everything.")
+ end
+ return true, msg
elseif param == "all" then
local cmds = {}
for cmd, def in pairs(core.registered_chatcommands) do
@@ -76,19 +79,31 @@ local function do_help_cmd(name, param)
end
end
table.sort(cmds)
- return true, gettext("Available commands:").."\n"..table.concat(cmds, "\n")
+ local msg
+ if INIT == "game" then
+ msg = S("Available commands:")
+ else
+ msg = core.gettext("Available commands:")
+ end
+ return true, msg.."\n"..table.concat(cmds, "\n")
elseif INIT == "game" and param == "privs" then
local privs = {}
for priv, def in pairs(core.registered_privileges) do
privs[#privs + 1] = priv .. ": " .. def.description
end
table.sort(privs)
- return true, "Available privileges:\n"..table.concat(privs, "\n")
+ return true, S("Available privileges:").."\n"..table.concat(privs, "\n")
else
local cmd = param
local def = core.registered_chatcommands[cmd]
if not def then
- return false, gettext("Command not available: ")..cmd
+ local msg
+ if INIT == "game" then
+ msg = S("Command not available: @1", cmd)
+ else
+ msg = core.gettext("Command not available: ") .. cmd
+ end
+ return false, msg
else
return true, format_help_line(cmd, def)
end
@@ -97,16 +112,16 @@ end
if INIT == "client" then
core.register_chatcommand("help", {
- params = gettext("[all | <cmd>]"),
- description = gettext("Get help for commands"),
+ params = core.gettext("[all | <cmd>]"),
+ description = core.gettext("Get help for commands"),
func = function(param)
return do_help_cmd(nil, param)
end,
})
else
core.register_chatcommand("help", {
- params = "[all | privs | <cmd>]",
- description = "Get help for commands or list privileges",
+ params = S("[all | privs | <cmd>]"),
+ description = S("Get help for commands or list privileges"),
func = do_help_cmd,
})
end
diff --git a/builtin/common/information_formspecs.lua b/builtin/common/information_formspecs.lua
index 8afa5bc87..e814b4c43 100644
--- a/builtin/common/information_formspecs.lua
+++ b/builtin/common/information_formspecs.lua
@@ -20,7 +20,8 @@ local LIST_FORMSPEC_DESCRIPTION = [[
button_exit[5,7;3,1;quit;%s]
]]
-local formspec_escape = core.formspec_escape
+local F = core.formspec_escape
+local S = core.get_translator("__builtin")
local check_player_privs = core.check_player_privs
@@ -51,22 +52,23 @@ core.after(0, load_mod_command_tree)
local function build_chatcommands_formspec(name, sel, copy)
local rows = {}
- rows[1] = "#FFF,0,Command,Parameters"
+ rows[1] = "#FFF,0,"..F(S("Command"))..","..F(S("Parameters"))
- local description = "For more information, click on any entry in the list.\n" ..
- "Double-click to copy the entry to the chat history."
+ local description = S("For more information, click on "
+ .. "any entry in the list.").. "\n" ..
+ S("Double-click to copy the entry to the chat history.")
for i, data in ipairs(mod_cmds) do
- rows[#rows + 1] = COLOR_BLUE .. ",0," .. formspec_escape(data[1]) .. ","
+ rows[#rows + 1] = COLOR_BLUE .. ",0," .. F(data[1]) .. ","
for j, cmds in ipairs(data[2]) do
local has_priv = check_player_privs(name, cmds[2].privs)
rows[#rows + 1] = ("%s,1,%s,%s"):format(
has_priv and COLOR_GREEN or COLOR_GRAY,
- cmds[1], formspec_escape(cmds[2].params))
+ cmds[1], F(cmds[2].params))
if sel == #rows then
description = cmds[2].description
if copy then
- core.chat_send_player(name, ("Command: %s %s"):format(
+ core.chat_send_player(name, S("Command: @1 @2",
core.colorize("#0FF", "/" .. cmds[1]), cmds[2].params))
end
end
@@ -74,9 +76,9 @@ local function build_chatcommands_formspec(name, sel, copy)
end
return LIST_FORMSPEC_DESCRIPTION:format(
- "Available commands: (see also: /help <cmd>)",
+ F(S("Available commands: (see also: /help <cmd>)")),
table.concat(rows, ","), sel or 0,
- description, "Close"
+ F(description), F(S("Close"))
)
end
@@ -91,19 +93,19 @@ local function build_privs_formspec(name)
table.sort(privs, function(a, b) return a[1] < b[1] end)
local rows = {}
- rows[1] = "#FFF,0,Privilege,Description"
+ rows[1] = "#FFF,0,"..F(S("Privilege"))..","..F(S("Description"))
local player_privs = core.get_player_privs(name)
for i, data in ipairs(privs) do
rows[#rows + 1] = ("%s,0,%s,%s"):format(
player_privs[data[1]] and COLOR_GREEN or COLOR_GRAY,
- data[1], formspec_escape(data[2].description))
+ data[1], F(data[2].description))
end
return LIST_FORMSPEC:format(
- "Available privileges:",
+ F(S("Available privileges:")),
table.concat(rows, ","),
- "Close"
+ F(S("Close"))
)
end
@@ -115,7 +117,7 @@ core.register_on_player_receive_fields(function(player, formname, fields)
return
end
- local event = minetest.explode_table_event(fields.list)
+ local event = core.explode_table_event(fields.list)
if event.type ~= "INV" then
local name = player:get_player_name()
core.show_formspec(name, "__builtin:help_cmds",
diff --git a/builtin/fstk/tabview.lua b/builtin/fstk/tabview.lua
index 3715e231b..424d329fb 100644
--- a/builtin/fstk/tabview.lua
+++ b/builtin/fstk/tabview.lua
@@ -58,26 +58,20 @@ end
--------------------------------------------------------------------------------
local function get_formspec(self)
- local formspec = ""
+ if self.hidden or (self.parent ~= nil and self.parent.hidden) then
+ return ""
+ end
+ local tab = self.tablist[self.last_tab_index]
- if not self.hidden and (self.parent == nil or not self.parent.hidden) then
+ local content, prepend = tab.get_formspec(self, tab.name, tab.tabdata, tab.tabsize)
- if self.parent == nil then
- local tsize = self.tablist[self.last_tab_index].tabsize or
- {width=self.width, height=self.height}
- formspec = formspec ..
- string.format("size[%f,%f,%s]",tsize.width,tsize.height,
- dump(self.fixed_size))
- end
- formspec = formspec .. self:tab_header()
- formspec = formspec ..
- self.tablist[self.last_tab_index].get_formspec(
- self,
- self.tablist[self.last_tab_index].name,
- self.tablist[self.last_tab_index].tabdata,
- self.tablist[self.last_tab_index].tabsize
- )
+ if self.parent == nil and not prepend then
+ local tsize = tab.tabsize or {width=self.width, height=self.height}
+ prepend = string.format("size[%f,%f,%s]", tsize.width, tsize.height,
+ dump(self.fixed_size))
end
+
+ local formspec = (prepend or "") .. self:tab_header() .. content
return formspec
end
@@ -97,14 +91,9 @@ local function handle_buttons(self,fields)
return true
end
- if self.tablist[self.last_tab_index].button_handler ~= nil then
- return
- self.tablist[self.last_tab_index].button_handler(
- self,
- fields,
- self.tablist[self.last_tab_index].name,
- self.tablist[self.last_tab_index].tabdata
- )
+ local tab = self.tablist[self.last_tab_index]
+ if tab.button_handler ~= nil then
+ return tab.button_handler(self, fields, tab.name, tab.tabdata)
end
return false
@@ -122,14 +111,9 @@ local function handle_events(self,event)
return true
end
- if self.tablist[self.last_tab_index].evt_handler ~= nil then
- return
- self.tablist[self.last_tab_index].evt_handler(
- self,
- event,
- self.tablist[self.last_tab_index].name,
- self.tablist[self.last_tab_index].tabdata
- )
+ local tab = self.tablist[self.last_tab_index]
+ if tab.evt_handler ~= nil then
+ return tab.evt_handler(self, event, tab.name, tab.tabdata)
end
return false
diff --git a/builtin/game/chat.lua b/builtin/game/chat.lua
index 945707623..bf2d7851e 100644
--- a/builtin/game/chat.lua
+++ b/builtin/game/chat.lua
@@ -1,5 +1,7 @@
-- Minetest: builtin/game/chat.lua
+local S = core.get_translator("__builtin")
+
-- Helper function that implements search and replace without pattern matching
-- Returns the string and a boolean indicating whether or not the string was modified
local function safe_gsub(s, replace, with)
@@ -45,6 +47,8 @@ end
core.chatcommands = core.registered_chatcommands -- BACKWARDS COMPATIBILITY
+local msg_time_threshold =
+ tonumber(core.settings:get("chatcommand_msg_time_threshold")) or 0.1
core.register_on_chat_message(function(name, message)
if message:sub(1,1) ~= "/" then
return
@@ -52,7 +56,7 @@ core.register_on_chat_message(function(name, message)
local cmd, param = string.match(message, "^/([^ ]+) *(.*)")
if not cmd then
- core.chat_send_player(name, "-!- Empty command")
+ core.chat_send_player(name, "-!- "..S("Empty command."))
return true
end
@@ -65,15 +69,17 @@ core.register_on_chat_message(function(name, message)
local cmd_def = core.registered_chatcommands[cmd]
if not cmd_def then
- core.chat_send_player(name, "-!- Invalid command: " .. cmd)
+ core.chat_send_player(name, "-!- "..S("Invalid command: @1", cmd))
return true
end
local has_privs, missing_privs = core.check_player_privs(name, cmd_def.privs)
if has_privs then
core.set_last_run_mod(cmd_def.mod_origin)
+ local t_before = minetest.get_us_time()
local success, result = cmd_def.func(name, param)
+ local delay = (minetest.get_us_time() - t_before) / 1000000
if success == false and result == nil then
- core.chat_send_player(name, "-!- Invalid command usage")
+ core.chat_send_player(name, "-!- "..S("Invalid command usage."))
local help_def = core.registered_chatcommands["help"]
if help_def then
local _, helpmsg = help_def.func(name, cmd)
@@ -81,13 +87,26 @@ core.register_on_chat_message(function(name, message)
core.chat_send_player(name, helpmsg)
end
end
- elseif result then
- core.chat_send_player(name, result)
+ else
+ if delay > msg_time_threshold then
+ -- Show how much time it took to execute the command
+ if result then
+ result = result ..
+ minetest.colorize("#f3d2ff", " (%.5g s)"):format(delay)
+ else
+ result = minetest.colorize("#f3d2ff",
+ "Command execution took %.5f s"):format(delay)
+ end
+ end
+ if result then
+ core.chat_send_player(name, result)
+ end
end
else
- core.chat_send_player(name, "You don't have permission"
- .. " to run this command (missing privileges: "
- .. table.concat(missing_privs, ", ") .. ")")
+ core.chat_send_player(name,
+ S("You don't have permission to run this command "
+ .. "(missing privileges: @1).",
+ table.concat(missing_privs, ", ")))
end
return true -- Handled chat message
end)
@@ -107,12 +126,13 @@ local function parse_range_str(player_name, str)
if args[1] == "here" then
p1, p2 = core.get_player_radius_area(player_name, tonumber(args[2]))
if p1 == nil then
- return false, "Unable to get player " .. player_name .. " position"
+ return false, S("Unable to get position of player @1.", player_name)
end
else
p1, p2 = core.string_to_area(str)
if p1 == nil then
- return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)"
+ return false, S("Incorrect area format. "
+ .. "Expected: (x1,y1,z1) (x2,y2,z2)")
end
end
@@ -123,9 +143,9 @@ end
-- Chat commands
--
core.register_chatcommand("me", {
- params = "<action>",
- description = "Show chat action (e.g., '/me orders a pizza' displays"
- .. " '<player name> orders a pizza')",
+ params = S("<action>"),
+ description = S("Show chat action (e.g., '/me orders a pizza' "
+ .. "displays '<player name> orders a pizza')"),
privs = {shout=true},
func = function(name, param)
core.chat_send_all("* " .. name .. " " .. param)
@@ -134,43 +154,44 @@ core.register_chatcommand("me", {
})
core.register_chatcommand("admin", {
- description = "Show the name of the server owner",
+ description = S("Show the name of the server owner"),
func = function(name)
local admin = core.settings:get("name")
if admin then
- return true, "The administrator of this server is " .. admin .. "."
+ return true, S("The administrator of this server is @1.", admin)
else
- return false, "There's no administrator named in the config file."
+ return false, S("There's no administrator named "
+ .. "in the config file.")
end
end,
})
core.register_chatcommand("privs", {
- params = "[<name>]",
- description = "Show privileges of yourself or another player",
+ params = S("[<name>]"),
+ description = S("Show privileges of yourself or another player"),
func = function(caller, param)
param = param:trim()
local name = (param ~= "" and param or caller)
if not core.player_exists(name) then
- return false, "Player " .. name .. " does not exist."
+ return false, S("Player @1 does not exist.", name)
end
- return true, "Privileges of " .. name .. ": "
- .. core.privs_to_string(
- core.get_player_privs(name), ", ")
+ return true, S("Privileges of @1: @2", name,
+ core.privs_to_string(
+ core.get_player_privs(name), ", "))
end,
})
core.register_chatcommand("haspriv", {
- params = "<privilege>",
- description = "Return list of all online players with privilege.",
+ params = S("<privilege>"),
+ description = S("Return list of all online players with privilege"),
privs = {basic_privs = true},
func = function(caller, param)
param = param:trim()
if param == "" then
- return false, "Invalid parameters (see /help haspriv)"
+ return false, S("Invalid parameters (see /help haspriv).")
end
if not core.registered_privileges[param] then
- return false, "Unknown privilege!"
+ return false, S("Unknown privilege!")
end
local privs = core.string_to_privs(param)
local players_with_priv = {}
@@ -180,19 +201,20 @@ core.register_chatcommand("haspriv", {
table.insert(players_with_priv, player_name)
end
end
- return true, "Players online with the \"" .. param .. "\" privilege: " ..
- table.concat(players_with_priv, ", ")
+ return true, S("Players online with the \"@1\" privilege: @2",
+ param,
+ table.concat(players_with_priv, ", "))
end
})
local function handle_grant_command(caller, grantname, grantprivstr)
local caller_privs = core.get_player_privs(caller)
if not (caller_privs.privs or caller_privs.basic_privs) then
- return false, "Your privileges are insufficient."
+ return false, S("Your privileges are insufficient.")
end
if not core.get_auth_handler().get_auth(grantname) then
- return false, "Player " .. grantname .. " does not exist."
+ return false, S("Player @1 does not exist.", grantname)
end
local grantprivs = core.string_to_privs(grantprivstr)
if grantprivstr == "all" then
@@ -204,10 +226,10 @@ local function handle_grant_command(caller, grantname, grantprivstr)
core.string_to_privs(core.settings:get("basic_privs") or "interact,shout")
for priv, _ in pairs(grantprivs) do
if not basic_privs[priv] and not caller_privs.privs then
- return false, "Your privileges are insufficient."
+ return false, S("Your privileges are insufficient.")
end
if not core.registered_privileges[priv] then
- privs_unknown = privs_unknown .. "Unknown privilege: " .. priv .. "\n"
+ privs_unknown = privs_unknown .. S("Unknown privilege: @1", priv) .. "\n"
end
privs[priv] = true
end
@@ -221,33 +243,33 @@ local function handle_grant_command(caller, grantname, grantprivstr)
core.set_player_privs(grantname, privs)
core.log("action", caller..' granted ('..core.privs_to_string(grantprivs, ', ')..') privileges to '..grantname)
if grantname ~= caller then
- core.chat_send_player(grantname, caller
- .. " granted you privileges: "
- .. core.privs_to_string(grantprivs, ' '))
+ core.chat_send_player(grantname,
+ S("@1 granted you privileges: @2", caller,
+ core.privs_to_string(grantprivs, ' ')))
end
- return true, "Privileges of " .. grantname .. ": "
- .. core.privs_to_string(
- core.get_player_privs(grantname), ' ')
+ return true, S("Privileges of @1: @2", grantname,
+ core.privs_to_string(
+ core.get_player_privs(grantname), ' '))
end
core.register_chatcommand("grant", {
- params = "<name> (<privilege> | all)",
- description = "Give privileges to player",
+ params = S("<name> (<privilege> | all)"),
+ description = S("Give privileges to player"),
func = function(name, param)
local grantname, grantprivstr = string.match(param, "([^ ]+) (.+)")
if not grantname or not grantprivstr then
- return false, "Invalid parameters (see /help grant)"
+ return false, S("Invalid parameters (see /help grant).")
end
return handle_grant_command(name, grantname, grantprivstr)
end,
})
core.register_chatcommand("grantme", {
- params = "<privilege> | all",
- description = "Grant privileges to yourself",
+ params = S("<privilege> | all"),
+ description = S("Grant privileges to yourself"),
func = function(name, param)
if param == "" then
- return false, "Invalid parameters (see /help grantme)"
+ return false, S("Invalid parameters (see /help grantme).")
end
return handle_grant_command(name, name, param)
end,
@@ -256,11 +278,11 @@ core.register_chatcommand("grantme", {
local function handle_revoke_command(caller, revokename, revokeprivstr)
local caller_privs = core.get_player_privs(caller)
if not (caller_privs.privs or caller_privs.basic_privs) then
- return false, "Your privileges are insufficient."
+ return false, S("Your privileges are insufficient.")
end
if not core.get_auth_handler().get_auth(revokename) then
- return false, "Player " .. revokename .. " does not exist."
+ return false, S("Player @1 does not exist.", revokename)
end
local revokeprivs = core.string_to_privs(revokeprivstr)
@@ -269,7 +291,7 @@ local function handle_revoke_command(caller, revokename, revokeprivstr)
core.string_to_privs(core.settings:get("basic_privs") or "interact,shout")
for priv, _ in pairs(revokeprivs) do
if not basic_privs[priv] and not caller_privs.privs then
- return false, "Your privileges are insufficient."
+ return false, S("Your privileges are insufficient.")
end
end
@@ -292,43 +314,43 @@ local function handle_revoke_command(caller, revokename, revokeprivstr)
..core.privs_to_string(revokeprivs, ', ')
..') privileges from '..revokename)
if revokename ~= caller then
- core.chat_send_player(revokename, caller
- .. " revoked privileges from you: "
- .. core.privs_to_string(revokeprivs, ' '))
+ core.chat_send_player(revokename,
+ S("@1 revoked privileges from you: @2", caller,
+ core.privs_to_string(revokeprivs, ' ')))
end
- return true, "Privileges of " .. revokename .. ": "
- .. core.privs_to_string(
- core.get_player_privs(revokename), ' ')
+ return true, S("Privileges of @1: @2", revokename,
+ core.privs_to_string(
+ core.get_player_privs(revokename), ' '))
end
core.register_chatcommand("revoke", {
- params = "<name> (<privilege> | all)",
- description = "Remove privileges from player",
+ params = S("<name> (<privilege> | all)"),
+ description = S("Remove privileges from player"),
privs = {},
func = function(name, param)
local revokename, revokeprivstr = string.match(param, "([^ ]+) (.+)")
if not revokename or not revokeprivstr then
- return false, "Invalid parameters (see /help revoke)"
+ return false, S("Invalid parameters (see /help revoke).")
end
return handle_revoke_command(name, revokename, revokeprivstr)
end,
})
core.register_chatcommand("revokeme", {
- params = "<privilege> | all",
- description = "Revoke privileges from yourself",
+ params = S("<privilege> | all"),
+ description = S("Revoke privileges from yourself"),
privs = {},
func = function(name, param)
if param == "" then
- return false, "Invalid parameters (see /help revokeme)"
+ return false, S("Invalid parameters (see /help revokeme).")
end
return handle_revoke_command(name, name, param)
end,
})
core.register_chatcommand("setpassword", {
- params = "<name> <password>",
- description = "Set player's password",
+ params = S("<name> <password>"),
+ description = S("Set player's password"),
privs = {password=true},
func = function(name, param)
local toname, raw_password = string.match(param, "^([^ ]+) +(.+)$")
@@ -338,207 +360,197 @@ core.register_chatcommand("setpassword", {
end
if not toname then
- return false, "Name field required"
+ return false, S("Name field required.")
end
- local act_str_past, act_str_pres
+ local msg_chat, msg_log, msg_ret
if not raw_password then
core.set_player_password(toname, "")
- act_str_past = "cleared"
- act_str_pres = "clears"
+ msg_chat = S("Your password was cleared by @1.", name)
+ msg_log = name .. " clears password of " .. toname .. "."
+ msg_ret = S("Password of player \"@1\" cleared.", toname)
else
core.set_player_password(toname,
core.get_password_hash(toname,
raw_password))
- act_str_past = "set"
- act_str_pres = "sets"
+ msg_chat = S("Your password was set by @1.", name)
+ msg_log = name .. " sets password of " .. toname .. "."
+ msg_ret = S("Password of player \"@1\" set.", toname)
end
if toname ~= name then
- core.chat_send_player(toname, "Your password was "
- .. act_str_past .. " by " .. name)
+ core.chat_send_player(toname, msg_chat)
end
- core.log("action", name .. " " .. act_str_pres ..
- " password of " .. toname .. ".")
+ core.log("action", msg_log)
- return true, "Password of player \"" .. toname .. "\" " .. act_str_past
+ return true, msg_ret
end,
})
core.register_chatcommand("clearpassword", {
- params = "<name>",
- description = "Set empty password for a player",
+ params = S("<name>"),
+ description = S("Set empty password for a player"),
privs = {password=true},
func = function(name, param)
local toname = param
if toname == "" then
- return false, "Name field required"
+ return false, S("Name field required.")
end
core.set_player_password(toname, '')
core.log("action", name .. " clears password of " .. toname .. ".")
- return true, "Password of player \"" .. toname .. "\" cleared"
+ return true, S("Password of player \"@1\" cleared.", toname)
end,
})
core.register_chatcommand("auth_reload", {
params = "",
- description = "Reload authentication data",
+ description = S("Reload authentication data"),
privs = {server=true},
func = function(name, param)
local done = core.auth_reload()
- return done, (done and "Done." or "Failed.")
+ return done, (done and S("Done.") or S("Failed."))
end,
})
core.register_chatcommand("remove_player", {
- params = "<name>",
- description = "Remove a player's data",
+ params = S("<name>"),
+ description = S("Remove a player's data"),
privs = {server=true},
func = function(name, param)
local toname = param
if toname == "" then
- return false, "Name field required"
+ return false, S("Name field required.")
end
local rc = core.remove_player(toname)
if rc == 0 then
core.log("action", name .. " removed player data of " .. toname .. ".")
- return true, "Player \"" .. toname .. "\" removed."
+ return true, S("Player \"@1\" removed.", toname)
elseif rc == 1 then
- return true, "No such player \"" .. toname .. "\" to remove."
+ return true, S("No such player \"@1\" to remove.", toname)
elseif rc == 2 then
- return true, "Player \"" .. toname .. "\" is connected, cannot remove."
+ return true, S("Player \"@1\" is connected, cannot remove.", toname)
end
- return false, "Unhandled remove_player return code " .. rc .. ""
+ return false, S("Unhandled remove_player return code @1.", tostring(rc))
end,
})
-core.register_chatcommand("teleport", {
- params = "<X>,<Y>,<Z> | <to_name> | (<name> <X>,<Y>,<Z>) | (<name> <to_name>)",
- description = "Teleport to position or player",
- privs = {teleport=true},
- func = function(name, param)
- -- Returns (pos, true) if found, otherwise (pos, false)
- local function find_free_position_near(pos)
- local tries = {
- {x=1,y=0,z=0},
- {x=-1,y=0,z=0},
- {x=0,y=0,z=1},
- {x=0,y=0,z=-1},
- }
- for _, d in ipairs(tries) do
- local p = {x = pos.x+d.x, y = pos.y+d.y, z = pos.z+d.z}
- local n = core.get_node_or_nil(p)
- if n and n.name then
- local def = core.registered_nodes[n.name]
- if def and not def.walkable then
- return p, true
- end
- end
+
+-- pos may be a non-integer position
+local function find_free_position_near(pos)
+ local tries = {
+ {x=1, y=0, z=0},
+ {x=-1, y=0, z=0},
+ {x=0, y=0, z=1},
+ {x=0, y=0, z=-1},
+ }
+ for _, d in ipairs(tries) do
+ local p = vector.add(pos, d)
+ local n = core.get_node_or_nil(p)
+ if n then
+ local def = core.registered_nodes[n.name]
+ if def and not def.walkable then
+ return p
end
- return pos, false
end
+ end
+ return pos
+end
+
+-- Teleports player <name> to <p> if possible
+local function teleport_to_pos(name, p)
+ local lm = 31000
+ if p.x < -lm or p.x > lm or p.y < -lm or p.y > lm
+ or p.z < -lm or p.z > lm then
+ return false, S("Cannot teleport out of map bounds!")
+ end
+ local teleportee = core.get_player_by_name(name)
+ if not teleportee then
+ return false, S("Cannot get player with name @1.", name)
+ end
+ if teleportee:get_attach() then
+ return false, S("Cannot teleport, @1 " ..
+ "is attached to an object!", name)
+ end
+ teleportee:set_pos(p)
+ return true, S("Teleporting @1 to @2.", name, core.pos_to_string(p, 1))
+end
+
+-- Teleports player <name> next to player <target_name> if possible
+local function teleport_to_player(name, target_name)
+ if name == target_name then
+ return false, S("One does not teleport to oneself.")
+ end
+ local teleportee = core.get_player_by_name(name)
+ if not teleportee then
+ return false, S("Cannot get teleportee with name @1.", name)
+ end
+ if teleportee:get_attach() then
+ return false, S("Cannot teleport, @1 " ..
+ "is attached to an object!", name)
+ end
+ local target = core.get_player_by_name(target_name)
+ if not target then
+ return false, S("Cannot get target player with name @1.", target_name)
+ end
+ local p = find_free_position_near(target:get_pos())
+ teleportee:set_pos(p)
+ return true, S("Teleporting @1 to @2 at @3.", name, target_name,
+ core.pos_to_string(p, 1))
+end
+core.register_chatcommand("teleport", {
+ params = S("<X>,<Y>,<Z> | <to_name> | <name> <X>,<Y>,<Z> | <name> <to_name>"),
+ description = S("Teleport to position or player"),
+ privs = {teleport=true},
+ func = function(name, param)
local p = {}
- p.x, p.y, p.z = string.match(param, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
- p.x = tonumber(p.x)
- p.y = tonumber(p.y)
- p.z = tonumber(p.z)
+ p.x, p.y, p.z = param:match("^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
+ p = vector.apply(p, tonumber)
if p.x and p.y and p.z then
-
- local lm = 31000
- if p.x < -lm or p.x > lm or p.y < -lm or p.y > lm or p.z < -lm or p.z > lm then
- return false, "Cannot teleport out of map bounds!"
- end
- local teleportee = core.get_player_by_name(name)
- if teleportee then
- if teleportee:get_attach() then
- return false, "Can't teleport, you're attached to an object!"
- end
- teleportee:set_pos(p)
- return true, "Teleporting to "..core.pos_to_string(p)
- end
+ return teleport_to_pos(name, p)
end
local target_name = param:match("^([^ ]+)$")
- local teleportee = core.get_player_by_name(name)
-
- p = nil
if target_name then
- local target = core.get_player_by_name(target_name)
- if target then
- p = target:get_pos()
- end
- end
-
- if teleportee and p then
- if teleportee:get_attach() then
- return false, "Can't teleport, you're attached to an object!"
- end
- p = find_free_position_near(p)
- teleportee:set_pos(p)
- return true, "Teleporting to " .. target_name
- .. " at "..core.pos_to_string(p)
+ return teleport_to_player(name, target_name)
end
- if not core.check_player_privs(name, {bring=true}) then
- return false, "You don't have permission to teleport other players (missing bring privilege)"
- end
+ local has_bring_priv = core.check_player_privs(name, {bring=true})
+ local missing_bring_msg = S("You don't have permission to teleport " ..
+ "other players (missing privilege: @1).", "bring")
- teleportee = nil
- p = {}
local teleportee_name
teleportee_name, p.x, p.y, p.z = param:match(
"^([^ ]+) +([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
- p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z)
- if teleportee_name then
- teleportee = core.get_player_by_name(teleportee_name)
- end
- if teleportee and p.x and p.y and p.z then
- if teleportee:get_attach() then
- return false, "Can't teleport, player is attached to an object!"
+ p = vector.apply(p, tonumber)
+ if teleportee_name and p.x and p.y and p.z then
+ if not has_bring_priv then
+ return false, missing_bring_msg
end
- teleportee:set_pos(p)
- return true, "Teleporting " .. teleportee_name
- .. " to " .. core.pos_to_string(p)
+ return teleport_to_pos(teleportee_name, p)
end
- teleportee = nil
- p = nil
teleportee_name, target_name = string.match(param, "^([^ ]+) +([^ ]+)$")
- if teleportee_name then
- teleportee = core.get_player_by_name(teleportee_name)
- end
- if target_name then
- local target = core.get_player_by_name(target_name)
- if target then
- p = target:get_pos()
+ if teleportee_name and target_name then
+ if not has_bring_priv then
+ return false, missing_bring_msg
end
- end
- if teleportee and p then
- if teleportee:get_attach() then
- return false, "Can't teleport, player is attached to an object!"
- end
- p = find_free_position_near(p)
- teleportee:set_pos(p)
- return true, "Teleporting " .. teleportee_name
- .. " to " .. target_name
- .. " at " .. core.pos_to_string(p)
+ return teleport_to_player(teleportee_name, target_name)
end
- return false, 'Invalid parameters ("' .. param
- .. '") or player not found (see /help teleport)'
+ return false
end,
})
core.register_chatcommand("set", {
- params = "([-n] <name> <value>) | <name>",
- description = "Set or read server configuration setting",
+ params = S("([-n] <name> <value>) | <name>"),
+ description = S("Set or read server configuration setting"),
privs = {server=true},
func = function(name, param)
local arg, setname, setvalue = string.match(param, "(-[n]) ([^ ]+) (.+)")
@@ -550,22 +562,23 @@ core.register_chatcommand("set", {
setname, setvalue = string.match(param, "([^ ]+) (.+)")
if setname and setvalue then
if not core.settings:get(setname) then
- return false, "Failed. Use '/set -n <name> <value>' to create a new setting."
+ return false, S("Failed. Use '/set -n <name> <value>' "
+ .. "to create a new setting.")
end
core.settings:set(setname, setvalue)
- return true, setname .. " = " .. setvalue
+ return true, S("@1 = @2", setname, setvalue)
end
setname = string.match(param, "([^ ]+)")
if setname then
setvalue = core.settings:get(setname)
if not setvalue then
- setvalue = "<not set>"
+ setvalue = S("<not set>")
end
- return true, setname .. " = " .. setvalue
+ return true, S("@1 = @2", setname, setvalue)
end
- return false, "Invalid parameters (see /help set)."
+ return false, S("Invalid parameters (see /help set).")
end,
})
@@ -578,26 +591,27 @@ local function emergeblocks_callback(pos, action, num_calls_remaining, ctx)
if ctx.current_blocks == ctx.total_blocks then
core.chat_send_player(ctx.requestor_name,
- string.format("Finished emerging %d blocks in %.2fms.",
- ctx.total_blocks, (os.clock() - ctx.start_time) * 1000))
+ S("Finished emerging @1 blocks in @2ms.",
+ ctx.total_blocks,
+ string.format("%.2f", (os.clock() - ctx.start_time) * 1000)))
end
end
local function emergeblocks_progress_update(ctx)
if ctx.current_blocks ~= ctx.total_blocks then
core.chat_send_player(ctx.requestor_name,
- string.format("emergeblocks update: %d/%d blocks emerged (%.1f%%)",
+ S("emergeblocks update: @1/@2 blocks emerged (@3%)",
ctx.current_blocks, ctx.total_blocks,
- (ctx.current_blocks / ctx.total_blocks) * 100))
+ string.format("%.1f", (ctx.current_blocks / ctx.total_blocks) * 100)))
core.after(2, emergeblocks_progress_update, ctx)
end
end
core.register_chatcommand("emergeblocks", {
- params = "(here [<radius>]) | (<pos1> <pos2>)",
- description = "Load (or, if nonexistent, generate) map blocks "
- .. "contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)",
+ params = S("(here [<radius>]) | (<pos1> <pos2>)"),
+ description = S("Load (or, if nonexistent, generate) map blocks contained in "
+ .. "area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)"),
privs = {server=true},
func = function(name, param)
local p1, p2 = parse_range_str(name, param)
@@ -615,15 +629,15 @@ core.register_chatcommand("emergeblocks", {
core.emerge_area(p1, p2, emergeblocks_callback, context)
core.after(2, emergeblocks_progress_update, context)
- return true, "Started emerge of area ranging from " ..
- core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1)
+ return true, S("Started emerge of area ranging from @1 to @2.",
+ core.pos_to_string(p1, 1), core.pos_to_string(p2, 1))
end,
})
core.register_chatcommand("deleteblocks", {
- params = "(here [<radius>]) | (<pos1> <pos2>)",
- description = "Delete map blocks contained in area pos1 to pos2 "
- .. "(<pos1> and <pos2> must be in parentheses)",
+ params = S("(here [<radius>]) | (<pos1> <pos2>)"),
+ description = S("Delete map blocks contained in area pos1 to pos2 "
+ .. "(<pos1> and <pos2> must be in parentheses)"),
privs = {server=true},
func = function(name, param)
local p1, p2 = parse_range_str(name, param)
@@ -632,18 +646,20 @@ core.register_chatcommand("deleteblocks", {
end
if core.delete_area(p1, p2) then
- return true, "Successfully cleared area ranging from " ..
- core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1)
+ return true, S("Successfully cleared area "
+ .. "ranging from @1 to @2.",
+ core.pos_to_string(p1, 1), core.pos_to_string(p2, 1))
else
- return false, "Failed to clear one or more blocks in area"
+ return false, S("Failed to clear one or more "
+ .. "blocks in area.")
end
end,
})
core.register_chatcommand("fixlight", {
- params = "(here [<radius>]) | (<pos1> <pos2>)",
- description = "Resets lighting in the area between pos1 and pos2 "
- .. "(<pos1> and <pos2> must be in parentheses)",
+ params = S("(here [<radius>]) | (<pos1> <pos2>)"),
+ description = S("Resets lighting in the area between pos1 and pos2 "
+ .. "(<pos1> and <pos2> must be in parentheses)"),
privs = {server = true},
func = function(name, param)
local p1, p2 = parse_range_str(name, param)
@@ -652,17 +668,18 @@ core.register_chatcommand("fixlight", {
end
if core.fix_light(p1, p2) then
- return true, "Successfully reset light in the area ranging from " ..
- core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1)
+ return true, S("Successfully reset light in the area "
+ .. "ranging from @1 to @2.",
+ core.pos_to_string(p1, 1), core.pos_to_string(p2, 1))
else
- return false, "Failed to load one or more blocks in area"
+ return false, S("Failed to load one or more blocks in area.")
end
end,
})
core.register_chatcommand("mods", {
params = "",
- description = "List mods installed on the server",
+ description = S("List mods installed on the server"),
privs = {},
func = function(name, param)
return true, table.concat(core.get_modnames(), ", ")
@@ -674,117 +691,136 @@ local function handle_give_command(cmd, giver, receiver, stackstring)
.. ', stackstring="' .. stackstring .. '"')
local itemstack = ItemStack(stackstring)
if itemstack:is_empty() then
- return false, "Cannot give an empty item"
+ return false, S("Cannot give an empty item.")
elseif (not itemstack:is_known()) or (itemstack:get_name() == "unknown") then
- return false, "Cannot give an unknown item"
+ return false, S("Cannot give an unknown item.")
-- Forbid giving 'ignore' due to unwanted side effects
elseif itemstack:get_name() == "ignore" then
- return false, "Giving 'ignore' is not allowed"
+ return false, S("Giving 'ignore' is not allowed.")
end
local receiverref = core.get_player_by_name(receiver)
if receiverref == nil then
- return false, receiver .. " is not a known player"
+ return false, S("@1 is not a known player.", receiver)
end
local leftover = receiverref:get_inventory():add_item("main", itemstack)
local partiality
if leftover:is_empty() then
- partiality = ""
+ partiality = nil
elseif leftover:get_count() == itemstack:get_count() then
- partiality = "could not be "
+ partiality = false
else
- partiality = "partially "
+ partiality = true
end
-- The actual item stack string may be different from what the "giver"
-- entered (e.g. big numbers are always interpreted as 2^16-1).
stackstring = itemstack:to_string()
+ local msg
+ if partiality == true then
+ msg = S("@1 partially added to inventory.", stackstring)
+ elseif partiality == false then
+ msg = S("@1 could not be added to inventory.", stackstring)
+ else
+ msg = S("@1 added to inventory.", stackstring)
+ end
if giver == receiver then
- local msg = "%q %sadded to inventory."
- return true, msg:format(stackstring, partiality)
+ return true, msg
else
- core.chat_send_player(receiver, ("%q %sadded to inventory.")
- :format(stackstring, partiality))
- local msg = "%q %sadded to %s's inventory."
- return true, msg:format(stackstring, partiality, receiver)
+ core.chat_send_player(receiver, msg)
+ local msg_other
+ if partiality == true then
+ msg_other = S("@1 partially added to inventory of @2.",
+ stackstring, receiver)
+ elseif partiality == false then
+ msg_other = S("@1 could not be added to inventory of @2.",
+ stackstring, receiver)
+ else
+ msg_other = S("@1 added to inventory of @2.",
+ stackstring, receiver)
+ end
+ return true, msg_other
end
end
core.register_chatcommand("give", {
- params = "<name> <ItemString> [<count> [<wear>]]",
- description = "Give item to player",
+ params = S("<name> <ItemString> [<count> [<wear>]]"),
+ description = S("Give item to player"),
privs = {give=true},
func = function(name, param)
local toname, itemstring = string.match(param, "^([^ ]+) +(.+)$")
if not toname or not itemstring then
- return false, "Name and ItemString required"
+ return false, S("Name and ItemString required.")
end
return handle_give_command("/give", name, toname, itemstring)
end,
})
core.register_chatcommand("giveme", {
- params = "<ItemString> [<count> [<wear>]]",
- description = "Give item to yourself",
+ params = S("<ItemString> [<count> [<wear>]]"),
+ description = S("Give item to yourself"),
privs = {give=true},
func = function(name, param)
local itemstring = string.match(param, "(.+)$")
if not itemstring then
- return false, "ItemString required"
+ return false, S("ItemString required.")
end
return handle_give_command("/giveme", name, name, itemstring)
end,
})
core.register_chatcommand("spawnentity", {
- params = "<EntityName> [<X>,<Y>,<Z>]",
- description = "Spawn entity at given (or your) position",
+ params = S("<EntityName> [<X>,<Y>,<Z>]"),
+ description = S("Spawn entity at given (or your) position"),
privs = {give=true, interact=true},
func = function(name, param)
local entityname, p = string.match(param, "^([^ ]+) *(.*)$")
if not entityname then
- return false, "EntityName required"
+ return false, S("EntityName required.")
end
core.log("action", ("%s invokes /spawnentity, entityname=%q")
:format(name, entityname))
local player = core.get_player_by_name(name)
if player == nil then
core.log("error", "Unable to spawn entity, player is nil")
- return false, "Unable to spawn entity, player is nil"
+ return false, S("Unable to spawn entity, player is nil.")
end
if not core.registered_entities[entityname] then
- return false, "Cannot spawn an unknown entity"
+ return false, S("Cannot spawn an unknown entity.")
end
if p == "" then
p = player:get_pos()
else
p = core.string_to_pos(p)
if p == nil then
- return false, "Invalid parameters ('" .. param .. "')"
+ return false, S("Invalid parameters (@1).", param)
end
end
p.y = p.y + 1
local obj = core.add_entity(p, entityname)
- local msg = obj and "%q spawned." or "%q failed to spawn."
- return true, msg:format(entityname)
+ if obj then
+ return true, S("@1 spawned.", entityname)
+ else
+ return true, S("@1 failed to spawn.", entityname)
+ end
end,
})
core.register_chatcommand("pulverize", {
params = "",
- description = "Destroy item in hand",
+ description = S("Destroy item in hand"),
func = function(name, param)
local player = core.get_player_by_name(name)
if not player then
core.log("error", "Unable to pulverize, no player.")
- return false, "Unable to pulverize, no player."
+ return false, S("Unable to pulverize, no player.")
end
local wielded_item = player:get_wielded_item()
if wielded_item:is_empty() then
- return false, "Unable to pulverize, no item in hand."
+ return false, S("Unable to pulverize, no item in hand.")
end
core.log("action", name .. " pulverized \"" ..
wielded_item:get_name() .. " " .. wielded_item:get_count() .. "\"")
player:set_wielded_item(nil)
- return true, "An item was pulverized."
+ return true, S("An item was pulverized.")
end,
})
@@ -800,14 +836,15 @@ core.register_on_punchnode(function(pos, node, puncher)
end)
core.register_chatcommand("rollback_check", {
- params = "[<range>] [<seconds>] [<limit>]",
- description = "Check who last touched a node or a node near it"
- .. " within the time specified by <seconds>. Default: range = 0,"
- .. " seconds = 86400 = 24h, limit = 5. Set <seconds> to inf for no time limit",
+ params = S("[<range>] [<seconds>] [<limit>]"),
+ description = S("Check who last touched a node or a node near it "
+ .. "within the time specified by <seconds>. "
+ .. "Default: range = 0, seconds = 86400 = 24h, limit = 5. "
+ .. "Set <seconds> to inf for no time limit"),
privs = {rollback=true},
func = function(name, param)
if not core.settings:get_bool("enable_rollback_recording") then
- return false, "Rollback functions are disabled."
+ return false, S("Rollback functions are disabled.")
end
local range, seconds, limit =
param:match("(%d+) *(%d*) *(%d*)")
@@ -815,30 +852,30 @@ core.register_chatcommand("rollback_check", {
seconds = tonumber(seconds) or 86400
limit = tonumber(limit) or 5
if limit > 100 then
- return false, "That limit is too high!"
+ return false, S("That limit is too high!")
end
core.rollback_punch_callbacks[name] = function(pos, node, puncher)
local name = puncher:get_player_name()
- core.chat_send_player(name, "Checking " .. core.pos_to_string(pos) .. "...")
+ core.chat_send_player(name, S("Checking @1 ...", core.pos_to_string(pos)))
local actions = core.rollback_get_node_actions(pos, range, seconds, limit)
if not actions then
- core.chat_send_player(name, "Rollback functions are disabled")
+ core.chat_send_player(name, S("Rollback functions are disabled."))
return
end
local num_actions = #actions
if num_actions == 0 then
- core.chat_send_player(name, "Nobody has touched"
- .. " the specified location in "
- .. seconds .. " seconds")
+ core.chat_send_player(name,
+ S("Nobody has touched the specified "
+ .. "location in @1 seconds.",
+ seconds))
return
end
local time = os.time()
for i = num_actions, 1, -1 do
local action = actions[i]
core.chat_send_player(name,
- ("%s %s %s -> %s %d seconds ago.")
- :format(
+ S("@1 @2 @3 -> @4 @5 seconds ago.",
core.pos_to_string(action.pos),
action.actor,
action.oldnode.name,
@@ -847,110 +884,123 @@ core.register_chatcommand("rollback_check", {
end
end
- return true, "Punch a node (range=" .. range .. ", seconds="
- .. seconds .. "s, limit=" .. limit .. ")"
+ return true, S("Punch a node (range=@1, seconds=@2, limit=@3).",
+ range, seconds, limit)
end,
})
core.register_chatcommand("rollback", {
- params = "(<name> [<seconds>]) | (:<actor> [<seconds>])",
- description = "Revert actions of a player. Default for <seconds> is 60. Set <seconds> to inf for no time limit",
+ params = S("(<name> [<seconds>]) | (:<actor> [<seconds>])"),
+ description = S("Revert actions of a player. "
+ .. "Default for <seconds> is 60. "
+ .. "Set <seconds> to inf for no time limit"),
privs = {rollback=true},
func = function(name, param)
if not core.settings:get_bool("enable_rollback_recording") then
- return false, "Rollback functions are disabled."
+ return false, S("Rollback functions are disabled.")
end
local target_name, seconds = string.match(param, ":([^ ]+) *(%d*)")
+ local rev_msg
if not target_name then
local player_name
player_name, seconds = string.match(param, "([^ ]+) *(%d*)")
if not player_name then
- return false, "Invalid parameters. See /help rollback"
- .. " and /help rollback_check."
+ return false, S("Invalid parameters. "
+ .. "See /help rollback and "
+ .. "/help rollback_check.")
end
+ seconds = tonumber(seconds) or 60
target_name = "player:"..player_name
+ rev_msg = S("Reverting actions of player '@1' since @2 seconds.",
+ player_name, seconds)
+ else
+ seconds = tonumber(seconds) or 60
+ rev_msg = S("Reverting actions of @1 since @2 seconds.",
+ target_name, seconds)
end
- seconds = tonumber(seconds) or 60
- core.chat_send_player(name, "Reverting actions of "
- .. target_name .. " since "
- .. seconds .. " seconds.")
+ core.chat_send_player(name, rev_msg)
local success, log = core.rollback_revert_actions_by(
target_name, seconds)
local response = ""
if #log > 100 then
- response = "(log is too long to show)\n"
+ response = S("(log is too long to show)").."\n"
else
for _, line in pairs(log) do
response = response .. line .. "\n"
end
end
- response = response .. "Reverting actions "
- .. (success and "succeeded." or "FAILED.")
+ if success then
+ response = response .. S("Reverting actions succeeded.")
+ else
+ response = response .. S("Reverting actions FAILED.")
+ end
return success, response
end,
})
core.register_chatcommand("status", {
- description = "Show server status",
+ description = S("Show server status"),
func = function(name, param)
local status = core.get_server_status(name, false)
if status and status ~= "" then
return true, status
end
- return false, "This command was disabled by a mod or game"
+ return false, S("This command was disabled by a mod or game.")
end,
})
core.register_chatcommand("time", {
- params = "[<0..23>:<0..59> | <0..24000>]",
- description = "Show or set time of day",
+ params = S("[<0..23>:<0..59> | <0..24000>]"),
+ description = S("Show or set time of day"),
privs = {},
func = function(name, param)
if param == "" then
local current_time = math.floor(core.get_timeofday() * 1440)
local minutes = current_time % 60
local hour = (current_time - minutes) / 60
- return true, ("Current time is %d:%02d"):format(hour, minutes)
+ return true, S("Current time is @1:@2.",
+ string.format("%d", hour),
+ string.format("%02d", minutes))
end
local player_privs = core.get_player_privs(name)
if not player_privs.settime then
- return false, "You don't have permission to run this command " ..
- "(missing privilege: settime)."
+ return false, S("You don't have permission to run "
+ .. "this command (missing privilege: @1).", "settime")
end
local hour, minute = param:match("^(%d+):(%d+)$")
if not hour then
local new_time = tonumber(param)
if not new_time then
- return false, "Invalid time."
+ return false, S("Invalid time.")
end
-- Backward compatibility.
core.set_timeofday((new_time % 24000) / 24000)
core.log("action", name .. " sets time to " .. new_time)
- return true, "Time of day changed."
+ return true, S("Time of day changed.")
end
hour = tonumber(hour)
minute = tonumber(minute)
if hour < 0 or hour > 23 then
- return false, "Invalid hour (must be between 0 and 23 inclusive)."
+ return false, S("Invalid hour (must be between 0 and 23 inclusive).")
elseif minute < 0 or minute > 59 then
- return false, "Invalid minute (must be between 0 and 59 inclusive)."
+ return false, S("Invalid minute (must be between 0 and 59 inclusive).")
end
core.set_timeofday((hour * 60 + minute) / 1440)
core.log("action", ("%s sets time to %d:%02d"):format(name, hour, minute))
- return true, "Time of day changed."
+ return true, S("Time of day changed.")
end,
})
core.register_chatcommand("days", {
- description = "Show day count since world creation",
+ description = S("Show day count since world creation"),
func = function(name, param)
- return true, "Current day is " .. core.get_day_count()
+ return true, S("Current day is @1.", core.get_day_count())
end
})
core.register_chatcommand("shutdown", {
- params = "[<delay_in_seconds> | -1] [reconnect] [<message>]",
- description = "Shutdown server (-1 cancels a delayed shutdown)",
+ params = S("[<delay_in_seconds> | -1] [reconnect] [<message>]"),
+ description = S("Shutdown server (-1 cancels a delayed shutdown)"),
privs = {server=true},
func = function(name, param)
local delay, reconnect, message
@@ -963,7 +1013,7 @@ core.register_chatcommand("shutdown", {
if delay == 0 then
core.log("action", name .. " shuts down server")
- core.chat_send_all("*** Server shutting down (operator request).")
+ core.chat_send_all("*** "..S("Server shutting down (operator request)."))
end
core.request_shutdown(message:trim(), core.is_yes(reconnect), delay)
return true
@@ -971,65 +1021,65 @@ core.register_chatcommand("shutdown", {
})
core.register_chatcommand("ban", {
- params = "[<name>]",
- description = "Ban the IP of a player or show the ban list",
+ params = S("[<name>]"),
+ description = S("Ban the IP of a player or show the ban list"),
privs = {ban=true},
func = function(name, param)
if param == "" then
local ban_list = core.get_ban_list()
if ban_list == "" then
- return true, "The ban list is empty."
+ return true, S("The ban list is empty.")
else
- return true, "Ban list: " .. ban_list
+ return true, S("Ban list: @1", ban_list)
end
end
if not core.get_player_by_name(param) then
- return false, "Player is not online."
+ return false, S("Player is not online.")
end
if not core.ban_player(param) then
- return false, "Failed to ban player."
+ return false, S("Failed to ban player.")
end
local desc = core.get_ban_description(param)
core.log("action", name .. " bans " .. desc .. ".")
- return true, "Banned " .. desc .. "."
+ return true, S("Banned @1.", desc)
end,
})
core.register_chatcommand("unban", {
- params = "<name> | <IP_address>",
- description = "Remove IP ban belonging to a player/IP",
+ params = S("<name> | <IP_address>"),
+ description = S("Remove IP ban belonging to a player/IP"),
privs = {ban=true},
func = function(name, param)
if not core.unban_player_or_ip(param) then
- return false, "Failed to unban player/IP."
+ return false, S("Failed to unban player/IP.")
end
core.log("action", name .. " unbans " .. param)
- return true, "Unbanned " .. param
+ return true, S("Unbanned @1.", param)
end,
})
core.register_chatcommand("kick", {
- params = "<name> [<reason>]",
- description = "Kick a player",
+ params = S("<name> [<reason>]"),
+ description = S("Kick a player"),
privs = {kick=true},
func = function(name, param)
local tokick, reason = param:match("([^ ]+) (.+)")
tokick = tokick or param
if not core.kick_player(tokick, reason) then
- return false, "Failed to kick player " .. tokick
+ return false, S("Failed to kick player @1.", tokick)
end
local log_reason = ""
if reason then
log_reason = " with reason \"" .. reason .. "\""
end
core.log("action", name .. " kicks " .. tokick .. log_reason)
- return true, "Kicked " .. tokick
+ return true, S("Kicked @1.", tokick)
end,
})
core.register_chatcommand("clearobjects", {
- params = "[full | quick]",
- description = "Clear all objects in world",
+ params = S("[full | quick]"),
+ description = S("Clear all objects in world"),
privs = {server=true},
func = function(name, param)
local options = {}
@@ -1038,45 +1088,44 @@ core.register_chatcommand("clearobjects", {
elseif param == "full" then
options.mode = "full"
else
- return false, "Invalid usage, see /help clearobjects."
+ return false, S("Invalid usage, see /help clearobjects.")
end
- core.log("action", name .. " clears all objects ("
+ core.log("action", name .. " clears objects ("
.. options.mode .. " mode).")
- core.chat_send_all("Clearing all objects. This may take a long time."
- .. " You may experience a timeout. (by "
- .. name .. ")")
+ if options.mode == "full" then
+ core.chat_send_all(S("Clearing all objects. This may take a long time. "
+ .. "You may experience a timeout. (by @1)", name))
+ end
core.clear_objects(options)
core.log("action", "Object clearing done.")
- core.chat_send_all("*** Cleared all objects.")
+ core.chat_send_all("*** "..S("Cleared all objects."))
return true
end,
})
core.register_chatcommand("msg", {
- params = "<name> <message>",
- description = "Send a direct message to a player",
+ params = S("<name> <message>"),
+ description = S("Send a direct message to a player"),
privs = {shout=true},
func = function(name, param)
local sendto, message = param:match("^(%S+)%s(.+)$")
if not sendto then
- return false, "Invalid usage, see /help msg."
+ return false, S("Invalid usage, see /help msg.")
end
if not core.get_player_by_name(sendto) then
- return false, "The player " .. sendto
- .. " is not online."
+ return false, S("The player @1 is not online.", sendto)
end
core.log("action", "DM from " .. name .. " to " .. sendto
.. ": " .. message)
- core.chat_send_player(sendto, "DM from " .. name .. ": "
- .. message)
- return true, "Message sent."
+ core.chat_send_player(sendto, S("DM from @1: @2", name, message))
+ return true, S("Message sent.")
end,
})
core.register_chatcommand("last-login", {
- params = "[<name>]",
- description = "Get the last login time of a player or yourself",
+ params = S("[<name>]"),
+ description = S("Get the last login time of a player or yourself"),
func = function(name, param)
if param == "" then
param = name
@@ -1084,25 +1133,27 @@ core.register_chatcommand("last-login", {
local pauth = core.get_auth_handler().get_auth(param)
if pauth and pauth.last_login and pauth.last_login ~= -1 then
-- Time in UTC, ISO 8601 format
- return true, param.."'s last login time was " ..
- os.date("!%Y-%m-%dT%H:%M:%SZ", pauth.last_login)
+ return true, S("@1's last login time was @2.",
+ param,
+ os.date("!%Y-%m-%dT%H:%M:%SZ", pauth.last_login))
end
- return false, param.."'s last login time is unknown"
+ return false, S("@1's last login time is unknown.", param)
end,
})
core.register_chatcommand("clearinv", {
- params = "[<name>]",
- description = "Clear the inventory of yourself or another player",
+ params = S("[<name>]"),
+ description = S("Clear the inventory of yourself or another player"),
func = function(name, param)
local player
if param and param ~= "" and param ~= name then
if not core.check_player_privs(name, {server=true}) then
- return false, "You don't have permission"
- .. " to clear another player's inventory (missing privilege: server)"
+ return false, S("You don't have permission to "
+ .. "clear another player's inventory "
+ .. "(missing privilege: @1).", "server")
end
player = core.get_player_by_name(param)
- core.chat_send_player(param, name.." cleared your inventory.")
+ core.chat_send_player(param, S("@1 cleared your inventory.", name))
else
player = core.get_player_by_name(name)
end
@@ -1112,25 +1163,25 @@ core.register_chatcommand("clearinv", {
player:get_inventory():set_list("craft", {})
player:get_inventory():set_list("craftpreview", {})
core.log("action", name.." clears "..player:get_player_name().."'s inventory")
- return true, "Cleared "..player:get_player_name().."'s inventory."
+ return true, S("Cleared @1's inventory.", player:get_player_name())
else
- return false, "Player must be online to clear inventory!"
+ return false, S("Player must be online to clear inventory!")
end
end,
})
local function handle_kill_command(killer, victim)
if core.settings:get_bool("enable_damage") == false then
- return false, "Players can't be killed, damage has been disabled."
+ return false, S("Players can't be killed, damage has been disabled.")
end
local victimref = core.get_player_by_name(victim)
if victimref == nil then
- return false, string.format("Player %s is not online.", victim)
+ return false, S("Player @1 is not online.", victim)
elseif victimref:get_hp() <= 0 then
if killer == victim then
- return false, "You are already dead."
+ return false, S("You are already dead.")
else
- return false, string.format("%s is already dead.", victim)
+ return false, S("@1 is already dead.", victim)
end
end
if not killer == victim then
@@ -1138,12 +1189,12 @@ local function handle_kill_command(killer, victim)
end
-- Kill victim
victimref:set_hp(0)
- return true, string.format("%s has been killed.", victim)
+ return true, S("@1 has been killed.", victim)
end
core.register_chatcommand("kill", {
- params = "[<name>]",
- description = "Kill player or yourself",
+ params = S("[<name>]"),
+ description = S("Kill player or yourself"),
privs = {server=true},
func = function(name, param)
return handle_kill_command(name, param == "" and name or param)
diff --git a/builtin/game/item.lua b/builtin/game/item.lua
index 881aff52e..b68177c22 100644
--- a/builtin/game/item.lua
+++ b/builtin/game/item.lua
@@ -678,7 +678,7 @@ end
-- Item definition defaults
--
-local default_stack_max = tonumber(minetest.settings:get("default_stack_max")) or 99
+local default_stack_max = tonumber(core.settings:get("default_stack_max")) or 99
core.nodedef_default = {
-- Item properties
diff --git a/builtin/game/knockback.lua b/builtin/game/knockback.lua
index b5c4cbc5a..a937aa186 100644
--- a/builtin/game/knockback.lua
+++ b/builtin/game/knockback.lua
@@ -42,5 +42,5 @@ core.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool
return -- barely noticeable, so don't even send
end
- player:add_player_velocity(kdir)
+ player:add_velocity(kdir)
end)
diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua
index b8c5e16a9..fcb86146d 100644
--- a/builtin/game/misc.lua
+++ b/builtin/game/misc.lua
@@ -1,5 +1,7 @@
-- Minetest: builtin/misc.lua
+local S = core.get_translator("__builtin")
+
--
-- Misc. API functions
--
@@ -42,15 +44,15 @@ end
function core.send_join_message(player_name)
if not core.is_singleplayer() then
- core.chat_send_all("*** " .. player_name .. " joined the game.")
+ core.chat_send_all("*** " .. S("@1 joined the game.", player_name))
end
end
function core.send_leave_message(player_name, timed_out)
- local announcement = "*** " .. player_name .. " left the game."
+ local announcement = "*** " .. S("@1 left the game.", player_name)
if timed_out then
- announcement = announcement .. " (timed out)"
+ announcement = "*** " .. S("@1 left the game (timed out).", player_name)
end
core.chat_send_all(announcement)
end
diff --git a/builtin/game/privileges.lua b/builtin/game/privileges.lua
index c7417d2f4..aee32a34e 100644
--- a/builtin/game/privileges.lua
+++ b/builtin/game/privileges.lua
@@ -1,5 +1,7 @@
-- Minetest: builtin/privileges.lua
+local S = core.get_translator("__builtin")
+
--
-- Privileges
--
@@ -15,7 +17,7 @@ function core.register_privilege(name, param)
def.give_to_admin = def.give_to_singleplayer
end
if def.description == nil then
- def.description = "(no description)"
+ def.description = S("(no description)")
end
end
local def
@@ -28,69 +30,69 @@ function core.register_privilege(name, param)
core.registered_privileges[name] = def
end
-core.register_privilege("interact", "Can interact with things and modify the world")
-core.register_privilege("shout", "Can speak in chat")
-core.register_privilege("basic_privs", "Can modify 'shout' and 'interact' privileges")
-core.register_privilege("privs", "Can modify privileges")
+core.register_privilege("interact", S("Can interact with things and modify the world"))
+core.register_privilege("shout", S("Can speak in chat"))
+core.register_privilege("basic_privs", S("Can modify 'shout' and 'interact' privileges"))
+core.register_privilege("privs", S("Can modify privileges"))
core.register_privilege("teleport", {
- description = "Can teleport self",
+ description = S("Can teleport self"),
give_to_singleplayer = false,
})
core.register_privilege("bring", {
- description = "Can teleport other players",
+ description = S("Can teleport other players"),
give_to_singleplayer = false,
})
core.register_privilege("settime", {
- description = "Can set the time of day using /time",
+ description = S("Can set the time of day using /time"),
give_to_singleplayer = false,
})
core.register_privilege("server", {
- description = "Can do server maintenance stuff",
+ description = S("Can do server maintenance stuff"),
give_to_singleplayer = false,
give_to_admin = true,
})
core.register_privilege("protection_bypass", {
- description = "Can bypass node protection in the world",
+ description = S("Can bypass node protection in the world"),
give_to_singleplayer = false,
})
core.register_privilege("ban", {
- description = "Can ban and unban players",
+ description = S("Can ban and unban players"),
give_to_singleplayer = false,
give_to_admin = true,
})
core.register_privilege("kick", {
- description = "Can kick players",
+ description = S("Can kick players"),
give_to_singleplayer = false,
give_to_admin = true,
})
core.register_privilege("give", {
- description = "Can use /give and /giveme",
+ description = S("Can use /give and /giveme"),
give_to_singleplayer = false,
})
core.register_privilege("password", {
- description = "Can use /setpassword and /clearpassword",
+ description = S("Can use /setpassword and /clearpassword"),
give_to_singleplayer = false,
give_to_admin = true,
})
core.register_privilege("fly", {
- description = "Can use fly mode",
+ description = S("Can use fly mode"),
give_to_singleplayer = false,
})
core.register_privilege("fast", {
- description = "Can use fast mode",
+ description = S("Can use fast mode"),
give_to_singleplayer = false,
})
core.register_privilege("noclip", {
- description = "Can fly through solid nodes using noclip mode",
+ description = S("Can fly through solid nodes using noclip mode"),
give_to_singleplayer = false,
})
core.register_privilege("rollback", {
- description = "Can use the rollback functionality",
+ description = S("Can use the rollback functionality"),
give_to_singleplayer = false,
})
core.register_privilege("debug", {
- description = "Allows enabling various debug options that may affect gameplay",
+ description = S("Allows enabling various debug options that may affect gameplay"),
give_to_singleplayer = false,
give_to_admin = true,
})
diff --git a/builtin/game/register.lua b/builtin/game/register.lua
index b006957e9..c07535855 100644
--- a/builtin/game/register.lua
+++ b/builtin/game/register.lua
@@ -1,5 +1,7 @@
-- Minetest: builtin/misc_register.lua
+local S = core.get_translator("__builtin")
+
--
-- Make raw registration functions inaccessible to anyone except this file
--
@@ -118,10 +120,6 @@ function core.register_item(name, itemdef)
end
itemdef.name = name
- -- default short_description to first line of description
- itemdef.short_description = itemdef.short_description or
- (itemdef.description or ""):gsub("\n.*","")
-
-- Apply defaults and add to registered_* table
if itemdef.type == "node" then
-- Use the nodebox as selection box if it's not set manually
@@ -330,7 +328,7 @@ end
core.register_item(":unknown", {
type = "none",
- description = "Unknown Item",
+ description = S("Unknown Item"),
inventory_image = "unknown_item.png",
on_place = core.item_place,
on_secondary_use = core.item_secondary_use,
@@ -340,7 +338,7 @@ core.register_item(":unknown", {
})
core.register_node(":air", {
- description = "Air",
+ description = S("Air"),
inventory_image = "air.png",
wield_image = "air.png",
drawtype = "airlike",
@@ -357,7 +355,7 @@ core.register_node(":air", {
})
core.register_node(":ignore", {
- description = "Ignore",
+ description = S("Ignore"),
inventory_image = "ignore.png",
wield_image = "ignore.png",
drawtype = "airlike",
@@ -370,11 +368,12 @@ core.register_node(":ignore", {
air_equivalent = true,
drop = "",
groups = {not_in_creative_inventory=1},
+ node_placement_prediction = "",
on_place = function(itemstack, placer, pointed_thing)
core.chat_send_player(
placer:get_player_name(),
core.colorize("#FF0000",
- "You can't place 'ignore' nodes!"))
+ S("You can't place 'ignore' nodes!")))
return ""
end,
})
diff --git a/builtin/game/statbars.lua b/builtin/game/statbars.lua
index d192029c5..db5087a16 100644
--- a/builtin/game/statbars.lua
+++ b/builtin/game/statbars.lua
@@ -84,8 +84,8 @@ local function update_builtin_statbars(player)
end
if hud.id_breathbar and (not show_breathbar or breath == breath_max) then
- minetest.after(1, function(player_name, breath_bar)
- local player = minetest.get_player_by_name(player_name)
+ core.after(1, function(player_name, breath_bar)
+ local player = core.get_player_by_name(player_name)
if player then
player:hud_remove(breath_bar)
end
diff --git a/builtin/init.lua b/builtin/init.lua
index 75bb3db85..89b1fdc64 100644
--- a/builtin/init.lua
+++ b/builtin/init.lua
@@ -39,9 +39,20 @@ if INIT == "game" then
assert(not core.get_http_api)
elseif INIT == "mainmenu" then
local mm_script = core.settings:get("main_menu_script")
+ local custom_loaded = false
if mm_script and mm_script ~= "" then
- dofile(mm_script)
- else
+ local testfile = io.open(mm_script, "r")
+ if testfile then
+ testfile:close()
+ dofile(mm_script)
+ custom_loaded = true
+ core.log("info", "Loaded custom main menu script: "..mm_script)
+ else
+ core.log("error", "Failed to load custom main menu script: "..mm_script)
+ core.log("info", "Falling back to default main menu script")
+ end
+ end
+ if not custom_loaded then
dofile(core.get_mainmenu_path() .. DIR_DELIM .. "init.lua")
end
elseif INIT == "async" then
diff --git a/builtin/locale/__builtin.de.tr b/builtin/locale/__builtin.de.tr
new file mode 100644
index 000000000..eaadf611b
--- /dev/null
+++ b/builtin/locale/__builtin.de.tr
@@ -0,0 +1,225 @@
+# textdomain: __builtin
+Empty command.=Leerer Befehl.
+Invalid command: @1=Ungültiger Befehl: @1
+Invalid command usage.=Ungültige Befehlsverwendung.
+You don't have permission to run this command (missing privileges: @1).=Sie haben keine Erlaubnis, diesen Befehl auszuführen (fehlende Privilegien: @1).
+Unable to get position of player @1.=Konnte Position vom Spieler @1 nicht ermitteln.
+Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=Ungültiges Gebietsformat. Erwartet: (x1,y1,z1) (x2,y2,z2)
+<action>=<Aktion>
+Show chat action (e.g., '/me orders a pizza' displays '<player name> orders a pizza')=Chataktion zeigen (z.B. wird „/me isst Pizza“ zu „<Spielername> isst Pizza“)
+Show the name of the server owner=Den Namen des Servereigentümers zeigen
+The administrator of this server is @1.=Der Administrator dieses Servers ist @1.
+There's no administrator named in the config file.=In der Konfigurationsdatei wurde kein Administrator angegeben.
+[<name>]=[<Name>]
+Show privileges of yourself or another player=Ihre eigenen Privilegien oder die eines anderen Spielers anzeigen
+Player @1 does not exist.=Spieler @1 existiert nicht.
+Privileges of @1: @2=Privilegien von @1: @2
+<privilege>=<Privileg>
+Return list of all online players with privilege=Liste aller Spieler mit einem Privileg ausgeben
+Invalid parameters (see /help haspriv).=Ungültige Parameter (siehe „/help haspriv“).
+Unknown privilege!=Unbekanntes Privileg!
+Players online with the "@1" privilege: @2=Derzeit online spielende Spieler mit dem „@1“-Privileg: @2
+Your privileges are insufficient.=Ihre Privilegien sind unzureichend.
+Unknown privilege: @1=Unbekanntes Privileg: @1
+@1 granted you privileges: @2=@1 gewährte Ihnen Privilegien: @2
+<name> (<privilege> | all)=<Name> (<Privileg> | all)
+Give privileges to player=Privileg an Spieler vergeben
+Invalid parameters (see /help grant).=Ungültige Parameter (siehe „/help grant“).
+<privilege> | all=<Privileg> | all
+Grant privileges to yourself=Privilegien an Ihnen selbst vergeben
+Invalid parameters (see /help grantme).=Ungültige Parameter (siehe „/help grantme“).
+@1 revoked privileges from you: @2=@1 entfernte Privilegien von Ihnen: @2
+Remove privileges from player=Privilegien von Spieler entfernen
+Invalid parameters (see /help revoke).=Ungültige Parameter (siehe „/help revoke“).
+Revoke privileges from yourself=Privilegien von Ihnen selbst entfernen
+Invalid parameters (see /help revokeme).=Ungültige Parameter (siehe „/help revokeme“).
+<name> <password>=<Name> <Passwort>
+Set player's password=Passwort von Spieler setzen
+Name field required.=Namensfeld benötigt.
+Your password was cleared by @1.=Ihr Passwort wurde von @1 geleert.
+Password of player "@1" cleared.=Passwort von Spieler „@1“ geleert.
+Your password was set by @1.=Ihr Passwort wurde von @1 gesetzt.
+Password of player "@1" set.=Passwort von Spieler „@1“ gesetzt.
+<name>=<Name>
+Set empty password for a player=Leeres Passwort für einen Spieler setzen
+Reload authentication data=Authentifizierungsdaten erneut laden
+Done.=Fertig.
+Failed.=Fehlgeschlagen.
+Remove a player's data=Daten eines Spielers löschen
+Player "@1" removed.=Spieler „@1“ gelöscht.
+No such player "@1" to remove.=Es gibt keinen Spieler „@1“, der gelöscht werden könnte.
+Player "@1" is connected, cannot remove.=Spieler „@1“ ist verbunden, er kann nicht gelöscht werden.
+Unhandled remove_player return code @1.=Nicht berücksichtigter remove_player-Rückgabewert @1.
+Cannot teleport out of map bounds!=Eine Teleportation außerhalb der Kartengrenzen ist nicht möglich!
+Cannot get player with name @1.=Spieler mit Namen @1 kann nicht gefunden werden.
+Cannot teleport, @1 is attached to an object!=Teleportation nicht möglich, @1 ist an einem Objekt befestigt!
+Teleporting @1 to @2.=Teleportation von @1 nach @2
+One does not teleport to oneself.=Man teleportiert sich doch nicht zu sich selbst.
+Cannot get teleportee with name @1.=Der zu teleportierende Spieler mit Namen @1 kann nicht gefunden werden.
+Cannot get target player with name @1.=Zielspieler mit Namen @1 kann nicht gefunden werden.
+Teleporting @1 to @2 at @3.=Teleportation von @1 zu @2 bei @3
+<X>,<Y>,<Z> | <to_name> | <name> <X>,<Y>,<Z> | <name> <to_name>=<X>,<Y>,<Z> | <zu_Name> | <Name> <X>,<Y>,<Z> | <Name> <zu_Name>
+Teleport to position or player=Zu Position oder Spieler teleportieren
+You don't have permission to teleport other players (missing privilege: @1).=Sie haben nicht die Erlaubnis, andere Spieler zu teleportieren (fehlendes Privileg: @1).
+([-n] <name> <value>) | <name>=([-n] <Name> <Wert>) | <Name>
+Set or read server configuration setting=Serverkonfigurationseinstellung setzen oder lesen
+Failed. Use '/set -n <name> <value>' to create a new setting.=Fehlgeschlagen. Benutzen Sie „/set -n <Name> <Wert>“, um eine neue Einstellung zu erstellen.
+@1 @= @2=@1 @= @2
+<not set>=<nicht gesetzt>
+Invalid parameters (see /help set).=Ungültige Parameter (siehe „/help set“).
+Finished emerging @1 blocks in @2ms.=Fertig mit Erzeugung von @1 Blöcken in @2 ms.
+emergeblocks update: @1/@2 blocks emerged (@3%)=emergeblocks-Update: @1/@2 Kartenblöcke geladen (@3%)
+(here [<radius>]) | (<pos1> <pos2>)=(here [<Radius>]) | (<Pos1> <Pos2>)
+Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Lade (oder, wenn nicht existent, generiere) Kartenblöcke im Gebiet zwischen Pos1 und Pos2 (<Pos1> und <Pos2> müssen in Klammern stehen)
+Started emerge of area ranging from @1 to @2.=Start des Ladevorgangs des Gebiets zwischen @1 und @2.
+Delete map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Kartenblöcke innerhalb des Gebiets zwischen Pos1 und Pos2 löschen (<Pos1> und <Pos2> müssen in Klammern stehen)
+Successfully cleared area ranging from @1 to @2.=Gebiet zwischen @1 und @2 erfolgreich geleert.
+Failed to clear one or more blocks in area.=Fehlgeschlagen: Ein oder mehrere Kartenblöcke im Gebiet konnten nicht geleert werden.
+Resets lighting in the area between pos1 and pos2 (<pos1> and <pos2> must be in parentheses)=Setzt das Licht im Gebiet zwischen Pos1 und Pos2 zurück (<Pos1> und <Pos2> müssen in Klammern stehen)
+Successfully reset light in the area ranging from @1 to @2.=Das Licht im Gebiet zwischen @1 und @2 wurde erfolgreich zurückgesetzt.
+Failed to load one or more blocks in area.=Fehlgeschlagen: Ein oder mehrere Kartenblöcke im Gebiet konnten nicht geladen werden.
+List mods installed on the server=Installierte Mods auf dem Server auflisten
+Cannot give an empty item.=Ein leerer Gegenstand kann nicht gegeben werden.
+Cannot give an unknown item.=Ein unbekannter Gegenstand kann nicht gegeben werden.
+Giving 'ignore' is not allowed.=„ignore“ darf nicht gegeben werden.
+@1 is not a known player.=@1 ist kein bekannter Spieler.
+@1 partially added to inventory.=@1 teilweise ins Inventar eingefügt.
+@1 could not be added to inventory.=@1 konnte nicht ins Inventar eingefügt werden.
+@1 added to inventory.=@1 zum Inventar hinzugefügt.
+@1 partially added to inventory of @2.=@1 teilweise ins Inventar von @2 eingefügt.
+@1 could not be added to inventory of @2.=@1 konnte nicht ins Inventar von @2 eingefügt werden.
+@1 added to inventory of @2.=@1 ins Inventar von @2 eingefügt.
+<name> <ItemString> [<count> [<wear>]]=<Name> <ItemString> [<Anzahl> [<Abnutzung>]]
+Give item to player=Gegenstand an Spieler geben
+Name and ItemString required.=Name und ItemString benötigt.
+<ItemString> [<count> [<wear>]]=<ItemString> [<Anzahl> [<Abnutzung>]]
+Give item to yourself=Gegenstand Ihnen selbst geben
+ItemString required.=ItemString benötigt.
+<EntityName> [<X>,<Y>,<Z>]=<EntityName> [<X>,<Y>,<Z>]
+Spawn entity at given (or your) position=Entity an angegebener (oder Ihrer eigenen) Position spawnen
+EntityName required.=EntityName benötigt.
+Unable to spawn entity, player is nil.=Entity konnte nicht gespawnt werden, Spieler ist nil.
+Cannot spawn an unknown entity.=Ein unbekanntes Entity kann nicht gespawnt werden.
+Invalid parameters (@1).=Ungültige Parameter (@1).
+@1 spawned.=@1 gespawnt.
+@1 failed to spawn.=@1 konnte nicht gespawnt werden.
+Destroy item in hand=Gegenstand in der Hand zerstören
+Unable to pulverize, no player.=Konnte nicht pulverisieren, kein Spieler.
+Unable to pulverize, no item in hand.=Konnte nicht pulverisieren, kein Gegenstand in der Hand.
+An item was pulverized.=Ein Gegenstand wurde pulverisiert.
+[<range>] [<seconds>] [<limit>]=[<Reichweite>] [<Sekunden>] [<Limit>]
+Check who last touched a node or a node near it within the time specified by <seconds>. Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set <seconds> to inf for no time limit=Überprüfen, wer als letztes einen Node oder einen Node in der Nähe innerhalb der in <Sekunden> angegebenen Zeitspanne angefasst hat. Standard: Reichweite @= 0, Sekunden @= 86400 @= 24h, Limit @= 5. <Sekunden> auf „inf“ setzen, um Zeitlimit zu deaktivieren.
+Rollback functions are disabled.=Rollback-Funktionen sind deaktiviert.
+That limit is too high!=Dieses Limit ist zu hoch!
+Checking @1 ...=Überprüfe @1 ...
+Nobody has touched the specified location in @1 seconds.=Niemand hat die angegebene Position seit @1 Sekunden angefasst.
+@1 @2 @3 -> @4 @5 seconds ago.=@1 @2 @3 -> @4 vor @5 Sekunden.
+Punch a node (range@=@1, seconds@=@2, limit@=@3).=Hauen Sie einen Node (Reichweite@=@1, Sekunden@=@2, Limit@=@3).
+(<name> [<seconds>]) | (:<actor> [<seconds>])=(<Name> [<Sekunden>]) | (:<Akteur> [<Sekunden>])
+Revert actions of a player. Default for <seconds> is 60. Set <seconds> to inf for no time limit=Aktionen eines Spielers zurückrollen. Standard für <Sekunden> ist 60. <Sekunden> auf „inf“ setzen, um Zeitlimit zu deaktivieren
+Invalid parameters. See /help rollback and /help rollback_check.=Ungültige Parameter. Siehe /help rollback und /help rollback_check.
+Reverting actions of player '@1' since @2 seconds.=Die Aktionen des Spielers „@1“ seit @2 Sekunden werden rückgängig gemacht.
+Reverting actions of @1 since @2 seconds.=Die Aktionen von @1 seit @2 Sekunden werden rückgängig gemacht.
+(log is too long to show)=(Protokoll ist zu lang für die Anzeige)
+Reverting actions succeeded.=Die Aktionen wurden erfolgreich rückgängig gemacht.
+Reverting actions FAILED.=FEHLGESCHLAGEN: Die Aktionen konnten nicht rückgängig gemacht werden.
+Show server status=Serverstatus anzeigen
+This command was disabled by a mod or game.=Dieser Befehl wurde von einer Mod oder einem Spiel deaktiviert.
+[<0..23>:<0..59> | <0..24000>]=[<0..23>:<0..59> | <0..24000>]
+Show or set time of day=Tageszeit anzeigen oder setzen
+Current time is @1:@2.=Es ist jetzt @1:@2 Uhr.
+You don't have permission to run this command (missing privilege: @1).=Sie haben nicht die Erlaubnis, diesen Befehl auszuführen (fehlendes Privileg: @1).
+Invalid time.=Ungültige Zeit.
+Time of day changed.=Tageszeit geändert.
+Invalid hour (must be between 0 and 23 inclusive).=Ungültige Stunde (muss zwischen 0 und 23 inklusive liegen).
+Invalid minute (must be between 0 and 59 inclusive).=Ungültige Minute (muss zwischen 0 und 59 inklusive liegen).
+Show day count since world creation=Anzahl Tage seit der Erschaffung der Welt anzeigen
+Current day is @1.=Aktueller Tag ist @1.
+[<delay_in_seconds> | -1] [reconnect] [<message>]=[<Verzögerung_in_Sekunden> | -1] [reconnect] [<Nachricht>]
+Shutdown server (-1 cancels a delayed shutdown)=Server herunterfahren (-1 bricht einen verzögerten Abschaltvorgang ab)
+Server shutting down (operator request).=Server wird heruntergefahren (Betreiberanfrage).
+Ban the IP of a player or show the ban list=Die IP eines Spielers verbannen oder die Bannliste anzeigen
+The ban list is empty.=Die Bannliste ist leer.
+Ban list: @1=Bannliste: @1
+Player is not online.=Spieler ist nicht online.
+Failed to ban player.=Konnte Spieler nicht verbannen.
+Banned @1.=@1 verbannt.
+<name> | <IP_address>=<Name> | <IP_Adresse>
+Remove IP ban belonging to a player/IP=Einen IP-Bann auf einen Spieler zurücknehmen
+Failed to unban player/IP.=Konnte Bann auf Spieler/IP nicht zurücknehmen.
+Unbanned @1.=Bann auf @1 zurückgenommen.
+<name> [<reason>]=<Name> [<Grund>]
+Kick a player=Spieler hinauswerfen
+Failed to kick player @1.=Spieler @1 konnte nicht hinausgeworfen werden.
+Kicked @1.=@1 hinausgeworfen.
+[full | quick]=[full | quick]
+Clear all objects in world=Alle Objekte in der Welt löschen
+Invalid usage, see /help clearobjects.=Ungültige Verwendung, siehe /help clearobjects.
+Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=Lösche alle Objekte. Dies kann eine lange Zeit dauern. Eine Netzwerkzeitüberschreitung könnte für Sie auftreten. (von @1)
+Objects cleared.=Objekte gelöscht.
+Cleared all objects.=Alle Objekte gelöscht.
+<name> <message>=<Name> <Nachricht>
+Send a direct message to a player=Eine Direktnachricht an einen Spieler senden
+Invalid usage, see /help msg.=Ungültige Verwendung, siehe /help msg.
+The player @1 is not online.=Der Spieler @1 ist nicht online.
+DM from @1: @2=DN von @1: @2
+Message sent.=Nachricht gesendet.
+Get the last login time of a player or yourself=Den letzten Loginzeitpunkt eines Spielers oder Ihren eigenen anfragen
+@1's last login time was @2.=Letzter Loginzeitpunkt von @1 war @2.
+@1's last login time is unknown.=Letzter Loginzeitpunkt von @1 ist unbekannt.
+Clear the inventory of yourself or another player=Das Inventar von Ihnen oder einem anderen Spieler leeren
+You don't have permission to clear another player's inventory (missing privilege: @1).=Sie haben nicht die Erlaubnis, das Inventar eines anderen Spielers zu leeren (fehlendes Privileg: @1).
+@1 cleared your inventory.=@1 hat Ihr Inventar geleert.
+Cleared @1's inventory.=Inventar von @1 geleert.
+Player must be online to clear inventory!=Spieler muss online sein, um das Inventar leeren zu können!
+Players can't be killed, damage has been disabled.=Spieler können nicht getötet werden, Schaden ist deaktiviert.
+Player @1 is not online.=Spieler @1 ist nicht online.
+You are already dead.=Sie sind schon tot.
+@1 is already dead.=@1 ist bereits tot.
+@1 has been killed.=@1 wurde getötet.
+Kill player or yourself=Einen Spieler oder Sie selbst töten
+Available commands: @1=Verfügbare Befehle: @1
+Use '/help <cmd>' to get more information, or '/help all' to list everything.=„/help <Befehl>“ benutzen, um mehr Informationen zu erhalten, oder „/help all“, um alles aufzulisten.
+Available commands:=Verfügbare Befehle:
+Command not available: @1=Befehl nicht verfügbar: @1
+[all | privs | <cmd>]=[all | privs | <Befehl>]
+Get help for commands or list privileges=Hilfe für Befehle erhalten oder Privilegien auflisten
+Available privileges:=Verfügbare Privilegien:
+Command=Befehl
+Parameters=Parameter
+For more information, click on any entry in the list.=Für mehr Informationen klicken Sie auf einen beliebigen Eintrag in der Liste.
+Double-click to copy the entry to the chat history.=Doppelklicken, um den Eintrag in die Chathistorie einzufügen.
+Command: @1 @2=Befehl: @1 @2
+Available commands: (see also: /help <cmd>)=Verfügbare Befehle: (siehe auch: /help <Befehl>)
+Close=Schließen
+Privilege=Privileg
+Description=Beschreibung
+print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=print [<Filter>] | dump [<Filter>] | save [<Format> [<Filter>]]
+Handle the profiler and profiling data=Den Profiler und Profilingdaten verwalten
+Statistics written to action log.=Statistiken zum Aktionsprotokoll geschrieben.
+Statistics were reset.=Statistiken wurden zurückgesetzt.
+Usage: @1=Verwendung: @1
+Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=Format kann entweder „txt“, „csv“, „lua“, „json“ oder „json_pretty“ sein (die Struktur kann sich in Zukunft ändern).
+(no description)=(keine Beschreibung)
+Can interact with things and modify the world=Kann mit Dingen interagieren und die Welt verändern
+Can speak in chat=Kann im Chat sprechen
+Can modify 'shout' and 'interact' privileges=Kann die „shout“- und „interact“-Privilegien anpassen
+Can modify privileges=Kann Privilegien anpassen
+Can teleport self=Kann sich selbst teleportieren
+Can teleport other players=Kann andere Spieler teleportieren
+Can set the time of day using /time=Kann die Tageszeit mit /time setzen
+Can do server maintenance stuff=Kann Serverwartungsdinge machen
+Can bypass node protection in the world=Kann den Schutz auf Blöcken in der Welt umgehen
+Can ban and unban players=Kann Spieler verbannen und entbannen
+Can kick players=Kann Spieler hinauswerfen
+Can use /give and /giveme=Kann /give und /giveme benutzen
+Can use /setpassword and /clearpassword=Kann /setpassword und /clearpassword benutzen
+Can use fly mode=Kann den Flugmodus benutzen
+Can use fast mode=Kann den Schnellmodus benutzen
+Can fly through solid nodes using noclip mode=Kann durch feste Blöcke mit dem Geistmodus fliegen
+Can use the rollback functionality=Kann die Rollback-Funktionalität benutzen
+Allows enabling various debug options that may affect gameplay=Erlaubt die Aktivierung diverser Debugoptionen, die das Spielgeschehen beeinflussen könnten
+Unknown Item=Unbekannter Gegenstand
+Air=Luft
+Ignore=Ignorieren
+You can't place 'ignore' nodes!=Sie können keine „ignore“-Blöcke platzieren!
diff --git a/builtin/locale/__builtin.it.tr b/builtin/locale/__builtin.it.tr
new file mode 100644
index 000000000..94bc870c8
--- /dev/null
+++ b/builtin/locale/__builtin.it.tr
@@ -0,0 +1,224 @@
+# textdomain: __builtin
+Empty command.=Comando vuoto.
+Invalid command: @1=Comando non valido: @1
+Invalid command usage.=Utilizzo del comando non valido.
+You don't have permission to run this command (missing privileges: @1).=Non hai il permesso di eseguire questo comando (privilegi mancanti: @1).
+Unable to get position of player @1.=Impossibile ottenere la posizione del giocatore @1.
+Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=Formato dell'area non corretto. Richiesto: (x1,y1,z1) (x2,y2,z2)
+<action>=<azione>
+Show chat action (e.g., '/me orders a pizza' displays '<player name> orders a pizza')=Mostra un'azione in chat (es. `/me ordina una pizza` mostra `<nome giocatore> ordina una pizza`)
+Show the name of the server owner=Mostra il nome del proprietario del server
+The administrator of this server is @1.=L'amministratore di questo server è @1.
+There's no administrator named in the config file.=Non c'è nessun amministratore nel file di configurazione.
+[<name>]=[<nome>]
+Show privileges of yourself or another player=Mostra i privilegi propri o di un altro giocatore
+Player @1 does not exist.=Il giocatore @1 non esiste.
+Privileges of @1: @2=Privilegi di @1: @2
+<privilege>=<privilegio>
+Return list of all online players with privilege=Ritorna una lista di tutti i giocatori connessi col tale privilegio
+Invalid parameters (see /help haspriv).=Parametri non validi (vedi /help haspriv).
+Unknown privilege!=Privilegio sconosciuto!
+Players online with the "@1" privilege: @2=Giocatori connessi con il privilegio "@1": @2
+Your privileges are insufficient.=I tuoi privilegi sono insufficienti.
+Unknown privilege: @1=Privilegio sconosciuto: @1
+@1 granted you privileges: @2=@1 ti ha assegnato i seguenti privilegi: @2
+<name> (<privilege> | all)=<nome> (<privilegio> | all)
+Give privileges to player=Dà privilegi al giocatore
+Invalid parameters (see /help grant).=Parametri non validi (vedi /help grant).
+<privilege> | all=<privilegio> | all
+Grant privileges to yourself=Assegna dei privilegi a te stessÇ
+Invalid parameters (see /help grantme).=Parametri non validi (vedi /help grantme).
+@1 revoked privileges from you: @2=@1 ti ha revocato i seguenti privilegi: @2
+Remove privileges from player=Rimuove privilegi dal giocatore
+Invalid parameters (see /help revoke).=Parametri non validi (vedi /help revoke).
+Revoke privileges from yourself=Revoca privilegi a te stessÇ
+Invalid parameters (see /help revokeme).=Parametri non validi (vedi /help revokeme).
+<name> <password>=<nome> <password>
+Set player's password=Imposta la password del giocatore
+Name field required.=Campo "nome" richiesto.
+Your password was cleared by @1.=La tua password è stata resettata da @1.
+Password of player "@1" cleared.=Password del giocatore "@1" resettata.
+Your password was set by @1.=La tua password è stata impostata da @1.
+Password of player "@1" set.=Password del giocatore "@1" impostata.
+<name>=<nome>
+Set empty password for a player=Imposta una password vuota a un giocatore
+Reload authentication data=Ricarica i dati d'autenticazione
+Done.=Fatto.
+Failed.=Errore.
+Remove a player's data=Rimuove i dati di un giocatore
+Player "@1" removed.=Giocatore "@1" rimosso.
+No such player "@1" to remove.=Non è presente nessun giocatore "@1" da rimuovere.
+Player "@1" is connected, cannot remove.=Il giocatore "@1" è connesso, non può essere rimosso.
+Unhandled remove_player return code @1.=Codice ritornato da remove_player non gestito (@1).
+Cannot teleport out of map bounds!=Non ci si può teletrasportare fuori dai limiti della mappa!
+Cannot get player with name @1.=Impossibile trovare il giocatore chiamato @1.
+Cannot teleport, @1 is attached to an object!=Impossibile teletrasportare, @1 è attaccato a un oggetto!
+Teleporting @1 to @2.=Teletrasportando @1 da @2.
+One does not teleport to oneself.=Non ci si può teletrasportare su se stessi.
+Cannot get teleportee with name @1.=Impossibile trovare il giocatore chiamato @1 per il teletrasporto
+Cannot get target player with name @1.=Impossibile trovare il giocatore chiamato @1 per il teletrasporto
+Teleporting @1 to @2 at @3.=Teletrasportando @1 da @2 a @3
+<X>,<Y>,<Z> | <to_name> | <name> <X>,<Y>,<Z> | <name> <to_name>=<X>,<Y>,<Z> | <da_nome> | <nome> <X>,<Y>,<Z> | <nome> <da_nome>
+Teleport to position or player=Teletrasporta a una posizione o da un giocatore
+You don't have permission to teleport other players (missing privilege: @1).=Non hai il permesso di teletrasportare altri giocatori (privilegio mancante: @1).
+([-n] <name> <value>) | <name>=([-n] <nome> <valore>) | <nome>
+Set or read server configuration setting=Imposta o ottieni le configurazioni del server
+Failed. Use '/set -n <name> <value>' to create a new setting.=Errore. Usa 'set -n <nome> <valore>' per creare una nuova impostazione
+@1 @= @2=@1 @= @2
+<not set>=<non impostato>
+Invalid parameters (see /help set).=Parametri non validi (vedi /help set).
+Finished emerging @1 blocks in @2ms.=Finito di emergere @1 blocchi in @2ms
+emergeblocks update: @1/@2 blocks emerged (@3%)=aggiornamento emergeblocks: @1/@2 blocchi emersi (@3%)
+(here [<radius>]) | (<pos1> <pos2>)=(here [<raggio>]) | (<pos1> <pos2>)
+Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Carica (o, se non esiste, genera) blocchi mappa contenuti nell'area tra pos1 e pos2 (<pos1> e <pos2> vanno tra parentesi)
+Started emerge of area ranging from @1 to @2.=Iniziata emersione dell'area tra @1 e @2.
+Delete map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Cancella i blocchi mappa contenuti nell'area tra pos1 e pos2 (<pos1> e <pos2> vanno tra parentesi)
+Successfully cleared area ranging from @1 to @2.=Area tra @1 e @2 ripulita con successo.
+Failed to clear one or more blocks in area.=Errore nel ripulire uno o più blocchi mappa nell'area
+Resets lighting in the area between pos1 and pos2 (<pos1> and <pos2> must be in parentheses)=Reimposta l'illuminazione nell'area tra pos1 e po2 (<pos1> e <pos2> vanno tra parentesi)
+Successfully reset light in the area ranging from @1 to @2.=Luce nell'area tra @1 e @2 reimpostata con successo.
+Failed to load one or more blocks in area.=Errore nel caricare uno o più blocchi mappa nell'area.
+List mods installed on the server=Elenca le mod installate nel server
+Cannot give an empty item.=Impossibile dare un oggetto vuoto.
+Cannot give an unknown item.=Impossibile dare un oggetto sconosciuto.
+Giving 'ignore' is not allowed.=Non è permesso dare 'ignore'.
+@1 is not a known player.=@1 non è un giocatore conosciuto.
+@1 partially added to inventory.=@1 parzialmente aggiunto all'inventario.
+@1 could not be added to inventory.=@1 non può essere aggiunto all'inventario.
+@1 added to inventory.=@1 aggiunto all'inventario.
+@1 partially added to inventory of @2.=@1 parzialmente aggiunto all'inventario di @2.
+@1 could not be added to inventory of @2.=Non è stato possibile aggiungere @1 all'inventario di @2.
+@1 added to inventory of @2.=@1 aggiunto all'inventario di @2.
+<name> <ItemString> [<count> [<wear>]]=<nome> <NomeOggetto> [<quantità> [<usura>]]
+Give item to player=Dà oggetti ai giocatori
+Name and ItemString required.=Richiesti nome e NomeOggetto.
+<ItemString> [<count> [<wear>]]=<NomeOggetto> [<quantità> [<usura>]]
+Give item to yourself=Dà oggetti a te stessÇ
+ItemString required.=Richiesto NomeOggetto.
+<EntityName> [<X>,<Y>,<Z>]=<NomeEntità> [<X>,<Y>,<Z>]
+Spawn entity at given (or your) position=Genera un'entità alla data coordinata (o la tua)
+EntityName required.=Richiesto NomeEntità
+Unable to spawn entity, player is nil.=Impossibile generare l'entità, il giocatore è nil.
+Cannot spawn an unknown entity.=Impossibile generare un'entità sconosciuta.
+Invalid parameters (@1).=Parametri non validi (@1).
+@1 spawned.=Generata entità @1.
+@1 failed to spawn.=Errore nel generare @1
+Destroy item in hand=Distrugge l'oggetto in mano
+Unable to pulverize, no player.=Impossibile polverizzare, nessun giocatore.
+Unable to pulverize, no item in hand.=Impossibile polverizzare, nessun oggetto in mano.
+An item was pulverized.=Un oggetto è stato polverizzato.
+[<range>] [<seconds>] [<limit>]=[<raggio>] [<secondi>] [<limite>]
+Check who last touched a node or a node near it within the time specified by <seconds>. Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set <seconds> to inf for no time limit=Controlla chi è l'ultimo giocatore che ha toccato un nodo o un nodo nelle sue vicinanze, negli ultimi secondi indicati. Di base: raggio @= 0, secondi @= 86400 @= 24h, limite @= 5.
+Rollback functions are disabled.=Le funzioni di rollback sono disabilitate.
+That limit is too high!=Il limite è troppo alto!
+Checking @1 ...=Controllando @1 ...
+Nobody has touched the specified location in @1 seconds.=Nessuno ha toccato il punto specificato negli ultimi @1 secondi.
+@1 @2 @3 -> @4 @5 seconds ago.=@1 @2 @3 -> @4 @5 secondi fa.
+Punch a node (range@=@1, seconds@=@2, limit@=@3).=Colpisce un nodo (raggio@=@1, secondi@=@2, limite@=@3)
+(<name> [<seconds>]) | (:<actor> [<seconds>])=(<nome> [<secondi>]) | (:<attore> [<secondi>])
+Revert actions of a player. Default for <seconds> is 60. Set <seconds> to inf for no time limit=Riavvolge le azioni di un giocatore. Di base, <secondi> è 60. Imposta <secondi> a inf per nessun limite di tempo
+Invalid parameters. See /help rollback and /help rollback_check.=Parametri non validi. Vedi /help rollback e /help rollback_check.
+Reverting actions of player '@1' since @2 seconds.=Riavvolge le azioni del giocatore '@1' avvenute negli ultimi @2 secondi.
+Reverting actions of @1 since @2 seconds.=Riavvolge le azioni di @1 avvenute negli ultimi @2 secondi.
+(log is too long to show)=(il log è troppo lungo per essere mostrato)
+Reverting actions succeeded.=Riavvolgimento azioni avvenuto con successo.
+Reverting actions FAILED.=Errore nel riavvolgere le azioni.
+Show server status=Mostra lo stato del server
+This command was disabled by a mod or game.=Questo comando è stato disabilitato da una mod o dal gioco.
+[<0..23>:<0..59> | <0..24000>]=[<0..23>:<0..59> | <0..24000>]
+Show or set time of day=Mostra o imposta l'orario della giornata
+Current time is @1:@2.=Orario corrente: @1:@2.
+You don't have permission to run this command (missing privilege: @1).=Non hai il permesso di eseguire questo comando (privilegio mancante: @1)
+Invalid time.=Orario non valido.
+Time of day changed.=Orario della giornata cambiato.
+Invalid hour (must be between 0 and 23 inclusive).=Ora non valida (deve essere tra 0 e 23 inclusi)
+Invalid minute (must be between 0 and 59 inclusive).=Minuto non valido (deve essere tra 0 e 59 inclusi)
+Show day count since world creation=Mostra il conteggio dei giorni da quando il mondo è stato creato
+Current day is @1.=Giorno attuale: @1.
+[<delay_in_seconds> | -1] [reconnect] [<message>]=[<ritardo_in_secondi> | -1] [reconnect] [<messaggio>]
+Shutdown server (-1 cancels a delayed shutdown)=Arresta il server (-1 annulla un arresto programmato)
+Server shutting down (operator request).=Arresto del server in corso (per richiesta dell'operatore)
+Ban the IP of a player or show the ban list=Bandisce l'IP del giocatore o mostra la lista di quelli banditi
+The ban list is empty.=La lista banditi è vuota.
+Ban list: @1=Lista banditi: @1
+Player is not online.=Il giocatore non è connesso.
+Failed to ban player.=Errore nel bandire il giocatore.
+Banned @1.=@1 banditÇ.
+<name> | <IP_address>=<nome> | <indirizzo_IP>
+Remove IP ban belonging to a player/IP=Perdona l'IP appartenente a un giocatore/IP
+Failed to unban player/IP.=Errore nel perdonare il giocatore/IP
+Unbanned @1.=@1 perdonatÇ
+<name> [<reason>]=<nome> [<ragione>]
+Kick a player=Caccia un giocatore
+Failed to kick player @1.=Errore nel cacciare il giocatore @1.
+Kicked @1.=@1 cacciatÇ.
+[full | quick]=[full | quick]
+Clear all objects in world=Elimina tutti gli oggetti/entità nel mondo
+Invalid usage, see /help clearobjects.=Uso incorretto, vedi /help clearobjects.
+Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=Eliminando tutti gli oggetti/entità. Questo potrebbe richiedere molto tempo e farti eventualmente crashare. (di @1)
+Cleared all objects.=Tutti gli oggetti sono stati eliminati.
+<name> <message>=<nome> <messaggio>
+Send a direct message to a player=Invia un messaggio privato al giocatore
+Invalid usage, see /help msg.=Uso incorretto, vedi /help msg
+The player @1 is not online.=Il giocatore @1 non è connesso.
+DM from @1: @2=Messaggio privato da @1: @2
+Message sent.=Messaggio inviato.
+Get the last login time of a player or yourself=Ritorna l'ultimo accesso di un giocatore o di te stessÇ
+@1's last login time was @2.=L'ultimo accesso di @1 è avvenuto il @2
+@1's last login time is unknown.=L'ultimo accesso di @1 non è conosciuto
+Clear the inventory of yourself or another player=Svuota l'inventario tuo o di un altro giocatore
+You don't have permission to clear another player's inventory (missing privilege: @1).=Non hai il permesso di svuotare l'inventario di un altro giocatore (privilegio mancante: @1).
+@1 cleared your inventory.=@1 ha svuotato il tuo inventario.
+Cleared @1's inventory.=L'inventario di @1 è stato svuotato.
+Player must be online to clear inventory!=Il giocatore deve essere connesso per svuotarne l'inventario!
+Players can't be killed, damage has been disabled.=I giocatori non possono essere uccisi, il danno è disabilitato.
+Player @1 is not online.=Il giocatore @1 non è connesso.
+You are already dead.=Sei già mortÇ.
+@1 is already dead.=@1 è già mortÇ.
+@1 has been killed.=@1 è stato uccisÇ.
+Kill player or yourself=Uccide un giocatore o te stessÇ
+Available commands: @1=Comandi disponibili: @1
+Use '/help <cmd>' to get more information, or '/help all' to list everything.=Usa '/help <comando>' per ottenere più informazioni, o '/help all' per elencare tutti i comandi.
+Available commands:=Comandi disponibili:
+Command not available: @1=Comando non disponibile: @1
+[all | privs | <cmd>]=[all | privs | <comando>]
+Get help for commands or list privileges=Richiama la finestra d'aiuto dei comandi o dei privilegi
+Available privileges:=Privilegi disponibili:
+Command=Comando
+Parameters=Parametri
+For more information, click on any entry in the list.=Per più informazioni, clicca su una qualsiasi voce dell'elenco.
+Double-click to copy the entry to the chat history.=Doppio click per copiare la voce nella cronologia della chat.
+Command: @1 @2=Comando: @1 @2
+Available commands: (see also: /help <cmd>)=Comandi disponibili: (vedi anche /help <comando>)
+Close=Chiudi
+Privilege=Privilegio
+Description=Descrizione
+print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=print [<filtro>] | dump [<filtro>] | save [<formato> [<filtro>]] | reset
+Handle the profiler and profiling data=Gestisce il profiler e i dati da esso elaborati
+Statistics written to action log.=Statistiche scritte nel log delle azioni.
+Statistics were reset.=Le statistiche sono state resettate.
+Usage: @1=Utilizzo: @1
+Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=I formati supportati sono txt, csv, lua, json e json_pretty (le strutture potrebbero essere soggetti a cambiamenti).
+(no description)=(nessuna descrizione)
+Can interact with things and modify the world=Si può interagire con le cose e modificare il mondo
+Can speak in chat=Si può parlare in chat
+Can modify 'shout' and 'interact' privileges=Si possono modificare i privilegi 'shout' e 'interact'
+Can modify privileges=Si possono modificare i privilegi
+Can teleport self=Si può teletrasportare se stessз
+Can teleport other players=Si possono teletrasportare gli altri giocatori
+Can set the time of day using /time=Si può impostate l'orario della giornata tramite /time
+Can do server maintenance stuff=Si possono eseguire operazioni di manutenzione del server
+Can bypass node protection in the world=Si può aggirare la protezione dei nodi nel mondo
+Can ban and unban players=Si possono bandire e perdonare i giocatori
+Can kick players=Si possono cacciare i giocatori
+Can use /give and /giveme=Si possono usare /give e /give me
+Can use /setpassword and /clearpassword=Si possono usare /setpassword e /clearpassword
+Can use fly mode=Si può usare la modalità volo
+Can use fast mode=Si può usare la modalità rapida
+Can fly through solid nodes using noclip mode=Si può volare attraverso i nodi solidi con la modalità incorporea
+Can use the rollback functionality=Si può usare la funzione di rollback
+Allows enabling various debug options that may affect gameplay=Permette di abilitare varie opzioni di debug che potrebbero influenzare l'esperienza di gioco
+Unknown Item=Oggetto sconosciuto
+Air=Aria
+Ignore=Ignora
+You can't place 'ignore' nodes!=Non puoi piazzare nodi 'ignore'!
diff --git a/builtin/locale/template.txt b/builtin/locale/template.txt
new file mode 100644
index 000000000..c5ace1a2f
--- /dev/null
+++ b/builtin/locale/template.txt
@@ -0,0 +1,224 @@
+# textdomain: __builtin
+Empty command.=
+Invalid command: @1=
+Invalid command usage.=
+You don't have permission to run this command (missing privileges: @1).=
+Unable to get position of player @1.=
+Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=
+<action>=
+Show chat action (e.g., '/me orders a pizza' displays '<player name> orders a pizza')=
+Show the name of the server owner=
+The administrator of this server is @1.=
+There's no administrator named in the config file.=
+[<name>]=
+Show privileges of yourself or another player=
+Player @1 does not exist.=
+Privileges of @1: @2=
+<privilege>=
+Return list of all online players with privilege=
+Invalid parameters (see /help haspriv).=
+Unknown privilege!=
+Players online with the "@1" privilege: @2=
+Your privileges are insufficient.=
+Unknown privilege: @1=
+@1 granted you privileges: @2=
+<name> (<privilege> | all)=
+Give privileges to player=
+Invalid parameters (see /help grant).=
+<privilege> | all=
+Grant privileges to yourself=
+Invalid parameters (see /help grantme).=
+@1 revoked privileges from you: @2=
+Remove privileges from player=
+Invalid parameters (see /help revoke).=
+Revoke privileges from yourself=
+Invalid parameters (see /help revokeme).=
+<name> <password>=
+Set player's password=
+Name field required.=
+Your password was cleared by @1.=
+Password of player "@1" cleared.=
+Your password was set by @1.=
+Password of player "@1" set.=
+<name>=
+Set empty password for a player=
+Reload authentication data=
+Done.=
+Failed.=
+Remove a player's data=
+Player "@1" removed.=
+No such player "@1" to remove.=
+Player "@1" is connected, cannot remove.=
+Unhandled remove_player return code @1.=
+Cannot teleport out of map bounds!=
+Cannot get player with name @1.=
+Cannot teleport, @1 is attached to an object!=
+Teleporting @1 to @2.=
+One does not teleport to oneself.=
+Cannot get teleportee with name @1.=
+Cannot get target player with name @1.=
+Teleporting @1 to @2 at @3.=
+<X>,<Y>,<Z> | <to_name> | <name> <X>,<Y>,<Z> | <name> <to_name>=
+Teleport to position or player=
+You don't have permission to teleport other players (missing privilege: @1).=
+([-n] <name> <value>) | <name>=
+Set or read server configuration setting=
+Failed. Use '/set -n <name> <value>' to create a new setting.=
+@1 @= @2=
+<not set>=
+Invalid parameters (see /help set).=
+Finished emerging @1 blocks in @2ms.=
+emergeblocks update: @1/@2 blocks emerged (@3%)=
+(here [<radius>]) | (<pos1> <pos2>)=
+Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=
+Started emerge of area ranging from @1 to @2.=
+Delete map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=
+Successfully cleared area ranging from @1 to @2.=
+Failed to clear one or more blocks in area.=
+Resets lighting in the area between pos1 and pos2 (<pos1> and <pos2> must be in parentheses)=
+Successfully reset light in the area ranging from @1 to @2.=
+Failed to load one or more blocks in area.=
+List mods installed on the server=
+Cannot give an empty item.=
+Cannot give an unknown item.=
+Giving 'ignore' is not allowed.=
+@1 is not a known player.=
+@1 partially added to inventory.=
+@1 could not be added to inventory.=
+@1 added to inventory.=
+@1 partially added to inventory of @2.=
+@1 could not be added to inventory of @2.=
+@1 added to inventory of @2.=
+<name> <ItemString> [<count> [<wear>]]=
+Give item to player=
+Name and ItemString required.=
+<ItemString> [<count> [<wear>]]=
+Give item to yourself=
+ItemString required.=
+<EntityName> [<X>,<Y>,<Z>]=
+Spawn entity at given (or your) position=
+EntityName required.=
+Unable to spawn entity, player is nil.=
+Cannot spawn an unknown entity.=
+Invalid parameters (@1).=
+@1 spawned.=
+@1 failed to spawn.=
+Destroy item in hand=
+Unable to pulverize, no player.=
+Unable to pulverize, no item in hand.=
+An item was pulverized.=
+[<range>] [<seconds>] [<limit>]=
+Check who last touched a node or a node near it within the time specified by <seconds>. Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set <seconds> to inf for no time limit=
+Rollback functions are disabled.=
+That limit is too high!=
+Checking @1 ...=
+Nobody has touched the specified location in @1 seconds.=
+@1 @2 @3 -> @4 @5 seconds ago.=
+Punch a node (range@=@1, seconds@=@2, limit@=@3).=
+(<name> [<seconds>]) | (:<actor> [<seconds>])=
+Revert actions of a player. Default for <seconds> is 60. Set <seconds> to inf for no time limit=
+Invalid parameters. See /help rollback and /help rollback_check.=
+Reverting actions of player '@1' since @2 seconds.=
+Reverting actions of @1 since @2 seconds.=
+(log is too long to show)=
+Reverting actions succeeded.=
+Reverting actions FAILED.=
+Show server status=
+This command was disabled by a mod or game.=
+[<0..23>:<0..59> | <0..24000>]=
+Show or set time of day=
+Current time is @1:@2.=
+You don't have permission to run this command (missing privilege: @1).=
+Invalid time.=
+Time of day changed.=
+Invalid hour (must be between 0 and 23 inclusive).=
+Invalid minute (must be between 0 and 59 inclusive).=
+Show day count since world creation=
+Current day is @1.=
+[<delay_in_seconds> | -1] [reconnect] [<message>]=
+Shutdown server (-1 cancels a delayed shutdown)=
+Server shutting down (operator request).=
+Ban the IP of a player or show the ban list=
+The ban list is empty.=
+Ban list: @1=
+Player is not online.=
+Failed to ban player.=
+Banned @1.=
+<name> | <IP_address>=
+Remove IP ban belonging to a player/IP=
+Failed to unban player/IP.=
+Unbanned @1.=
+<name> [<reason>]=
+Kick a player=
+Failed to kick player @1.=
+Kicked @1.=
+[full | quick]=
+Clear all objects in world=
+Invalid usage, see /help clearobjects.=
+Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=
+Cleared all objects.=
+<name> <message>=
+Send a direct message to a player=
+Invalid usage, see /help msg.=
+The player @1 is not online.=
+DM from @1: @2=
+Message sent.=
+Get the last login time of a player or yourself=
+@1's last login time was @2.=
+@1's last login time is unknown.=
+Clear the inventory of yourself or another player=
+You don't have permission to clear another player's inventory (missing privilege: @1).=
+@1 cleared your inventory.=
+Cleared @1's inventory.=
+Player must be online to clear inventory!=
+Players can't be killed, damage has been disabled.=
+Player @1 is not online.=
+You are already dead.=
+@1 is already dead.=
+@1 has been killed.=
+Kill player or yourself=
+Available commands: @1=
+Use '/help <cmd>' to get more information, or '/help all' to list everything.=
+Available commands:=
+Command not available: @1=
+[all | privs | <cmd>]=
+Get help for commands or list privileges=
+Available privileges:=
+Command=
+Parameters=
+For more information, click on any entry in the list.=
+Double-click to copy the entry to the chat history.=
+Command: @1 @2=
+Available commands: (see also: /help <cmd>)=
+Close=
+Privilege=
+Description=
+print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=
+Handle the profiler and profiling data=
+Statistics written to action log.=
+Statistics were reset.=
+Usage: @1=
+Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=
+(no description)=
+Can interact with things and modify the world=
+Can speak in chat=
+Can modify 'shout' and 'interact' privileges=
+Can modify privileges=
+Can teleport self=
+Can teleport other players=
+Can set the time of day using /time=
+Can do server maintenance stuff=
+Can bypass node protection in the world=
+Can ban and unban players=
+Can kick players=
+Can use /give and /giveme=
+Can use /setpassword and /clearpassword=
+Can use fly mode=
+Can use fast mode=
+Can fly through solid nodes using noclip mode=
+Can use the rollback functionality=
+Allows enabling various debug options that may affect gameplay=
+Unknown Item=
+Air=
+Ignore=
+You can't place 'ignore' nodes!=
diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua
index cd896f9ec..6db351048 100644
--- a/builtin/mainmenu/common.lua
+++ b/builtin/mainmenu/common.lua
@@ -14,14 +14,11 @@
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
---------------------------------------------------------------------------------
+
-- Global menu data
---------------------------------------------------------------------------------
menudata = {}
---------------------------------------------------------------------------------
-- Local cached values
---------------------------------------------------------------------------------
local min_supp_proto, max_supp_proto
function common_update_cached_supp_proto()
@@ -29,14 +26,12 @@ function common_update_cached_supp_proto()
max_supp_proto = core.get_max_supp_proto()
end
common_update_cached_supp_proto()
---------------------------------------------------------------------------------
+
-- Menu helper functions
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
local function render_client_count(n)
- if n > 99 then return '99+'
- elseif n >= 0 then return tostring(n)
+ if n > 999 then return '99+'
+ elseif n >= 0 then return tostring(n)
else return '?' end
end
@@ -50,21 +45,7 @@ local function configure_selected_world_params(idx)
end
end
---------------------------------------------------------------------------------
-function image_column(tooltip, flagname)
- return "image,tooltip=" .. core.formspec_escape(tooltip) .. "," ..
- "0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," ..
- "1=" .. core.formspec_escape(defaulttexturedir ..
- (flagname and "server_flags_" .. flagname .. ".png" or "blank.png")) .. "," ..
- "2=" .. core.formspec_escape(defaulttexturedir .. "server_ping_4.png") .. "," ..
- "3=" .. core.formspec_escape(defaulttexturedir .. "server_ping_3.png") .. "," ..
- "4=" .. core.formspec_escape(defaulttexturedir .. "server_ping_2.png") .. "," ..
- "5=" .. core.formspec_escape(defaulttexturedir .. "server_ping_1.png")
-end
-
-
---------------------------------------------------------------------------------
-function render_serverlist_row(spec, is_favorite)
+function render_serverlist_row(spec)
local text = ""
if spec.name then
text = text .. core.formspec_escape(spec.name:trim())
@@ -75,31 +56,29 @@ function render_serverlist_row(spec, is_favorite)
end
end
- local grey_out = not is_server_protocol_compat(spec.proto_min, spec.proto_max)
+ local grey_out = not spec.is_compatible
- local details
- if is_favorite then
- details = "1,"
- else
- details = "0,"
- end
+ local details = {}
- if spec.ping then
- local ping = spec.ping * 1000
- if ping <= 50 then
- details = details .. "2,"
- elseif ping <= 100 then
- details = details .. "3,"
- elseif ping <= 250 then
- details = details .. "4,"
+ if spec.lag or spec.ping then
+ local lag = (spec.lag or 0) * 1000 + (spec.ping or 0) * 250
+ if lag <= 125 then
+ table.insert(details, "1")
+ elseif lag <= 175 then
+ table.insert(details, "2")
+ elseif lag <= 250 then
+ table.insert(details, "3")
else
- details = details .. "5,"
+ table.insert(details, "4")
end
else
- details = details .. "0,"
+ table.insert(details, "0")
end
- if spec.clients and spec.clients_max then
+ table.insert(details, ",")
+
+ local color = (grey_out and "#aaaaaa") or ((spec.is_favorite and "#ddddaa") or "#ffffff")
+ if spec.clients and (spec.clients_max or 0) > 0 then
local clients_percent = 100 * spec.clients / spec.clients_max
-- Choose a color depending on how many clients are connected
@@ -110,38 +89,35 @@ function render_serverlist_row(spec, is_favorite)
elseif clients_percent <= 60 then clients_color = '#a1e587' -- 0-60%: green
elseif clients_percent <= 90 then clients_color = '#ffdc97' -- 60-90%: yellow
elseif clients_percent == 100 then clients_color = '#dd5b5b' -- full server: red (darker)
- else clients_color = '#ffba97' -- 90-100%: orange
+ else clients_color = '#ffba97' -- 90-100%: orange
end
- details = details .. clients_color .. ',' ..
- render_client_count(spec.clients) .. ',/,' ..
- render_client_count(spec.clients_max) .. ','
-
- elseif grey_out then
- details = details .. '#aaaaaa,?,/,?,'
+ table.insert(details, clients_color)
+ table.insert(details, render_client_count(spec.clients) .. " / " ..
+ render_client_count(spec.clients_max))
else
- details = details .. ',?,/,?,'
+ table.insert(details, color)
+ table.insert(details, "?")
end
if spec.creative then
- details = details .. "1,"
- else
- details = details .. "0,"
- end
-
- if spec.damage then
- details = details .. "1,"
+ table.insert(details, "1") -- creative icon
else
- details = details .. "0,"
+ table.insert(details, "0")
end
if spec.pvp then
- details = details .. "1,"
+ table.insert(details, "2") -- pvp icon
+ elseif spec.damage then
+ table.insert(details, "1") -- heart icon
else
- details = details .. "0,"
+ table.insert(details, "0")
end
- return details .. (grey_out and '#aaaaaa,' or ',') .. text
+ table.insert(details, color)
+ table.insert(details, text)
+
+ return table.concat(details, ",")
end
--------------------------------------------------------------------------------
@@ -150,14 +126,13 @@ os.tempfolder = function()
return temp .. DIR_DELIM .. "MT_" .. math.random(0, 10000)
end
---------------------------------------------------------------------------------
os.tmpname = function()
local path = os.tempfolder()
io.open(path, "w"):close()
return path
end
-
--------------------------------------------------------------------------------
+
function menu_render_worldlist()
local retval = ""
local current_worldlist = menudata.worldlist:get_list()
@@ -171,7 +146,6 @@ function menu_render_worldlist()
return retval
end
---------------------------------------------------------------------------------
function menu_handle_key_up_down(fields, textlist, settingname)
local oldidx, newidx = core.get_textlist_index(textlist), 1
if fields.key_up or fields.key_down then
@@ -188,7 +162,6 @@ function menu_handle_key_up_down(fields, textlist, settingname)
return false
end
---------------------------------------------------------------------------------
function text2textlist(xpos, ypos, width, height, tl_name, textlen, text, transparency)
local textlines = core.wrap_text(text, textlen, true)
local retval = "textlist[" .. xpos .. "," .. ypos .. ";" .. width ..
@@ -206,7 +179,6 @@ function text2textlist(xpos, ypos, width, height, tl_name, textlen, text, transp
return retval
end
---------------------------------------------------------------------------------
function is_server_protocol_compat(server_proto_min, server_proto_max)
if (not server_proto_min) or (not server_proto_max) then
-- There is no info. Assume the best and act as if we would be compatible.
@@ -214,7 +186,7 @@ function is_server_protocol_compat(server_proto_min, server_proto_max)
end
return min_supp_proto <= server_proto_max and max_supp_proto >= server_proto_min
end
---------------------------------------------------------------------------------
+
function is_server_protocol_compat_or_error(server_proto_min, server_proto_max)
if not is_server_protocol_compat(server_proto_min, server_proto_max) then
local server_prot_ver_info, client_prot_ver_info
@@ -242,7 +214,7 @@ function is_server_protocol_compat_or_error(server_proto_min, server_proto_max)
return true
end
---------------------------------------------------------------------------------
+
function menu_worldmt(selected, setting, value)
local world = menudata.worldlist:get_list()[selected]
if world then
diff --git a/builtin/mainmenu/dlg_config_world.lua b/builtin/mainmenu/dlg_config_world.lua
index 2cf70c9c9..9bdf92a74 100644
--- a/builtin/mainmenu/dlg_config_world.lua
+++ b/builtin/mainmenu/dlg_config_world.lua
@@ -74,7 +74,7 @@ local function get_formspec(data)
"label[1.75,0;" .. data.worldspec.name .. "]"
if mod.is_modpack or mod.type == "game" then
- local info = minetest.formspec_escape(
+ local info = core.formspec_escape(
core.get_content_info(mod.path).description)
if info == "" then
if mod.is_modpack then
diff --git a/builtin/mainmenu/dlg_contentstore.lua b/builtin/mainmenu/dlg_contentstore.lua
index 7328f3358..b0736a4fd 100644
--- a/builtin/mainmenu/dlg_contentstore.lua
+++ b/builtin/mainmenu/dlg_contentstore.lua
@@ -15,7 +15,7 @@
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-if not minetest.get_http_api then
+if not core.get_http_api then
function create_store_dlg()
return messagebox("store",
fgettext("ContentDB is not available when Minetest was compiled without cURL"))
@@ -27,7 +27,7 @@ end
-- before the package list is ordered based on installed state.
local store = { packages = {}, packages_full = {}, packages_full_unordered = {} }
-local http = minetest.get_http_api()
+local http = core.get_http_api()
-- Screenshot
local screenshot_dir = core.get_cache_path() .. DIR_DELIM .. "cdb"
@@ -152,7 +152,7 @@ local function start_install(package)
end
local function queue_download(package)
- local max_concurrent_downloads = tonumber(minetest.settings:get("contentdb_max_concurrent_downloads"))
+ local max_concurrent_downloads = tonumber(core.settings:get("contentdb_max_concurrent_downloads"))
if number_downloading < max_concurrent_downloads then
start_install(package)
else
@@ -320,7 +320,7 @@ function install_dialog.get_formspec()
selected_game_idx = i
end
- games[i] = minetest.formspec_escape(games[i].name)
+ games[i] = core.formspec_escape(games[i].name)
end
local selected_game = pkgmgr.games[selected_game_idx]
@@ -331,7 +331,7 @@ function install_dialog.get_formspec()
local formatted_deps = {}
for _, dep in pairs(install_dialog.dependencies) do
formatted_deps[#formatted_deps + 1] = "#fff"
- formatted_deps[#formatted_deps + 1] = minetest.formspec_escape(dep.name)
+ formatted_deps[#formatted_deps + 1] = core.formspec_escape(dep.name)
if dep.installed then
formatted_deps[#formatted_deps + 1] = "#ccf"
formatted_deps[#formatted_deps + 1] = fgettext("Already installed")
@@ -402,7 +402,7 @@ function install_dialog.handle_submit(this, fields)
end
if fields.will_install_deps ~= nil then
- install_dialog.will_install_deps = minetest.is_yes(fields.will_install_deps)
+ install_dialog.will_install_deps = core.is_yes(fields.will_install_deps)
return true
end
@@ -553,7 +553,7 @@ function store.load()
end
end
- local timeout = tonumber(minetest.settings:get("curl_file_download_timeout"))
+ local timeout = tonumber(core.settings:get("curl_file_download_timeout"))
local response = http.fetch_sync({ url = url, timeout = timeout })
if not response.succeeded then
return
@@ -793,8 +793,8 @@ function store.get_formspec(dlgdata)
-- title
formspec[#formspec + 1] = "label[1.875,0.1;"
formspec[#formspec + 1] = core.formspec_escape(
- minetest.colorize(mt_color_green, package.title) ..
- minetest.colorize("#BFBFBF", " by " .. package.author))
+ core.colorize(mt_color_green, package.title) ..
+ core.colorize("#BFBFBF", " by " .. package.author))
formspec[#formspec + 1] = "]"
-- buttons
diff --git a/builtin/mainmenu/dlg_create_world.lua b/builtin/mainmenu/dlg_create_world.lua
index 5931496c1..1938747fe 100644
--- a/builtin/mainmenu/dlg_create_world.lua
+++ b/builtin/mainmenu/dlg_create_world.lua
@@ -443,7 +443,7 @@ local function create_world_buttonhandler(this, fields)
end
if fields["mgv6_biomes"] then
- local entry = minetest.formspec_escape(fields["mgv6_biomes"])
+ local entry = core.formspec_escape(fields["mgv6_biomes"])
for b=1, #mgv6_biomes do
if entry == mgv6_biomes[b][1] then
local ftable = core.settings:get_flags("mgv6_spflags")
diff --git a/builtin/mainmenu/pkgmgr.lua b/builtin/mainmenu/pkgmgr.lua
index bfb5d269a..787936e31 100644
--- a/builtin/mainmenu/pkgmgr.lua
+++ b/builtin/mainmenu/pkgmgr.lua
@@ -90,7 +90,7 @@ local function load_texture_packs(txtpath, retval)
retval[#retval + 1] = {
name = item,
author = conf:get("author"),
- release = tonumber(conf:get("release") or "0"),
+ release = tonumber(conf:get("release")) or 0,
list_name = name,
type = "txp",
path = path,
@@ -135,7 +135,7 @@ function get_mods(path,retval,modpack)
-- Read from config
toadd.name = name
toadd.author = mod_conf.author
- toadd.release = tonumber(mod_conf.release or "0")
+ toadd.release = tonumber(mod_conf.release) or 0
toadd.path = prefix
toadd.type = "mod"
@@ -413,18 +413,7 @@ function pkgmgr.is_modpack_entirely_enabled(data, name)
end
---------- toggles or en/disables a mod or modpack and its dependencies --------
-function pkgmgr.enable_mod(this, toset)
- local list = this.data.list:get_list()
- local mod = list[this.data.selected_mod]
-
- -- Game mods can't be enabled or disabled
- if mod.is_game_content then
- return
- end
-
- local toggled_mods = {}
-
- local enabled_mods = {}
+local function toggle_mod_or_modpack(list, toggled_mods, enabled_mods, toset, mod)
if not mod.is_modpack then
-- Toggle or en/disable the mod
if toset == nil then
@@ -443,23 +432,29 @@ function pkgmgr.enable_mod(this, toset)
-- interleaved unsupported
for i = 1, #list do
if list[i].modpack == mod.name then
- if toset == nil then
- toset = not list[i].enabled
- end
- if list[i].enabled ~= toset then
- list[i].enabled = toset
- toggled_mods[#toggled_mods+1] = list[i].name
- end
- if toset then
- enabled_mods[list[i].name] = true
- end
+ toggle_mod_or_modpack(list, toggled_mods, enabled_mods, toset, list[i])
end
end
end
+end
+
+function pkgmgr.enable_mod(this, toset)
+ local list = this.data.list:get_list()
+ local mod = list[this.data.selected_mod]
+
+ -- Game mods can't be enabled or disabled
+ if mod.is_game_content then
+ return
+ end
+
+ local toggled_mods = {}
+ local enabled_mods = {}
+ toggle_mod_or_modpack(list, toggled_mods, enabled_mods, toset, mod)
+
if not toset then
-- Mod(s) were disabled, so no dependencies need to be enabled
table.sort(toggled_mods)
- minetest.log("info", "Following mods were disabled: " ..
+ core.log("info", "Following mods were disabled: " ..
table.concat(toggled_mods, ", "))
return
end
@@ -496,7 +491,7 @@ function pkgmgr.enable_mod(this, toset)
enabled_mods[name] = true
local mod_to_enable = list[mod_ids[name]]
if not mod_to_enable then
- minetest.log("warning", "Mod dependency \"" .. name ..
+ core.log("warning", "Mod dependency \"" .. name ..
"\" not found!")
else
if mod_to_enable.enabled == false then
@@ -517,7 +512,7 @@ function pkgmgr.enable_mod(this, toset)
-- Log the list of enabled mods
table.sort(toggled_mods)
- minetest.log("info", "Following mods were enabled: " ..
+ core.log("info", "Following mods were enabled: " ..
table.concat(toggled_mods, ", "))
end
diff --git a/builtin/mainmenu/serverlistmgr.lua b/builtin/mainmenu/serverlistmgr.lua
index d98736e54..9876d8ac5 100644
--- a/builtin/mainmenu/serverlistmgr.lua
+++ b/builtin/mainmenu/serverlistmgr.lua
@@ -47,6 +47,15 @@ function serverlistmgr.sync()
}}
end
+ local serverlist_url = core.settings:get("serverlist_url") or ""
+ if not core.get_http_api or serverlist_url == "" then
+ serverlistmgr.servers = {{
+ name = fgettext("Public server list is disabled"),
+ description = ""
+ }}
+ return
+ end
+
if public_downloading then
return
end
diff --git a/builtin/mainmenu/tab_content.lua b/builtin/mainmenu/tab_content.lua
index 336730bf4..fb7f121f8 100644
--- a/builtin/mainmenu/tab_content.lua
+++ b/builtin/mainmenu/tab_content.lua
@@ -146,10 +146,25 @@ local function get_formspec(tabview, name, tabdata)
end
--------------------------------------------------------------------------------
+local function handle_doubleclick(pkg)
+ if pkg.type == "txp" then
+ if core.settings:get("texture_path") == pkg.path then
+ core.settings:set("texture_path", "")
+ else
+ core.settings:set("texture_path", pkg.path)
+ end
+ packages = nil
+ end
+end
+
+--------------------------------------------------------------------------------
local function handle_buttons(tabview, fields, tabname, tabdata)
if fields["pkglist"] ~= nil then
local event = core.explode_table_event(fields["pkglist"])
tabdata.selected_pkg = event.row
+ if event.type == "DCL" then
+ handle_doubleclick(packages:get_list()[tabdata.selected_pkg])
+ end
return true
end
diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua
index 075274798..a34dd58bb 100644
--- a/builtin/mainmenu/tab_credits.lua
+++ b/builtin/mainmenu/tab_credits.lua
@@ -23,28 +23,37 @@ local core_developers = {
"Nathanaël Courant (Nore/Ekdohibs) <nore@mesecons.net>",
"Loic Blot (nerzhul/nrz) <loic.blot@unix-experience.fr>",
"paramat",
- "Auke Kok (sofar) <sofar@foo-projects.org>",
"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>",
}
+-- For updating active/previous contributors, see the script in ./util/gather_git_credits.py
+
local active_contributors = {
- "Hugues Ross [Formspecs]",
+ "Wuzzy [devtest game, visual corrections]",
+ "Zughy [Visual improvements, various fixes]",
"Maksim (MoNTE48) [Android]",
- "DS [Formspecs]",
- "pyrollo [Formspecs: Hypertext]",
- "v-rob [Formspecs]",
- "Jordach [set_sky]",
- "random-geek [Formspecs]",
- "Wuzzy [Pathfinder, builtin, translations]",
- "ANAND (ClobberXD) [Fixes, per-player FOV]",
- "Warr1024 [Fixes]",
- "Paul Ouellette (pauloue) [Fixes, Script API]",
- "Jean-Patrick G (kilbith) <jeanpatrick.guerrero@gmail.com> [Audiovisuals]",
- "HybridDog [Script API]",
+ "numzero [Graphics and rendering]",
+ "appgurueu [Various internal fixes]",
+ "Desour [Formspec and vector API changes]",
+ "HybridDog [Rendering fixes and documentation]",
+ "Hugues Ross [Graphics-related improvements]",
+ "ANAND (ClobberXD) [Mouse buttons rebinding]",
+ "luk3yx [Fixes]",
+ "hecks [Audiovisuals, Lua API]",
+ "LoneWolfHT [Object crosshair, documentation fixes]",
+ "Lejo [Server-related improvements]",
+ "EvidenceB [Compass HUD element]",
+ "Paul Ouellette (pauloue) [Lua API, documentation]",
+ "TheTermos [Collision detection, physics]",
+ "David CARLIER [Unix & Haiku build fixes]",
"dcbrwn [Object shading]",
- "srifqi [Fixes]",
+ "Elias Fleckenstein [API features/fixes]",
+ "Jean-Patrick Guerrero (kilbith) [model element, visual fixes]",
+ "k.h.lai [Memory leak fixes, documentation]",
}
local previous_core_developers = {
@@ -60,30 +69,23 @@ local previous_core_developers = {
"sapier",
"Zeno",
"ShadowNinja <shadowninja@minetest.net>",
+ "Auke Kok (sofar) <sofar@foo-projects.org>",
}
local previous_contributors = {
"Nils Dagsson Moskopp (erlehmann) <nils@dieweltistgarnichtso.net> [Minetest Logo]",
- "Dániel Juhász (juhdanad) <juhdanad@gmail.com>",
"red-001 <red-001@outlook.ie>",
- "numberZero [Audiovisuals: meshgen]",
"Giuseppe Bilotta",
+ "Dániel Juhász (juhdanad) <juhdanad@gmail.com>",
"MirceaKitsune <mirceakitsune@gmail.com>",
"Constantin Wenger (SpeedProg)",
"Ciaran Gultnieks (CiaranG)",
"stujones11 [Android UX improvements]",
- "Jeija <jeija@mesecons.net> [HTTP, particles]",
- "Vincent Glize (Dumbeldor) [Cleanups, CSM APIs]",
- "Ben Deutsch [Rendering, Fixes, SQLite auth]",
- "TeTpaAka [Hand overriding, nametag colors]",
- "Rui [Sound Pitch]",
- "Duane Robertson <duane@duanerobertson.com> [MGValleys]",
- "Raymoo [Tool Capabilities]",
"Rogier <rogier777@gmail.com> [Fixes]",
"Gregory Currie (gregorycu) [optimisation]",
- "TriBlade9 <triblade9@mail.com> [Audiovisuals]",
- "T4im [Profiler]",
- "Jurgen Doser (doserj) <jurgen.doser@gmail.com>",
+ "srifqi [Fixes]",
+ "JacobF",
+ "Jeija <jeija@mesecons.net> [HTTP, particles]",
}
local function buildCreditList(source)
diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua
index e6748ed88..fb7409864 100644
--- a/builtin/mainmenu/tab_online.lua
+++ b/builtin/mainmenu/tab_online.lua
@@ -15,17 +15,50 @@
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
---------------------------------------------------------------------------------
+local function get_sorted_servers()
+ local servers = {
+ fav = {},
+ public = {},
+ incompatible = {}
+ }
+
+ local favs = serverlistmgr.get_favorites()
+ local taken_favs = {}
+ local result = menudata.search_result or serverlistmgr.servers
+ for _, server in ipairs(result) do
+ server.is_favorite = false
+ for index, fav in ipairs(favs) do
+ if server.address == fav.address and server.port == fav.port then
+ taken_favs[index] = true
+ server.is_favorite = true
+ break
+ end
+ end
+ server.is_compatible = is_server_protocol_compat(server.proto_min, server.proto_max)
+ if server.is_favorite then
+ table.insert(servers.fav, server)
+ elseif server.is_compatible then
+ table.insert(servers.public, server)
+ else
+ table.insert(servers.incompatible, server)
+ end
+ end
+
+ if not menudata.search_result then
+ for index, fav in ipairs(favs) do
+ if not taken_favs[index] then
+ table.insert(servers.fav, fav)
+ end
+ end
+ end
+
+ return servers
+end
+
local function get_formspec(tabview, name, tabdata)
-- Update the cached supported proto info,
-- it may have changed after a change by the settings menu.
common_update_cached_supp_proto()
- local selected
- if menudata.search_result then
- selected = menudata.search_result[tabdata.selected]
- else
- selected = serverlistmgr.servers[tabdata.selected]
- end
if not tabdata.search_for then
tabdata.search_for = ""
@@ -33,128 +66,221 @@ local function get_formspec(tabview, name, tabdata)
local retval =
-- Search
- "field[0.15,0.075;5.91,1;te_search;;" .. core.formspec_escape(tabdata.search_for) .. "]" ..
- "image_button[5.63,-.165;.83,.83;" .. core.formspec_escape(defaulttexturedir .. "search.png") .. ";btn_mp_search;]" ..
- "image_button[6.3,-.165;.83,.83;" .. core.formspec_escape(defaulttexturedir .. "clear.png") .. ";btn_mp_clear;]" ..
- "image_button[6.97,-.165;.83,.83;" .. core.formspec_escape(defaulttexturedir .. "refresh.png")
- .. ";btn_mp_refresh;]" ..
+ "field[0.25,0.25;7,0.75;te_search;;" .. core.formspec_escape(tabdata.search_for) .. "]" ..
+ "container[7.25,0.25]" ..
+ "image_button[0,0;0.75,0.75;" .. core.formspec_escape(defaulttexturedir .. "search.png") .. ";btn_mp_search;]" ..
+ "image_button[0.75,0;0.75,0.75;" .. core.formspec_escape(defaulttexturedir .. "clear.png") .. ";btn_mp_clear;]" ..
+ "image_button[1.5,0;0.75,0.75;" .. core.formspec_escape(defaulttexturedir .. "refresh.png") .. ";btn_mp_refresh;]" ..
+ "tooltip[btn_mp_clear;" .. fgettext("Clear") .. "]" ..
+ "tooltip[btn_mp_search;" .. fgettext("Search") .. "]" ..
+ "tooltip[btn_mp_refresh;" .. fgettext("Refresh") .. "]" ..
+ "container_end[]" ..
+
+ "container[9.75,0]" ..
+ "box[0,0;5.75,7;#666666]" ..
-- Address / Port
- "label[7.75,-0.25;" .. fgettext("Address / Port") .. "]" ..
- "field[8,0.65;3.25,0.5;te_address;;" ..
+ "label[0.25,0.35;" .. fgettext("Address") .. "]" ..
+ "label[4.25,0.35;" .. fgettext("Port") .. "]" ..
+ "field[0.25,0.5;4,0.75;te_address;;" ..
core.formspec_escape(core.settings:get("address")) .. "]" ..
- "field[11.1,0.65;1.4,0.5;te_port;;" ..
+ "field[4.25,0.5;1.25,0.75;te_port;;" ..
core.formspec_escape(core.settings:get("remote_port")) .. "]" ..
-- Name / Password
- "label[7.75,0.95;" .. fgettext("Name / Password") .. "]" ..
- "field[8,1.85;2.9,0.5;te_name;;" ..
+ "label[0.25,1.55;" .. fgettext("Name") .. "]" ..
+ "label[3,1.55;" .. fgettext("Password") .. "]" ..
+ "field[0.25,1.75;2.75,0.75;te_name;;" ..
core.formspec_escape(core.settings:get("name")) .. "]" ..
- "pwdfield[10.73,1.85;1.77,0.5;te_pwd;]" ..
+ "pwdfield[3,1.75;2.5,0.75;te_pwd;]" ..
-- Description Background
- "box[7.73,2.25;4.25,2.6;#999999]"..
+ "label[0.25,2.75;" .. fgettext("Server Description") .. "]" ..
+ "box[0.25,3;5.25,2.75;#999999]"..
-- Connect
- "button[9.88,4.9;2.3,1;btn_mp_connect;" .. fgettext("Connect") .. "]"
+ "button[3,6;2.5,0.75;btn_mp_connect;" .. fgettext("Connect") .. "]"
- if tabdata.selected and selected then
+ if tabdata.selected then
if gamedata.fav then
- retval = retval .. "button[7.73,4.9;2.3,1;btn_delete_favorite;" ..
+ retval = retval .. "button[0.25,6;2.5,0.75;btn_delete_favorite;" ..
fgettext("Del. Favorite") .. "]"
end
- if selected.description then
- retval = retval .. "textarea[8.1,2.3;4.23,2.9;;;" ..
- core.formspec_escape((gamedata.serverdescription or ""), true) .. "]"
+ if gamedata.serverdescription then
+ retval = retval .. "textarea[0.25,3;5.25,2.75;;;" ..
+ core.formspec_escape(gamedata.serverdescription) .. "]"
end
end
- --favorites
+ retval = retval .. "container_end[]"
+
+ -- Table
retval = retval .. "tablecolumns[" ..
- image_column(fgettext("Favorite"), "favorite") .. ";" ..
- image_column(fgettext("Ping")) .. ",padding=0.25;" ..
- "color,span=3;" ..
- "text,align=right;" .. -- clients
- "text,align=center,padding=0.25;" .. -- "/"
- "text,align=right,padding=0.25;" .. -- clients_max
- image_column(fgettext("Creative mode"), "creative") .. ",padding=1;" ..
- image_column(fgettext("Damage enabled"), "damage") .. ",padding=0.25;" ..
- --~ PvP = Player versus Player
- image_column(fgettext("PvP enabled"), "pvp") .. ",padding=0.25;" ..
+ "image,tooltip=" .. fgettext("Ping") .. "," ..
+ "0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," ..
+ "1=" .. core.formspec_escape(defaulttexturedir .. "server_ping_4.png") .. "," ..
+ "2=" .. core.formspec_escape(defaulttexturedir .. "server_ping_3.png") .. "," ..
+ "3=" .. core.formspec_escape(defaulttexturedir .. "server_ping_2.png") .. "," ..
+ "4=" .. core.formspec_escape(defaulttexturedir .. "server_ping_1.png") .. "," ..
+ "5=" .. core.formspec_escape(defaulttexturedir .. "server_favorite.png") .. "," ..
+ "6=" .. core.formspec_escape(defaulttexturedir .. "server_public.png") .. "," ..
+ "7=" .. core.formspec_escape(defaulttexturedir .. "server_incompatible.png") .. ";" ..
"color,span=1;" ..
- "text,padding=1]" ..
- "table[-0.15,0.6;7.75,5.15;favorites;"
-
- if menudata.search_result then
- local favs = serverlistmgr.get_favorites()
- for i = 1, #menudata.search_result do
- local server = menudata.search_result[i]
- for fav_id = 1, #favs do
- if server.address == favs[fav_id].address and
- server.port == favs[fav_id].port then
- server.is_favorite = true
- end
- end
-
- if i ~= 1 then
- retval = retval .. ","
- end
-
- retval = retval .. render_serverlist_row(server, server.is_favorite)
- end
- elseif #serverlistmgr.servers > 0 then
- local favs = serverlistmgr.get_favorites()
- if #favs > 0 then
- for i = 1, #favs do
- for j = 1, #serverlistmgr.servers do
- if serverlistmgr.servers[j].address == favs[i].address and
- serverlistmgr.servers[j].port == favs[i].port then
- table.insert(serverlistmgr.servers, i, table.remove(serverlistmgr.servers, j))
- end
- end
- if favs[i].address ~= serverlistmgr.servers[i].address then
- table.insert(serverlistmgr.servers, i, favs[i])
- end
+ "text,align=inline;"..
+ "color,span=1;" ..
+ "text,align=inline,width=4.25;" ..
+ "image,tooltip=" .. fgettext("Creative mode") .. "," ..
+ "0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," ..
+ "1=" .. core.formspec_escape(defaulttexturedir .. "server_flags_creative.png") .. "," ..
+ "align=inline,padding=0.25,width=1.5;" ..
+ --~ PvP = Player versus Player
+ "image,tooltip=" .. fgettext("Damage / PvP") .. "," ..
+ "0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," ..
+ "1=" .. core.formspec_escape(defaulttexturedir .. "server_flags_damage.png") .. "," ..
+ "2=" .. core.formspec_escape(defaulttexturedir .. "server_flags_pvp.png") .. "," ..
+ "align=inline,padding=0.25,width=1.5;" ..
+ "color,align=inline,span=1;" ..
+ "text,align=inline,padding=1]" ..
+ "table[0.25,1;9.25,5.75;servers;"
+
+ local servers = get_sorted_servers()
+
+ local dividers = {
+ fav = "5,#ffff00," .. fgettext("Favorites") .. ",,,0,0,,",
+ public = "6,#4bdd42," .. fgettext("Public Servers") .. ",,,0,0,,",
+ incompatible = "7,"..mt_color_grey.."," .. fgettext("Incompatible Servers") .. ",,,0,0,,"
+ }
+ local order = {"fav", "public", "incompatible"}
+
+ tabdata.lookup = {} -- maps row number to server
+ local rows = {}
+ for _, section in ipairs(order) do
+ local section_servers = servers[section]
+ if next(section_servers) ~= nil then
+ rows[#rows + 1] = dividers[section]
+ for _, server in ipairs(section_servers) do
+ tabdata.lookup[#rows + 1] = server
+ rows[#rows + 1] = render_serverlist_row(server)
end
end
-
- retval = retval .. render_serverlist_row(serverlistmgr.servers[1], (#favs > 0))
- for i = 2, #serverlistmgr.servers do
- retval = retval .. "," .. render_serverlist_row(serverlistmgr.servers[i], (i <= #favs))
- end
end
+ retval = retval .. table.concat(rows, ",")
+
if tabdata.selected then
retval = retval .. ";" .. tabdata.selected .. "]"
else
retval = retval .. ";0]"
end
- return retval
+ return retval, "size[15.5,7,false]real_coordinates[true]"
end
--------------------------------------------------------------------------------
-local function main_button_handler(tabview, fields, name, tabdata)
- local serverlist = menudata.search_result or serverlistmgr.servers
+local function search_server_list(input)
+ menudata.search_result = nil
+ if #serverlistmgr.servers < 2 then
+ return
+ end
+
+ -- setup the keyword list
+ local keywords = {}
+ for word in input:gmatch("%S+") do
+ word = word:gsub("(%W)", "%%%1")
+ table.insert(keywords, word)
+ end
+
+ if #keywords == 0 then
+ return
+ end
+
+ menudata.search_result = {}
+
+ -- Search the serverlist
+ local search_result = {}
+ for i = 1, #serverlistmgr.servers do
+ local server = serverlistmgr.servers[i]
+ local found = 0
+ for k = 1, #keywords do
+ local keyword = keywords[k]
+ if server.name then
+ local sername = server.name:lower()
+ local _, count = sername:gsub(keyword, keyword)
+ found = found + count * 4
+ end
+
+ if server.description then
+ local desc = server.description:lower()
+ local _, count = desc:gsub(keyword, keyword)
+ found = found + count * 2
+ end
+ end
+ if found > 0 then
+ local points = (#serverlistmgr.servers - i) / 5 + found
+ server.points = points
+ table.insert(search_result, server)
+ end
+ end
+
+ if #search_result == 0 then
+ return
+ end
+
+ table.sort(search_result, function(a, b)
+ return a.points > b.points
+ end)
+ menudata.search_result = search_result
+end
+
+local function set_selected_server(tabdata, idx, server)
+ -- reset selection
+ if idx == nil or server == nil then
+ tabdata.selected = nil
+
+ core.settings:set("address", "")
+ core.settings:set("remote_port", "30000")
+ return
+ end
+
+ local address = server.address
+ local port = server.port
+ gamedata.serverdescription = server.description
+
+ gamedata.fav = false
+ for _, fav in ipairs(serverlistmgr.get_favorites()) do
+ if address == fav.address and port == fav.port then
+ gamedata.fav = true
+ break
+ end
+ end
+
+ if address and port then
+ core.settings:set("address", address)
+ core.settings:set("remote_port", port)
+ end
+ tabdata.selected = idx
+end
+
+local function main_button_handler(tabview, fields, name, tabdata)
if fields.te_name then
gamedata.playername = fields.te_name
core.settings:set("name", fields.te_name)
end
- if fields.favorites then
- local event = core.explode_table_event(fields.favorites)
- local fav = serverlist[event.row]
+ if fields.servers then
+ local event = core.explode_table_event(fields.servers)
+ local server = tabdata.lookup[event.row]
- if event.type == "DCL" then
- if event.row <= #serverlist then
+ if server then
+ if event.type == "DCL" then
if not is_server_protocol_compat_or_error(
- fav.proto_min, fav.proto_max) then
+ server.proto_min, server.proto_max) then
return true
end
- gamedata.address = fav.address
- gamedata.port = fav.port
+ gamedata.address = server.address
+ gamedata.port = server.port
gamedata.playername = fields.te_name
gamedata.selected_world = 0
@@ -162,84 +288,32 @@ local function main_button_handler(tabview, fields, name, tabdata)
gamedata.password = fields.te_pwd
end
- gamedata.servername = fav.name
- gamedata.serverdescription = fav.description
+ gamedata.servername = server.name
+ gamedata.serverdescription = server.description
if gamedata.address and gamedata.port then
core.settings:set("address", gamedata.address)
core.settings:set("remote_port", gamedata.port)
core.start()
end
+ return true
end
- return true
- end
-
- if event.type == "CHG" then
- if event.row <= #serverlist then
- gamedata.fav = false
- local favs = serverlistmgr.get_favorites()
- local address = fav.address
- local port = fav.port
- gamedata.serverdescription = fav.description
-
- for i = 1, #favs do
- if fav.address == favs[i].address and
- fav.port == favs[i].port then
- gamedata.fav = true
- end
- end
-
- if address and port then
- core.settings:set("address", address)
- core.settings:set("remote_port", port)
- end
- tabdata.selected = event.row
- end
- return true
- end
- end
-
- if fields.key_up or fields.key_down then
- local fav_idx = core.get_table_index("favorites")
- local fav = serverlist[fav_idx]
-
- if fav_idx then
- if fields.key_up and fav_idx > 1 then
- fav_idx = fav_idx - 1
- elseif fields.key_down and fav_idx < #serverlistmgr.servers then
- fav_idx = fav_idx + 1
+ if event.type == "CHG" then
+ set_selected_server(tabdata, event.row, server)
+ return true
end
- else
- fav_idx = 1
- end
-
- if not serverlistmgr.servers or not fav then
- tabdata.selected = 0
- return true
- end
-
- local address = fav.address
- local port = fav.port
- gamedata.serverdescription = fav.description
- if address and port then
- core.settings:set("address", address)
- core.settings:set("remote_port", port)
end
-
- tabdata.selected = fav_idx
- return true
end
if fields.btn_delete_favorite then
- local current_favorite = core.get_table_index("favorites")
- if not current_favorite then return end
-
- serverlistmgr.delete_favorite(serverlistmgr.servers[current_favorite])
- serverlistmgr.sync()
- tabdata.selected = nil
-
- core.settings:set("address", "")
- core.settings:set("remote_port", "30000")
+ local idx = core.get_table_index("servers")
+ if not idx then return end
+ local server = tabdata.lookup[idx]
+ if not server then return end
+
+ serverlistmgr.delete_favorite(server)
+ -- the server at [idx+1] will be at idx once list is refreshed
+ set_selected_server(tabdata, idx, tabdata.lookup[idx+1])
return true
end
@@ -250,63 +324,13 @@ local function main_button_handler(tabview, fields, name, tabdata)
end
if fields.btn_mp_search or fields.key_enter_field == "te_search" then
- tabdata.selected = 1
- local input = fields.te_search:lower()
tabdata.search_for = fields.te_search
-
- if #serverlistmgr.servers < 2 then
- return true
- end
-
- menudata.search_result = {}
-
- -- setup the keyword list
- local keywords = {}
- for word in input:gmatch("%S+") do
- word = word:gsub("(%W)", "%%%1")
- table.insert(keywords, word)
+ search_server_list(fields.te_search:lower())
+ if menudata.search_result then
+ -- first server in row 2 due to header
+ set_selected_server(tabdata, 2, menudata.search_result[1])
end
- if #keywords == 0 then
- menudata.search_result = nil
- return true
- end
-
- -- Search the serverlist
- local search_result = {}
- for i = 1, #serverlistmgr.servers do
- local server = serverlistmgr.servers[i]
- local found = 0
- for k = 1, #keywords do
- local keyword = keywords[k]
- if server.name then
- local sername = server.name:lower()
- local _, count = sername:gsub(keyword, keyword)
- found = found + count * 4
- end
-
- if server.description then
- local desc = server.description:lower()
- local _, count = desc:gsub(keyword, keyword)
- found = found + count * 2
- end
- end
- if found > 0 then
- local points = (#serverlistmgr.servers - i) / 5 + found
- server.points = points
- table.insert(search_result, server)
- end
- end
- if #search_result > 0 then
- table.sort(search_result, function(a, b)
- return a.points > b.points
- end)
- menudata.search_result = search_result
- local first_server = search_result[1]
- core.settings:set("address", first_server.address)
- core.settings:set("remote_port", first_server.port)
- gamedata.serverdescription = first_server.description
- end
return true
end
@@ -322,20 +346,22 @@ local function main_button_handler(tabview, fields, name, tabdata)
gamedata.address = fields.te_address
gamedata.port = tonumber(fields.te_port)
gamedata.selected_world = 0
- local fav_idx = core.get_table_index("favorites")
- local fav = serverlist[fav_idx]
- if fav_idx and fav_idx <= #serverlist and
- fav.address == gamedata.address and
- fav.port == gamedata.port then
+ local idx = core.get_table_index("servers")
+ local server = idx and tabdata.lookup[idx]
+
+ set_selected_server(tabdata)
- serverlistmgr.add_favorite(fav)
+ if server and server.address == gamedata.address and
+ server.port == gamedata.port then
- gamedata.servername = fav.name
- gamedata.serverdescription = fav.description
+ serverlistmgr.add_favorite(server)
+
+ gamedata.servername = server.name
+ gamedata.serverdescription = server.description
if not is_server_protocol_compat_or_error(
- fav.proto_min, fav.proto_max) then
+ server.proto_min, server.proto_max) then
return true
end
else
@@ -354,6 +380,7 @@ local function main_button_handler(tabview, fields, name, tabdata)
core.start()
return true
end
+
return false
end
@@ -362,7 +389,6 @@ local function on_change(type, old_tab, new_tab)
serverlistmgr.sync()
end
---------------------------------------------------------------------------------
return {
name = "online",
caption = fgettext("Join Game"),
diff --git a/builtin/profiler/init.lua b/builtin/profiler/init.lua
index a0033d752..7f63dfaea 100644
--- a/builtin/profiler/init.lua
+++ b/builtin/profiler/init.lua
@@ -15,6 +15,8 @@
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+local S = core.get_translator("__builtin")
+
local function get_bool_default(name, default)
local val = core.settings:get_bool(name)
if val == nil then
@@ -40,9 +42,9 @@ function profiler.init_chatcommand()
instrumentation.init_chatcommand()
end
- local param_usage = "print [filter] | dump [filter] | save [format [filter]] | reset"
+ local param_usage = S("print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset")
core.register_chatcommand("profiler", {
- description = "handle the profiler and profiling data",
+ description = S("Handle the profiler and profiling data"),
params = param_usage,
privs = { server=true },
func = function(name, param)
@@ -51,21 +53,19 @@ function profiler.init_chatcommand()
if command == "dump" then
core.log("action", reporter.print(sampler.profile, arg0))
- return true, "Statistics written to action log"
+ return true, S("Statistics written to action log.")
elseif command == "print" then
return true, reporter.print(sampler.profile, arg0)
elseif command == "save" then
return reporter.save(sampler.profile, args[1] or "txt", args[2])
elseif command == "reset" then
sampler.reset()
- return true, "Statistics were reset"
+ return true, S("Statistics were reset.")
end
- return false, string.format(
- "Usage: %s\n" ..
- "Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).",
- param_usage
- )
+ return false,
+ S("Usage: @1", param_usage) .. "\n" ..
+ S("Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).")
end
})
diff --git a/builtin/profiler/reporter.lua b/builtin/profiler/reporter.lua
index fed47a36b..5928a3718 100644
--- a/builtin/profiler/reporter.lua
+++ b/builtin/profiler/reporter.lua
@@ -15,6 +15,10 @@
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+local S = core.get_translator("__builtin")
+-- Note: In this file, only messages are translated
+-- but not the table itself, to keep it simple.
+
local DIR_DELIM, LINE_DELIM = DIR_DELIM, "\n"
local table, unpack, string, pairs, io, os = table, unpack, string, pairs, io, os
local rep, sprintf, tonumber = string.rep, string.format, tonumber
@@ -104,11 +108,11 @@ local TxtFormatter = Formatter:new {
end,
format = function(self, filter)
local profile = self.profile
- self:print("Values below show absolute/relative times spend per server step by the instrumented function.")
- self:print("A total of %d samples were taken", profile.stats_total.samples)
+ self:print(S("Values below show absolute/relative times spend per server step by the instrumented function."))
+ self:print(S("A total of @1 sample(s) were taken.", profile.stats_total.samples))
if filter then
- self:print("The output is limited to '%s'", filter)
+ self:print(S("The output is limited to '@1'.", filter))
end
self:print()
@@ -259,19 +263,18 @@ function reporter.save(profile, format, filter)
local output, io_err = io.open(path, "w")
if not output then
- return false, "Saving of profile failed with: " .. io_err
+ return false, S("Saving of profile failed: @1", io_err)
end
local content, err = serialize_profile(profile, format, filter)
if not content then
output:close()
- return false, "Saving of profile failed with: " .. err
+ return false, S("Saving of profile failed: @1", err)
end
output:write(content)
output:close()
- local logmessage = "Profile saved to " .. path
- core.log("action", logmessage)
- return true, logmessage
+ core.log("action", "Profile saved to " .. path)
+ return true, S("Profile saved to @1", path)
end
return reporter
diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt
index 8b6227b37..75efe64da 100644
--- a/builtin/settingtypes.txt
+++ b/builtin/settingtypes.txt
@@ -75,7 +75,7 @@ free_move (Flying) bool false
# If enabled, makes move directions relative to the player's pitch when flying or swimming.
pitch_move (Pitch move mode) bool false
-# Fast movement (via the "special" key).
+# Fast movement (via the "Aux1" key).
# This requires the "fast" privilege on the server.
fast_move (Fast movement) bool false
@@ -99,14 +99,14 @@ invert_mouse (Invert mouse) bool false
# Mouse sensitivity multiplier.
mouse_sensitivity (Mouse sensitivity) float 0.2
-# If enabled, "special" key instead of "sneak" key is used for climbing down and
+# If enabled, "Aux1" key instead of "Sneak" key is used for climbing down and
# descending.
-aux1_descends (Special key for climbing/descending) bool false
+aux1_descends (Aux1 key for climbing/descending) bool false
# Double-tapping the jump key toggles fly mode.
doubletap_jump (Double tap jump for fly) bool false
-# If disabled, "special" key is used to fly fast if both fly and fast mode are
+# If disabled, "Aux1" key is used to fly fast if both fly and fast mode are
# enabled.
always_fly_fast (Always fly and fast) bool true
@@ -135,9 +135,9 @@ touchscreen_threshold (Touch screen threshold) int 20 0 100
# If disabled, virtual joystick will center to first-touch's position.
fixed_virtual_joystick (Fixed virtual joystick) bool false
-# (Android) Use virtual joystick to trigger "aux" button.
-# If enabled, virtual joystick will also tap "aux" button when out of main circle.
-virtual_joystick_triggers_aux (Virtual joystick triggers aux button) bool false
+# (Android) Use virtual joystick to trigger "Aux1" button.
+# If enabled, virtual joystick will also tap "Aux1" button when out of main circle.
+virtual_joystick_triggers_aux1 (Virtual joystick triggers Aux1 button) bool false
# Enable joysticks
enable_joysticks (Enable joysticks) bool false
@@ -199,7 +199,7 @@ keymap_inventory (Inventory key) key KEY_KEY_I
# Key for moving fast in fast mode.
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_special1 (Special key) key KEY_KEY_E
+keymap_aux1 (Aux1 key) key KEY_KEY_E
# Key for opening the chat window.
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
@@ -451,6 +451,10 @@ keymap_decrease_viewing_range_min (View range decrease key) key -
[**Basic]
+# Whether nametag backgrounds should be shown by default.
+# Mods may still set a background.
+show_nametag_backgrounds (Show nametag backgrounds by default) bool true
+
# Enable vertex buffer objects.
# This should greatly improve graphics performance.
enable_vbo (VBO) bool true
@@ -1132,6 +1136,10 @@ enable_rollback_recording (Rollback recording) bool false
# @name, @message, @timestamp (optional)
chat_message_format (Chat message format) string <@name> @message
+# If the execution of a chat command takes longer than this specified time in
+# seconds, add the time information to the chat command message
+chatcommand_msg_time_threshold (Chat command time message threshold) float 0.1
+
# A message to be displayed to all clients when the server shuts down.
kick_msg_shutdown (Shutdown message) string Server shutting down.
diff --git a/client/shaders/3d_interlaced_merge/opengl_fragment.glsl b/client/shaders/3d_interlaced_merge/opengl_fragment.glsl
index 7cba61b39..6d3ae5093 100644
--- a/client/shaders/3d_interlaced_merge/opengl_fragment.glsl
+++ b/client/shaders/3d_interlaced_merge/opengl_fragment.glsl
@@ -6,7 +6,7 @@ uniform sampler2D textureFlags;
#define rightImage normalTexture
#define maskImage textureFlags
-varying mediump vec2 varTexCoord;
+varying mediump vec4 varTexCoord;
void main(void)
{
diff --git a/client/shaders/3d_interlaced_merge/opengl_vertex.glsl b/client/shaders/3d_interlaced_merge/opengl_vertex.glsl
index 860049481..224b7d183 100644
--- a/client/shaders/3d_interlaced_merge/opengl_vertex.glsl
+++ b/client/shaders/3d_interlaced_merge/opengl_vertex.glsl
@@ -1,4 +1,4 @@
-varying mediump vec2 varTexCoord;
+varying mediump vec4 varTexCoord;
void main(void)
{
diff --git a/clientmods/preview/mod.conf b/clientmods/preview/mod.conf
new file mode 100644
index 000000000..4e56ec293
--- /dev/null
+++ b/clientmods/preview/mod.conf
@@ -0,0 +1 @@
+name = preview
diff --git a/cmake/Modules/FindGMP.cmake b/cmake/Modules/FindGMP.cmake
index 7b45f16c7..190b7c548 100644
--- a/cmake/Modules/FindGMP.cmake
+++ b/cmake/Modules/FindGMP.cmake
@@ -12,8 +12,6 @@ if(ENABLE_SYSTEM_GMP)
else()
message (STATUS "Detecting GMP from system failed.")
endif()
-else()
- message (STATUS "Detecting GMP from system disabled! (ENABLE_SYSTEM_GMP=0)")
endif()
if(NOT USE_SYSTEM_GMP)
diff --git a/cmake/Modules/FindGettextLib.cmake b/cmake/Modules/FindGettextLib.cmake
index 529452a4a..b7681827c 100644
--- a/cmake/Modules/FindGettextLib.cmake
+++ b/cmake/Modules/FindGettextLib.cmake
@@ -42,15 +42,6 @@ if(WIN32)
NAMES ${GETTEXT_LIB_NAMES}
PATHS "${CUSTOM_GETTEXT_PATH}/lib"
DOC "GetText library")
- find_file(GETTEXT_DLL
- NAMES libintl.dll intl.dll libintl3.dll intl3.dll
- PATHS "${CUSTOM_GETTEXT_PATH}/bin" "${CUSTOM_GETTEXT_PATH}/lib"
- DOC "gettext *intl*.dll")
- find_file(GETTEXT_ICONV_DLL
- NAMES libiconv2.dll
- PATHS "${CUSTOM_GETTEXT_PATH}/bin" "${CUSTOM_GETTEXT_PATH}/lib"
- DOC "gettext *iconv*.lib")
- set(GETTEXT_REQUIRED_VARS ${GETTEXT_REQUIRED_VARS} GETTEXT_DLL GETTEXT_ICONV_DLL)
endif(WIN32)
diff --git a/cmake/Modules/FindIrrlicht.cmake b/cmake/Modules/FindIrrlicht.cmake
index 6f361e829..8296de685 100644
--- a/cmake/Modules/FindIrrlicht.cmake
+++ b/cmake/Modules/FindIrrlicht.cmake
@@ -1,44 +1,11 @@
mark_as_advanced(IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR IRRLICHT_DLL)
-set(IRRLICHT_SOURCE_DIR "" CACHE PATH "Path to irrlicht source directory (optional)")
+# Find include directory and libraries
-# Find include directory
-
-if(NOT IRRLICHT_SOURCE_DIR STREQUAL "")
- set(IRRLICHT_SOURCE_DIR_INCLUDE
- "${IRRLICHT_SOURCE_DIR}/include"
- )
-
- set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a Irrlicht Irrlicht.lib)
-
- if(WIN32)
- if(MSVC)
- set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Win32-visualstudio")
- set(IRRLICHT_LIBRARY_NAMES Irrlicht.lib)
- else()
- set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Win32-gcc")
- set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a libIrrlicht.dll.a)
- endif()
- else()
- set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Linux")
- set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a)
- endif()
-
- find_path(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h
- PATHS
- ${IRRLICHT_SOURCE_DIR_INCLUDE}
- NO_DEFAULT_PATH
- )
-
- find_library(IRRLICHT_LIBRARY NAMES ${IRRLICHT_LIBRARY_NAMES}
- PATHS
- ${IRRLICHT_SOURCE_DIR_LIBS}
- NO_DEFAULT_PATH
- )
-
-else()
+if(TRUE)
find_path(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h
+ DOC "Path to the directory with Irrlicht includes"
PATHS
/usr/local/include/irrlicht
/usr/include/irrlicht
@@ -46,7 +13,8 @@ else()
PATH_SUFFIXES "include/irrlicht"
)
- find_library(IRRLICHT_LIBRARY NAMES libIrrlicht.so libIrrlicht.a Irrlicht
+ find_library(IRRLICHT_LIBRARY NAMES libIrrlicht Irrlicht
+ DOC "Path to the Irrlicht library file"
PATHS
/usr/local/lib
/usr/lib
@@ -54,19 +22,14 @@ else()
)
endif()
+# Users will likely need to edit these
+mark_as_advanced(CLEAR IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR)
# On Windows, find the DLL for installation
if(WIN32)
# If VCPKG_APPLOCAL_DEPS is ON, dll's are automatically handled by VCPKG
if(NOT VCPKG_APPLOCAL_DEPS)
- if(MSVC)
- set(IRRLICHT_COMPILER "VisualStudio")
- else()
- set(IRRLICHT_COMPILER "gcc")
- endif()
find_file(IRRLICHT_DLL NAMES Irrlicht.dll
- PATHS
- "${IRRLICHT_SOURCE_DIR}/bin/Win32-${IRRLICHT_COMPILER}"
DOC "Path of the Irrlicht dll (for installation)"
)
endif()
diff --git a/cmake/Modules/FindJson.cmake b/cmake/Modules/FindJson.cmake
index a5e9098f8..cce2d387f 100644
--- a/cmake/Modules/FindJson.cmake
+++ b/cmake/Modules/FindJson.cmake
@@ -1,26 +1,25 @@
-# Look for JSONCPP if asked to.
-# We use a bundled version by default because some distros ship versions of
-# JSONCPP that cause segfaults and other memory errors when we link with them.
-# See https://github.com/minetest/minetest/issues/1793
+# Look for JsonCpp, with fallback to bundeled version
mark_as_advanced(JSON_LIBRARY JSON_INCLUDE_DIR)
-option(ENABLE_SYSTEM_JSONCPP "Enable using a system-wide JSONCPP. May cause segfaults and other memory errors!" FALSE)
+option(ENABLE_SYSTEM_JSONCPP "Enable using a system-wide JsonCpp" TRUE)
+set(USE_SYSTEM_JSONCPP FALSE)
if(ENABLE_SYSTEM_JSONCPP)
find_library(JSON_LIBRARY NAMES jsoncpp)
find_path(JSON_INCLUDE_DIR json/allocator.h PATH_SUFFIXES jsoncpp)
- include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(Json DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR)
-
- if(JSON_FOUND)
- message(STATUS "Using system JSONCPP library.")
+ if(JSON_LIBRARY AND JSON_INCLUDE_DIR)
+ message(STATUS "Using JsonCpp provided by system.")
+ set(USE_SYSTEM_JSONCPP TRUE)
endif()
endif()
-if(NOT JSON_FOUND)
- message(STATUS "Using bundled JSONCPP library.")
+if(NOT USE_SYSTEM_JSONCPP)
+ message(STATUS "Using bundled JsonCpp library.")
set(JSON_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/jsoncpp)
set(JSON_LIBRARY jsoncpp)
add_subdirectory(lib/jsoncpp)
endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Json DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR)
diff --git a/doc/client_lua_api.txt b/doc/client_lua_api.txt
index 098596481..c2c552440 100644
--- a/doc/client_lua_api.txt
+++ b/doc/client_lua_api.txt
@@ -1,4 +1,4 @@
-Minetest Lua Client Modding API Reference 5.4.0
+Minetest Lua Client Modding API Reference 5.5.0
================================================
* More information at <http://www.minetest.net/>
* Developer Wiki: <http://dev.minetest.net/>
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index 7b7825614..737a690f6 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -256,6 +256,9 @@ Subfolders with names starting with `_` or `.` are ignored.
If a subfolder contains a media file with the same name as a media file
in one of its parents, the parent's file is used.
+Although it is discouraged, a mod can overwrite a media file of any mod that it
+depends on by supplying a file with an equal name.
+
Naming conventions
------------------
@@ -2296,7 +2299,7 @@ Elements
* `frame duration`: Milliseconds between each frame. `0` means the frames don't advance.
* `frame start` (Optional): The index of the frame to start on. Default `1`.
-### `model[<X>,<Y>;<W>,<H>;<name>;<mesh>;<textures>;<rotation X,Y>;<continuous>;<mouse control>;<frame loop range>]`
+### `model[<X>,<Y>;<W>,<H>;<name>;<mesh>;<textures>;<rotation X,Y>;<continuous>;<mouse control>;<frame loop range>;<animation speed>]`
* Show a mesh model.
* `name`: Element name that can be used for styling
@@ -2310,6 +2313,7 @@ Elements
* `frame loop range` (Optional): Range of the animation frames.
* Defaults to the full range of all available frames.
* Syntax: `<begin>,<end>`
+* `animation speed` (Optional): Sets the animation speed. Default 0 FPS.
### `item_image[<X>,<Y>;<W>,<H>;<item name>]`
@@ -2675,7 +2679,7 @@ Elements
* `span=<value>`: number of following columns to affect
(default: infinite).
-### `style[<selector 1>,<selector 2>;<prop1>;<prop2>;...]`
+### `style[<selector 1>,<selector 2>,...;<prop1>;<prop2>;...]`
* Set the style for the element(s) matching `selector` by name.
* `selector` can be one of:
@@ -2688,7 +2692,7 @@ Elements
* See [Styling Formspecs].
-### `style_type[<selector 1>,<selector 2>;<prop1>;<prop2>;...]`
+### `style_type[<selector 1>,<selector 2>,...;<prop1>;<prop2>;...]`
* Set the style for the element(s) matching `selector` by type.
* `selector` can be one of:
@@ -2761,10 +2765,10 @@ Styling Formspecs
Formspec elements can be themed using the style elements:
- style[<name 1>,<name 2>;<prop1>;<prop2>;...]
- style[<name 1>:<state>,<name 2>:<state>;<prop1>;<prop2>;...]
- style_type[<type 1>,<type 2>;<prop1>;<prop2>;...]
- style_type[<type 1>:<state>,<type 2>:<state>;<prop1>;<prop2>;...]
+ style[<name 1>,<name 2>,...;<prop1>;<prop2>;...]
+ style[<name 1>:<state>,<name 2>:<state>,...;<prop1>;<prop2>;...]
+ style_type[<type 1>,<type 2>,...;<prop1>;<prop2>;...]
+ style_type[<type 1>:<state>,<type 2>:<state>,...;<prop1>;<prop2>;...]
Where a prop is:
@@ -3265,7 +3269,6 @@ Helper functions
* returns true when the passed number represents NaN.
* `minetest.get_us_time()`
* returns time with microsecond precision. May not return wall time.
- * This value might overflow on certain 32-bit systems!
* `table.copy(table)`: returns a table
* returns a deep copy of `table`
* `table.indexof(list, val)`: returns the smallest numerical index containing
@@ -6039,18 +6042,18 @@ an itemstring, a table or `nil`.
stack).
* `set_metadata(metadata)`: (DEPRECATED) Returns true.
* `get_description()`: returns the description shown in inventory list tooltips.
- * The engine uses the same as this function for item descriptions.
+ * The engine uses this when showing item descriptions in tooltips.
* Fields for finding the description, in order:
* `description` in item metadata (See [Item Metadata].)
* `description` in item definition
* item name
-* `get_short_description()`: returns the short description.
+* `get_short_description()`: returns the short description or nil.
* Unlike the description, this does not include new lines.
- * The engine uses the same as this function for short item descriptions.
* Fields for finding the short description, in order:
* `short_description` in item metadata (See [Item Metadata].)
* `short_description` in item definition
- * first line of the description (See `get_description()`.)
+ * first line of the description (From item meta or def, see `get_description()`.)
+ * Returns nil if none of the above are set
* `clear()`: removes all items from the stack, making it empty.
* `replace(item)`: replace the contents of this stack.
* `item` can also be an itemstring or table.
@@ -6274,15 +6277,21 @@ object you are working with still exists.
* `get_nametag_attributes()`
* returns a table with the attributes of the nametag of an object
* {
- color = {a=0..255, r=0..255, g=0..255, b=0..255},
text = "",
+ color = {a=0..255, r=0..255, g=0..255, b=0..255},
+ bgcolor = {a=0..255, r=0..255, g=0..255, b=0..255},
}
* `set_nametag_attributes(attributes)`
* sets the attributes of the nametag of an object
* `attributes`:
{
- color = ColorSpec,
text = "My Nametag",
+ color = ColorSpec,
+ -- ^ Text color
+ bgcolor = ColorSpec or false,
+ -- ^ Sets background color of nametag
+ -- `false` will cause the background to be set automatically based on user settings
+ -- Default: false
}
#### Lua entity only (no-op for other objects)
@@ -6956,9 +6965,13 @@ Player properties need to be saved manually.
-- For all other objects, a nil or empty string removes the nametag.
-- To hide a nametag, set its color alpha to zero. That will disable it entirely.
-
nametag_color = <ColorSpec>,
- -- Sets color of nametag
+ -- Sets text color of nametag
+
+ nametag_bgcolor = <ColorSpec>,
+ -- Sets background color of nametag
+ -- `false` will cause the background to be set automatically based on user settings.
+ -- Default: false
infotext = "",
-- By default empty, text to be shown when pointed at object
@@ -7171,8 +7184,9 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and
short_description = "Steel Axe",
-- Must not contain new lines.
- -- Defaults to the first line of description.
- -- See also: `get_short_description` in [`ItemStack`]
+ -- Defaults to nil.
+ -- Use an [`ItemStack`] to get the short description, eg:
+ -- ItemStack(itemname):get_short_description()
groups = {},
-- key = name, value = rating; rating = 1..3.
diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt
index b3975bc1d..90ec527b0 100644
--- a/doc/menu_lua_api.txt
+++ b/doc/menu_lua_api.txt
@@ -1,4 +1,4 @@
-Minetest Lua Mainmenu API Reference 5.4.0
+Minetest Lua Mainmenu API Reference 5.5.0
=========================================
Introduction
diff --git a/games/devtest/mods/basenodes/textures/default_dirt.png b/games/devtest/mods/basenodes/textures/default_dirt.png
index 58670305d..aa75bffb6 100644
--- a/games/devtest/mods/basenodes/textures/default_dirt.png
+++ b/games/devtest/mods/basenodes/textures/default_dirt.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/dirt_with_grass/info.txt b/games/devtest/mods/basenodes/textures/dirt_with_grass/info.txt
deleted file mode 100644
index 8db21ed9c..000000000
--- a/games/devtest/mods/basenodes/textures/dirt_with_grass/info.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This is for testing loading textures from subfolders.
-If it works correctly, the default_grass_side.png file in this folder is used but
-default_grass.png is not overwritten by the file in this folder.
diff --git a/games/devtest/mods/basenodes/textures/info.txt b/games/devtest/mods/basenodes/textures/info.txt
new file mode 100644
index 000000000..2d4ef7efa
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/info.txt
@@ -0,0 +1,7 @@
+
+The dirt_with_grass folder is for testing loading textures from subfolders.
+If it works correctly, the default_grass_side.png file in the folder is used but
+default_grass.png is not overwritten by the file in the folder.
+
+default_dirt.png should be overwritten by the default_dirt.png in the unittests
+mod which depends on basenodes.
diff --git a/games/devtest/mods/chest/init.lua b/games/devtest/mods/chest/init.lua
index fc92bfdd1..5798c13e7 100644
--- a/games/devtest/mods/chest/init.lua
+++ b/games/devtest/mods/chest/init.lua
@@ -23,6 +23,18 @@ minetest.register_node("chest:chest", {
local inv = meta:get_inventory()
return inv:is_empty("main")
end,
+ allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+ minetest.chat_send_player(player:get_player_name(), "Allow put: " .. stack:to_string())
+ return stack:get_count()
+ end,
+ allow_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.chat_send_player(player:get_player_name(), "Allow take: " .. stack:to_string())
+ return stack:get_count()
+ end,
+ on_metadata_inventory_put = function(pos, listname, index, stack, player)
+ minetest.chat_send_player(player:get_player_name(), "On put: " .. stack:to_string())
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.chat_send_player(player:get_player_name(), "On take: " .. stack:to_string())
+ end,
})
-
-
diff --git a/games/devtest/mods/experimental/commands.lua b/games/devtest/mods/experimental/commands.lua
index 132b08b0b..8bfa467e1 100644
--- a/games/devtest/mods/experimental/commands.lua
+++ b/games/devtest/mods/experimental/commands.lua
@@ -215,5 +215,5 @@ minetest.register_chatcommand("test_place_nodes", {
})
core.register_on_chatcommand(function(name, command, params)
- minetest.log("caught command '"..command.."', issued by '"..name.."'. Parameters: '"..params.."'")
+ minetest.log("action", "caught command '"..command.."', issued by '"..name.."'. Parameters: '"..params.."'")
end)
diff --git a/games/devtest/mods/testentities/visuals.lua b/games/devtest/mods/testentities/visuals.lua
index e3b758329..e382ec44c 100644
--- a/games/devtest/mods/testentities/visuals.lua
+++ b/games/devtest/mods/testentities/visuals.lua
@@ -103,23 +103,35 @@ minetest.register_entity("testentities:nametag", {
on_activate = function(self, staticdata)
if staticdata ~= "" then
- self.color = minetest.deserialize(staticdata).color
+ local data = minetest.deserialize(staticdata)
+ self.color = data.color
+ self.bgcolor = data.bgcolor
else
self.color = {
r = math.random(0, 255),
g = math.random(0, 255),
b = math.random(0, 255),
}
+
+ if math.random(0, 10) > 5 then
+ self.bgcolor = {
+ r = math.random(0, 255),
+ g = math.random(0, 255),
+ b = math.random(0, 255),
+ a = math.random(0, 255),
+ }
+ end
end
assert(self.color)
self.object:set_properties({
nametag = tostring(math.random(1000, 10000)),
nametag_color = self.color,
+ nametag_bgcolor = self.bgcolor,
})
end,
get_staticdata = function(self)
- return minetest.serialize({ color = self.color })
+ return minetest.serialize({ color = self.color, bgcolor = self.bgcolor })
end,
})
diff --git a/games/devtest/mods/testformspec/formspec.lua b/games/devtest/mods/testformspec/formspec.lua
index 2a2bdad60..501b5e354 100644
--- a/games/devtest/mods/testformspec/formspec.lua
+++ b/games/devtest/mods/testformspec/formspec.lua
@@ -362,20 +362,51 @@ Number]
animated_image[5.5,0.5;5,2;;testformspec_animation.png;4;100]
animated_image[5.5,2.75;5,2;;testformspec_animation.jpg;4;100]
+ ]],
+
+ -- Model
+ [[
+ formspec_version[3]
+ size[12,13]
style[m1;bgcolor=black]
- model[0.5,6;4,4;m1;testformspec_character.b3d;testformspec_character.png]
- model[5,6;4,4;m2;testformspec_chest.obj;default_chest_top.png,default_chest_top.png,default_chest_side.png,default_chest_side.png,default_chest_front.png,default_chest_inside.png;30,1;true;true]
+ style[m2;bgcolor=black]
+ label[5,1;all defaults]
+ label[5,5.1;angle = 0, 180
+continuous = false
+mouse control = false
+frame loop range = 0,30]
+ label[5,9.2;continuous = true
+mouse control = true]
+ model[0.5,0.1;4,4;m1;testformspec_character.b3d;testformspec_character.png]
+ model[0.5,4.2;4,4;m2;testformspec_character.b3d;testformspec_character.png;0,180;false;false;0,30]
+ model[0.5,8.3;4,4;m3;testformspec_chest.obj;default_chest_top.png,default_chest_top.png,default_chest_side.png,default_chest_side.png,default_chest_front.png,default_chest_inside.png;30,1;true;true]
]],
-- Scroll containers
"formspec_version[3]size[12,13]" ..
scroll_fs,
+
+ -- Sound
+ [[
+ formspec_version[3]
+ size[12,13]
+ style[snd_btn;sound=soundstuff_mono]
+ style[snd_ibtn;sound=soundstuff_mono]
+ style[snd_drp;sound=soundstuff_mono]
+ style[snd_chk;sound=soundstuff_mono]
+ style[snd_tab;sound=soundstuff_mono]
+ button[0.5,0.5;2,1;snd_btn;Sound]
+ image_button[0.5,2;2,1;testformspec_item.png;snd_ibtn;Sound]
+ dropdown[0.5,4;4;snd_drp;Sound,Two,Three;]
+ checkbox[0.5,5.5.5;snd_chk;Sound;]
+ tabheader[0.5,7;8,0.65;snd_tab;Soundtab1,Soundtab2,Soundtab3;1;false;false]
+ ]],
}
local function show_test_formspec(pname, page_id)
page_id = page_id or 2
- local fs = pages[page_id] .. "tabheader[0,0;8,0.65;maintabs;Real Coord,Styles,Noclip,Hypertext,Tabs,Invs,Anim,ScrollC;" .. page_id .. ";false;false]"
+ local fs = pages[page_id] .. "tabheader[0,0;8,0.65;maintabs;Real Coord,Styles,Noclip,Hypertext,Tabs,Invs,Anim,Model,ScrollC,Sound;" .. page_id .. ";false;false]"
minetest.show_formspec(pname, "testformspec:formspec", fs)
end
diff --git a/games/devtest/mods/testtools/README.md b/games/devtest/mods/testtools/README.md
index 9cfe29ea4..a1eb95ed7 100644
--- a/games/devtest/mods/testtools/README.md
+++ b/games/devtest/mods/testtools/README.md
@@ -33,6 +33,13 @@ Usage:
* Punch node: Make it fall
* Place: Try to teleport up to 2 units upwards, then make it fall
+## Node Meta Editor
+Edit and view metadata of nodes.
+
+Usage:
+
+* Punch: Open node metadata editor
+
## Entity Rotator
Changes the entity rotation (with `set_rotation`).
@@ -90,6 +97,13 @@ Usage:
* Place: Increase move distance
* Sneak+place: Decrease move distance
+## Children Getter
+Shows list of objects that are attached to an object (aka "children") in chat.
+
+Usage:
+* Punch object: Show children of punched object
+* Punch air: Show your own children
+
## Entity Visual Scaler
Change visual size of entities
@@ -97,3 +111,10 @@ Usage:
* Punch entity to increase visual size
* Sneak+punch entity to decrease visual size
+
+## Light Tool
+Show light level of node.
+
+Usage:
+* Punch: Show light info of node in front of the punched node's side
+* Place: Show light info of the node that you touched
diff --git a/games/devtest/mods/testtools/init.lua b/games/devtest/mods/testtools/init.lua
index d578b264a..1041acdeb 100644
--- a/games/devtest/mods/testtools/init.lua
+++ b/games/devtest/mods/testtools/init.lua
@@ -3,8 +3,6 @@ local F = minetest.formspec_escape
dofile(minetest.get_modpath("testtools") .. "/light.lua")
--- TODO: Add a Node Metadata tool
-
minetest.register_tool("testtools:param2tool", {
description = S("Param2 Tool") .."\n"..
S("Modify param2 value of nodes") .."\n"..
@@ -111,25 +109,6 @@ minetest.register_tool("testtools:node_setter", {
end,
})
-minetest.register_on_player_receive_fields(function(player, formname, fields)
- if formname == "testtools:node_setter" then
- local playername = player:get_player_name()
- local witem = player:get_wielded_item()
- if witem:get_name() == "testtools:node_setter" then
- if fields.nodename and fields.param2 then
- local param2 = tonumber(fields.param2)
- if not param2 then
- return
- end
- local meta = witem:get_meta()
- meta:set_string("node", fields.nodename)
- meta:set_int("node_param2", param2)
- player:set_wielded_item(witem)
- end
- end
- end
-end)
-
minetest.register_tool("testtools:remover", {
description = S("Remover") .."\n"..
S("Punch: Remove pointed node or object"),
@@ -634,6 +613,54 @@ minetest.register_tool("testtools:object_attacher", {
end,
})
+local function print_object(obj)
+ if obj:is_player() then
+ return "player '"..obj:get_player_name().."'"
+ elseif obj:get_luaentity() then
+ return "LuaEntity '"..obj:get_luaentity().name.."'"
+ else
+ return "object"
+ end
+end
+
+minetest.register_tool("testtools:children_getter", {
+ description = S("Children Getter") .."\n"..
+ S("Shows list of objects attached to object") .."\n"..
+ S("Punch object to show its 'children'") .."\n"..
+ S("Punch air to show your own 'children'"),
+ inventory_image = "testtools_children_getter.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_use = function(itemstack, user, pointed_thing)
+ if user and user:is_player() then
+ local name = user:get_player_name()
+ local selected_object
+ local self_name
+ if pointed_thing.type == "object" then
+ selected_object = pointed_thing.ref
+ elseif pointed_thing.type == "nothing" then
+ selected_object = user
+ else
+ return
+ end
+ self_name = print_object(selected_object)
+ local children = selected_object:get_children()
+ local ret = ""
+ for c=1, #children do
+ ret = ret .. "* " .. print_object(children[c])
+ if c < #children then
+ ret = ret .. "\n"
+ end
+ end
+ if ret == "" then
+ ret = S("No children attached to @1.", self_name)
+ else
+ ret = S("Children of @1:", self_name) .. "\n" .. ret
+ end
+ minetest.chat_send_player(user:get_player_name(), ret)
+ end
+ end,
+})
+
-- Use loadstring to parse param as a Lua value
local function use_loadstring(param, player)
-- For security reasons, require 'server' priv, just in case
@@ -666,6 +693,68 @@ local function use_loadstring(param, player)
return true, errOrResult
end
+-- Node Meta Editor
+local node_meta_posses = {}
+local node_meta_latest_keylist = {}
+
+local function show_node_meta_formspec(user, pos, key, value, keylist)
+ local textlist
+ if keylist then
+ textlist = "textlist[0,0.5;2.5,6.5;keylist;"..keylist.."]"
+ else
+ textlist = ""
+ end
+ minetest.show_formspec(user:get_player_name(),
+ "testtools:node_meta_editor",
+ "size[15,9]"..
+ "label[0,0;"..F(S("Current keys:")).."]"..
+ textlist..
+ "field[3,0.5;12,1;key;"..F(S("Key"))..";"..F(key).."]"..
+ "textarea[3,1.5;12,6;value;"..F(S("Value (use empty value to delete key)"))..";"..F(value).."]"..
+ "button[0,8;3,1;get;"..F(S("Get value")).."]"..
+ "button[4,8;3,1;set;"..F(S("Set value")).."]"..
+ "label[0,7.2;"..F(S("pos = @1", minetest.pos_to_string(pos))).."]")
+end
+
+local function get_node_meta_keylist(meta, playername, escaped)
+ local keys = {}
+ local ekeys = {}
+ local mtable = meta:to_table()
+ for k,_ in pairs(mtable.fields) do
+ table.insert(keys, k)
+ if escaped then
+ table.insert(ekeys, F(k))
+ else
+ table.insert(ekeys, k)
+ end
+ end
+ if playername then
+ node_meta_latest_keylist[playername] = keys
+ end
+ return table.concat(ekeys, ",")
+end
+
+minetest.register_tool("testtools:node_meta_editor", {
+ description = S("Node Meta Editor") .. "\n" ..
+ S("Place: Edit node metadata"),
+ inventory_image = "testtools_node_meta_editor.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_place = function(itemstack, user, pointed_thing)
+ if pointed_thing.type ~= "node" then
+ return itemstack
+ end
+ if not user:is_player() then
+ return itemstack
+ end
+ local pos = pointed_thing.under
+ node_meta_posses[user:get_player_name()] = pos
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+ show_node_meta_formspec(user, pos, "", "", get_node_meta_keylist(meta, user:get_player_name(), true))
+ return itemstack
+ end,
+})
+
minetest.register_on_player_receive_fields(function(player, formname, fields)
if not (player and player:is_player()) then
return
@@ -728,5 +817,70 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
editor_formspec(name, selected_objects[name], prop_to_string(props[key]), sel)
return
end
+ elseif formname == "testtools:node_setter" then
+ local playername = player:get_player_name()
+ local witem = player:get_wielded_item()
+ if witem:get_name() == "testtools:node_setter" then
+ if fields.nodename and fields.param2 then
+ local param2 = tonumber(fields.param2)
+ if not param2 then
+ return
+ end
+ local meta = witem:get_meta()
+ meta:set_string("node", fields.nodename)
+ meta:set_int("node_param2", param2)
+ player:set_wielded_item(witem)
+ end
+ end
+ elseif formname == "testtools:node_meta_editor" then
+ local name = player:get_player_name()
+ local pos = node_meta_posses[name]
+ if fields.keylist then
+ local evnt = minetest.explode_textlist_event(fields.keylist)
+ if evnt.type == "DCL" or evnt.type == "CHG" then
+ local keylist_table = node_meta_latest_keylist[name]
+ if not pos then
+ return
+ end
+ local meta = minetest.get_meta(pos)
+ if not keylist_table then
+ return
+ end
+ if #keylist_table == 0 then
+ return
+ end
+ local key = keylist_table[evnt.index]
+ local value = meta:get_string(key)
+ local keylist_escaped = {}
+ for k,v in pairs(keylist_table) do
+ keylist_escaped[k] = F(v)
+ end
+ local keylist = table.concat(keylist_escaped, ",")
+ show_node_meta_formspec(player, pos, key, value, keylist)
+ return
+ end
+ elseif fields.key and fields.key ~= "" and fields.value then
+ if not pos then
+ return
+ end
+ local meta = minetest.get_meta(pos)
+ if fields.get then
+ local value = meta:get_string(fields.key)
+ show_node_meta_formspec(player, pos, fields.key, value,
+ get_node_meta_keylist(meta, name, true))
+ return
+ elseif fields.set then
+ meta:set_string(fields.key, fields.value)
+ show_node_meta_formspec(player, pos, fields.key, fields.value,
+ get_node_meta_keylist(meta, name, true))
+ return
+ end
+ end
end
end)
+
+minetest.register_on_leaveplayer(function(player)
+ local name = player:get_player_name()
+ node_meta_latest_keylist[name] = nil
+ node_meta_posses[name] = nil
+end)
diff --git a/games/devtest/mods/testtools/light.lua b/games/devtest/mods/testtools/light.lua
index a9458ca6b..afca9a489 100644
--- a/games/devtest/mods/testtools/light.lua
+++ b/games/devtest/mods/testtools/light.lua
@@ -1,22 +1,37 @@
local S = minetest.get_translator("testtools")
-minetest.register_tool("testtools:lighttool", {
- description = S("Light tool"),
- inventory_image = "testtools_lighttool.png",
- groups = { testtool = 1, disable_repair = 1 },
- on_use = function(itemstack, user, pointed_thing)
- local pos = pointed_thing.above
+local function get_func(is_place)
+ return function(itemstack, user, pointed_thing)
+ local pos
+ if is_place then
+ pos = pointed_thing.under
+ else
+ pos = pointed_thing.above
+ end
if pointed_thing.type ~= "node" or not pos then
return
end
local node = minetest.get_node(pos)
+ local pstr = minetest.pos_to_string(pos)
local time = minetest.get_timeofday()
local sunlight = minetest.get_natural_light(pos)
local artificial = minetest.get_artificial_light(node.param1)
- local message = ("param1 0x%02x | time %.5f | sunlight %d | artificial %d")
- :format(node.param1, time, sunlight, artificial)
+ local message = ("pos=%s | param1=0x%02x | " ..
+ "sunlight=%d | artificial=%d | timeofday=%.5f" )
+ :format(pstr, node.param1, sunlight, artificial, time)
minetest.chat_send_player(user:get_player_name(), message)
end
+end
+
+minetest.register_tool("testtools:lighttool", {
+ description = S("Light Tool") .. "\n" ..
+ S("Show light values of node") .. "\n" ..
+ S("Punch: Light of node above touched node") .. "\n" ..
+ S("Place: Light of touched node itself"),
+ inventory_image = "testtools_lighttool.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_use = get_func(false),
+ on_place = get_func(true),
})
diff --git a/games/devtest/mods/testtools/textures/testtools_children_getter.png b/games/devtest/mods/testtools/textures/testtools_children_getter.png
new file mode 100644
index 000000000..b7fa34025
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_children_getter.png
Binary files differ
diff --git a/games/devtest/mods/testtools/textures/testtools_node_meta_editor.png b/games/devtest/mods/testtools/textures/testtools_node_meta_editor.png
new file mode 100644
index 000000000..89eafd65c
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_node_meta_editor.png
Binary files differ
diff --git a/games/devtest/mods/unittests/itemdescription.lua b/games/devtest/mods/unittests/itemdescription.lua
index 1d0826545..d6ee6551a 100644
--- a/games/devtest/mods/unittests/itemdescription.lua
+++ b/games/devtest/mods/unittests/itemdescription.lua
@@ -26,15 +26,22 @@ minetest.register_chatcommand("item_description", {
})
function unittests.test_short_desc()
+ local function get_short_description(item)
+ return ItemStack(item):get_short_description()
+ end
+
local stack = ItemStack("unittests:colorful_pick")
assert(stack:get_short_description() == "Colorful Pickaxe")
- assert(stack:get_short_description() == minetest.registered_items["unittests:colorful_pick"].short_description)
+ assert(get_short_description("unittests:colorful_pick") == "Colorful Pickaxe")
+ assert(minetest.registered_items["unittests:colorful_pick"].short_description == nil)
assert(stack:get_description() == full_description)
assert(stack:get_description() == minetest.registered_items["unittests:colorful_pick"].description)
stack:get_meta():set_string("description", "Hello World")
- assert(stack:get_short_description() == "Colorful Pickaxe")
+ 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")
stack:get_meta():set_string("short_description", "Foo Bar")
assert(stack:get_short_description() == "Foo Bar")
diff --git a/games/devtest/mods/unittests/mod.conf b/games/devtest/mods/unittests/mod.conf
index 0d5e3c959..fa94e01a6 100644
--- a/games/devtest/mods/unittests/mod.conf
+++ b/games/devtest/mods/unittests/mod.conf
@@ -1,2 +1,3 @@
name = unittests
description = Adds automated unit tests for the engine
+depends = basenodes
diff --git a/games/devtest/mods/unittests/textures/default_dirt.png b/games/devtest/mods/unittests/textures/default_dirt.png
new file mode 100644
index 000000000..58670305d
--- /dev/null
+++ b/games/devtest/mods/unittests/textures/default_dirt.png
Binary files differ
diff --git a/minetest.conf.example b/minetest.conf.example
index 524ef6334..1e9f6b2d9 100644
--- a/minetest.conf.example
+++ b/minetest.conf.example
@@ -515,6 +515,11 @@
### Basic
+# Whether nametag backgrounds should be shown by default.
+# Mods may still set a background.
+# type: bool
+# show_nametag_backgrounds = true
+
# Enable vertex buffer objects.
# This should greatly improve graphics performance.
# type: bool
@@ -1310,7 +1315,7 @@
# type: bool
# enable_damage = false
-# Enable creative mode for new created maps.
+# Enable creative mode for all players
# type: bool
# creative_mode = false
diff --git a/misc/Info.plist b/misc/Info.plist
index 1498ee474..0491d2fc1 100644
--- a/misc/Info.plist
+++ b/misc/Info.plist
@@ -8,7 +8,13 @@
<string>minetest</string>
<key>CFBundleIconFile</key>
<string>minetest-icon.icns</string>
+ <key>CFBundleName</key>
+ <string>Minetest</string>
+ <key>CFBundleDisplayName</key>
+ <string>Minetest</string>
<key>CFBundleIdentifier</key>
<string>net.minetest.minetest</string>
+ <key>NSHighResolutionCapable</key>
+ <false/>
</dict>
</plist>
diff --git a/misc/debpkg-control b/misc/debpkg-control
index 30dc94088..1fef17fd9 100644
--- a/misc/debpkg-control
+++ b/misc/debpkg-control
@@ -2,8 +2,8 @@ Section: games
Priority: extra
Standards-Version: 3.6.2
Package: minetest-staging
-Version: 0.4.15-DATEPLACEHOLDER
-Depends: libc6, libcurl3-gnutls, libfreetype6, libirrlicht1.8, libjsoncpp1, LEVELDB_PLACEHOLDER, liblua5.1-0, libluajit-5.1-2, libopenal1, libsqlite3-0, libstdc++6, libvorbisfile3, libx11-6, zlib1g
+Version: 5.4.0-DATEPLACEHOLDER
+Depends: libc6, libcurl3-gnutls, libfreetype6, libgl1, JPEG_PLACEHOLDER, libjsoncpp1, LEVELDB_PLACEHOLDER, libopenal1, libpng16-16, libsqlite3-0, libstdc++6, libvorbisfile3, libx11-6, libxxf86vm1, zlib1g
Maintainer: Loic Blot <loic.blot@unix-experience.fr>
Homepage: https://www.minetest.net/
Vcs-Git: https://github.com/minetest/minetest.git
@@ -12,15 +12,12 @@ Architecture: amd64
Build-Depends:
cmake,
gettext,
- libbz2-dev,
libcurl4-gnutls-dev,
libfreetype6-dev,
- libglu1-mesa-dev,
- libirrlicht-dev (>= 1.7.0),
+ libgl1-mesa-dev,
libjpeg-dev,
libjsoncpp-dev,
libleveldb-dev,
- libluajit-5.1-dev | liblua5.1-dev,
libogg-dev,
libopenal-dev,
libpng-dev,
@@ -28,7 +25,7 @@ Build-Depends:
libvorbis-dev,
libx11-dev,
zlib1g-dev
-Description: Multiplayer infinite-world block sandbox (server)
+Description: Multiplayer infinite-world block sandbox game
Minetest is a minecraft-inspired game written from scratch and licensed
under the LGPL (version 2.1 or later). It supports both survival and creative
modes along with multiplayer support, dynamic lighting, and an "infinite" map
diff --git a/misc/net.minetest.minetest.appdata.xml b/misc/net.minetest.minetest.appdata.xml
index c177c3713..0e5397b37 100644
--- a/misc/net.minetest.minetest.appdata.xml
+++ b/misc/net.minetest.minetest.appdata.xml
@@ -62,6 +62,6 @@
<translation type="gettext">minetest</translation>
<update_contact>sfan5@live.de</update_contact>
<releases>
- <release date="2020-07-09" version="5.3.0"/>
+ <release date="2021-02-23" version="5.4.0"/>
</releases>
</component>
diff --git a/po/ar/minetest.po b/po/ar/minetest.po
index 530715a6d..1ab09c2bd 100644
--- a/po/ar/minetest.po
+++ b/po/ar/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-10-29 16:26+0000\n"
"Last-Translator: abidin toumi <abidin24@disroot.org>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -707,6 +707,11 @@ msgid "Loading..."
msgstr "يحمل..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "البرمجة النصية للعميل معطلة"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "جرب إعادة تمكين قائمة الحوادم العامة وتحقق من إتصالك بالانترنت."
@@ -2934,7 +2939,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5636,6 +5641,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6309,6 +6318,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/be/minetest.po b/po/be/minetest.po
index a10e7f28c..8b597ca4b 100644
--- a/po/be/minetest.po
+++ b/po/be/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Belarusian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2019-11-19 23:04+0000\n"
"Last-Translator: Viktar Vauchkevich <victorenator@gmail.com>\n"
"Language-Team: Belarusian <https://hosted.weblate.org/projects/minetest/"
@@ -725,6 +725,11 @@ msgid "Loading..."
msgstr "Загрузка…"
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "КліентÑÐºÑ–Ñ Ð¼Ð°Ð´Ñ‹Ñ„Ñ–ÐºÐ°Ñ†Ñ‹Ñ– выключаныÑ"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"ПаÑпрабуйце паўторна ўключыць ÑÐ¿Ñ–Ñ Ð¿ÑƒÐ±Ð»Ñ–Ñ‡Ð½Ñ‹Ñ… Ñервераў Ñ– праверце злучÑнне з "
@@ -3005,7 +3010,8 @@ msgid "Enable console window"
msgstr "Уключаць акно канÑолі"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Уключыць творчы Ñ€Ñжым Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… мап."
#: src/settings_translation_file.cpp
@@ -6267,6 +6273,10 @@ msgstr ""
"ПаÑÐ»Ñ Ð·Ð¼ÐµÐ½Ñ‹ мовы патрÑбна перазапуÑціць гульню."
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "Паведамленне аб выключÑнні"
@@ -7075,6 +7085,12 @@ msgstr ""
"Ð¿Ð°Ð´Ñ‡Ð°Ñ ÐºÐ°Ð¼Ð¿Ñ–Ð»Ñцыі."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
"Ці павінна быць паміж блокамі мапы дÑÑÑ–Ð½Ñ…Ñ€Ð°Ð½Ñ–Ð·Ð°Ñ†Ñ‹Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ‹Ñ– Ñ‚ÑкÑтур блокаў."
diff --git a/po/bg/minetest.po b/po/bg/minetest.po
index d6f284757..62011a94a 100644
--- a/po/bg/minetest.po
+++ b/po/bg/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-08-04 04:41+0000\n"
"Last-Translator: atomicbeef <teddyg522@gmail.com>\n"
"Language-Team: Bulgarian <https://hosted.weblate.org/projects/minetest/"
@@ -710,6 +710,10 @@ msgid "Loading..."
msgstr "Зарежда..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Опитай да включиш Ð¿ÑƒÐ±Ð»Ð¸Ñ‡Ð½Ð¸Ñ ÑпиÑък на Ñървъри отново и Ñи провай интернет "
@@ -1109,7 +1113,7 @@ msgstr ""
#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
-msgstr ""
+msgstr "no"
#: src/client/game.cpp
msgid ""
@@ -1940,7 +1944,7 @@ msgstr ""
#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
-msgstr ""
+msgstr "bg"
#: src/settings_translation_file.cpp
msgid ""
@@ -2849,7 +2853,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5551,6 +5555,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6224,6 +6232,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/ca/minetest.po b/po/ca/minetest.po
index c0f126b83..f9aecf265 100644
--- a/po/ca/minetest.po
+++ b/po/ca/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Catalan (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Catalan <https://hosted.weblate.org/projects/minetest/"
@@ -754,6 +754,10 @@ msgid "Loading..."
msgstr "Carregant ..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Intenta tornar a habilitar la llista de servidors públics i comprovi la seva "
@@ -3051,7 +3055,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6026,6 +6030,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6719,6 +6727,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/cs/minetest.po b/po/cs/minetest.po
index 62cba7656..1bb3a4336 100644
--- a/po/cs/minetest.po
+++ b/po/cs/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Czech (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-11-08 06:26+0000\n"
-"Last-Translator: Janar Leas <janarleas+ubuntuone@googlemail.com>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-03 04:31+0000\n"
+"Last-Translator: Vít Skalický <vit.skalicky@email.cz>\n"
"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.3.2\n"
+"X-Generator: Weblate 4.5-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -24,7 +24,7 @@ msgstr "Zemřel jsi"
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
-msgstr ""
+msgstr "OK"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
@@ -108,7 +108,7 @@ msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr ""
+msgstr "Najít více modů"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
@@ -153,7 +153,7 @@ msgstr "zapnuto"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" již existuje. Chcete jej přepsat?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
@@ -161,18 +161,19 @@ msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 od $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 se stahuje,\n"
+"$2 Äeká ve frontÄ›"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Nahrávám..."
+msgstr "$1 se stahuje..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
@@ -720,6 +721,11 @@ msgid "Loading..."
msgstr "Nahrávám..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Uživatelské skripty nejsou povoleny"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Zkuste znovu povolit seznam veřejných serverů a zkontrolujte své internetové "
@@ -3008,7 +3014,8 @@ msgid "Enable console window"
msgstr "Povolit konzolové okno"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Zapnout kreativní mód pro nové mapy."
#: src/settings_translation_file.cpp
@@ -6123,6 +6130,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "Zpráva o vypnutí"
@@ -6813,6 +6824,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/da/minetest.po b/po/da/minetest.po
index efa336141..5a11a9779 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: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-03-31 10:14+0000\n"
"Last-Translator: sfan5 <sfan5@live.de>\n"
"Language-Team: Danish <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -729,6 +729,10 @@ msgid "Loading..."
msgstr "Indlæser..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Prøv at slå den offentlige serverliste fra og til, og tjek din internet "
@@ -3022,7 +3026,8 @@ msgid "Enable console window"
msgstr "Aktivér konsolvindue"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Aktivér kreativ tilstand for nyoprettede kort."
#: src/settings_translation_file.cpp
@@ -6254,6 +6259,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "Nedlukningsbesked"
@@ -6949,6 +6958,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/de/minetest.po b/po/de/minetest.po
index 0a202df74..484c4707f 100644
--- a/po/de/minetest.po
+++ b/po/de/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: German (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-06-15 22:41+0000\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-13 08:50+0000\n"
"Last-Translator: Wuzzy <almikes@aol.com>\n"
"Language-Team: German <https://hosted.weblate.org/projects/minetest/minetest/"
"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.1\n"
+"X-Generator: Weblate 4.5-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -52,11 +52,11 @@ msgstr "Protokollversion stimmt nicht überein. "
#: builtin/mainmenu/common.lua
msgid "Server enforces protocol version $1. "
-msgstr "Server erfordert Protokollversion $1. "
+msgstr "Der Server erfordert Protokollversion $1. "
#: builtin/mainmenu/common.lua
msgid "Server supports protocol versions between $1 and $2. "
-msgstr "Server unterstützt Protokollversionen zwischen $1 und $2. "
+msgstr "Der Server unterstützt die Protokollversionen von $1 bis $2. "
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
@@ -103,8 +103,8 @@ msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"characters [a-z0-9_] are allowed."
msgstr ""
-"Fehler beim Aktivieren der Mod „$1“, da sie unerlaubte Zeichen enthält. Nur "
-"die folgenden Zeichen sind erlaubt: [a-z0-9_]."
+"Die Mod „$1“ konnte nicht aktiviert werden, da sie unzulässige Zeichen "
+"enthält. Nur die folgenden Zeichen sind erlaubt: [a-z0-9_]."
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
@@ -124,7 +124,7 @@ msgstr "Keine Spielbeschreibung verfügbar."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr "Keine harten Abhängigkeiten"
+msgstr "Keine notwendigen Abhängigkeiten"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
@@ -145,7 +145,7 @@ msgstr "Speichern"
#: builtin/mainmenu/dlg_config_world.lua
msgid "World:"
-msgstr "Welt:"
+msgstr "Weltname:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
@@ -153,52 +153,51 @@ msgstr "Aktiviert"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "„$1“ existiert bereits. Wollen Sie es überschreiben?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "$1 und $2 Abhängigkeiten werden installiert."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 von $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 laden herunter,\n"
+"$2 warten"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Herunterladen …"
+msgstr "$1 laden herunter…"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 benötigte Abhängigkeiten konnten nicht gefunden werden."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 wird installiert und $2 Abhängigkeiten werden übersprungen."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Alle Pakete"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Taste bereits in Benutzung"
+msgstr "Bereits installiert"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Zurück zum Hauptmenü"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Spiel hosten"
+msgstr "Basis-Spiel:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -223,14 +222,12 @@ msgid "Install"
msgstr "Installieren"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Installieren"
+msgstr "$1 installieren"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Optionale Abhängigkeiten:"
+msgstr "Fehlende Abhängigkeiten installieren"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -239,33 +236,31 @@ msgstr "Mods"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr "Es konnten keine Pakete empfangen werden"
+msgstr "Es konnten keine Pakete abgerufen werden"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
msgstr "Keine Treffer"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Aktualisieren"
+msgstr "Keine Updates"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Not found"
-msgstr "Ton verstummen"
+msgstr "Nicht gefunden"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Ãœberschreiben"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Bitte prüfen Sie, ob das Basis-Spiel korrekt ist."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Eingereiht"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -281,11 +276,11 @@ msgstr "Aktualisieren"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Alle aktualisieren [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Mehr Informationen im Webbrowser anschauen"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -378,7 +373,7 @@ msgstr "Seen"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Low humidity and high heat causes shallow or dry rivers"
msgstr ""
-"Niedrige Luftfeuchtigkeit und hohe Hitze erzeugen seichte oder "
+"Niedrige Luftfeuchtigkeit und große Wärme erzeugen seichte oder "
"ausgetrocknete Flüsse"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
@@ -399,7 +394,7 @@ msgstr "Berge"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
-msgstr "Schlammfließen"
+msgstr "Erosion"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
@@ -411,11 +406,11 @@ msgstr "Kein Spiel ausgewählt"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces heat with altitude"
-msgstr "Reduziert Hitze mit der Höhe"
+msgstr "Reduziert die Wärme mit der Höhe"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces humidity with altitude"
-msgstr "Reduziert Luftfeuchte mit der Höhe"
+msgstr "Reduziert Luftfeuchtigkeit mit der Höhe"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Rivers"
@@ -423,12 +418,12 @@ msgstr "Flüsse"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
-msgstr "Flüsse am Meeresspiegel"
+msgstr "Flüsse auf Meeresspiegelhöhe"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
-msgstr "Seed"
+msgstr "Startwert (Seed)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
@@ -439,13 +434,13 @@ msgid ""
"Structures appearing on the terrain (no effect on trees and jungle grass "
"created by v6)"
msgstr ""
-"Gebäude, die auf dem Gelände auftauchen (keine Wirkung auf von v6 erzeugte "
-"Bäume u. Dschungelgras)"
+"Strukturen, die auf dem Gelände auftauchen (keine Wirkung auf von v6 "
+"erzeugte Bäume u. Dschungelgras)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Structures appearing on the terrain, typically trees and plants"
msgstr ""
-"Gebäude, die auf dem Gelände auftauchen, üblicherweise Bäume und Pflanzen"
+"Strukturen, die auf dem Gelände auftauchen, üblicherweise Bäume und Pflanzen"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert"
@@ -489,7 +484,7 @@ msgstr "Es sind keine Spiele installiert."
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr "Sind Sie sich sicher, dass Sie „$1“ löschen wollen?"
+msgstr "Sind Sie sicher, dass „$1“ gelöscht werden soll?"
#: builtin/mainmenu/dlg_delete_content.lua
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
@@ -499,7 +494,7 @@ msgstr "Entfernen"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "pkgmgr: Fehler beim Löschen von „$1“"
+msgstr "pkgmgr: Fehler beim Entfernen von „$1“"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
@@ -507,7 +502,7 @@ msgstr "pkgmgr: Ungültiger Pfad „$1“"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr "Welt „$1“ löschen?"
+msgstr "Die Welt „$1“ löschen?"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
@@ -547,7 +542,7 @@ msgstr "Deaktiviert"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Edit"
-msgstr "Ändern"
+msgstr "Bearbeiten"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
@@ -599,7 +594,7 @@ msgstr "Datei auswählen"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Show technical names"
-msgstr "Technische Namen zeigen"
+msgstr "Techn. Bezeichnung zeigen"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
@@ -670,12 +665,12 @@ msgstr "Fehler bei der Installation von $1 nach $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr "Mod installieren: Echter Modname für $1 konnte nicht gefunden werden"
+msgstr "Modinstallation: Richtiger Modname für $1 konnte nicht gefunden werden"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
-"Mod installieren: Geeigneter Verzeichnisname für Modpack $1 konnte nicht "
+"Modinstallation: Geeigneter Verzeichnisname für Modpack $1 konnte nicht "
"gefunden werden"
#: builtin/mainmenu/pkgmgr.lua
@@ -693,33 +688,38 @@ msgstr "Keine gültige Mod oder Modpack gefunden"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
-msgstr "Fehler bei der Installation von $1 als Texturenpaket"
+msgstr "Fehler bei der Texturenpaket-Installation von $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
-msgstr "Fehler bei der Installation eines Spiels als $1"
+msgstr "Fehler bei der Spiel-Installation von $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a mod as a $1"
-msgstr "Fehler bei der Installation einer Mod als $1"
+msgstr "Fehler bei der Mod-Installation von $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a modpack as a $1"
-msgstr "Fehler bei der Installation eines Modpacks als $1"
+msgstr "Fehler bei der Modpack-Installation von $1"
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
msgid "Loading..."
msgstr "Lädt …"
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Clientseitige Skripte sind deaktiviert"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-"Versuchen Sie, die öffentliche Serverliste neu zu laden und prüfen Sie Ihre "
+"Versuchen Sie die öffentliche Serverliste neu zu laden und prüfen Sie Ihre "
"Internetverbindung."
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr "Online-Inhalte durchsuchen"
+msgstr "Onlineinhalte durchsuchen"
#: builtin/mainmenu/tab_content.lua
msgid "Content"
@@ -770,15 +770,16 @@ msgid "Credits"
msgstr "Mitwirkende"
#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
msgid "Open User Data Directory"
-msgstr "Verzeichnis auswählen"
+msgstr "Benutzerdatenverzeichnis öffnen"
#: builtin/mainmenu/tab_credits.lua
msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"Öffnet das Verzeichnis, welches die Welten, Spiele, Mods und\n"
+"Texturenpakete des Benutzers enthält, im Datei-Manager."
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
@@ -790,7 +791,7 @@ msgstr "Ehemalige Hauptentwickler"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr "Server ankündigen"
+msgstr "Server veröffentlichen"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
@@ -814,11 +815,11 @@ msgstr "Server hosten"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
-msgstr "Spiele von ContentDB installieren"
+msgstr "Spiele aus ContentDB installieren"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "Name"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -829,9 +830,8 @@ msgid "No world created or selected!"
msgstr "Keine Welt angegeben oder ausgewählt!"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Password"
-msgstr "Neues Passwort"
+msgstr "Passwort"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -842,9 +842,8 @@ msgid "Port"
msgstr "Port"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Welt wählen:"
+msgstr "Mods auswählen"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -925,7 +924,7 @@ msgstr "Kantenglättung:"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
-msgstr "Monitorgröße automatisch merken"
+msgstr "Fenstergröße merken"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
@@ -933,7 +932,7 @@ msgstr "Bilinearer Filter"
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
msgid "Change Keys"
-msgstr "Tasten ändern"
+msgstr "Tastenbelegung"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
@@ -957,11 +956,11 @@ msgstr "Kein Filter"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
-msgstr "Keine Mipmap"
+msgstr "Kein Mipmapping"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
-msgstr "Blöcke leuchten"
+msgstr "Blöcke aufhellen"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
@@ -996,9 +995,8 @@ msgid "Shaders"
msgstr "Shader"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Schwebeländer (experimentell)"
+msgstr "Shader (experimentell)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1018,11 +1016,11 @@ msgstr "Texturierung:"
#: builtin/mainmenu/tab_settings.lua
msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Um Shader zu benutzen, muss der OpenGL-Treiber benutzt werden."
+msgstr "Um Shader zu aktivieren, muss der OpenGL-Treiber genutzt werden."
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
-msgstr "Tone-Mapping"
+msgstr "Dynamikkompression"
#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold: (px)"
@@ -1078,7 +1076,7 @@ msgstr "Spiel konnte nicht gefunden oder geladen werden: \""
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
-msgstr "Ungültige Spielspezif."
+msgstr "Ungültige Spielspezifikationen"
#: src/client/clientlauncher.cpp
msgid "Main Menu"
@@ -1090,7 +1088,7 @@ msgstr "Keine Welt ausgewählt und keine Adresse angegeben. Nichts zu tun."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr "Spielername zu lang."
+msgstr "Der Spielername ist zu lang."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
@@ -1098,7 +1096,7 @@ msgstr "Bitte wählen Sie einen Namen!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr "Fehler beim öffnen der ausgewählten Passwort-Datei: "
+msgstr "Fehler beim Öffnen der angegebenen Passwortdatei: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
@@ -1122,7 +1120,7 @@ msgid ""
"Check debug.txt for details."
msgstr ""
"\n"
-"Siehe debug.txt für Details."
+"Für mehr Details siehe debug.txt."
#: src/client/game.cpp
msgid "- Address: "
@@ -1198,7 +1196,7 @@ msgid "Continue"
msgstr "Weiter"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1221,12 +1219,12 @@ msgstr ""
"- %s: Nach links\n"
"- %s: Nach rechts\n"
"- %s: Springen/klettern\n"
+"- %s: Graben/Schlagen\n"
+"- %s: Bauen/Benutzen\n"
"- %s: Kriechen/runter\n"
"- %s: Gegenstand wegwerfen\n"
"- %s: Inventar\n"
"- Maus: Drehen/Umschauen\n"
-"- Maus links: Graben/Schlagen\n"
-"- Maus rechts: Bauen/Benutzen\n"
"- Mausrad: Gegenstand wählen\n"
"- %s: Chat\n"
@@ -1248,7 +1246,7 @@ msgstr "Debug-Infos angezeigt"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
-msgstr "Debug-Infos, Profiler-Graph und Drahtmodell verborgen"
+msgstr "Debug-Infos, Profiler und Drahtgitter deaktiviert"
#: src/client/game.cpp
msgid ""
@@ -1288,7 +1286,7 @@ msgstr "Unbegrenzte Sichtweite aktiviert"
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr "Hauptmenü"
+msgstr "Zum Hauptmenü"
#: src/client/game.cpp
msgid "Exit to OS"
@@ -1340,7 +1338,7 @@ msgstr "Gehosteter Server"
#: src/client/game.cpp
msgid "Item definitions..."
-msgstr "Gegenstands-Definitionen …"
+msgstr "Gegenstandsdefinitionen …"
#: src/client/game.cpp
msgid "KiB/s"
@@ -1400,7 +1398,7 @@ msgstr "Entfernter Server"
#: src/client/game.cpp
msgid "Resolving address..."
-msgstr "Löse Adresse auf …"
+msgstr "Adressauflösung …"
#: src/client/game.cpp
msgid "Shutting down..."
@@ -1416,7 +1414,7 @@ msgstr "Tonlautstärke"
#: src/client/game.cpp
msgid "Sound muted"
-msgstr "Ton verstummt"
+msgstr "Ton stummgeschaltet"
#: src/client/game.cpp
msgid "Sound system is disabled"
@@ -1428,7 +1426,7 @@ msgstr "Tonsystem ist in diesem Build nicht unterstützt"
#: src/client/game.cpp
msgid "Sound unmuted"
-msgstr "Ton nicht mehr verstummt"
+msgstr "Ton nicht mehr stumm"
#: src/client/game.cpp
#, c-format
@@ -1452,7 +1450,7 @@ msgstr "Lautstärke auf %d%% gesetzt"
#: src/client/game.cpp
msgid "Wireframe shown"
-msgstr "Drahtmodell angezeigt"
+msgstr "Drahtmodell aktiv"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
@@ -1755,19 +1753,18 @@ msgid "Minimap hidden"
msgstr "Ãœbersichtskarte verborgen"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Übersichtskarte im Radarmodus, Zoom ×1"
+msgstr "Übersichtskarte im Radarmodus, Zoom ×%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Übersichtskarte im Bodenmodus, Zoom ×1"
+msgstr "Übersichtskarte im Bodenmodus, Zoom ×%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Minimale Texturengröße"
+msgstr "Ãœbersichtskarte im Texturmodus"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -2087,7 +2084,7 @@ msgstr "3-Dimensionaler-Modus"
#: src/settings_translation_file.cpp
msgid "3D mode parallax strength"
-msgstr "3D-Modus-Parallaxstärke"
+msgstr "3-D-Modus-Parallaxstärke"
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
@@ -2109,7 +2106,7 @@ 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-Rauschen, das die Form von Schwebeländern definiert.\n"
+"3-D-Rauschen, das die Form von Schwebeländern definiert.\n"
"Falls vom Standardwert verschieden, müsste der Rauschwert „Skalierung“\n"
"(standardmäßig 0.7) evtl. angepasst werden, da die Schwebeland-\n"
"zuspitzung am Besten funktioniert, wenn dieses Rauschen\n"
@@ -2188,7 +2185,7 @@ msgstr "ABM-Intervall"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "ABM-Zeitbudget"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
@@ -2699,7 +2696,7 @@ msgstr "ContentDB: Schwarze Liste"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "ContentDB Max. gleichzeitige Downloads"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2768,11 +2765,12 @@ msgid "Crosshair alpha"
msgstr "Fadenkreuzundurchsichtigkeit"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"Also controls the object crosshair color"
-msgstr "Fadenkreuzundurchsichtigkeit (Wert zwischen 0 und 255)."
+msgstr ""
+"Fadenkreuzundurchsichtigkeit (Wert zwischen 0 und 255).\n"
+"Gilt auch für das Objektfadenkreuz"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2783,6 +2781,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Fadenkreuzfarbe (R,G,B).\n"
+"Gilt auch für das Objektfadenkreuz"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2970,9 +2970,8 @@ msgid "Desynchronize block animation"
msgstr "Blockanimationen desynchronisieren"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "Rechtstaste"
+msgstr "Grabetaste"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -3039,7 +3038,8 @@ msgid "Enable console window"
msgstr "Konsolenfenster aktivieren"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Kreativmodus für neu erstellte Karten aktivieren."
#: src/settings_translation_file.cpp
@@ -3147,7 +3147,7 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
-"Aktiviert filmisches Tone-Mapping wie in Hables „Uncharted 2“.\n"
+"Aktiviert filmische Dynamikkompression wie in Hables „Uncharted 2“.\n"
"Simuliert die Tonkurve von fotografischem Film und wie dies das Aussehen\n"
"von „High Dynamic Range“-Bildern annähert. Mittlerer Kontrast wird leicht\n"
"verstärkt, aufleuchtende Bereiche und Schatten werden graduell komprimiert."
@@ -3204,9 +3204,10 @@ msgstr ""
"geeignet."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
-msgstr "Maximale Bildwiederholrate, während das Spiel pausiert ist."
+msgstr ""
+"Maximale Bildwiederholrate, während das Spiel pausiert oder nicht fokussiert "
+"ist"
#: src/settings_translation_file.cpp
msgid "FSAA"
@@ -3287,7 +3288,7 @@ msgstr "Fülltiefenrauschen"
#: src/settings_translation_file.cpp
msgid "Filmic tone mapping"
-msgstr "Filmisches Tone-Mapping"
+msgstr "Filmische Dynamikkompression"
#: src/settings_translation_file.cpp
msgid ""
@@ -3604,7 +3605,6 @@ msgid "HUD toggle key"
msgstr "Taste zum Umschalten des HUD"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
@@ -3612,12 +3612,12 @@ msgid ""
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
"Handhabung für veraltete Lua-API-Aufrufe:\n"
-"- legacy: Versuchen, altes Verhalten zu imitieren (Standard für Release).\n"
-"- log: Imitieren, und den Backtrace des veralteten Funktionsaufrufs "
+"- none: Veraltete Aufrufe nicht protokollieren.\n"
+"- log: Imitieren und den Backtrace des veralteten Funktionsaufrufs "
"protokollieren\n"
-" (Standard für Debug).\n"
+" (Standard).\n"
"- error: Bei Verwendung eines veralteten Funktionsaufrufs abbrechen\n"
-" (empfohlen für Mod- Entwickler)."
+" (empfohlen für Mod-Entwickler)."
#: src/settings_translation_file.cpp
msgid ""
@@ -4159,9 +4159,8 @@ msgid "Joystick button repetition interval"
msgstr "Joystick-Button-Wiederholungsrate"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick deadzone"
-msgstr "Joystick-Typ"
+msgstr "Joystick-Totbereich"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -4266,13 +4265,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Taste zum Springen.\n"
+"Taste zum Graben.\n"
"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4419,13 +4417,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for placing.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Taste zum Springen.\n"
+"Taste zum Bauen.\n"
"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5201,11 +5198,11 @@ msgstr "Macht alle Flüssigkeiten undurchsichtig"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "Kartenkompressionsstufe für Festspeicher"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "Kartenkompressionsstufe für Netzwerkverkehr"
#: src/settings_translation_file.cpp
msgid "Map directory"
@@ -5392,9 +5389,10 @@ msgid "Maximum FPS"
msgstr "Maximale Bildwiederholrate"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum FPS when the window is not focused, or when the game is paused."
-msgstr "Maximale Bildwiederholrate, während das Spiel pausiert ist."
+msgstr ""
+"Maximale Bildwiederholrate, während das Fenster nicht fokussiert oder das "
+"Spiel pausiert ist."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -5458,6 +5456,9 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"Maximale Anzahl an gleichzeitigen Downloads. Weitere werden in einer "
+"Warteschlange eingereiht.\n"
+"Dies sollte niedriger als das curl_parallel_limit sein."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5887,14 +5888,12 @@ msgid "Pitch move mode"
msgstr "Nick-Bewegungsmodus"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "Flugtaste"
+msgstr "Bautaste"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place repetition interval"
-msgstr "Rechtsklick-Wiederholungsrate"
+msgstr "Bauen-Wiederholungsrate"
#: src/settings_translation_file.cpp
msgid ""
@@ -6125,7 +6124,7 @@ msgstr "Runde Ãœbersichtskarte"
#: src/settings_translation_file.cpp
msgid "Safe digging and placing"
-msgstr "Sicheres graben und bauen"
+msgstr "Sicheres Graben und Bauen"
#: src/settings_translation_file.cpp
msgid "Sandy beaches occur when np_beach exceeds this value."
@@ -6383,15 +6382,19 @@ msgid "Show entity selection boxes"
msgstr "Entity-Auswahlboxen zeigen"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
-"Setzt die Sprache. Leer lassen, um Systemsprache zu verwenden.\n"
+"Entityauswahlboxen zeigen\n"
"Nach Änderung ist ein Neustart erforderlich."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Schrift standardmäßig fett"
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "Herunterfahrnachricht"
@@ -6547,7 +6550,7 @@ msgstr "Stufenbergsausbreitungsrauschen"
#: src/settings_translation_file.cpp
msgid "Strength of 3D mode parallax."
-msgstr "Stärke von 3D-Modus-Parallax."
+msgstr "Stärke von 3-D-Modus-Parallax."
#: src/settings_translation_file.cpp
msgid ""
@@ -6673,9 +6676,8 @@ msgid "The URL for the content repository"
msgstr "Die URL für den Inhaltespeicher"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The deadzone of the joystick"
-msgstr "Die Kennung des zu verwendeten Joysticks"
+msgstr "Der Totbereich des Joysticks"
#: src/settings_translation_file.cpp
msgid ""
@@ -6751,7 +6753,6 @@ msgstr ""
"konfiguriert werden."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The rendering back-end for Irrlicht.\n"
"A restart is required after changing this.\n"
@@ -6764,10 +6765,10 @@ msgstr ""
"Ein Neustart ist erforderlich, wenn dies geändert wird.\n"
"Anmerkung: Auf Android belassen Sie dies bei OGLES1, wenn Sie sich unsicher "
"sind.\n"
-"Die App könnte sonst unfähig sein, zu starten.\n"
-"Auf anderen Plattformen wird OpelGL empfohlen, dies ist momentan der "
-"einzige\n"
-"Treiber mit Shader-Unterstützung."
+"Die App könnte sonst nicht mehr starten.\n"
+"Auf anderen Plattformen wird OpenGL empfohlen.\n"
+"Shader werden unter OpenGL (nur Desktop) und OGLES2 (experimentell) "
+"unterstützt."
#: src/settings_translation_file.cpp
msgid ""
@@ -6807,6 +6808,8 @@ msgid ""
"The time budget allowed for ABMs to execute on each step\n"
"(as a fraction of the ABM Interval)"
msgstr ""
+"Das erlaubte Zeitbudget für ABM-Ausführung jeden Schritt\n"
+"(als Bruchteil des ABM-Intervalls)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6817,14 +6820,12 @@ msgstr ""
"wenn eine Joystick-Tastenkombination gedrückt gehalten wird."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
-"Die Zeit in Sekunden, in dem Rechtsklicks wiederholt werden, wenn die "
-"rechte\n"
-"Maustaste gedrückt gehalten wird."
+"Die Zeit in Sekunden, in dem die Blockplatzierung wiederholt wird, wenn\n"
+"die Bautaste gedrückt gehalten wird."
#: src/settings_translation_file.cpp
msgid "The type of joystick"
@@ -7001,6 +7002,15 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"Multi-Sample-Antialiasing (MSAA) benutzen, um Blockecken zu glätten.\n"
+"Dieser Algorithmus glättet das 3-D-Sichtfeld während das Bild scharf "
+"bleibt,\n"
+"beeinträchtigt jedoch nicht die Textureninnenflächen\n"
+"(was sich insbesondere bei transparenten Texturen bemerkbar macht).\n"
+"Sichtbare Lücken erscheinen zwischen Blöcken, wenn Shader ausgeschaltet "
+"sind.\n"
+"Wenn der Wert auf 0 steht, ist MSAA deaktiviert.\n"
+"Ein Neustart ist erforderlich, nachdem diese Option geändert worden ist."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
@@ -7246,6 +7256,12 @@ msgstr ""
"benutzt."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
"Ob Blocktexturanimationen pro Kartenblock desynchronisiert sein sollten."
@@ -7411,6 +7427,12 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"ZLib-Kompressionsniveau für Kartenblöcke im Festspeicher.\n"
+"-1 - Zlib-Standard-Kompressionsniveau\n"
+"0 - keine Kompression, am schnellsten\n"
+"9 - beste Kompression, am langsamsten\n"
+"(Niveaus 1-3 verwenden Zlibs „schnelles“ Verfahren, 4-9 das normale "
+"Verfahren)"
#: src/settings_translation_file.cpp
msgid ""
@@ -7420,6 +7442,12 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"ZLib-Kompressionsniveau für Kartenblöcke, die zu Clients gesendet werden.\n"
+"-1 - Zlib-Standard-Kompressionsniveau\n"
+"0 - keine Kompression, am schnellsten\n"
+"9 - beste Kompression, am langsamsten\n"
+"(Niveaus 1-3 verwenden Zlibs „schnelles“ Verfahren, 4-9 das normale "
+"Verfahren)"
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
diff --git a/po/dv/minetest.po b/po/dv/minetest.po
index 6182c0de3..4c4b53954 100644
--- a/po/dv/minetest.po
+++ b/po/dv/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Dhivehi (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2019-11-10 15:04+0000\n"
"Last-Translator: Krock <mk939@ymail.com>\n"
"Language-Team: Dhivehi <https://hosted.weblate.org/projects/minetest/"
@@ -715,6 +715,10 @@ msgid "Loading..."
msgstr "ÞÞ¯Þ‘Þ°ÞˆÞ¦Þ‚Þ©..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "Þ•Þ¦Þ„Þ°ÞÞ¨Þ†Þ° ÞÞ§ÞˆÞ¦Þƒ ÞÞ¨ÞÞ°Þ“Þª Þ‡Þ¦ÞÞªÞ‚Þ° Þ–Þ¦Þ‡Þ°ÞÞ¦ÞˆÞ§.Þ‡Þ¦Þ‹Þ¨ Þ‡Þ¨Þ‚Þ°Þ“Þ¦Þ‚Þ¬Þ“Þ° Þ†Þ¦Þ‚Þ¬Þ†Þ°ÞÞ¦Þ‚Þ° Þ—Þ¬Þ†Þ°Þ†ÞªÞƒÞ¦Þ‡Þ°ÞˆÞ§."
@@ -2888,7 +2892,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5599,6 +5603,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6272,6 +6280,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/el/minetest.po b/po/el/minetest.po
index c9a8fa9d7..b9b6182bf 100644
--- a/po/el/minetest.po
+++ b/po/el/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Greek (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-11-10 14:28+0000\n"
-"Last-Translator: sfan5 <sfan5@live.de>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-13 08:50+0000\n"
+"Last-Translator: Michalis <michalisntovas@yahoo.gr>\n"
"Language-Team: Greek <https://hosted.weblate.org/projects/minetest/minetest/"
"el/>\n"
"Language: el\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.4-dev\n"
+"X-Generator: Weblate 4.5-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -75,7 +75,7 @@ msgstr "ΥποστηÏίζουμε τις εκδόσεις Ï€ÏωτοκόλλωÎ
#: src/gui/guiConfirmRegistration.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
@@ -693,6 +693,10 @@ msgid "Loading..."
msgstr "ΦόÏτωση..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Δοκιμάστε να ενεÏγοποιήσετε ξανά τη δημόσια λίστα διακομιστών και ελέγξτε τη "
@@ -2831,7 +2835,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5533,6 +5537,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6206,6 +6214,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/eo/minetest.po b/po/eo/minetest.po
index 94f786a45..64db5dd71 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: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-07-17 08:41+0000\n"
"Last-Translator: Tirifto <tirifto@posteo.cz>\n"
"Language-Team: Esperanto <https://hosted.weblate.org/projects/minetest/"
@@ -709,6 +709,11 @@ msgid "Loading..."
msgstr "Enlegante…"
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Klient-flanka skriptado malÅaltita"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Provu reÅalti la publikan liston de serviloj kaj kontroli vian retkonekton."
@@ -3000,7 +3005,8 @@ msgid "Enable console window"
msgstr "Åœalti konzolan fenestron"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Åœalti krean reÄimon por novaj mapoj."
#: src/settings_translation_file.cpp
@@ -6264,6 +6270,11 @@ msgstr ""
"Rerulo necesas post la ÅanÄo."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Implice grasa tiparo"
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "Ferma mesaÄo"
@@ -7054,6 +7065,12 @@ msgstr ""
"MalÅaltite, ĉi tio anstataÅ­e uzigas tiparojn bitbildajn kaj XML-vektorajn."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag backgrounds should be shown by default.\n"
+"Mods may still set a background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
msgstr "Ĉu teksturaj movbildoj de monderoj malsamtempiÄu en ĉiu mondopeco."
diff --git a/po/es/minetest.po b/po/es/minetest.po
index 61d444026..4d26f2b5c 100644
--- a/po/es/minetest.po
+++ b/po/es/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Spanish (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-12-24 05:29+0000\n"
-"Last-Translator: cypMon <randalchem@protonmail.com>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-05 09:40+0000\n"
+"Last-Translator: j45 minetest <j45minetest@gmail.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.4.1-dev\n"
+"X-Generator: Weblate 4.5-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -153,52 +153,51 @@ msgstr "activado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" ya existe. Quieres remplazarlo?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Las dependencias $1 y $2 serán instaladas."
#: 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 espera"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Descargando..."
+msgstr "$1 descargando..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 dependencias requeridas no se encuentran."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 serán instalados, y $2 dependencias serán ignoradas."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Todos los paquetes"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "La tecla ya se está utilizando"
+msgstr "Ya está instalado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Volver al menú principal"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Hospedar juego"
+msgstr "Juego Base:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -223,14 +222,12 @@ msgid "Install"
msgstr "Instalar"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Instalar"
+msgstr "Instalar $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Dependencias opcionales:"
+msgstr "Instalar dependencias faltantes"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -246,26 +243,24 @@ msgid "No results"
msgstr "Sin resultados"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Actualizar"
+msgstr "No hay actualizaciones"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Not found"
-msgstr "Silenciar sonido"
+msgstr "No encontrado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Sobreescribir"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Por favor verifica que el juego base está bien."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "En cola"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -281,11 +276,11 @@ 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ás información en un navegador web"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -711,6 +706,11 @@ msgid "Loading..."
msgstr "Cargando..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "El Scripting en el lado del cliente está desactivado"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Intente rehabilitar la lista de servidores públicos y verifique su conexión "
@@ -769,15 +769,16 @@ msgid "Credits"
msgstr "Créditos"
#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
msgid "Open User Data Directory"
-msgstr "Seleccionar carpeta"
+msgstr "Abrir Directorio de Datos de Usuario"
#: builtin/mainmenu/tab_credits.lua
msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"Abre el directorio que contiene los mundos, juegos, mods, y paquetes de\n"
+"textura, del usuario, en un gestor / explorador de archivos."
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
@@ -817,7 +818,7 @@ msgstr "Instalar juegos desde ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "Nombre"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -828,9 +829,8 @@ 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
-#, fuzzy
msgid "Password"
-msgstr "Contraseña nueva"
+msgstr "Contraseña"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -841,9 +841,8 @@ msgid "Port"
msgstr "Puerto"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Selecciona un mundo:"
+msgstr "Selecciona Mods"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -995,9 +994,8 @@ msgid "Shaders"
msgstr "Sombreadores"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Tierras flotantes (experimental)"
+msgstr "Sombreadores (experimental)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1199,7 +1197,7 @@ msgid "Continue"
msgstr "Continuar"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1222,12 +1220,12 @@ msgstr ""
"- %s: moverse a la izquierda\n"
"- %s: moverse a la derecha\n"
"- %s: saltar/escalar\n"
-"- %s: agacharse/bajar\n"
+"- %s: excavar/golpear\n"
+"- %s: colocar/usar\n"
+"- %s: a hurtadillas/bajar\n"
"- %s: soltar objeto\n"
"- %s: inventario\n"
"- Ratón: girar/mirar\n"
-"- Ratón izq.: cavar/golpear\n"
-"- Ratón der.: colocar/usar\n"
"- Rueda del ratón: elegir objeto\n"
"- %s: chat\n"
@@ -1756,19 +1754,18 @@ msgid "Minimap hidden"
msgstr "Minimapa oculto"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Minimapa en modo radar, Zoom x1"
+msgstr "Minimapa en modo radar, Zoom x%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Minimapa en modo superficie, Zoom x1"
+msgstr "Minimapa en modo superficie, Zoom x%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Minimapa en modo superficie, Zoom x1"
+msgstr "Minimapa en modo textura"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -2182,7 +2179,7 @@ msgstr "Intervalo ABM"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "Límite de tiempo para MBA"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
@@ -2694,7 +2691,7 @@ msgstr "Lista negra de banderas 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"
@@ -2764,11 +2761,12 @@ msgid "Crosshair alpha"
msgstr "Opacidad del punto de mira"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"Also controls the object crosshair color"
-msgstr "Alfa del punto de mira (opacidad, entre 0 y 255)."
+msgstr ""
+"Alfa del punto de mira (opacidad, entre 0 y 255).\n"
+"También controla el color del objeto punto de mira."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2779,6 +2777,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Color del punto de mira (R,G,B).\n"
+"También controla el color del objeto punto de mira"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2963,9 +2963,8 @@ msgid "Desynchronize block animation"
msgstr "Desincronizar la animación de los bloques"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "Tecla derecha"
+msgstr "Tecla Excavar"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -3033,7 +3032,8 @@ msgid "Enable console window"
msgstr "Habilitar la ventana de la consola"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Habilitar el modo creativo para los nuevos mapas creados."
#: src/settings_translation_file.cpp
@@ -5397,12 +5397,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum FPS"
-msgstr "FPS máximos"
+msgstr "FPS máximo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum FPS when the window is not focused, or when the game is paused."
-msgstr "FPS máximos cuando el juego está pausado."
+msgstr "FPS máximo cuando el juego está pausado."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -6000,7 +5999,7 @@ msgstr "Ruido de río"
#: src/settings_translation_file.cpp
msgid "River size"
-msgstr ""
+msgstr "Tamaño del río"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6275,6 +6274,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Fuente en negrita por defecto"
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6960,6 +6964,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/et/minetest.po b/po/et/minetest.po
index bfb8fbcd5..5feb9be60 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: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-12-05 15:29+0000\n"
"Last-Translator: Janar Leas <janar.leas@gmail.com>\n"
"Language-Team: Estonian <https://hosted.weblate.org/projects/minetest/"
@@ -705,6 +705,11 @@ msgid "Loading..."
msgstr "Laadimine..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Kliendipoolne skriptimine on keelatud"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Proovi lubada uuesti avalike serverite loend ja kontrolli oma Interneti "
@@ -2881,7 +2886,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5593,6 +5598,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6266,6 +6275,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/eu/minetest.po b/po/eu/minetest.po
index fe0233120..d639a79ed 100644
--- a/po/eu/minetest.po
+++ b/po/eu/minetest.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-10-18 21:26+0000\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-23 15:50+0000\n"
"Last-Translator: Osoitz <oelkoro@gmail.com>\n"
"Language-Team: Basque <https://hosted.weblate.org/projects/minetest/minetest/"
"eu/>\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.3.1-dev\n"
+"X-Generator: Weblate 4.5\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -113,7 +113,7 @@ msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr ""
+msgstr "Mod gehiago aurkitu"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
@@ -158,11 +158,11 @@ msgstr "gaituta"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" existitzen da. Gainidatzi egin nahi al duzu?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "$1 et $2 mendekotasunak instalatuko dira."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
@@ -173,19 +173,21 @@ msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 deskargatzen,\n"
+"$2 ilaran"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Kargatzen..."
+msgstr "$1 deskargatzen..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1-ek behar dituen mendekotasunak ezin dira aurkitu."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
msgstr ""
+"$1 instalatua izango da, eta $2-ren mendekotasunak baztertu egingo dira."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
@@ -193,25 +195,23 @@ msgstr "Pakete guztiak"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Already installed"
-msgstr ""
+msgstr "Instalaturik jada"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Itzuli menu nagusira"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Joko ostalaria"
+msgstr "Oinarri jokoa:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
-msgstr ""
+msgstr "ContentDB ez dago erabilgarri Minetest cURL gabe konpilatzean"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Downloading..."
-msgstr "Kargatzen..."
+msgstr "Deskargatzen..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -227,14 +227,12 @@ msgid "Install"
msgstr "Instalatu"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Instalatu"
+msgstr "$1 Instalatu"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Aukerako mendekotasunak:"
+msgstr "Falta diren mendekotasunak instalatu"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -250,29 +248,28 @@ msgid "No results"
msgstr "Emaitzarik ez"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Eguneratu"
+msgstr "Eguneraketarik ez"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "Ez da aurkitu"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Gainidatzi"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Mesedez, egiaztatu oinarri jokoa zuzena dela."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Ilaran"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
-msgstr ""
+msgstr "testura paketeak"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
@@ -284,11 +281,11 @@ msgstr "Eguneratu"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Guztia eguneratu [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Ikusi informazio gehiago web nabigatzailean"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -296,40 +293,39 @@ msgstr "Badago \"$1\" izeneko mundu bat"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Additional terrain"
-msgstr ""
+msgstr "Lurrazal gehigarria"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Altitude chill"
-msgstr ""
+msgstr "Garaierako hotza"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Altitude dry"
-msgstr ""
+msgstr "Garaierako lehortasuna"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biome blending"
-msgstr ""
+msgstr "Bioma nahasketa"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biomes"
-msgstr ""
+msgstr "Biomak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caverns"
-msgstr ""
+msgstr "Leizeak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caves"
-msgstr ""
+msgstr "Leizeak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Sortu"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Decorations"
-msgstr "Informazioa:"
+msgstr "Apaingarriak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
@@ -342,11 +338,11 @@ msgstr "Deskargatu minetest.net zerbitzaritik"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
-msgstr ""
+msgstr "Leotzak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Flat terrain"
-msgstr ""
+msgstr "Lurrazal laua"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
@@ -362,27 +358,29 @@ msgstr "Jolasa"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr ""
+msgstr "Lurrazal ez fraktalak sortu: Ozeanoak eta lurpekoak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
-msgstr ""
+msgstr "Mendiak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Humid rivers"
-msgstr ""
+msgstr "Erreka hezeak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Increases humidity around rivers"
-msgstr ""
+msgstr "Hezetasuna areagotu erreka inguruetan"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
-msgstr ""
+msgstr "Lakuak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Low humidity and high heat causes shallow or dry rivers"
msgstr ""
+"Hezetasun baxuak eta bero handiak sakonera gutxikoak edo lehorrak diren "
+"ibaiak sortzen dituzte"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
@@ -390,7 +388,7 @@ msgstr "Mapa sortzailea"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen flags"
-msgstr ""
+msgstr "Mapgen banderatxoak"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mapgen-specific flags"
@@ -713,6 +711,10 @@ msgid "Loading..."
msgstr "Kargatzen..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Saia zaitez zerbitzari publikoen zerrenda birgaitzen eta egiazta ezazu zure "
@@ -740,7 +742,7 @@ msgstr "Instalaturiko paketeak:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
-msgstr "Menpekotasunik gabe."
+msgstr "Mendekotasunik gabe."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
@@ -973,11 +975,11 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
-msgstr ""
+msgstr "Hosto opakoak"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Water"
-msgstr ""
+msgstr "Ur opakoa"
#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
@@ -1215,11 +1217,11 @@ msgstr ""
#: src/client/game.cpp
msgid "Creating client..."
-msgstr ""
+msgstr "Bezeroa sortzen..."
#: src/client/game.cpp
msgid "Creating server..."
-msgstr ""
+msgstr "Zerbitzaria sortzen..."
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
@@ -2856,7 +2858,8 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Gaitu sormen modua mapa sortu berrietan."
#: src/settings_translation_file.cpp
@@ -5603,6 +5606,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6282,6 +6289,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/fi/minetest.po b/po/fi/minetest.po
index 25002febd..57682ebba 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: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-07-11 13:41+0000\n"
-"Last-Translator: Niko Kivinen <niko.pet.kivinen@gmail.com>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-01 05:52+0000\n"
+"Last-Translator: Tviljan <virallinen@gmail.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.2-dev\n"
+"X-Generator: Weblate 4.5-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -37,7 +37,7 @@ msgstr ""
#: builtin/fstk/ui.lua
msgid "An error occurred:"
-msgstr ""
+msgstr "Tapahtui virhe:"
#: builtin/fstk/ui.lua
msgid "Main menu"
@@ -698,6 +698,10 @@ msgid "Loading..."
msgstr "Ladataan..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
@@ -1094,7 +1098,7 @@ msgstr ""
#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
-msgstr ""
+msgstr "no"
#: src/client/game.cpp
msgid ""
@@ -1925,7 +1929,7 @@ msgstr ""
#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
-msgstr ""
+msgstr "fi"
#: src/settings_translation_file.cpp
msgid ""
@@ -2834,7 +2838,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5536,6 +5540,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6209,6 +6217,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/fr/minetest.po b/po/fr/minetest.po
index a6201c240..98478e035 100644
--- a/po/fr/minetest.po
+++ b/po/fr/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: French (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-10-25 19:26+0000\n"
-"Last-Translator: William Desportes <williamdes@wdes.fr>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-01 05:52+0000\n"
+"Last-Translator: cafou <weblate@ptitux.org>\n"
"Language-Team: French <https://hosted.weblate.org/projects/minetest/minetest/"
"fr/>\n"
"Language: 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.3.2-dev\n"
+"X-Generator: Weblate 4.5-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -177,11 +177,11 @@ msgstr "Chargement..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "Les dépendances nécessaires à 1 $ n'ont pas pu être trouvées."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 sera installé, et les dépendances de $2 seront ignorées."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
@@ -257,7 +257,7 @@ msgstr "Couper le son"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Écraser"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
@@ -265,7 +265,7 @@ msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "En file d'attente"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -285,7 +285,7 @@ msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Voir plus d'informations dans un navigateur web"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -713,6 +713,11 @@ msgid "Loading..."
msgstr "Chargement..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Les scripts côté client sont désactivés"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Essayez de rechargez la liste des serveurs publics et vérifiez votre "
@@ -780,6 +785,9 @@ msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"Ouvre le répertoire qui contient les mondes fournis par les utilisateurs, "
+"les jeux, les mods,\n"
+"et des paquets de textures dans un gestionnaire de fichiers."
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
@@ -819,7 +827,7 @@ msgstr "Installer à partir de ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "Nom"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -2689,7 +2697,7 @@ msgstr "Drapeaux ContentDB en liste noire"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "Maximum de téléchargement en parallèle pour ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -3027,7 +3035,8 @@ msgid "Enable console window"
msgstr "Activer la console"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Activer le mode créatif pour les cartes nouvellement créées."
#: src/settings_translation_file.cpp
@@ -6349,6 +6358,11 @@ msgstr ""
"Un redémarrage du jeu est nécessaire pour prendre effet."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "La police est en gras par défaut"
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "Message d'arrêt du serveur"
@@ -7202,6 +7216,12 @@ msgstr ""
"remplacement."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 "Détermine la désynchronisation des textures animées par mapblock."
diff --git a/po/gd/minetest.po b/po/gd/minetest.po
index 5d1d6d534..e7147d3b5 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: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-06-22 17:56+0000\n"
"Last-Translator: GunChleoc <fios@foramnagaidhlig.net>\n"
"Language-Team: Gaelic <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -702,6 +702,10 @@ msgid "Loading..."
msgstr ""
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
@@ -2881,7 +2885,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5807,6 +5811,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6511,6 +6519,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/gl/minetest.po b/po/gl/minetest.po
index 43c9df64d..6f5b479bc 100644
--- a/po/gl/minetest.po
+++ b/po/gl/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-07-08 20:47+0000\n"
"Last-Translator: sfan5 <sfan5@live.de>\n"
"Language-Team: Galician <https://hosted.weblate.org/projects/minetest/"
@@ -697,6 +697,10 @@ msgid "Loading..."
msgstr ""
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
@@ -2833,7 +2837,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5535,6 +5539,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6208,6 +6216,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/he/minetest.po b/po/he/minetest.po
index bc0a9e5dc..2bfb5e711 100644
--- a/po/he/minetest.po
+++ b/po/he/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Hebrew (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2021-01-08 17:32+0000\n"
-"Last-Translator: Omer I.S. <omeritzicschwartz@gmail.com>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-17 22:50+0000\n"
+"Last-Translator: Yossi Cohen <cohenyossi81@gmail.com>\n"
"Language-Team: Hebrew <https://hosted.weblate.org/projects/minetest/minetest/"
"he/>\n"
"Language: he\n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
"n % 10 == 0) ? 2 : 3));\n"
-"X-Generator: Weblate 4.4.1-dev\n"
+"X-Generator: Weblate 4.5\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
-msgstr "×œ×§×•× ×œ×ª×—×™×™×”"
+msgstr "הזדמן"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
@@ -45,7 +45,7 @@ msgstr "התחברות מחדש"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
-msgstr "השרת מבקש שתתחבר מחדש:"
+msgstr "השרת מבקש התחברות מחדש:"
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
@@ -100,12 +100,11 @@ msgid "Enable modpack"
msgstr "הפעלת ערכת המודי×"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"characters [a-z0-9_] are allowed."
msgstr ""
-"טעינת המוד \"1$\" נכשלה מכיוון ×©×”×•× ×ž×›×™×œ ×ª×•×•×™× ×œ× ×—×•×§×™×™×. רק ×”×ª×•×•×™× [a-"
+"הפעלת המוד \"1$\" נכשלה מכיוון ×©×”×•× ×ž×›×™×œ ×ª×•×•×™× ×œ× ×—×•×§×™×™×. רק ×”×ª×•×•×™× [a-"
"z0-9_] מותרי×."
#: builtin/mainmenu/dlg_config_world.lua
@@ -126,11 +125,11 @@ 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"
@@ -138,7 +137,7 @@ 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
@@ -155,34 +154,35 @@ 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"
@@ -190,20 +190,19 @@ msgstr "כל החבילות"
#: builtin/mainmenu/dlg_contentstore.lua
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 "בסיס נתוני התוכן ×œ× ×–×ž×™×Ÿ ×›×שר מיינטסט מקומפל בלי cUrl"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Downloading..."
@@ -223,14 +222,12 @@ 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
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -239,37 +236,35 @@ msgstr "מודי×"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr ""
+msgstr "×œ× × ×™×ª×Ÿ ×œ×”×‘×™× ×ת החבילות"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
msgstr "×ין תוצ×ות"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "עדכון"
+msgstr "×ין עדכוני×"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "×œ× × ×ž×¦×"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "דרוס"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "×× × ×‘×“×•×§ שמשחק הבסיס תקין."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "נכנס לתור"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Texture packs"
-msgstr "חבילות מרק×"
+msgstr "חבילות טקסטורה (מרק×)"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
@@ -281,11 +276,11 @@ msgstr "עדכון"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "עדכן הכל [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "צפה במידע נוסף בדפדפן ×”×ינטרנט"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -293,31 +288,31 @@ 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
msgid "Caves"
-msgstr "מערות"
+msgstr "מערות (×œ×œ× ×ור שמש)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
@@ -325,7 +320,7 @@ msgstr "יצירה"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Decorations"
-msgstr ""
+msgstr "קישוטי×"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
@@ -337,7 +332,7 @@ msgstr "הורד ×חד מ×תר minetest.net"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
-msgstr ""
+msgstr "מבוכי×"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Flat terrain"
@@ -345,11 +340,11 @@ msgstr "×¢×•×œ× ×©×˜×•×—"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr ""
+msgstr "גושי ×דמה ×¦×¤×™× ×‘×©×ž×™×"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-msgstr ""
+msgstr "×דמה צפה (נסיוני)"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
@@ -357,19 +352,19 @@ msgstr "משחק"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr ""
+msgstr "צור שטח ×œ× ×¤×¨×§×˜×œ×™: ××•×§×™×™× ×•×¡×™× ×•×ª×ª קרקעי"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
-msgstr ""
+msgstr "גבעות"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Humid rivers"
-msgstr ""
+msgstr "נהרות לחי×"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Increases humidity around rivers"
-msgstr ""
+msgstr "הגברת הלחות בסביבת נהרות"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
@@ -377,20 +372,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
-#, fuzzy
msgid "Mapgen-specific flags"
-msgstr "מנוע מפות"
+msgstr "×פשרויות ספציפיות למנוע מפות"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
@@ -398,11 +392,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"
@@ -410,11 +404,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"
@@ -422,7 +416,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
@@ -431,45 +425,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 ""
+msgstr "מערות גדולות מ×וד עמוק מתחת ל×דמה"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The Development Test is meant for developers."
@@ -499,7 +493,7 @@ 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\"?"
@@ -511,13 +505,15 @@ msgstr "הסכמה"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "שינוי ×©× ×¢×¨×›×ª המודי×:"
+msgstr "שנה ×ת ×©× ×—×‘×™×œ×ª המודי×:"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
+"ל- modpack (חבילת תוספות) ×–×” יש ×©× ×ž×¤×•×¨×© שניתן ב modpack.conf שלו ×שר יעקוף "
+"כל שינוי-×©× ×›×ן."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
@@ -525,7 +521,7 @@ msgstr "(×œ× × ×•×¡×£ תי×ור להגדרה)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
-msgstr ""
+msgstr "רעש דו-מיימדי"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
@@ -533,7 +529,7 @@ msgstr "חזור לדף ההגדרות >"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
-msgstr "עיון"
+msgstr "דפדף"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Disabled"
@@ -549,27 +545,27 @@ msgstr "מופעל"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Lacunarity"
-msgstr ""
+msgstr "מרווחיות"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Octaves"
-msgstr ""
+msgstr "×וקטבות"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
-msgstr ""
+msgstr "היסט"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Persistance"
-msgstr ""
+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"
@@ -577,7 +573,7 @@ msgstr "שחזור לברירת המחדל"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
-msgstr ""
+msgstr "קנה מידה"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Search"
@@ -605,27 +601,27 @@ msgstr "הערך ×œ× ×™×›×•×œ להיות גדול מ־$1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
-msgstr ""
+msgstr "X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X spread"
-msgstr ""
+msgstr "מרווחיות X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y"
-msgstr ""
+msgstr "Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y spread"
-msgstr ""
+msgstr "מרווחיות Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z"
-msgstr ""
+msgstr "Z"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z spread"
-msgstr ""
+msgstr "מרווחיות Z"
#. ~ "absvalue" is a noise parameter flag.
#. It is short for "absolute value".
@@ -633,14 +629,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
@@ -648,7 +644,7 @@ msgstr ""
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr ""
+msgstr "החלקת ערכי×"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
@@ -660,60 +656,65 @@ 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 ""
+msgstr "התקנת מוד: ×œ× × ×™×ª×Ÿ ×œ×ž×¦×•× ×ת ×©× ×”×ž×•×“ ×”×מיתי עבור: $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
-msgstr ""
+msgstr "התקנת מוד: ×œ× × ×™×ª×Ÿ ×œ×ž×¦×•× ×©× ×ª×™×§×™×™×” מת××™× ×¢×‘×•×¨ חבילת ×”×ž×•×“×™× $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
+msgstr "התקנה: סוג קובץ ×œ× × ×ª×ž×š \"$1\" ×ו שה×רכיב פגו×"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: file: \"$1\""
-msgstr ""
+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..."
msgstr "כעת בטעינה..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "×¡×§×¨×™×¤×˜×™× ×‘×¦×“ לקוח מבוטלי×"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"× × ×œ× ×¡×•×ª לצ×ת ולהיכנס מחדש לרשימת ×”×©×¨×ª×™× ×•×œ×‘×“×•×§ ×ת החיבור שלך ל×ינטרנט."
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr ""
+msgstr "עיון בתוכן מקוון"
#: builtin/mainmenu/tab_content.lua
msgid "Content"
-msgstr ""
+msgstr "תוכן"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
@@ -721,11 +722,11 @@ msgstr "השבתת חבילת המרק×"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
-msgstr ""
+msgstr "מידע:"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
-msgstr ""
+msgstr "חבילות מותקנות:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
@@ -733,15 +734,15 @@ msgstr "×ין תלויות."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr ""
+msgstr "×ין תי×ור חבילה זמין"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
-msgstr "שינוי ש×"
+msgstr "שנה ש×"
#: builtin/mainmenu/tab_content.lua
msgid "Uninstall Package"
-msgstr ""
+msgstr "הסרת החבילה"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
@@ -749,42 +750,43 @@ msgstr "שימוש בחבילת המרק×"
#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
-msgstr ""
+msgstr "×ª×•×¨×ž×™× ×¤×¢×™×œ×™×"
#: builtin/mainmenu/tab_credits.lua
msgid "Core Developers"
-msgstr ""
+msgstr "×ž×¤×ª×—×™× ×¢×™×§×¨×™×™×"
#: builtin/mainmenu/tab_credits.lua
msgid "Credits"
msgstr "תודות"
#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
msgid "Open User Data Directory"
-msgstr "× × ×œ×‘×—×•×¨ תיקיה"
+msgstr "× × ×œ×‘×—×•×¨ תיקיית משתמש"
#: builtin/mainmenu/tab_credits.lua
msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"פותח ×ת התיקייה המכילה עולמות, משחקי×, מודי×,\n"
+"וחבילות טקסטורה במנהל קבצי×."
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
-msgstr ""
+msgstr "×ª×•×¨×ž×™× ×§×•×“×ž×™×"
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Core Developers"
-msgstr ""
+msgstr "מפתחי ליבה קודמי×"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr ""
+msgstr "הכרז על השרת"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr ""
+msgstr "הצמד כתובת"
#: builtin/mainmenu/tab_local.lua
msgid "Creative Mode"
@@ -795,9 +797,8 @@ msgid "Enable Damage"
msgstr "ל×פשר חבלה"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Host Game"
-msgstr "הסתר משחק"
+msgstr "×ירוח משחק"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
@@ -805,11 +806,11 @@ msgstr "×כסון שרת"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
-msgstr ""
+msgstr "התקנת משחק מContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "ש×"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -820,23 +821,20 @@ msgid "No world created or selected!"
msgstr "×ין ×¢×•×œ× ×©× ×•×¦×¨ ×ו נבחר!"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Password"
-msgstr "ש×/סיסמה"
+msgstr "סיסמה"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Play Game"
-msgstr "התחל משחק"
+msgstr "להתחיל לשחק"
#: builtin/mainmenu/tab_local.lua
msgid "Port"
msgstr "פורט"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "× × ×œ×‘×—×•×¨ עול×:"
+msgstr "בחירת מודי×"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -844,12 +842,11 @@ msgstr "× × ×œ×‘×—×•×¨ עול×:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr ""
+msgstr "פורט לשרת"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Start Game"
-msgstr "הסתר משחק"
+msgstr "התחלת המשחק"
#: builtin/mainmenu/tab_online.lua
msgid "Address / Port"
@@ -865,15 +862,15 @@ msgstr "מצב יצירתי"
#: builtin/mainmenu/tab_online.lua
msgid "Damage enabled"
-msgstr "החבלה מ×ופשרת"
+msgstr "נזק מופעל"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
-msgstr ""
+msgstr "מחק מועדף"
#: builtin/mainmenu/tab_online.lua
msgid "Favorite"
-msgstr ""
+msgstr "מועדף"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
@@ -885,7 +882,7 @@ msgstr "ש×/סיסמה"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
-msgstr ""
+msgstr "פינג"
#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
@@ -894,19 +891,19 @@ msgstr "ל×פשר קרבות"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
-msgstr ""
+msgstr "x2"
#: builtin/mainmenu/tab_settings.lua
msgid "3D Clouds"
-msgstr ""
+msgstr "×¢× × ×™× ×ª×œ×ª מימדיי×"
#: builtin/mainmenu/tab_settings.lua
msgid "4x"
-msgstr ""
+msgstr "x4"
#: builtin/mainmenu/tab_settings.lua
msgid "8x"
-msgstr ""
+msgstr "x8"
#: builtin/mainmenu/tab_settings.lua
msgid "All Settings"
@@ -914,64 +911,63 @@ msgstr "כל ההגדרות"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
-msgstr ""
+msgstr "החלקת קצוות (AA):"
#: 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"
-msgstr ""
+msgstr "שנה מקשי×"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Connected Glass"
-msgstr "התחבר"
+msgstr "זכוכיות מחוברות"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
-msgstr ""
+msgstr "×¢×œ×™× ×ž×’× ×™×‘×™×"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr ""
+msgstr "מיפמ×פ"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "מיפמ×פ + פילטר ×ניסוטרופי"
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr ""
+msgstr "בלי פילטר"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
-msgstr ""
+msgstr "בלי מיפמ×פ"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
-msgstr ""
+msgstr "הבלטת קוביות"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
-msgstr ""
+msgstr "הדגשת מסגרת קוביות"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
-msgstr ""
+msgstr "לל×"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
-msgstr ""
+msgstr "×¢×œ×™× ×טומי×"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Water"
-msgstr ""
+msgstr "×ž×™× ××˜×•×ž×™× ×œ×ור"
#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
@@ -979,7 +975,7 @@ msgstr "חלקיקי×"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
-msgstr ""
+msgstr "מסך:"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
@@ -987,103 +983,103 @@ msgstr "הגדרות"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
-msgstr ""
+msgstr "שיידרי×"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (experimental)"
-msgstr ""
+msgstr "×©×™×™×“×¨×™× (נסיוני)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr ""
+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
msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
+msgstr "כדי ל×פשר ×©×™×™×“×¨×™× ×™×© להשתמש בדרייבר של OpenGL."
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
-msgstr ""
+msgstr "מיפוי גווני×"
#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold: (px)"
-msgstr ""
+msgstr "סף נגיעה: (px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
-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
msgid "Connection timed out."
-msgstr ""
+msgstr "זמן המתנה לחיבור ×זל."
#: src/client/client.cpp
msgid "Done!"
-msgstr ""
+msgstr "הסתיי×!"
#: src/client/client.cpp
msgid "Initializing nodes"
-msgstr ""
+msgstr "מ×תחל קוביות"
#: src/client/client.cpp
msgid "Initializing nodes..."
-msgstr ""
+msgstr "מ×תחל קוביות..."
#: src/client/client.cpp
msgid "Loading textures..."
-msgstr ""
+msgstr "טוען טקסטורות..."
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-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"
-msgstr ""
+msgstr "תפריט ר×שי"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
-msgstr ""
+msgstr "×œ× × ×‘×—×¨ ×¢×•×œ× ×•×œ× × ×ª× ×” כתובת. ×œ× ×¢×•×©×” כלו×."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr ""
+msgstr "×©× ×”×©×—×§×Ÿ ×רוך מידי."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
@@ -1091,11 +1087,11 @@ 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 "נתיב ×”×¢×•×œ× ×©× ×™×ª×Ÿ ×œ× ×§×™×™×: "
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string. Put either "no" or "yes"
@@ -1114,6 +1110,8 @@ msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
+"\n"
+"בדוק ×ת debug.txt ×œ×¤×¨×˜×™× × ×•×¡×¤×™×."
#: src/client/game.cpp
msgid "- Address: "
@@ -1129,7 +1127,7 @@ msgstr "- חבלה: "
#: src/client/game.cpp
msgid "- Mode: "
-msgstr ""
+msgstr "- מצב: "
#: src/client/game.cpp
msgid "- Port: "
@@ -1142,54 +1140,54 @@ msgstr "- ציבורי: "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
-msgstr ""
+msgstr "- קרב: "
#: src/client/game.cpp
msgid "- Server Name: "
-msgstr ""
+msgstr "- ×©× ×©×¨×ª: "
#: 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 "Camera update disabled"
-msgstr ""
+msgstr "עדכון מצלמה מבוטל"
#: src/client/game.cpp
msgid "Camera update enabled"
-msgstr ""
+msgstr "עדכון מצלמה מופעל"
#: src/client/game.cpp
msgid "Change Password"
-msgstr ""
+msgstr "שנה סיסמה"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
-msgstr ""
+msgstr "מצב קולנועי מבוטל"
#: src/client/game.cpp
msgid "Cinematic mode enabled"
-msgstr ""
+msgstr "מצב קולנועי מופעל"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
-msgstr ""
+msgstr "×¡×§×¨×™×¤×˜×™× ×‘×¦×“ לקוח מבוטלי×"
#: src/client/game.cpp
msgid "Connecting to server..."
-msgstr ""
+msgstr "מתחבר לשרת..."
#: src/client/game.cpp
msgid "Continue"
-msgstr ""
+msgstr "המשך"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1211,35 +1209,35 @@ msgstr ""
"- %s: כדי לזוז ×חורה\n"
"- %s: כדי לזוז שמ×לה\n"
"- %s: כדי לזוז ימינה\n"
-"- %s: כדי לקפוץ ×ו לטפס\n"
-"- %s: כדי להתכופף ×ו לרדת למטה\n"
+"- %s: כדי לקפוץ ×ו לטפס למעלה\n"
+"- %s: כדי לחפור ×ו לחבוט\n"
+"- %s: כדי להניח ×ו להשתמש\n"
+"- %s: כדי להתכופף ×ו לטפס למטה\n"
"- %s: כדי לזרוק פריט\n"
"- %s: כדי לפתוח ×ת תיק החפצי×\n"
"- עכבר: כדי להסתובב ×ו להסתכל\n"
-"- לחצן שמ×לי בעכבר: כדי לחצוב ×ו להרביץ\n"
-"- לחצן ימני בעכבר: כדי להניח ×ו להשתמש\n"
"- גלגלת העכבר: כדי לבחור פריט\n"
"- %s: כדי לפתוח ×ת הצ׳×ט\n"
#: src/client/game.cpp
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
msgid "Debug info, profiler graph, and wireframe hidden"
-msgstr ""
+msgstr "מידע דיב××’, גרף פרופיילר, ומצב שלד מוסתר"
#: src/client/game.cpp
msgid ""
@@ -1256,18 +1254,30 @@ msgid ""
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
msgstr ""
+"פקדי ברירת מחדל:\n"
+"×œ× × ×¨××” תפריט:\n"
+"- לחיצה בודדת: הפעלת כפתור\n"
+"- הקשה כפולה: ×ž×§×•× / שימוש\n"
+"- החלק ×צבע: הביט סביב\n"
+"תפריט / מל××™ גלוי:\n"
+"- לחיצה כפולה (בחוץ):\n"
+"--> סגור\n"
+"- מחסנית מגע, חריץ מגע:\n"
+"--> הזז מחסנית\n"
+"- ×’×¢ וגרור, הקש על ×”×צבע השנייה\n"
+"--> ×ž×§× ×¤×¨×™×˜ יחיד לחריץ\n"
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
-msgstr ""
+msgstr "ביטול טווח ר××™×” בלתי מוגבל"
#: src/client/game.cpp
msgid "Enabled unlimited viewing range"
-msgstr ""
+msgstr "הפעלת טווח ר××™×” בלתי מוגבל"
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr ""
+msgstr "יצי××” לתפריט"
#: src/client/game.cpp
msgid "Exit to OS"
@@ -1275,40 +1285,39 @@ msgstr "יצי××” למערכת ההפעלה"
#: src/client/game.cpp
msgid "Fast mode disabled"
-msgstr ""
+msgstr "מצב מהיר מבוטל"
#: src/client/game.cpp
msgid "Fast mode enabled"
-msgstr ""
+msgstr "מצב מהיר מופעל"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr ""
+msgstr "מצב מהיר מופעל (×©×™× ×œ×‘, ×ין הרש×ת 'fast')"
#: src/client/game.cpp
msgid "Fly mode disabled"
-msgstr ""
+msgstr "מצב תעופה מבוטל"
#: src/client/game.cpp
msgid "Fly mode enabled"
-msgstr "מצב התעופה הופעל"
+msgstr "מצב תעופה הופעל"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr ""
+msgstr "מצב תעופה מופעל (×©×™× ×œ×‘, ×ין הרש×ת 'fly')"
#: src/client/game.cpp
msgid "Fog disabled"
-msgstr ""
+msgstr "ערפל מבוטל"
#: src/client/game.cpp
-#, fuzzy
msgid "Fog enabled"
-msgstr "מופעל"
+msgstr "ערפל מופעל"
#: src/client/game.cpp
msgid "Game info:"
-msgstr ""
+msgstr "מידע על המשחק:"
#: src/client/game.cpp
msgid "Game paused"
@@ -1316,75 +1325,75 @@ 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"
-msgstr ""
+msgstr "קילובייט/שניה"
#: src/client/game.cpp
msgid "Media..."
-msgstr ""
+msgstr "מדיה..."
#: src/client/game.cpp
msgid "MiB/s"
-msgstr ""
+msgstr "מגהבייט/שניה"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr ""
+msgstr "מיפמ×פ כרגע מבוטל ×¢\"×™ המשחק ×ו המוד"
#: src/client/game.cpp
msgid "Noclip mode disabled"
-msgstr ""
+msgstr "מעבר דרך קירות מבוטל"
#: src/client/game.cpp
msgid "Noclip mode enabled"
-msgstr ""
+msgstr "מעבר דרך קירות מופעל"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr ""
+msgstr "מעבר דרך קירות מופעל (×©×™× ×œ×‘, ×ין הרש×ת 'noclip')"
#: src/client/game.cpp
msgid "Node definitions..."
-msgstr ""
+msgstr "הגדרות קוביה..."
#: src/client/game.cpp
msgid "Off"
-msgstr ""
+msgstr "מכובה"
#: src/client/game.cpp
msgid "On"
-msgstr ""
+msgstr "דולק"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
-msgstr ""
+msgstr "תנועה לכיוון מבט מכובה"
#: src/client/game.cpp
msgid "Pitch move mode enabled"
-msgstr ""
+msgstr "תנועה לכיוון מבט מופעל"
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr ""
+msgstr "גרף פרופיילר מוצג"
#: src/client/game.cpp
msgid "Remote server"
-msgstr ""
+msgstr "שרת מרוחק"
#: src/client/game.cpp
msgid "Resolving address..."
-msgstr ""
+msgstr "מפענח כתובת..."
#: src/client/game.cpp
msgid "Shutting down..."
-msgstr ""
+msgstr "מכבה..."
#: src/client/game.cpp
msgid "Singleplayer"
@@ -1392,149 +1401,148 @@ msgstr "שחקן יחיד"
#: src/client/game.cpp
msgid "Sound Volume"
-msgstr ""
+msgstr "×•×•×œ×™×•× ×©×ž×¢"
#: src/client/game.cpp
msgid "Sound muted"
-msgstr ""
+msgstr "שמע מושתק"
#: src/client/game.cpp
msgid "Sound system is disabled"
-msgstr ""
+msgstr "מערכת שמע ×œ× ×ž×•×¤×¢×œ×ª"
#: src/client/game.cpp
msgid "Sound system is not supported on this build"
-msgstr ""
+msgstr "מערכת שמע ×œ× × ×ª×ž×›×ª בבניה הנוכחית"
#: src/client/game.cpp
msgid "Sound unmuted"
-msgstr ""
+msgstr "מערכת שמע מופעלת"
#: 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"
-msgstr ""
+msgstr "מסגרת שלדית מוצגת"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr ""
+msgstr "×–×•× ×’×¨×’×¢ מבוטל על-ידי המשחק ×ו המוד"
#: src/client/game.cpp
msgid "ok"
-msgstr ""
+msgstr "×וקיי"
#: src/client/gameui.cpp
msgid "Chat hidden"
-msgstr ""
+msgstr "צ'×ט מוסתר"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr ""
+msgstr "צ'×ט מוצג"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr ""
+msgstr "מידע-על-מסך מוסתר"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr ""
+msgstr "מידע-על-מסך מוצג"
#: src/client/gameui.cpp
msgid "Profiler hidden"
-msgstr ""
+msgstr "פרופיילר מוסתר"
#: src/client/gameui.cpp
#, c-format
msgid "Profiler shown (page %d of %d)"
-msgstr ""
+msgstr "פרופיילר מוצג (עמוד %d מתוך %d)"
#: src/client/keycode.cpp
msgid "Apps"
-msgstr ""
+msgstr "×פליקציות"
#: src/client/keycode.cpp
msgid "Backspace"
-msgstr ""
+msgstr "Backspace"
#: src/client/keycode.cpp
msgid "Caps Lock"
-msgstr ""
+msgstr "Caps Lock"
#: src/client/keycode.cpp
msgid "Clear"
-msgstr ""
+msgstr "נקה"
#: src/client/keycode.cpp
msgid "Control"
-msgstr ""
+msgstr "קונטרול"
#: src/client/keycode.cpp
msgid "Down"
-msgstr ""
+msgstr "למטה"
#: src/client/keycode.cpp
msgid "End"
-msgstr ""
+msgstr "End"
#: src/client/keycode.cpp
msgid "Erase EOF"
-msgstr ""
+msgstr "מחק EOF"
#: src/client/keycode.cpp
msgid "Execute"
-msgstr ""
+msgstr "בצע"
#: src/client/keycode.cpp
msgid "Help"
-msgstr ""
+msgstr "עזרה"
#: src/client/keycode.cpp
msgid "Home"
-msgstr ""
+msgstr "Home"
#: src/client/keycode.cpp
-#, fuzzy
msgid "IME Accept"
-msgstr "קבל"
+msgstr "קבל IME"
#: src/client/keycode.cpp
msgid "IME Convert"
-msgstr ""
+msgstr "המרת IME"
#: src/client/keycode.cpp
msgid "IME Escape"
-msgstr ""
+msgstr "יצי×ת IME"
#: src/client/keycode.cpp
msgid "IME Mode Change"
-msgstr ""
+msgstr "שינוי מצב IME"
#: src/client/keycode.cpp
msgid "IME Nonconvert"
-msgstr ""
+msgstr "IME ×œ×œ× ×”×ž×¨×”"
#: src/client/keycode.cpp
msgid "Insert"
-msgstr ""
+msgstr "Insert"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Left"
@@ -1550,7 +1558,7 @@ msgstr "מקש Control השמ×לי"
#: src/client/keycode.cpp
msgid "Left Menu"
-msgstr ""
+msgstr "תפריט שמ×לי"
#: src/client/keycode.cpp
msgid "Left Shift"
@@ -1563,91 +1571,91 @@ msgstr "מקש Windows השמ×לי"
#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
-msgstr ""
+msgstr "תפריט"
#: src/client/keycode.cpp
msgid "Middle Button"
-msgstr ""
+msgstr "כפתור ×מצעי"
#: src/client/keycode.cpp
msgid "Num Lock"
-msgstr ""
+msgstr "נעילה נומרית"
#: src/client/keycode.cpp
msgid "Numpad *"
-msgstr ""
+msgstr "מקלדת נומרית *"
#: src/client/keycode.cpp
msgid "Numpad +"
-msgstr ""
+msgstr "מקלדת נומרית +"
#: src/client/keycode.cpp
msgid "Numpad -"
-msgstr ""
+msgstr "מקלדת נומרית -"
#: src/client/keycode.cpp
msgid "Numpad ."
-msgstr ""
+msgstr "מקלדת נומרית ."
#: src/client/keycode.cpp
msgid "Numpad /"
-msgstr ""
+msgstr "מקלדת נומרית /"
#: src/client/keycode.cpp
msgid "Numpad 0"
-msgstr ""
+msgstr "מקלדת נומרית 0"
#: src/client/keycode.cpp
msgid "Numpad 1"
-msgstr ""
+msgstr "מקלדת נומרית 1"
#: src/client/keycode.cpp
msgid "Numpad 2"
-msgstr ""
+msgstr "מקלדת נומרית 2"
#: src/client/keycode.cpp
msgid "Numpad 3"
-msgstr ""
+msgstr "מקלדת נומרית 3"
#: src/client/keycode.cpp
msgid "Numpad 4"
-msgstr ""
+msgstr "מקלדת נומרית 4"
#: src/client/keycode.cpp
msgid "Numpad 5"
-msgstr ""
+msgstr "מקלדת נומרית 5"
#: src/client/keycode.cpp
msgid "Numpad 6"
-msgstr ""
+msgstr "מקלדת נומרית 6"
#: src/client/keycode.cpp
msgid "Numpad 7"
-msgstr ""
+msgstr "מקלדת נומרית 7"
#: src/client/keycode.cpp
msgid "Numpad 8"
-msgstr ""
+msgstr "מקלדת נומרית 8"
#: src/client/keycode.cpp
msgid "Numpad 9"
-msgstr ""
+msgstr "מקלדת נומרית 9"
#: src/client/keycode.cpp
msgid "OEM Clear"
-msgstr ""
+msgstr "ניקוי OME"
#: 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"
@@ -1656,11 +1664,11 @@ msgstr "שחק"
#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
-msgstr ""
+msgstr "PrintScreen"
#: src/client/keycode.cpp
msgid "Return"
-msgstr ""
+msgstr "Enter"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Right"
@@ -1676,7 +1684,7 @@ msgstr "מקש Control הימני"
#: src/client/keycode.cpp
msgid "Right Menu"
-msgstr ""
+msgstr "תפריט ימני"
#: src/client/keycode.cpp
msgid "Right Shift"
@@ -1688,74 +1696,74 @@ msgstr "מקש 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 "שינה"
#: src/client/keycode.cpp
msgid "Snapshot"
-msgstr ""
+msgstr "×¦×™×œ×•× ×¨×’×¢×™"
#: src/client/keycode.cpp
msgid "Space"
-msgstr ""
+msgstr "רווח"
#: src/client/keycode.cpp
msgid "Tab"
-msgstr ""
+msgstr "Tab"
#: src/client/keycode.cpp
msgid "Up"
-msgstr ""
+msgstr "למעלה"
#: src/client/keycode.cpp
msgid "X Button 1"
-msgstr ""
+msgstr "X כפתור 1"
#: src/client/keycode.cpp
msgid "X Button 2"
-msgstr ""
+msgstr "X כפתור 2"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Zoom"
-msgstr ""
+msgstr "זו×"
#: src/client/minimap.cpp
msgid "Minimap hidden"
-msgstr ""
+msgstr "מפה קטנה מוסתרת"
#: src/client/minimap.cpp
#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr ""
+msgstr "מפה קטנה במצב ר×דר, ×–×•× x %d"
#: src/client/minimap.cpp
#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr ""
+msgstr "מפה קטנה במצב שטח, ×–×•× x %d"
#: src/client/minimap.cpp
msgid "Minimap in texture mode"
-msgstr ""
+msgstr "מפה קטנה במצב טקסטורה"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
-msgstr ""
+msgstr "סיסמ×ות ×œ× ×ª×•×מות!"
#: src/gui/guiConfirmRegistration.cpp
msgid "Register and Join"
-msgstr ""
+msgstr "×”×¨×©× ×•×”×¦×˜×¨×£"
#: src/gui/guiConfirmRegistration.cpp
#, c-format
@@ -1766,18 +1774,22 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
+"×תה עומד להצטרף לשרת ×–×” ×¢× ×”×©× \"%s\" ×‘×¤×¢× ×”×¨×שונה.\n"
+"×× ×ª×ž×©×™×š, ייווצר חשבון חדש ב×מצעות ×ישוריך בשרת ×–×”.\n"
+"×× × ×”×§×œ×“ מחדש ×ת הסיסמה שלך ולחץ על '×”×™×¨×©× ×•×”×¦×˜×¨×£' כדי ל×שר ×ת יצירת החשבון, "
+"×ו לחץ על 'ביטול' כדי לבטל."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
-msgstr ""
+msgstr "להמשיך"
#: src/gui/guiKeyChangeMenu.cpp
msgid "\"Special\" = climb down"
-msgstr ""
+msgstr "\"מיוחד\" = טפס למטה"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
-msgstr ""
+msgstr "קדימה ×וטומטי"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
@@ -1789,27 +1801,27 @@ msgstr "×חורה"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
-msgstr ""
+msgstr "שנה מצלמה"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Chat"
-msgstr ""
+msgstr "צ'×ט"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Command"
-msgstr ""
+msgstr "פקודה"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Console"
-msgstr ""
+msgstr "קונסולה"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. range"
-msgstr ""
+msgstr "הקטן טווח"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
-msgstr ""
+msgstr "הנמך ווליו×"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
@@ -1817,7 +1829,7 @@ msgstr "לחיצה כפולה על \"קפיצה\" כדי לכבות ×ו להד×
#: src/gui/guiKeyChangeMenu.cpp
msgid "Drop"
-msgstr ""
+msgstr "הפל"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Forward"
@@ -1825,15 +1837,15 @@ msgstr "קדימה"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. range"
-msgstr ""
+msgstr "הגדל טווח"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. volume"
-msgstr ""
+msgstr "הגבר ווליו×"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inventory"
-msgstr ""
+msgstr "תיק חפצי×"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Jump"
@@ -1841,113 +1853,113 @@ msgstr "קפיצה"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Key already in use"
-msgstr ""
+msgstr "מקש כבר בשימוש"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
+msgstr "קישור ×ž×§×©×™× (×× ×”×ª×¤×¨×™×˜ מתקלקל, הסר ×“×‘×¨×™× ×žminetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
-msgstr ""
+msgstr "פקודה מקומית"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Mute"
-msgstr ""
+msgstr "השתק"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Next item"
-msgstr ""
+msgstr "הפריט הב×"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Prev. item"
-msgstr ""
+msgstr "הפריט הקוד×"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Range select"
-msgstr ""
+msgstr "בחר טווח"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Screenshot"
-msgstr ""
+msgstr "×¦×™×œ×•× ×ž×¡×š"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Sneak"
-msgstr ""
+msgstr "התכופף"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Special"
-msgstr ""
+msgstr "מיוחד"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
-msgstr ""
+msgstr "מתג מידע על מסך"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle chat log"
-msgstr ""
+msgstr "מתג צ×'ט לוג"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
-msgstr ""
+msgstr "מתג מצב מהיר"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fly"
-msgstr ""
+msgstr "מתג תעופה"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fog"
-msgstr ""
+msgstr "מתג ערפל"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle minimap"
-msgstr ""
+msgstr "מתג מפה קטנה"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
-msgstr ""
+msgstr "מתג מעבר דרך קירות"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle pitchmove"
-msgstr ""
+msgstr "מתג תנועה לכיוון מבט"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
-msgstr ""
+msgstr "לחץ מקש"
#: src/gui/guiPasswordChange.cpp
msgid "Change"
-msgstr ""
+msgstr "שנה"
#: src/gui/guiPasswordChange.cpp
msgid "Confirm Password"
-msgstr ""
+msgstr "×שר סיסמה"
#: src/gui/guiPasswordChange.cpp
msgid "New Password"
-msgstr ""
+msgstr "סיסמה חדשה"
#: src/gui/guiPasswordChange.cpp
msgid "Old Password"
-msgstr ""
+msgstr "סיסמה ישנה"
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
-msgstr ""
+msgstr "יצי××”"
#: src/gui/guiVolumeChange.cpp
msgid "Muted"
-msgstr ""
+msgstr "מושתק"
#: src/gui/guiVolumeChange.cpp
msgid "Sound Volume: "
-msgstr ""
+msgstr "עוצמת שמע: "
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
-msgstr ""
+msgstr "הכנס "
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
@@ -1961,6 +1973,8 @@ msgid ""
"(Android) Fixes the position of virtual joystick.\n"
"If disabled, virtual joystick will center to first-touch's position."
msgstr ""
+"(Android) מתקן ×ת ×”×ž×™×§×•× ×©×œ ×”×’'ויסטיק הווירטו×לי.\n"
+"×× ×ž×•×©×‘×ª, ×”×’'ויסטיק הווירטו×לי יעמוד ×‘×ž×™×§×•× ×”×ž×’×¢ הר×שון."
#: src/settings_translation_file.cpp
msgid ""
@@ -1968,6 +1982,9 @@ msgid ""
"If enabled, virtual joystick will also tap \"aux\" button when out of main "
"circle."
msgstr ""
+"(Android) השתמש בג'ויסטיק וירטו×לי כדי להפעיל ×ת כפתור \"aux\".\n"
+"×× ×”×•× ×ž×•×¤×¢×œ, ×”×’'ויסטיק הווירטו×לי ילחץ ×’× ×¢×œ כפתור \"aux\" ×›×©×”×•× ×ž×—×•×¥ למעגל "
+"הר×שי."
#: src/settings_translation_file.cpp
msgid ""
@@ -1980,6 +1997,14 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
+"(X, Y, Z) היסט של פרקטל ממרכז עולמי ביחידות 'סק×לה'.\n"
+"ניתן להשתמש בה כדי להעביר נקודה רצויה ל (0, 0) כדי ליצור\n"
+"נקודת הופעה מת×ימה, ×ו כדי ל×פשר 'התקרבות' לנקודה רצויה\n"
+"על ידי הגדלת 'סק×לה'.\n"
+"ברירת המחדל מכוונת לנקודת הופעה מת×ימה למנדלברוט\n"
+"קבוצות ×¢× ×¤×¨×ž×˜×¨×™ ברירת מחדל, יתכן שיהיה צורך לשנות ×–×ת\n"
+"מצבי×.\n"
+"טווח בערך -2 עד 2. הכפל ב×מצעות 'קנה מידה' עבור קיזוז בצמתי×."
#: src/settings_translation_file.cpp
msgid ""
@@ -1991,56 +2016,65 @@ 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 "רעש דו-ממדי השולט על ×¦×•×¨×ª× / גודל ×”×”×¨×™× ×”×ž×—×•×¨×¦×™×."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr ""
+msgstr "רעש דו-ממדי השולט על ×¦×•×¨×ª× / גודל הגבעות המתונות."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
-msgstr ""
+msgstr "רעש דו-ממדי השולט על ×¦×•×¨×ª× / גודל ×”×”×¨×™× ×”× ×™×©××™×."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
-msgstr ""
+msgstr "רעש דו-ממדי השולט על תדירות/ גודל רכסי ההרי×."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr ""
+msgstr "רעש דו-ממדי השולט על תדירות/גודל הגבעות המתונות."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
-msgstr ""
+msgstr "רעש דו-ממדי השולט על תדירות/גודל רכסי ההרי×."
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
-msgstr ""
+msgstr "רעש דו-ממדי שמ×תר ×ת עמקי הנהרות ותעלותיה×."
#: src/settings_translation_file.cpp
msgid "3D clouds"
-msgstr ""
+msgstr "×¢× × ×™× ×ª×œ×ª מימדיי×"
#: src/settings_translation_file.cpp
msgid "3D mode"
-msgstr ""
+msgstr "מצב תלת מימדי"
#: src/settings_translation_file.cpp
msgid "3D mode parallax strength"
-msgstr ""
+msgstr "חוזק פרלקסה במצב תלת ממדי"
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
-msgstr ""
+msgstr "רעשי תלת מימד ×”×ž×’×“×™×¨×™× ×ž×¢×¨×•×ª ענק."
#: src/settings_translation_file.cpp
msgid ""
"3D noise defining mountain structure and height.\n"
"Also defines structure of floatland mountain terrain."
msgstr ""
+"רעש תלת ממדי המגדיר ×ת מבנה ×”×”×¨×™× ×•×’×•×‘×”×.\n"
+"מגדיר ×’× ×ž×‘× ×” שטח ×”×¨×™× ×¦×¤×™×."
#: src/settings_translation_file.cpp
msgid ""
@@ -2049,22 +2083,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 ""
+"רעש תלת ממדי מגדיר מבנה של שטחי צף.\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 "מבנה מגדיר רעש תלת ממדי של קירות קניון הנהר."
#: src/settings_translation_file.cpp
msgid "3D noise defining terrain."
-msgstr ""
+msgstr "רעש תלת ממדי המגדיר שטח."
#: src/settings_translation_file.cpp
msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
-msgstr ""
+msgstr "רעש תלת ממדי ×œ×”×¨×™× ×ª×œ×•×™×™×, ×¦×•×§×™× ×•×›×•'בדרך כלל ורי×ציות קטנות."
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr ""
+msgstr "רעש תלת ממדי הקובע ×ת מספר ×”×¦×™× ×•×§×™× ×‘× ×ª×— מפה."
#: src/settings_translation_file.cpp
msgid ""
@@ -2079,56 +2118,68 @@ msgid ""
"- pageflip: quadbuffer based 3d.\n"
"Note that the interlaced mode requires shaders to be enabled."
msgstr ""
+"תמיכה בתלת מימד.\n"
+"נתמך כרגע:\n"
+"- לל×: ×ין פלט תלת-ממדי.\n"
+"- ×× ×גליף: צבע צי×ן / מגנטה 3d.\n"
+"- interlaced: תמיכה במסך קיטוב מבוסס מוזר / שווה\n"
+"- topbottom: מסך מפוצל למעלה / למטה.\n"
+"- צדדי: פיצול מסך זה לצד זה.\n"
+"- תצוגת רוחב: 3D ×¢× ×¢×™× ×™×™× ×¦×•×œ×‘×•×ª\n"
+"- pageflip: quadbuffer מבוסס 3d.\n"
+"×©×™× ×œ×‘ שמצב interlaced מחייב הפעלת shaders."
#: 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 ""
+"זרע מפה שנבחר עבור מפה חדשה, הש×ר ריק ל×קר××™.\n"
+"יבוטל בעת יצירת ×¢×•×œ× ×—×“×© בתפריט הר×שי."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
-msgstr ""
+msgstr "הודעה שתוצג בפני כל הלקוחות ×›×שר השרת קורס."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
-msgstr ""
+msgstr "הודעה שתוצג בפני כל הלקוחות ×›×שר השרת יכבה."
#: src/settings_translation_file.cpp
msgid "ABM interval"
-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 ""
@@ -2136,16 +2187,19 @@ msgid ""
"Leave this blank to start a local server.\n"
"Note that the address field in the main menu overrides this setting."
msgstr ""
+"כתובת להתחברות ×ליה.\n"
+"הש×ר ×ת ×–×” ריק כדי להפעיל שרת מקומי.\n"
+"×©×™× ×œ×‘ ששדה הכתובת בתפריט הר×שי עוקף הגדרה זו."
#: src/settings_translation_file.cpp
msgid "Adds particles when digging a node."
-msgstr ""
+msgstr "הוסף ×—×œ×§×™×§×™× ×›×©×—×•×¤×¨×™× ×‘×§×•×‘×™×”."
#: src/settings_translation_file.cpp
msgid ""
"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
"screens."
-msgstr ""
+msgstr "הת×× ×ת תצורת dpi למסך שלך (×œ× X11 / Android בלבד) למשל. למסכי 4k."
#: src/settings_translation_file.cpp
#, c-format
@@ -2156,10 +2210,15 @@ msgid ""
"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
"to be sure) creates a solid floatland layer."
msgstr ""
+"מכוון ×ת הצפיפות של שכבת ×דמות צותף.\n"
+"הגדל ×ת הערך כדי להגדיל ×ת הצפיפות. יכול להיות חיובי ×ו שלילי.\n"
+"ערך = 0.0: 50% מהנפח ×”×•× ×©×˜×— צף.\n"
+"ערך = 2.0 (יכול להיות גבוה יותר בהת×× ×œ- 'mgv7_np_floatland', בדוק תמיד\n"
+"כדי להיות בטוח) יוצר שכבת צף מוצקה."
#: src/settings_translation_file.cpp
msgid "Advanced"
-msgstr ""
+msgstr "מתקד×"
#: src/settings_translation_file.cpp
msgid ""
@@ -2169,60 +2228,67 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
+"משנה ×ת עקומת ×”×ור על ידי החלת 'תיקון גמ×' עליה.\n"
+"×¢×¨×›×™× ×’×‘×•×”×™× ×”×•×¤×›×™× ×ת רמות ×”×ור ×”×מצעיות והתחתונות לבהירות יותר.\n"
+"הערך '1.0' מש×יר ×ת עקומת ×”×ור ×œ×œ× ×©×™× ×•×™.\n"
+"יש לכך השפעה משמעותית רק על ×ור ×™×•× ×•×ž×œ×כותי\n"
+"×–×” משפיע מעט מ×וד על ×ור הלילה הטבעי."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
-msgstr ""
+msgstr "תמיד לעוף ומהר"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
-msgstr ""
+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"
-msgstr ""
+msgstr "פילטר ×נטיסטרופי"
#: src/settings_translation_file.cpp
msgid "Announce server"
-msgstr ""
+msgstr "הכרזת שרת"
#: src/settings_translation_file.cpp
msgid "Announce to this serverlist."
-msgstr ""
+msgstr "הכרז לרשימת השרתי×."
#: src/settings_translation_file.cpp
msgid "Append item name"
-msgstr ""
+msgstr "הוסף ×©× ×¤×¨×™×˜"
#: src/settings_translation_file.cpp
msgid "Append item name to tooltip."
-msgstr ""
+msgstr "הוסף ×ת ×©× ×”×¤×¨×™×˜ לטיפ הכלי×."
#: src/settings_translation_file.cpp
msgid "Apple trees noise"
-msgstr ""
+msgstr "רעש עצי תפוחי×"
#: src/settings_translation_file.cpp
msgid "Arm inertia"
-msgstr ""
+msgstr "×ינרציה בזרוע"
#: src/settings_translation_file.cpp
msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
msgstr ""
+"×ינרציה בזרוע, נותנת תנועה מצי×ותית יותר של\n"
+"הזרוע כשהמצלמה נעה."
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
-msgstr ""
+msgstr "ש×ל ×”×× ×œ×”×ª×—×‘×¨ מחדש ל×חר קריסה"
#: src/settings_translation_file.cpp
msgid ""
@@ -2238,26 +2304,34 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
+"במרחק ×–×” השרת יעשה ×ופטימיזציה ל×ילו ×‘×œ×•×§×™× × ×©×œ×—×™×\n"
+"ללקוחות.\n"
+"×¢×¨×›×™× ×§×˜× ×™× ×¢×©×•×™×™× ×œ×©×¤×¨ ×‘×™×¦×•×¢×™× ×¨×‘×•×ª, על חשבון גלוי\n"
+"עיבוד תקלות (חלק ×ž×”×‘×œ×•×§×™× ×œ× ×™×•×¢×‘×¨×• מתחת ×œ×ž×™× ×•×‘×ž×¢×¨×•×ª,\n"
+"כמו ×’× ×œ×¤×¢×ž×™× ×‘×™×‘×©×”).\n"
+"הגדרת ערך ×–×” יותר מ- max_block_send_distance מבטלת ×–×ת\n"
+"×ופטימיזציה.\n"
+"מצוין במפה (16 קוביות)."
#: src/settings_translation_file.cpp
msgid "Automatic forward key"
-msgstr ""
+msgstr "מקש התקדמות ×וטומטית"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
-msgstr ""
+msgstr "קפיצה ×וטומטית של ×ž×›×©×•×œ×™× ×‘×§×•×‘×™×” יחידה."
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
-msgstr ""
+msgstr "דווח ×וטומטית לרשימת השרתי×."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
-msgstr ""
+msgstr "שמור ×וטומטית גודל מסך"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
-msgstr ""
+msgstr "מצב סק×לה ×וטומטית (Autoscale)"
#: src/settings_translation_file.cpp
msgid "Backward key"
@@ -2265,75 +2339,75 @@ msgstr "מקש התזוזה ×חורה"
#: src/settings_translation_file.cpp
msgid "Base ground level"
-msgstr ""
+msgstr "מפלס בסיס ×”×דמה"
#: src/settings_translation_file.cpp
msgid "Base terrain height."
-msgstr ""
+msgstr "גובה השטח."
#: src/settings_translation_file.cpp
msgid "Basic"
-msgstr ""
+msgstr "בסיסי"
#: src/settings_translation_file.cpp
msgid "Basic privileges"
-msgstr ""
+msgstr "הרש×ות בסיסיות"
#: src/settings_translation_file.cpp
msgid "Beach noise"
-msgstr ""
+msgstr "רעש חופי×"
#: src/settings_translation_file.cpp
msgid "Beach noise threshold"
-msgstr ""
+msgstr "סף רעש חופי×"
#: src/settings_translation_file.cpp
msgid "Bilinear filtering"
-msgstr ""
+msgstr "סינון בילינ×רי"
#: src/settings_translation_file.cpp
msgid "Bind address"
-msgstr ""
+msgstr "הצמד כתובת"
#: src/settings_translation_file.cpp
msgid "Biome API temperature and humidity noise parameters"
-msgstr ""
+msgstr "פרמטרי רעש טמפרטורה ולחות של Biome API"
#: src/settings_translation_file.cpp
msgid "Biome noise"
-msgstr ""
+msgstr "רעש Biome"
#: src/settings_translation_file.cpp
msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
+msgstr "×‘×™×˜×™× ×œ×¤×™×§×¡×œ (עומק צבע) במצב מסך מל×."
#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
-msgstr ""
+msgstr "×ופטימיזצית שליחת בלוק"
#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
-msgstr ""
+msgstr "נתיב גופן עבה/מוטה"
#: src/settings_translation_file.cpp
msgid "Bold and italic monospace font path"
-msgstr ""
+msgstr "נתיב גופן ×¢× ×ž×¨×•×•×— ×חיד עבה/מוטה"
#: src/settings_translation_file.cpp
msgid "Bold font path"
-msgstr ""
+msgstr "נתיב גופן עבה"
#: src/settings_translation_file.cpp
msgid "Bold monospace font path"
-msgstr ""
+msgstr "נתיב גופן מרווח ×חיד"
#: src/settings_translation_file.cpp
msgid "Build inside player"
-msgstr ""
+msgstr "בנה בתוך שחקן"
#: src/settings_translation_file.cpp
msgid "Builtin"
-msgstr ""
+msgstr "בילד×ין"
#: src/settings_translation_file.cpp
msgid ""
@@ -2342,120 +2416,126 @@ msgid ""
"Increasing can reduce artifacting on weaker GPUs.\n"
"0.1 = Default, 0.25 = Good value for weaker tablets."
msgstr ""
+"מרחק מצלמה 'קרוב לקיר' בקוביות, בין 0 ל -0.25\n"
+"עובד רק בפלטפורמות GLES. רוב ×”×ž×©×ª×ž×©×™× ×œ× ×™×¦×˜×¨×›×• לשנות ×–×ת.\n"
+"הגדלה יכולה להפחית ×—×¤×¦×™× ×¢×œ גרפי GPU ×—×œ×©×™× ×™×•×ª×¨.\n"
+"0.1 = ברירת מחדל, 0.25 = ערך טוב לט××‘×œ×˜×™× ×—×œ×©×™× ×™×•×ª×¨."
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
-msgstr ""
+msgstr "החלקת מצלמה"
#: src/settings_translation_file.cpp
msgid "Camera smoothing in cinematic mode"
-msgstr ""
+msgstr "החלקת מצלמה ומצב קולנועי"
#: src/settings_translation_file.cpp
msgid "Camera update toggle key"
-msgstr ""
+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 font size"
-msgstr ""
+msgstr "גודל גופן צ'×ט"
#: src/settings_translation_file.cpp
msgid "Chat key"
-msgstr ""
+msgstr "מקש צ'×ט"
#: src/settings_translation_file.cpp
msgid "Chat log level"
-msgstr ""
+msgstr "רמת לוג צ'×ט"
#: src/settings_translation_file.cpp
msgid "Chat message count limit"
-msgstr ""
+msgstr "הגבלת מספר הודעות צ'×ט"
#: src/settings_translation_file.cpp
msgid "Chat message format"
-msgstr ""
+msgstr "פורמט הודעות צ'×ט"
#: src/settings_translation_file.cpp
msgid "Chat message kick threshold"
-msgstr ""
+msgstr "סף בעיטה להודעות צ'×ט"
#: src/settings_translation_file.cpp
msgid "Chat message max length"
-msgstr ""
+msgstr "×ורך הודעת צ'×ט מקסימלי"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
-msgstr ""
+msgstr "מתג הפעלת צ'×ט"
#: src/settings_translation_file.cpp
msgid "Chatcommands"
-msgstr ""
+msgstr "פקודות צ'×ט"
#: src/settings_translation_file.cpp
msgid "Chunk size"
-msgstr ""
+msgstr "גודל חתיכה"
#: src/settings_translation_file.cpp
msgid "Cinematic mode"
-msgstr ""
+msgstr "מצב קולנועי"
#: src/settings_translation_file.cpp
msgid "Cinematic mode key"
-msgstr ""
+msgstr "מקש מצב קולנועי"
#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
-msgstr ""
+msgstr "טקסטורות נקיות ושקופות"
#: src/settings_translation_file.cpp
msgid "Client"
@@ -2463,7 +2543,7 @@ msgstr "לקוח"
#: src/settings_translation_file.cpp
msgid "Client and Server"
-msgstr ""
+msgstr "שרת ולקוח"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2867,7 +2947,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4922,7 +5002,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Mipmapping"
-msgstr ""
+msgstr "מיפמ×פינג"
#: src/settings_translation_file.cpp
msgid "Mod channels"
@@ -5576,6 +5656,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6124,37 +6208,39 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "View distance in nodes."
-msgstr ""
+msgstr "טווח ר××™×” בקוביות."
#: src/settings_translation_file.cpp
msgid "View range decrease key"
-msgstr ""
+msgstr "מקש הקטנת טווח ר××™×”"
#: src/settings_translation_file.cpp
msgid "View range increase key"
-msgstr ""
+msgstr "מקש הגדלת טוחח ר××™×”"
#: src/settings_translation_file.cpp
msgid "View zoom key"
-msgstr ""
+msgstr "מקש ×–×•× (משקפת)"
#: src/settings_translation_file.cpp
msgid "Viewing range"
-msgstr ""
+msgstr "טווח ר××™×”"
#: src/settings_translation_file.cpp
msgid "Virtual joystick triggers aux button"
-msgstr ""
+msgstr "מקש הפעלת ×’'ויסטיק וירטו×לי"
#: src/settings_translation_file.cpp
msgid "Volume"
-msgstr ""
+msgstr "ווליו×"
#: src/settings_translation_file.cpp
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
+"עוצמת הקול של כל הצלילי×.\n"
+"דורש הפעלת מערכת הקול."
#: src/settings_translation_file.cpp
msgid ""
@@ -6171,19 +6257,19 @@ 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"
-msgstr ""
+msgstr "מפלס המי×"
#: src/settings_translation_file.cpp
msgid "Water surface level of the world."
-msgstr ""
+msgstr "מפלס פני ×”×ž×™× ×‘×¢×•×œ×."
#: src/settings_translation_file.cpp
msgid "Waving Nodes"
@@ -6203,15 +6289,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Waving liquids wave speed"
-msgstr ""
+msgstr "מהירות גל של × ×•×–×œ×™× ×¢× ×’×œ×™×"
#: src/settings_translation_file.cpp
msgid "Waving liquids wavelength"
-msgstr ""
+msgstr "×ורך גל של × ×•×–×œ×™× ×¢× ×’×œ×™×"
#: src/settings_translation_file.cpp
msgid "Waving plants"
-msgstr ""
+msgstr "×¦×ž×—×™× ×ž×ª× ×•×¤×¤×™×"
#: src/settings_translation_file.cpp
msgid ""
@@ -6249,6 +6335,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
@@ -6287,7 +6379,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Width component of the initial window size."
-msgstr ""
+msgstr "רכיב רוחב של גודל החלון הר×שוני."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -6323,25 +6415,25 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
-msgstr ""
+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 ""
@@ -6391,15 +6483,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
-msgstr ""
+msgstr "(cURL) זמן להורדה נגמר"
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
-msgstr ""
+msgstr "(cURL) מגבלה לפעולות במקביל"
#: src/settings_translation_file.cpp
msgid "cURL timeout"
-msgstr ""
+msgstr "(cURL) מגבלת זמן"
#~ msgid "Configure"
#~ msgstr "קביעת תצורה"
diff --git a/po/hi/minetest.po b/po/hi/minetest.po
index b0eccb70d..2c88b00f0 100644
--- a/po/hi/minetest.po
+++ b/po/hi/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-10-06 14:26+0000\n"
"Last-Translator: Eyekay49 <satvikpatwardhan@gmail.com>\n"
"Language-Team: Hindi <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -706,6 +706,11 @@ msgid "Loading..."
msgstr "लोड हो रहा है ..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "कà¥à¤²à¤¾à¤‡à¤‚ट की तरफ से सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ लगाना मना है"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "सारà¥à¤µà¤œà¤¨à¤¿à¤• सरà¥à¤µà¤° शृंखला (सरà¥à¤µà¤° लिसà¥à¤Ÿ) को 'हां' करें और इंटरनेट कनेकà¥à¤¶à¤¨ जांचें।"
@@ -2880,7 +2885,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5595,6 +5600,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6270,6 +6279,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/hu/minetest.po b/po/hu/minetest.po
index 0f14b57da..090d92454 100644
--- a/po/hu/minetest.po
+++ b/po/hu/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Hungarian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-12-05 15:29+0000\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-13 08:50+0000\n"
"Last-Translator: Ãcs Zoltán <acszoltan111@gmail.com>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/minetest/"
"minetest/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.4-dev\n"
+"X-Generator: Weblate 4.5-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -168,6 +168,8 @@ msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 letöltése,\n"
+"$2 sorba állítva"
#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
@@ -256,7 +258,7 @@ msgstr "Hang némítása"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Felülírás"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
@@ -264,7 +266,7 @@ msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Sorbaállítva"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -280,11 +282,11 @@ msgstr "Frissítés"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Összes frissítése [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "További információ megnyitása a böngészőben"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -711,6 +713,11 @@ msgid "Loading..."
msgstr "Betöltés…"
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Kliens oldali szkriptek letiltva"
+
+#: 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 "
@@ -778,6 +785,9 @@ msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"Megnyitja a fájlkezelőben / intézőben azt a könyvtárat, amely a felhasználó "
+"világait,\n"
+"játékait, modjait, és textúráit tartalmazza."
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
@@ -817,7 +827,7 @@ msgstr "Játékok telepítése ContentDB-ről"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "Név"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -2969,7 +2979,8 @@ msgid "Enable console window"
msgstr "Konzolablak engedélyezése"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Kreatív mód engedélyezése az újonnan létrehozott térképekhez."
#: src/settings_translation_file.cpp
@@ -6168,6 +6179,11 @@ msgstr ""
"A változtatás után a játék újraindítása szükséges."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Félkövér betűtípus alapértelmezetten"
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "Leállítási üzenet"
@@ -6879,6 +6895,12 @@ msgstr ""
"támogatás."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/id/minetest.po b/po/id/minetest.po
index 0343dc677..5f62541b5 100644
--- a/po/id/minetest.po
+++ b/po/id/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Indonesian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2021-01-08 17:32+0000\n"
-"Last-Translator: Ferdinand Tampubolon <dnandz@gmail.com>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-23 15:50+0000\n"
+"Last-Translator: Reza Almanda <rezaalmanda27@gmail.com>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/minetest/"
"minetest/id/>\n"
"Language: id\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.1-dev\n"
+"X-Generator: Weblate 4.5\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -153,52 +153,51 @@ msgstr "dinyalakan"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" telah ada. Apakah Anda mau menimpanya?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Dependensi $1 dan $2 akan dipasang."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 oleh $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 sedang diunduh,\n"
+"$2 dalam antrean"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Mengunduh..."
+msgstr "$1 mengunduh..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 membutuhkan dependensi yang tidak bisa ditemukan."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 akan dipasang dan $2 dependensi akan dilewati."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Semua paket"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Tombol telah terpakai"
+msgstr "Telah terpasang"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Kembali ke menu utama"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Host Permainan"
+msgstr "Permainan Dasar:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -222,14 +221,12 @@ msgid "Install"
msgstr "Pasang"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Pasang"
+msgstr "Pasang $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Dependensi opsional:"
+msgstr "Pasang dependensi yang belum ada"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -245,26 +242,24 @@ msgid "No results"
msgstr "Tiada hasil"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Perbarui"
+msgstr "Tiada pembaruan"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Not found"
-msgstr "Bisukan suara"
+msgstr "Tidak ditemukan"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Timpa"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Harap pastikan bahwa permainan dasar telah sesuai."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Diantrekan"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -280,11 +275,11 @@ msgstr "Perbarui"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Perbarui Semua [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Lihat informasi lebih lanjut di peramban web"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -348,7 +343,7 @@ msgstr "Tanah mengambang di langit"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-msgstr "Floatland (uji coba)"
+msgstr "Floatland (tahap percobaan)"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
@@ -707,6 +702,11 @@ msgid "Loading..."
msgstr "Memuat..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Skrip sisi klien dimatikan"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Coba nyalakan ulang daftar server publik dan periksa sambungan internet Anda."
@@ -764,7 +764,6 @@ msgid "Credits"
msgstr "Penghargaan"
#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
msgid "Open User Data Directory"
msgstr "Pilih direktori"
@@ -773,6 +772,8 @@ msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"Membuka direktori yang berisi dunia, permainan, mod, dan paket tekstur\n"
+"dari pengguna dalam pengelola/penjelajah berkas."
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
@@ -812,7 +813,7 @@ msgstr "Pasang permainan dari ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "Nama"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -823,9 +824,8 @@ msgid "No world created or selected!"
msgstr "Tiada dunia yang dibuat atau dipilih!"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Password"
-msgstr "Kata sandi baru"
+msgstr "Kata sandi"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -836,9 +836,8 @@ msgid "Port"
msgstr "Porta"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Pilih Dunia:"
+msgstr "Pilih Mod"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -990,9 +989,8 @@ msgid "Shaders"
msgstr "Shader"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Floatland (uji coba)"
+msgstr "Shader (tahap percobaan)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1016,7 +1014,7 @@ msgstr "Untuk menggunakan shader, pengandar OpenGL harus digunakan."
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
-msgstr "Tone Mapping"
+msgstr "Pemetaan Nada"
#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold: (px)"
@@ -1192,7 +1190,7 @@ msgid "Continue"
msgstr "Lanjutkan"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1215,12 +1213,12 @@ msgstr ""
"- %s: geser kiri\n"
"- %s: geser kanan\n"
"- %s: lompat/panjat\n"
+"- %s: gali/pukul\n"
+"- %s: taruh/pakai\n"
"- %s: menyelinap/turun\n"
"- %s: jatuhkan barang\n"
"- %s: inventaris\n"
"- Tetikus: belok/lihat\n"
-"- Klik kiri: gali/pukul\n"
-"- Klik kanan: taruh/pakai\n"
"- Roda tetikus: pilih barang\n"
"- %s: obrolan\n"
@@ -1749,19 +1747,18 @@ msgid "Minimap hidden"
msgstr "Peta mini disembunyikan"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Peta mini mode radar, perbesaran 1x"
+msgstr "Peta mini mode radar, perbesaran %dx"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Peta mini mode permukaan, perbesaran 1x"
+msgstr "Peta mini mode permukaan, perbesaran %dx"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Ukuran tekstur minimum"
+msgstr "Peta mini mode tekstur"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -2161,7 +2158,7 @@ msgstr "Selang waktu ABM"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "Anggaran waktu ABM"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
@@ -2224,7 +2221,7 @@ msgid ""
msgstr ""
"Sesuaikan kepadatan lapisan floatland.\n"
"Tambahkan nilai untuk menambah kepadatan. Dapat positif atau negatif.\n"
-"Nilai = 0.0: 50% volume adalah floatland.\n"
+"Nilai = 0.0: 50% o volume adalah floatland.\n"
"Nilai = 2.0 (dapat lebih tinggi tergantung 'mgv7_np_floatland', selalu uji\n"
"terlebih dahulu) membuat lapisan floatland padat (penuh)."
@@ -2618,8 +2615,8 @@ msgid ""
"allow them to upload and download data to/from the internet."
msgstr ""
"Daftar yang dipisahkan dengan koma dari mod yang dibolehkan untuk\n"
-"mengakses HTTP API, membolehkan mereka untuk mengunggah dan\n"
-"mengunduh data ke/dari internet."
+"mengakses HTTP API, membolehkan mereka untuk mengunggah dan mengunduh data "
+"ke/dari internet."
#: src/settings_translation_file.cpp
msgid ""
@@ -2627,7 +2624,7 @@ msgid ""
"functions even when mod security is on (via request_insecure_environment())."
msgstr ""
"Daftar yang dengan dipisahkan koma dari mod terpercaya yang diperbolehkan\n"
-"untuk mengakses fungsi yang tidak aman bahkan ketika mod security aktif\n"
+"untuk mengakses fungsi yang tidak aman bahkan ketika mod security aktif "
"(melalui request_insecure_environment())."
#: src/settings_translation_file.cpp
@@ -2664,7 +2661,7 @@ msgstr "Daftar Hitam Flag ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "Jumlah Maks Pengunduhan ContentDB Bersamaan"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2732,11 +2729,12 @@ msgid "Crosshair alpha"
msgstr "Keburaman crosshair"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"Also controls the object crosshair color"
-msgstr "Keburaman crosshair (keopakan, dari 0 sampai 255)."
+msgstr ""
+"Keburaman crosshair (keopakan, dari 0 sampai 255).\n"
+"Juga mengatur warna crosshair objek"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2747,6 +2745,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Warna crosshair (R,G,B),\n"
+"sekaligus mengatur warna crosshair objek"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2928,9 +2928,8 @@ msgid "Desynchronize block animation"
msgstr "Putuskan sinkronasi animasi blok"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "Tombol kanan"
+msgstr "Tombol gali"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2997,7 +2996,8 @@ msgid "Enable console window"
msgstr "Gunakan jendela konsol"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Gunakan mode kreatif pada peta baru."
#: src/settings_translation_file.cpp
@@ -3151,9 +3151,8 @@ msgstr ""
"yang rata dan cocok untuk lapisan floatland padat (penuh)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
-msgstr "FPS (bingkai per detik) maksimum saat permainan dijeda."
+msgstr "FPS (bingkai per detik) saat dijeda atau tidak difokuskan"
#: src/settings_translation_file.cpp
msgid "FSAA"
@@ -3484,9 +3483,9 @@ msgid ""
"and junglegrass, in all other mapgens this flag controls all decorations."
msgstr ""
"Atribut pembuatan peta global.\n"
-"Dalam pembuat peta v6, flag \"decorations\" mengatur semua hiasan kecuali\n"
-"pohon dan rumput rimba. Dalam pembuat peta lain, flag ini mengatur\n"
-"semua dekorasi."
+"Dalam pembuat peta v6, flag \"decorations\" mengatur semua hiasan, kecuali\n"
+"pohon dan rumput rimba. Dalam pembuat peta lain, flag ini mengatur semua "
+"dekorasi."
#: src/settings_translation_file.cpp
msgid ""
@@ -3533,7 +3532,6 @@ msgid "HUD toggle key"
msgstr "Tombol beralih HUD"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
@@ -3541,7 +3539,7 @@ msgid ""
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
"Penanganan panggilan Lua API usang:\n"
-"- legacy: (mencoba untuk) menyerupai aturan lawas (bawaan untuk rilis).\n"
+"- none: jangan catat panggilan usang\n"
"- log: menyerupai dan mencatat asal-usul panggilan usang (bawaan untuk "
"awakutu).\n"
"- error: batalkan penggunaan panggilan usang (disarankan untuk pengembang "
@@ -3824,9 +3822,8 @@ msgid ""
"If FPS would go higher than this, limit it by sleeping\n"
"to not waste CPU power for no benefit."
msgstr ""
-"Jika FPS (bingkai per detik) lebih tinggi dari ini, akan\n"
-"dibatasi dengan jeda agar tidak menghabiskan tenaga\n"
-"CPU dengan percuma."
+"Jika FPS (bingkai per detik) lebih tinggi daripada ini, akan dibatasi\n"
+"dengan jeda agar tidak membuang tenaga CPU dengan percuma."
#: src/settings_translation_file.cpp
msgid ""
@@ -3912,8 +3909,8 @@ msgid ""
msgstr ""
"Jika dinyalakan, Anda dapat menaruh blok pada posisi (kaki + ketinggian "
"mata)\n"
-"tempat Anda berdiri.\n"
-"Ini berguna saat bekerja dengan kotak nodus (nodebox) dalam daerah sempit."
+"tempat Anda berdiri. Ini berguna saat bekerja dengan kotak nodus (nodebox) "
+"dalam daerah sempit."
#: src/settings_translation_file.cpp
msgid ""
@@ -3988,8 +3985,7 @@ msgid ""
"Instrument global callback functions on registration.\n"
"(anything you pass to a minetest.register_*() function)"
msgstr ""
-"Melengkapi fungsi panggil balik (callback) global saat didaftarkan,\n"
-"dengan perkakas.\n"
+"Melengkapi fungsi panggil balik (callback) global saat didaftarkan.\n"
"(semua yang dimasukkan ke fungsi minetest.register_*())"
#: src/settings_translation_file.cpp
@@ -4064,8 +4060,7 @@ msgstr ""
"Perulangan fungsi rekursif.\n"
"Menaikkan nilai ini menaikkan detail, tetapi juga menambah\n"
"beban pemrosesan.\n"
-"Saat perulangan = 20, pembuat peta ini memiliki beban yang\n"
-"mirip dengan pembuat peta v7."
+"Saat perulangan = 20, beban pembuat peta ini mirip dengan v7."
#: src/settings_translation_file.cpp
msgid "Joystick ID"
@@ -4076,9 +4071,8 @@ msgid "Joystick button repetition interval"
msgstr "Jarak penekanan tombol joystick terus-menerus"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick deadzone"
-msgstr "Jenis joystick"
+msgstr "Zona mati joystick"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -4183,13 +4177,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Tombol untuk lompat.\n"
+"Tombol untuk gali.\n"
"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4336,13 +4329,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for placing.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Tombol untuk lompat.\n"
+"Tombol untuk taruh.\n"
"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5111,11 +5103,11 @@ msgstr "Buat semua cairan buram"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "Tingkat Kompresi Peta untuk Penyimpanan Diska"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "Tingkat Kompresi Peta untuk Transfer Jaringan"
#: src/settings_translation_file.cpp
msgid "Map directory"
@@ -5300,9 +5292,10 @@ msgid "Maximum FPS"
msgstr "FPS (bingkai per detik) maksimum"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum FPS when the window is not focused, or when the game is paused."
-msgstr "FPS (bingkai per detik) maksimum saat permainan dijeda."
+msgstr ""
+"FPS (bingkai per detik) maksimum saat permainan dijeda atau saat jendela "
+"tidak difokuskan."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -5364,6 +5357,9 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"Jumlah maksimum pengunduhan bersamaan. Pengunduhan yang melebihi batas ini "
+"akan\n"
+"diantrekan. Nilai ini harus lebih rendah daripada curl_parallel_limit."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5681,7 +5677,8 @@ msgid ""
"formspec is\n"
"open."
msgstr ""
-"Buka menu jeda saat jendela hilang fokus. Tidak menjeda jika formspec sedang "
+"Buka menu jeda saat jendela hilang fokus. Tidak menjeda jika formspec "
+"sedang \n"
"dibuka."
#: src/settings_translation_file.cpp
@@ -5765,14 +5762,12 @@ msgid "Pitch move mode"
msgstr "Mode gerak sesuai pandang"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "Tombol terbang"
+msgstr "Tombol taruh"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place repetition interval"
-msgstr "Jarak klik kanan berulang"
+msgstr "Jeda waktu taruh berulang"
#: src/settings_translation_file.cpp
msgid ""
@@ -5842,7 +5837,7 @@ msgstr "Profiling"
#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
-msgstr ""
+msgstr "Alamat pendengar Prometheus"
#: src/settings_translation_file.cpp
msgid ""
@@ -5851,6 +5846,10 @@ msgid ""
"enable metrics listener for Prometheus on that address.\n"
"Metrics can be fetch on http://127.0.0.1:30000/metrics"
msgstr ""
+"Alamat pendengar Prometheus.\n"
+"Jika Minetest dikompilasi dengan pilihan ENABLE_PROMETHEUS dinyalakan,\n"
+"ini menyalakan pendengar metrik untuk Prometheus pada alamat itu.\n"
+"Metrik dapat diambil pada http://127.0.0.1:30000/metrics"
#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
@@ -6023,12 +6022,11 @@ msgid ""
"edge pixels when images are scaled by non-integer sizes."
msgstr ""
"Perbesar/perkecil GUI sesuai pengguna.\n"
-"Menggunakan filter nearest-neighbor-anti-alias untuk\n"
-"perbesar/perkecil GUI.\n"
+"Menggunakan filter nearest-neighbor-anti-alias untuk perbesar/perkecil GUI.\n"
"Ini akan menghaluskan beberapa tepi kasar dan\n"
"mencampurkan piksel-piksel saat diperkecil dengan\n"
-"mengaburkan beberapa piksel tepi saat diperkecil dengan\n"
-"skala bukan bilangan bulat."
+"mengaburkan beberapa piksel tepi saat diperkecil dengan skala bukan bilangan "
+"bulat."
#: src/settings_translation_file.cpp
msgid "Screen height"
@@ -6251,15 +6249,19 @@ msgid "Show entity selection boxes"
msgstr "Tampilkan kotak pilihan benda"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
-"Atur bahasa. Biarkan kosong untuk menggunakan bahasa sistem.\n"
+"Tampilkan kotak pilihan entitas\n"
"Dibutuhkan mulai ulang setelah mengganti ini."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Fon tebal bawaan"
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "Pesan saat server dimatikan"
@@ -6277,7 +6279,8 @@ msgstr ""
"PERINGATAN! Tidak ada untungnya dan berbahaya jika menaikkan\n"
"nilai ini di atas 5.\n"
"Mengecilkan nilai ini akan meningkatkan kekerapan gua dan dungeon.\n"
-"Mengubah nilai ini untuk kegunaan khusus, membiarkannya disarankan."
+"Mengubah nilai ini untuk kegunaan khusus, membiarkannya \n"
+"disarankan."
#: src/settings_translation_file.cpp
msgid ""
@@ -6442,6 +6445,16 @@ msgid ""
"server-intensive extreme water flow and to avoid vast flooding of the\n"
"world surface below."
msgstr ""
+"Tingkat permukaan peletakan air pada lapisan floatland padat.\n"
+"Air tidak ditaruh secara bawaan dan akan ditaruh jika nilai ini diatur ke\n"
+"atas 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (mulai dari\n"
+"penirusan atas).\n"
+"***PERINGATAN, POTENSI BAHAYA TERHADAP DUNIA DAN KINERJA SERVER***\n"
+"Ketika penaruhan air dinyalakan, floatland wajib diatur dan diuji agar\n"
+"berupa lapisan padat dengan mengatur 'mgv7_floatland_density' ke 2.0\n"
+"(atau nilai wajib lainnya sesuai 'mgv7_np_floatland') untuk menghindari\n"
+"aliran air ekstrem yang membebani server dan menghindari banjir\n"
+"bandang di permukaan dunia bawah."
#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
@@ -6520,9 +6533,8 @@ msgid "The URL for the content repository"
msgstr "URL dari gudang konten"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The deadzone of the joystick"
-msgstr "Identitas dari joystick yang digunakan"
+msgstr "Zona mati joystick yang digunakan"
#: src/settings_translation_file.cpp
msgid ""
@@ -6580,7 +6592,6 @@ msgstr ""
"server Anda."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The radius of the volume of blocks around every player that is subject to "
"the\n"
@@ -6590,14 +6601,13 @@ msgid ""
"maintained.\n"
"This should be configured together with active_object_send_range_blocks."
msgstr ""
-"Jari-jari ruang di sekitar pemain yang menjadi blok aktif, dalam blok peta\n"
-"(16 nodus).\n"
+"Jari-jari volume blok di sekitar pemain yang menjadi blok aktif, dalam\n"
+"blok peta (16 nodus).\n"
"Dalam blok aktif, objek dimuat dan ABM berjalan.\n"
"Ini juga jangkauan minimum pengelolaan objek aktif (makhluk).\n"
"Ini harus diatur bersama dengan active_object_range."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The rendering back-end for Irrlicht.\n"
"A restart is required after changing this.\n"
@@ -6609,8 +6619,8 @@ msgstr ""
"Penggambar untuk Irrlicht.\n"
"Mulai ulang dibutuhkan setelah mengganti ini.\n"
"Catatan: Pada Android, gunakan OGLES1 jika tidak yakin! Apl mungkin gagal\n"
-"berjalan pada lainnya. Pada platform lain, OpenGL disarankan yang menjadi\n"
-"satu-satunya pengandar yang mendukung shader untuk saat ini."
+"berjalan untuk pilihan lainnya. Pada platform lain, OpenGL disarankan.\n"
+"Shader didukung oleh OpenGL (khusus desktop) dan OGLES2 (tahap percobaan)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6648,6 +6658,8 @@ msgid ""
"The time budget allowed for ABMs to execute on each step\n"
"(as a fraction of the ABM Interval)"
msgstr ""
+"Anggaran waktu yang dibolehkan untuk ABM dalam menjalankan\n"
+"tiap langkah (dalam pecahan dari jarak ABM)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6658,12 +6670,12 @@ msgstr ""
"menekan terus-menerus kombinasi tombol joystick."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
-"Jeda dalam detik antarklik kanan berulang saat menekan tombol kanan tetikus."
+"Jeda dalam detik antar-penaruhan berulang saat menekan \n"
+"tombol taruh."
#: src/settings_translation_file.cpp
msgid "The type of joystick"
@@ -6815,9 +6827,8 @@ msgid ""
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
-"Gunakan mip mapping untuk penyekalaan tekstur. Dapat sedikit\n"
-"meningkatkan kinerja, terutama saat menggunakan paket tekstur\n"
-"beresolusi tinggi.\n"
+"Pakai mip mapping untuk penyekalaan tekstur. Bisa sedikit menaikkan\n"
+"kinerja, terutama pada saat memakai paket tekstur beresolusi tinggi.\n"
"Pengecilan dengan tepat gamma tidak didukung."
#: src/settings_translation_file.cpp
@@ -6830,6 +6841,13 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"Pakai antialias multisampel (MSAA) untuk memperhalus tepian blok.\n"
+"Algoritme ini memperhalus tampilan 3D sambil menjaga ketajaman gambar,\n"
+"tetapi tidak memengaruhi tekstur bagian dalam (yang terlihat khususnya\n"
+"dengan tekstur transparan).\n"
+"Muncul spasi tampak di antara nodus ketika shader dimatikan.\n"
+"Jika diatur 0, MSAA dimatikan.\n"
+"Dibutuhkan mulai ulang setelah penggantian pengaturan ini."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
@@ -7017,10 +7035,9 @@ msgid ""
"filtered in software, but some images are generated directly\n"
"to hardware (e.g. render-to-texture for nodes in inventory)."
msgstr ""
-"Saat gui_scaling_filter diatur ke true, semua gambar GUI harus\n"
-"difilter dalam perangkat lunak, tetapi beberapa gambar dibuat\n"
-"langsung ke perangkat keras (misal. render ke tekstur untuk nodus\n"
-"dalam inventaris)."
+"Saat gui_scaling_filter diatur ke true, semua gambar GUI harus difilter\n"
+"dalam perangkat lunak, tetapi beberapa gambar dibuat langsung ke\n"
+"perangkat keras (misal. render ke tekstur untuk nodus dalam inventaris)."
#: src/settings_translation_file.cpp
msgid ""
@@ -7029,11 +7046,10 @@ msgid ""
"to the old scaling method, for video drivers that don't\n"
"properly support downloading textures back from hardware."
msgstr ""
-"Saat gui_scaling_filter_txr2img dibolehkan, salin gambar-gambar\n"
-"tersebut dari perangkat keras ke perangkat lunak untuk perbesar/\n"
-"perkecil. Saat tidak dibolehkan, kembali ke cara lama, untuk\n"
-"pengandar video yang tidak mendukung pengunduhan tekstur dari\n"
-"perangkat keras."
+"Saat gui_scaling_filter_txr2img dibolehkan, salin gambar-gambar tersebut\n"
+"dari perangkat keras ke perangkat lunak untuk perbesar/perkecil. Saat tidak\n"
+"dibolehkan, kembali ke cara lama, untuk pengandar video yang tidak\n"
+"mendukung pengunduhan tekstur dari perangkat keras."
#: src/settings_translation_file.cpp
msgid ""
@@ -7068,6 +7084,12 @@ msgstr ""
"Jika dimatikan, fon bitmap dan vektor XML akan dipakai."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 "Apakah animasi tekstur nodus harus tidak disinkronkan tiap blok peta."
@@ -7171,8 +7193,8 @@ msgid ""
"Y of mountain density gradient zero level. Used to shift mountains "
"vertically."
msgstr ""
-"Titik acuan kemiringan kepadatan gunung pada sumbu Y.\n"
-"Digunakan untuk menggeser gunung secara vertikal."
+"Titik acuan kemiringan kepadatan gunung pada sumbu Y. Digunakan untuk "
+"menggeser gunung secara vertikal."
#: src/settings_translation_file.cpp
msgid "Y of upper limit of large caves."
@@ -7189,6 +7211,10 @@ msgid ""
"For a solid floatland layer, this controls the height of hills/mountains.\n"
"Must be less than or equal to half the distance between the Y limits."
msgstr ""
+"Jarak Y penirusan floatland dari padat sampai kosong.\n"
+"Penirusan dimulai dari jarak ini sampai batas Y.\n"
+"Untuk lapisan floatland padat, nilai ini mengatur tinggi bukit/gunung.\n"
+"Nilai ini harus kurang dari atau sama dengan setengah jarak antarbatas Y."
#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
@@ -7218,6 +7244,11 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Tingkat kompresi ZLib saat pengiriman blok peta kepada klien.\n"
+"-1 - tingkat kompresi Zlib bawaan\n"
+"0 - tanpa kompresi, tercepat\n"
+"9 - kompresi terbaik, terlambat\n"
+"(tingkat 1-3 pakai metode \"cepat\" Zlib, 4-9 pakai metode normal)"
#: src/settings_translation_file.cpp
msgid ""
@@ -7227,6 +7258,11 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Tingkat kompresi ZLib saat penyimpanan blok peta kepada klien.\n"
+"-1 - tingkat kompresi Zlib bawaan\n"
+"0 - tanpa kompresi, tercepat\n"
+"9 - kompresi terbaik, terlambat\n"
+"(tingkat 1-3 pakai metode \"cepat\" Zlib, 4-9 pakai metode normal)"
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
diff --git a/po/it/minetest.po b/po/it/minetest.po
index 78f0d7503..897859222 100644
--- a/po/it/minetest.po
+++ b/po/it/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Italian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-12-07 09:22+0000\n"
-"Last-Translator: Giov4 <brancacciogiovanni1@gmail.com>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-13 08:50+0000\n"
+"Last-Translator: Jacques Lagrange <Jacques.Reads@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/minetest/"
"minetest/it/>\n"
"Language: it\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.4-dev\n"
+"X-Generator: Weblate 4.5-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -153,52 +153,51 @@ msgstr "abilitato"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" già esiste. Vuoi sovrascriverlo?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Le dipendenze $1 e $2 verranno installate."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 di $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 in scaricamento,\n"
+"$2 in coda"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Scaricamento..."
+msgstr "Scaricando $1..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "Le dipendeze richieste per $1 non sono state trovate."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 verrà installato, e $2 dipendenze verranno ignorate."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Tutti i pacchetti"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Tasto già usato"
+msgstr "Già installato"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Torna al Menu Principale"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Ospita un gioco"
+msgstr "Gioco base:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -222,14 +221,12 @@ msgid "Install"
msgstr "Installa"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Installa"
+msgstr "Installa $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Dipendenze facoltative:"
+msgstr "Installa le dipendenze mancanti"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -245,26 +242,24 @@ msgid "No results"
msgstr "Nessun risultato"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Aggiorna"
+msgstr "Nessun aggiornamento"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Not found"
-msgstr "Silenzia audio"
+msgstr "Non trovato"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Sovrascrivi"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Per favore, controlla che il gioco base sia corretto."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "In coda"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -280,11 +275,11 @@ msgstr "Aggiorna"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Aggiornat tutti [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Visualizza ulteriori informazioni in un browser web"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -708,6 +703,11 @@ msgid "Loading..."
msgstr "Caricamento..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Scripting su lato client 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 "
@@ -766,15 +766,16 @@ msgid "Credits"
msgstr "Riconoscimenti"
#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
msgid "Open User Data Directory"
-msgstr "Scegli la cartella"
+msgstr "Apri la cartella dei dati utente"
#: builtin/mainmenu/tab_credits.lua
msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"Apre la cartella che contiene mondi, giochi, mod e pacchetti \n"
+"texture forniti dall'utente in un gestore di file / explorer."
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
@@ -814,7 +815,7 @@ msgstr "Installa giochi da ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "Nome"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -825,9 +826,8 @@ msgid "No world created or selected!"
msgstr "Nessun mondo creato o selezionato!"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Password"
-msgstr "Nuova password"
+msgstr "Password"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -838,9 +838,8 @@ msgid "Port"
msgstr "Porta"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Seleziona mondo:"
+msgstr "Seleziona mod"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -992,9 +991,8 @@ msgid "Shaders"
msgstr "Shaders"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Terre fluttuanti (sperimentale)"
+msgstr "Shader (sperimentali)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1194,7 +1192,7 @@ msgid "Continue"
msgstr "Continua"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1216,13 +1214,13 @@ msgstr ""
"- %s: arretra\n"
"- %s: sinistra\n"
"- %s: destra\n"
-"- %s: salta/arrampica\n"
+"- %s: salta/arrampicati\n"
+"- %s: scava/colpisci\n"
+"- %s: piazza/usa\n"
"- %s: furtivo/scendi\n"
-"- %s: butta oggetto\n"
+"- %s: lascia oggetto\n"
"- %s: inventario\n"
"- Mouse: gira/guarda\n"
-"- Mouse sx: scava/colpisci\n"
-"- Mouse dx: piazza/usa\n"
"- Rotella mouse: scegli oggetto\n"
"- %s: chat\n"
@@ -1751,19 +1749,18 @@ msgid "Minimap hidden"
msgstr "Minimappa nascosta"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Minimappa in modalità radar, ingrandimento x1"
+msgstr "Minimappa in modalità radar, ingrandimento x%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Minimappa in modalità superficie, ingrandimento x1"
+msgstr "Minimappa in modalità superficie, ingrandimento x%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Dimensione minima della texture"
+msgstr "Minimappa in modalità texture"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -2173,7 +2170,7 @@ msgstr "Intervallo ABM"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "Budget di tempo ABM"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
@@ -2684,7 +2681,7 @@ msgstr "Contenuti esclusi da ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "Massimi download contemporanei di ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2754,11 +2751,12 @@ msgid "Crosshair alpha"
msgstr "Trasparenza del mirino"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"Also controls the object crosshair color"
-msgstr "Trasparenza del mirino (opacità, tra 0 e 255)."
+msgstr ""
+"Trasparenza del mirino (opacità, tra 0 e 255).\n"
+"Controlla anche il colore del mirino dell'oggetto"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2769,6 +2767,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Colore del mirino (R,G,B).\n"
+"Controlla anche il colore del mirino dell'oggetto"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2953,9 +2953,8 @@ msgid "Desynchronize block animation"
msgstr "De-sincronizza l'animazione del blocco"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "Tasto des."
+msgstr "Tasto scava"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -3023,7 +3022,8 @@ msgid "Enable console window"
msgstr "Attivare la finestra della console"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Abilitare la modalità creativa per le nuove mappe create."
#: src/settings_translation_file.cpp
@@ -3187,9 +3187,8 @@ msgstr ""
"pianure più piatte, adatti a uno strato solido di terre fluttuanti."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
-msgstr "FPS massimi quando il gioco è in pausa."
+msgstr "FPS quando il gioco è in pausa o in secondo piano"
#: src/settings_translation_file.cpp
msgid "FSAA"
@@ -3583,20 +3582,18 @@ msgid "HUD toggle key"
msgstr "Tasto di (dis)attivazione dell'HUD"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
"- log: mimic and log backtrace of deprecated call (default).\n"
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
-"Gestione delle chiamate deprecate alle API Lua:\n"
-"- legacy (ereditaria): (prova a) simulare il vecchio comportamento "
-"(predefinito per i rilasci).\n"
-"- log (registro): simula e registra la traccia della chiamata deprecata "
-"(predefinito per il debug).\n"
-"- error (errore): interrompere all'uso della chiamata deprecata (suggerito "
-"per lo sviluppo di moduli)."
+"Gestione delle chiamate API Lua deprecate:\n"
+"- none (nessuno): non registra le chiamate obsolete\n"
+"- log (registro): imita e registra il backtrace di una chiamata obsoleta "
+"(impostazione predefinita).\n"
+"- error (errore): interrompe l'utilizzo della chiamata deprecata "
+"(consigliata per gli sviluppatori di mod)."
#: src/settings_translation_file.cpp
msgid ""
@@ -4130,9 +4127,8 @@ msgid "Joystick button repetition interval"
msgstr "Intervallo di ripetizione del pulsante del joystick"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick deadzone"
-msgstr "Tipo di joystick"
+msgstr "Deadzone joystick"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -4237,14 +4233,13 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Tasto per saltare.\n"
-"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"Tasto per scavare.\n"
+"Vedi http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
@@ -4390,14 +4385,13 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for placing.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Tasto per saltare.\n"
-"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"Tasto per piazzare.\n"
+"Vedi http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
@@ -5172,11 +5166,11 @@ msgstr "Rende opachi tutti i liquidi"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "Livello di compressione della mappa per l'archiviazione su disco"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "Livello di compressione della mappa per il trasferimento in rete"
#: src/settings_translation_file.cpp
msgid "Map directory"
@@ -5367,9 +5361,10 @@ msgid "Maximum FPS"
msgstr "FPS massimi"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum FPS when the window is not focused, or when the game is paused."
-msgstr "FPS massimi quando il gioco è in pausa."
+msgstr ""
+"FPS massimi quando la finestra è in secondo piano o quando il gioco è in "
+"pausa."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -5433,6 +5428,9 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"Numero massimo di download simultanei. I download che superano questo limite "
+"verranno messi in coda.\n"
+"Dovrebbe essere inferiore a curl_parallel_limit."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5859,14 +5857,12 @@ msgid "Pitch move mode"
msgstr "Modalità inclinazione movimento"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "Tasto volo"
+msgstr "Tasto piazza"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place repetition interval"
-msgstr "Intervallo di ripetizione del click destro"
+msgstr "Intervallo di ripetizione per il piazzamento"
#: src/settings_translation_file.cpp
msgid ""
@@ -6361,13 +6357,17 @@ msgid "Show entity selection boxes"
msgstr "Mostrare le aree di selezione delle entità"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
-"Imposta la Lingua. Lascia vuoto per usare la Lingua di sistema.\n"
-"Dopo avere modificato questa impostazione è necessario il riavvio."
+"Mostra la casella di selezione delle entità\n"
+"È necessario riavviare dopo aver cambiato questo."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Carattere grassetto per impostazione predefinita"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6653,9 +6653,8 @@ msgid "The URL for the content repository"
msgstr "L'URL per il deposito dei contenuti"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The deadzone of the joystick"
-msgstr "L'identificatore del joystick da usare"
+msgstr "La deadzone del joystick"
#: src/settings_translation_file.cpp
msgid ""
@@ -6730,7 +6729,6 @@ msgstr ""
"active_object_send_range_blocks."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The rendering back-end for Irrlicht.\n"
"A restart is required after changing this.\n"
@@ -6739,12 +6737,12 @@ msgid ""
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"Il motore di resa per Irrlicht.\n"
+"Il back-end di rendering per Irrlicht.\n"
"Dopo averlo cambiato è necessario un riavvio.\n"
-"Nota: su Android, si resti con OGLES1 se incerti! Altrimenti l'app potrebbe "
+"Nota: su Android, restare con OGLES1 se incerti! Altrimenti l'app potrebbe "
"non partire.\n"
-"Su altre piattaforme, si raccomanda OpenGL, ed è attualmente l'unico driver\n"
-"con supporto degli shader."
+"Su altre piattaforme, si raccomanda OpenGL\n"
+"Le shader sono supportate da OpenGL (solo su desktop) e OGLES2 (sperimentale)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6786,6 +6784,8 @@ msgid ""
"The time budget allowed for ABMs to execute on each step\n"
"(as a fraction of the ABM Interval)"
msgstr ""
+"Il budget di tempo ha consentito agli ABM per eseguire ogni passaggio\n"
+"(come frazione dell'intervallo ABM)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6796,13 +6796,13 @@ msgstr ""
"si tiene premuta una combinazione di pulsanti del joystick."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
-"Il tempo in secondi richiesto tra click destri ripetuti quando\n"
-"si tiene premuto il tasto destro del mouse."
+"Il tempo in secondi che intercorre tra il piazzamento dei nodi quando si "
+"tiene\n"
+"premuto il pulsante piazza."
#: src/settings_translation_file.cpp
msgid "The type of joystick"
@@ -6977,6 +6977,15 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"Utilizzare l'antialiasing multi-campione (MSAA) per smussare i bordi del "
+"blocco.\n"
+"Questo algoritmo uniforma la visualizzazione 3D mantenendo l'immagine "
+"nitida,\n"
+"ma non influenza l'interno delle texture\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"
+"È necessario riavviare dopo aver modificato questa opzione."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
@@ -7221,6 +7230,12 @@ msgstr ""
"Se disabilitati, si utilizzano invece i caratteri bitmap e XML vettoriali."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag backgrounds should be shown by default.\n"
+"Mods may still set a background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
msgstr ""
"Se le animazioni delle texture dei nodi dovrebbero essere asincrone per "
@@ -7386,6 +7401,13 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Livello di compressione ZLib da utilizzare quando si salvano i blocchi mappa "
+"su disco.\n"
+"-1 - Livello di compressione predefinito di Zlib\n"
+"0 - nessuna compressione, più veloce\n"
+"9 - migliore compressione, più lenta\n"
+"(i livelli 1-3 usano il metodo \"veloce\" di Zlib, 4-9 usano il metodo "
+"normale)"
#: src/settings_translation_file.cpp
msgid ""
@@ -7395,6 +7417,13 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Livello di compressione ZLib da utilizzare quando si inviano i blocchi mappa "
+"al client.\n"
+"-1 - Livello di compressione predefinito di Zlib\n"
+"0 - nessuna compressione, più veloce\n"
+"9 - migliore compressione, più lenta\n"
+"(i livelli 1-3 usano il metodo \"veloce\" di Zlib, 4-9 usano il metodo "
+"normale)"
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
diff --git a/po/ja/minetest.po b/po/ja/minetest.po
index ac2e2155f..c3a5e3522 100644
--- a/po/ja/minetest.po
+++ b/po/ja/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Japanese (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-06-15 22:41+0000\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-13 08:50+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.1\n"
+"X-Generator: Weblate 4.5-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -80,7 +80,7 @@ msgstr "キャンセル"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/tab_content.lua
msgid "Dependencies:"
-msgstr "ä¾å­˜é–¢ä¿‚:"
+msgstr "ä¾å­˜Mod:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
@@ -116,7 +116,7 @@ msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr "(ä»»æ„)ä¾å­˜é–¢ä¿‚ãªã—"
+msgstr "(任æ„)ä¾å­˜Modãªã—"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
@@ -124,7 +124,7 @@ msgstr "ゲームã®èª¬æ˜ŽãŒã‚ã‚Šã¾ã›ã‚“。"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr "ä¾å­˜é–¢ä¿‚ãªã—"
+msgstr "å¿…é ˆä¾å­˜Modãªã—"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
@@ -132,11 +132,11 @@ msgstr "Modパックã®èª¬æ˜ŽãŒã‚ã‚Šã¾ã›ã‚“。"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
-msgstr "ä»»æ„ä¾å­˜é–¢ä¿‚ãªã—"
+msgstr "ä»»æ„ä¾å­˜Modãªã—"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
-msgstr "ä»»æ„:"
+msgstr "ä»»æ„ä¾å­˜Mod:"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
@@ -153,52 +153,51 @@ 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 ã¨ä¾å­˜Mod $2 ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¾ã™ã€‚"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 by $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 ã¤ã®å¿…è¦ãªä¾å­˜ModãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã€ä¾å­˜Mod $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 "メインメニューã¸æˆ»ã‚‹"
+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"
@@ -222,14 +221,12 @@ 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 "ä¸è¶³ä¾å­˜Modインストール"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -245,26 +242,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"
@@ -280,15 +275,15 @@ msgstr "æ›´æ–°"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "ã™ã¹ã¦æ›´æ–° [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Webブラウザã§è©³ç´°ã‚’見る"
#: 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"
@@ -704,6 +699,11 @@ msgid "Loading..."
msgstr "読ã¿è¾¼ã¿ä¸­..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "クライアントå´ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ç„¡åŠ¹"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "インターãƒãƒƒãƒˆæŽ¥ç¶šã‚’確èªã—ã€å…¬é–‹ã‚µãƒ¼ãƒä¸€è¦§ã‚’å†æœ‰åŠ¹åŒ–ã—ã¦ãã ã•ã„。"
@@ -729,7 +729,7 @@ msgstr "インストール済ã¿ã®ãƒ‘ッケージ:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
-msgstr "ä¾å­˜ãªã—。"
+msgstr "ä¾å­˜Modãªã—。"
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
@@ -760,15 +760,16 @@ msgid "Credits"
msgstr "クレジット"
#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
msgid "Open User Data Directory"
-msgstr "ディレクトリã®é¸æŠž"
+msgstr "ディレクトリを開ã"
#: builtin/mainmenu/tab_credits.lua
msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"ファイルマãƒãƒ¼ã‚¸ãƒ£ãƒ¼/エクスプローラーã§ã€ãƒ¯ãƒ¼ãƒ«ãƒ‰ã€ã‚²ãƒ¼ãƒ ã€Modã€\n"
+"ãŠã‚ˆã³ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ‘ックをå«ã‚€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’é–‹ãã¾ã™ã€‚"
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
@@ -788,7 +789,7 @@ msgstr "ãƒã‚¤ãƒ³ãƒ‰ã‚¢ãƒ‰ãƒ¬ã‚¹"
#: builtin/mainmenu/tab_local.lua
msgid "Creative Mode"
-msgstr "クリエイティブモード"
+msgstr "クリエイティブ"
#: builtin/mainmenu/tab_local.lua
msgid "Enable Damage"
@@ -808,7 +809,7 @@ msgstr "コンテンツDBã‹ã‚‰ã‚²ãƒ¼ãƒ ã‚’インストール"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "åå‰"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -819,9 +820,8 @@ msgid "No world created or selected!"
msgstr "ワールドãŒä½œæˆã¾ãŸã¯é¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“ï¼"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Password"
-msgstr "æ–°ã—ã„パスワード"
+msgstr "パスワード"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -832,9 +832,8 @@ msgid "Port"
msgstr "ãƒãƒ¼ãƒˆ"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "ワールドをé¸æŠž:"
+msgstr "Modã‚’é¸æŠž"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -915,7 +914,7 @@ msgstr "アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹:"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
-msgstr "ç”»é¢ã®å¤§ãã•ã‚’自動ä¿å­˜"
+msgstr "大ãã•ã‚’自動ä¿å­˜"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
@@ -986,9 +985,8 @@ msgid "Shaders"
msgstr "シェーダー"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "æµ®éŠå¤§é™¸ï¼ˆå®Ÿé¨“的)"
+msgstr "シェーダー(実験的)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1188,7 +1186,7 @@ msgid "Continue"
msgstr "å†é–‹"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1205,19 +1203,19 @@ msgid ""
"- Mouse wheel: select item\n"
"- %s: chat\n"
msgstr ""
-"æ“作:\n"
+"æ“作方法:\n"
"- %s: å‰é€²\n"
"- %s: 後退\n"
"- %s: 左移動\n"
"- %s: å³ç§»å‹•\n"
"- %s: ジャンプ/登る\n"
+"- %s: 掘削/パンãƒ\n"
+"- %s: 設置/使用\n"
"- %s: スニーク/é™ã‚Šã‚‹\n"
"- %s: アイテムをè½ã¨ã™\n"
"- %s: インベントリ\n"
"- マウス: 見回ã™\n"
-"- 左クリック: 掘削/パンãƒ\n"
-"- å³ã‚¯ãƒªãƒƒã‚¯: 設置/使用\n"
-"- ホイール: アイテムé¸æŠž\n"
+"- マウスホイール: アイテムé¸æŠž\n"
"- %s: ãƒãƒ£ãƒƒãƒˆ\n"
#: src/client/game.cpp
@@ -1745,19 +1743,18 @@ msgid "Minimap hidden"
msgstr "ミニマップ éžè¡¨ç¤º"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "ミニマップ レーダーモードã€ã‚ºãƒ¼ãƒ  x1"
+msgstr "ミニマップ レーダーモードã€ã‚ºãƒ¼ãƒ  x%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "ミニマップ 表é¢ãƒ¢ãƒ¼ãƒ‰ã€ã‚ºãƒ¼ãƒ  x1"
+msgstr "ミニマップ 表é¢ãƒ¢ãƒ¼ãƒ‰ã€ã‚ºãƒ¼ãƒ  x%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "最å°ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚µã‚¤ã‚º"
+msgstr "ミニマップ テクスãƒãƒ£ãƒ¢ãƒ¼ãƒ‰"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -1829,7 +1826,7 @@ msgstr "音é‡ã‚’下ã’ã‚‹"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
-msgstr "\"ジャンプ\"二度押ã—ã§é£›è¡Œãƒ¢ãƒ¼ãƒ‰åˆ‡æ›¿"
+msgstr "\"ジャンプ\"2回ã§é£›è¡Œãƒ¢ãƒ¼ãƒ‰åˆ‡æ›¿"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Drop"
@@ -1862,7 +1859,7 @@ msgstr "キーãŒé‡è¤‡ã—ã¦ã„ã¾ã™"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
-"キー設定ã§ã™ã€‚ (ã“ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§å¤±æ•—ã™ã‚‹å ´åˆã¯ã€minetest.confã‹ã‚‰è©²å½“ã™ã‚‹è¨­å®šã‚’"
+"キー設定ã§ã™ã€‚ (ã“ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§å¤±æ•—ã™ã‚‹å ´åˆã¯ minetest.conf ã‹ã‚‰è©²å½“ã™ã‚‹è¨­å®šã‚’"
"削除ã—ã¦ãã ã•ã„)"
#: src/gui/guiKeyChangeMenu.cpp
@@ -2155,7 +2152,7 @@ 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"
@@ -2656,7 +2653,7 @@ msgstr "コンテンツDBフラグã®ãƒ–ラックリスト"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "コンテンツDBã®æœ€å¤§åŒæ™‚ダウンロード数"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2720,24 +2717,27 @@ msgstr "クリエイティブ"
#: src/settings_translation_file.cpp
msgid "Crosshair alpha"
-msgstr "照準線ã®é€éŽåº¦"
+msgstr "å字カーソルã®é€éŽåº¦"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"Also controls the object crosshair color"
-msgstr "照準線ã®é€éŽ (ä¸é€æ˜Žã€0~255ã®é–“)。"
+msgstr ""
+"å字カーソルã®é€éŽåº¦ï¼ˆä¸é€æ˜Žã€0~255ã®é–“)。\n"
+"オブジェクトå字カーソルã®è‰²ã‚‚制御"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
-msgstr "照準線ã®è‰²"
+msgstr "å字カーソルã®è‰²"
#: src/settings_translation_file.cpp
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"
@@ -2881,7 +2881,7 @@ msgstr "ツールãƒãƒƒãƒ—を表示ã™ã‚‹ã¾ã§ã®é…延ã€ãƒŸãƒªç§’ã§å®šã‚ã¾
#: src/settings_translation_file.cpp
msgid "Deprecated Lua API handling"
-msgstr "廃止予定ã®Lua APIã®å‡¦ç†"
+msgstr "éžæŽ¨å¥¨ã® Lua API ã®å‡¦ç†"
#: src/settings_translation_file.cpp
msgid "Depth below which you'll find giant caverns."
@@ -2914,9 +2914,8 @@ msgid "Desynchronize block animation"
msgstr "ブロックã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã®éžåŒæœŸåŒ–"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "å³ã‚­ãƒ¼"
+msgstr "掘削キー"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2983,7 +2982,8 @@ msgid "Enable console window"
msgstr "コンソールウィンドウを有効化"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "æ–°ã—ã作æˆã•ã‚ŒãŸãƒžãƒƒãƒ—ã§ã‚¯ãƒªã‚¨ã‚¤ãƒ†ã‚£ãƒ–モードを有効ã«ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -3138,9 +3138,8 @@ msgstr ""
"作æˆã—ã€å¯†ãªæµ®éŠå¤§é™¸å±¤ã«é©ã—ã¦ã„ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
-msgstr "ãƒãƒ¼ã‚ºãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§ã®æœ€å¤§FPS。"
+msgstr "éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã¾ãŸã¯ãƒãƒ¼ã‚ºãƒ¡ãƒ‹ãƒ¥ãƒ¼è¡¨ç¤ºä¸­ã®FPS"
#: src/settings_translation_file.cpp
msgid "FSAA"
@@ -3524,18 +3523,16 @@ msgid "HUD toggle key"
msgstr "HUD表示切り替ãˆã‚­ãƒ¼"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
"- 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"
-"- legacy: å¤ã„振る舞ã„を模倣ã™ã‚‹(試ã¿ã‚‹) (リリース版ã®æ—¢å®šå€¤)。\n"
-"- log: 廃止予定ã®å‘¼ã³å‡ºã—を模倣ã—ã¦ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’記録 (デãƒãƒƒã‚°ç‰ˆã®æ—¢å®š"
-"値)。\n"
-"- error: 廃止予定ã®å‘¼ã³å‡ºã—ã®ä½¿ç”¨ã‚’中止ã™ã‚‹ (Mod開発者å‘ã‘ã«æŽ¨å¥¨)。"
+"éžæŽ¨å¥¨ã® Lua API 呼ã³å‡ºã—ã®å‡¦ç†ï¼š\n"
+"- none: éžæŽ¨å¥¨ã®å‘¼ã³å‡ºã—を記録ã—ãªã„\n"
+"- log: éžæŽ¨å¥¨ã®å‘¼ã³å‡ºã—ã®ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’模倣ã—ã¦è¨˜éŒ²ã—ã¾ã™ï¼ˆæ—¢å®šå€¤ï¼‰ã€‚\n"
+"- error: éžæŽ¨å¥¨ã®å‘¼ã³å‡ºã—ã®ä½¿ç”¨ã‚’中止ã—ã¾ã™ï¼ˆMod開発者ã«æŽ¨å¥¨ï¼‰ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -4057,9 +4054,8 @@ msgid "Joystick button repetition interval"
msgstr "ジョイスティックボタンã®ç¹°ã‚Šè¿”ã—é–“éš”"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick deadzone"
-msgstr "ジョイスティックã®ç¨®é¡ž"
+msgstr "ジョイスティックã®ãƒ‡ãƒƒãƒ‰ã‚¾ãƒ¼ãƒ³"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -4164,13 +4160,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"ジャンプã™ã‚‹ã‚­ãƒ¼ã§ã™ã€‚\n"
+"掘削ã™ã‚‹ã‚­ãƒ¼ã§ã™ã€‚\n"
"å‚ç…§ http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4317,13 +4312,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for placing.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"ジャンプã™ã‚‹ã‚­ãƒ¼ã§ã™ã€‚\n"
+"設置ã™ã‚‹ã‚­ãƒ¼ã§ã™ã€‚\n"
"å‚ç…§ http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5085,11 +5079,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"
@@ -5274,9 +5268,10 @@ 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 forceloaded blocks"
@@ -5336,6 +5331,9 @@ 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."
@@ -5744,14 +5742,12 @@ msgid "Pitch move mode"
msgstr "ピッãƒç§»å‹•ãƒ¢ãƒ¼ãƒ‰"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "飛行キー"
+msgstr "設置キー"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place repetition interval"
-msgstr "å³ã‚¯ãƒªãƒƒã‚¯ç¹°ã‚Šè¿”ã—ã®é–“éš”"
+msgstr "設置ã®ç¹°ã‚Šè¿”ã—é–“éš”"
#: src/settings_translation_file.cpp
msgid ""
@@ -6227,18 +6223,22 @@ msgstr "デãƒãƒƒã‚°æƒ…報を表示"
#: src/settings_translation_file.cpp
msgid "Show entity selection boxes"
-msgstr "エンティティã®é¸æŠžãƒœãƒƒã‚¯ã‚¹ã‚’表示"
+msgstr "エンティティã®é¸æŠžãƒœãƒƒã‚¯ã‚¹è¡¨ç¤º"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
-"言語を設定ã—ã¦ãã ã•ã„。システム言語を使用ã™ã‚‹ã«ã¯ç©ºã®ã¾ã¾ã«ã—ã¾ã™ã€‚\n"
+"エンティティã®é¸æŠžãƒœãƒƒã‚¯ã‚¹ã‚’表示\n"
"変更後ã¯å†èµ·å‹•ãŒå¿…è¦ã§ã™ã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "既定ã§å¤ªå­—ã®ãƒ•ã‚©ãƒ³ãƒˆ"
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "サーãƒçµ‚了時ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
@@ -6509,9 +6509,8 @@ msgid "The URL for the content repository"
msgstr "コンテンツリãƒã‚¸ãƒˆãƒªã®URL"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The deadzone of the joystick"
-msgstr "使用ã™ã‚‹ã‚¸ãƒ§ã‚¤ã‚¹ãƒ†ã‚£ãƒƒã‚¯ã®è­˜åˆ¥å­"
+msgstr "ジョイスティックã®ãƒ‡ãƒƒãƒ‰ã‚¾ãƒ¼ãƒ³"
#: src/settings_translation_file.cpp
msgid ""
@@ -6582,7 +6581,6 @@ msgstr ""
"ã“れ㯠active_object_send_range_blocks ã¨ä¸€ç·’ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The rendering back-end for Irrlicht.\n"
"A restart is required after changing this.\n"
@@ -6593,10 +6591,10 @@ msgid ""
msgstr ""
"Irrlichtã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã€‚\n"
"変更後ã¯å†èµ·å‹•ãŒå¿…è¦ã§ã™ã€‚\n"
-"メモ: Androidã§ã¯ã€ä¸æ˜Žãªå ´åˆã¯ OGLES1 を使用ã—ã¦ãã ã•ã„ï¼ \n"
-"ãれ以外ã®å ´åˆã‚¢ãƒ—リã¯èµ·å‹•ã«å¤±æ•—ã™ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚\n"
-"ä»–ã®ãƒ—ラットフォームã§ã¯ã€OpenGL ãŒæŽ¨å¥¨ã•ã‚Œã¦ãŠã‚Šã€ç¾åœ¨ãã‚ŒãŒ\n"
-"シェーダーをサãƒãƒ¼ãƒˆã™ã‚‹å”¯ä¸€ã®ãƒ‰ãƒ©ã‚¤ãƒã§ã™ã€‚"
+"注æ„:Android ã®å ´åˆã€ã‚ˆãã‚ã‹ã‚‰ãªã„å ´åˆã¯ OGLES1 を使用ã—ã¦ãã ã•ã„ï¼\n"
+"ãã†ã—ãªã„ã¨ã‚¢ãƒ—リã®èµ·å‹•ã«å¤±æ•—ã™ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚\n"
+"ãã®ä»–ã®ãƒ—ラットフォームã§ã¯ã€OpenGL ãŒæŽ¨å¥¨ã•ã‚Œã¦ã„ã¾ã™ã€‚\n"
+"シェーダー㯠OpenGL(デスクトップã®ã¿ï¼‰ã¨ OGLES2(実験的)ã§ã‚µãƒãƒ¼ãƒˆ"
#: src/settings_translation_file.cpp
msgid ""
@@ -6629,6 +6627,8 @@ 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 ""
@@ -6639,11 +6639,10 @@ 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 "設置ボタンを押ã—ãŸã¾ã¾ãƒŽãƒ¼ãƒ‰ã®è¨­ç½®ã‚’ç¹°ã‚Šè¿”ã™ç§’å˜ä½ã®é–“隔。"
#: src/settings_translation_file.cpp
msgid "The type of joystick"
@@ -6807,6 +6806,14 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"マルãƒã‚µãƒ³ãƒ—ルアンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ï¼ˆMSAA)を使用ã—ã¦ã€ãƒ–ロックエッジを滑らã‹ã«ã—"
+"ã¾ã™ã€‚\n"
+"ã“ã®ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã¯ã€ç”»åƒã‚’鮮明ã«ä¿ã¡ãªãŒã‚‰3Dビューãƒãƒ¼ãƒˆã‚’滑らã‹ã«ã—ã¾ã™ã€‚\n"
+"ã—ã‹ã—ã€ãã‚Œã¯ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®å†…部ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“\n"
+"(ã“ã‚Œã¯ã€é€æ˜Žãªãƒ†ã‚¯ã‚¹ãƒãƒ£ã§ç‰¹ã«ç›®ç«‹ã¡ã¾ã™ï¼‰ã€‚\n"
+"シェーダーを無効ã«ã™ã‚‹ã¨ã€ãƒŽãƒ¼ãƒ‰é–“ã«å¯è¦–スペースãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚\n"
+"0 ã«è¨­å®šã™ã‚‹ã¨ã€MSAAã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚\n"
+"ã“ã®ã‚ªãƒ—ションを変更ã—ãŸå ´åˆã€å†èµ·å‹•ãŒå¿…è¦ã§ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
@@ -7044,6 +7051,12 @@ msgstr ""
"ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
"ノードã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’マップブロックã”ã¨ã«éžåŒæœŸã«\n"
@@ -7055,7 +7068,7 @@ msgid ""
"Deprecated, use the setting player_transfer_distance instead."
msgstr ""
"プレイヤーãŒç¯„囲制é™ãªã—ã§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«è¡¨ç¤ºã•ã‚Œã‚‹ã‹ã©ã†ã‹ã§ã™ã€‚\n"
-"廃止予定ã€ä»£ã‚ã‚Šã«è¨­å®š player_transfer_distance を使用ã—ã¦ãã ã•ã„。"
+"éžæŽ¨å¥¨ã€‚代ã‚ã‚Šã«è¨­å®š player_transfer_distance を使用ã—ã¦ãã ã•ã„。"
#: src/settings_translation_file.cpp
msgid "Whether to allow players to damage and kill each other."
@@ -7205,6 +7218,11 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"マップブロックをディスクã«ä¿å­˜ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹ ZLib圧縮レベル。\n"
+"-1 - Zlib ã®è¦å®šã®åœ§ç¸®ãƒ¬ãƒ™ãƒ«\n"
+"0 - 圧縮ãªã—ã€æœ€é€Ÿ\n"
+"9 - 最高ã®åœ§ç¸®ã€æœ€ã‚‚é…ã„\n"
+"(レベル 1〜3 ã¯Zlibã®ã€Œé«˜é€Ÿã€æ–¹å¼ã‚’使用ã—ã€4〜9 ã¯é€šå¸¸æ–¹å¼ã‚’使用)"
#: src/settings_translation_file.cpp
msgid ""
@@ -7214,6 +7232,11 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"マップブロックをクライアントã«é€ä¿¡ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹ ZLib圧縮レベル。\n"
+"-1 - Zlib ã®è¦å®šã®åœ§ç¸®ãƒ¬ãƒ™ãƒ«\n"
+"0 - 圧縮ãªã—ã€æœ€é€Ÿ\n"
+"9 - 最高ã®åœ§ç¸®ã€æœ€ã‚‚é…ã„\n"
+"(レベル 1〜3 ã¯Zlibã®ã€Œé«˜é€Ÿã€æ–¹å¼ã‚’使用ã—ã€4〜9 ã¯é€šå¸¸æ–¹å¼ã‚’使用)"
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
diff --git a/po/jbo/minetest.po b/po/jbo/minetest.po
index ab7b25e3e..83ccdb9df 100644
--- a/po/jbo/minetest.po
+++ b/po/jbo/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Lojban (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-03-15 18:36+0000\n"
-"Last-Translator: Robin Townsend <iantownsend@disroot.org>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-13 08:50+0000\n"
+"Last-Translator: Wuzzy <almikes@aol.com>\n"
"Language-Team: Lojban <https://hosted.weblate.org/projects/minetest/minetest/"
"jbo/>\n"
"Language: jbo\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.0-dev\n"
+"X-Generator: Weblate 4.5-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -24,7 +24,7 @@ msgstr ".i do morsi"
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
-msgstr ""
+msgstr "fitytu'i"
#: builtin/fstk/ui.lua
#, fuzzy
@@ -80,7 +80,7 @@ msgstr ""
#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp
#: src/gui/guiPasswordChange.cpp
msgid "Cancel"
-msgstr "sisti"
+msgstr "fitytoltu'i"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/tab_content.lua
@@ -321,7 +321,7 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caves"
-msgstr ""
+msgstr "kevzda"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
@@ -344,7 +344,7 @@ msgstr ".i ko kibycpa pa se kelci la'o zoi. minetest.net .zoi"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
-msgstr ""
+msgstr "kevdi'u"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Flat terrain"
@@ -352,11 +352,12 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr ""
+msgstr "lo tumla cu fulta lo tsani"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Floatlands (experimental)"
-msgstr ""
+msgstr "fulta tumla"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
@@ -401,7 +402,7 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
-msgstr ""
+msgstr "cmana"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
@@ -425,7 +426,7 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Rivers"
-msgstr ""
+msgstr "rirxe"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
@@ -433,9 +434,8 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Seed"
-msgstr "cunso jai krasi"
+msgstr "cunso namcu"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
@@ -714,6 +714,10 @@ msgid "Loading..."
msgstr ".i ca'o samymo'i"
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
".i ko troci lo nu za'u re'u samymo'i lo liste be lo'i samse'u .i ko cipcta "
@@ -807,7 +811,7 @@ msgstr "finti se kelci"
#: builtin/mainmenu/tab_local.lua
msgid "Enable Damage"
-msgstr ""
+msgstr "pilno lo selxai"
#: builtin/mainmenu/tab_local.lua
#, fuzzy
@@ -835,9 +839,8 @@ msgid "No world created or selected!"
msgstr ".i do no munje cu cupra ja cu cuxna"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Password"
-msgstr "lo cnino lerpoijaspu"
+msgstr "lo lerpoijaspu"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -866,7 +869,7 @@ msgstr "co'a kelci"
#: builtin/mainmenu/tab_online.lua
msgid "Address / Port"
-msgstr "judri .i judrnporte"
+msgstr "lo samjudri jo'u judrnporte"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -894,7 +897,7 @@ msgstr "co'a kansa fi le ka kelci"
#: builtin/mainmenu/tab_online.lua
msgid "Name / Password"
-msgstr "cmene .i lerpoijaspu"
+msgstr "lo cmene .e lo lerpoijaspu"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
@@ -910,9 +913,8 @@ msgid "2x"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "3D Clouds"
-msgstr "le bliku dilnu"
+msgstr "cibyca'u dilnu"
#: builtin/mainmenu/tab_settings.lua
msgid "4x"
@@ -953,12 +955,10 @@ msgid "Fancy Leaves"
msgstr "lo tolkli pezli"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Mipmap"
msgstr "lo puvrmipmepi"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Mipmap + Aniso. Filter"
msgstr "lo puvrmipmepi .e lo puvytolmanfyju'e"
@@ -967,9 +967,8 @@ msgid "No Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "No Mipmap"
-msgstr "lo puvrmipmepi"
+msgstr ""
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
@@ -991,14 +990,12 @@ msgid "Opaque Leaves"
msgstr "lo tolkli pezli"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Opaque Water"
-msgstr "lo tolkli djacu"
+msgstr "tolkli djacu"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Particles"
-msgstr "lo kantu"
+msgstr "kantu"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
@@ -1427,7 +1424,7 @@ msgstr "nonselkansa"
#: src/client/game.cpp
msgid "Sound Volume"
-msgstr ""
+msgstr "ni sance"
#: src/client/game.cpp
#, fuzzy
@@ -1465,7 +1462,7 @@ msgstr ""
#: src/client/game.cpp
#, c-format
msgid "Volume changed to %d%%"
-msgstr ""
+msgstr ".i fe lo ni sance cu cenba fi li %d ce'i"
#: src/client/game.cpp
msgid "Wireframe shown"
@@ -1576,9 +1573,8 @@ msgid "Insert"
msgstr ""
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Left"
-msgstr "za'i zu'e muvdu"
+msgstr "zu'e muvdu"
#: src/client/keycode.cpp
msgid "Left Button"
@@ -1704,9 +1700,8 @@ msgid "Return"
msgstr ""
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Right"
-msgstr "za'i ri'u muvdu"
+msgstr "ri'u muvdu"
#: src/client/keycode.cpp
msgid "Right Button"
@@ -1829,9 +1824,8 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Backward"
-msgstr "za'i ti'a muvdu"
+msgstr "ti'a muvdu"
#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
@@ -1856,21 +1850,19 @@ msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
-msgstr ""
+msgstr "jdikygau lo ni sance"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Drop"
-msgstr "mu'e falcru"
+msgstr "falcru"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Forward"
-msgstr "za'i ca'u muvdu"
+msgstr "ca'u muvdu"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. range"
@@ -1878,7 +1870,7 @@ msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. volume"
-msgstr ""
+msgstr "zengau lo ni sance"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inventory"
@@ -2084,9 +2076,8 @@ msgid "2D noise that locates the river valleys and channels."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "3D clouds"
-msgstr "le bliku dilnu"
+msgstr "cibyca'u dilnu"
#: src/settings_translation_file.cpp
msgid "3D mode"
@@ -2883,9 +2874,8 @@ msgid "Dig key"
msgstr "za'i ri'u muvdu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Digging particles"
-msgstr "lo kantu"
+msgstr "kakpa kantu"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2945,7 +2935,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4998,7 +4988,6 @@ msgid "Minimum texture size"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mipmapping"
msgstr "lo puvrmipmepi"
@@ -5661,6 +5650,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6237,9 +6230,8 @@ msgid "Virtual joystick triggers aux button"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Volume"
-msgstr "lo ni sance "
+msgstr "lo ni sance"
#: src/settings_translation_file.cpp
msgid ""
@@ -6346,6 +6338,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/kk/minetest.po b/po/kk/minetest.po
index f50ebcf3a..26fdf44e8 100644
--- a/po/kk/minetest.po
+++ b/po/kk/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Kazakh (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-09-09 01:23+0000\n"
"Last-Translator: Fontan 030 <pomanfedurin@gmail.com>\n"
"Language-Team: Kazakh <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -695,6 +695,10 @@ msgid "Loading..."
msgstr "Жүктелуде..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
@@ -2832,7 +2836,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5534,6 +5538,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6207,6 +6215,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/kn/minetest.po b/po/kn/minetest.po
index 74f40491e..d820e246c 100644
--- a/po/kn/minetest.po
+++ b/po/kn/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Kannada (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2021-01-02 07:29+0000\n"
"Last-Translator: Tejaswi Hegde <tejaswihegde1@gmail.com>\n"
"Language-Team: Kannada <https://hosted.weblate.org/projects/minetest/"
@@ -714,6 +714,10 @@ msgid "Loading..."
msgstr "ಲೋಡೠಆಗà³à²¤à³à²¤à²¿à²¦à³†..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "ಪಬà³à²²à²¿à²•à³ ಸರà³à²µà²°à³à²²à²¿à²¸à³à²Ÿà³à²…ನà³à²¨à³ ರಿಎನೆಬಲೠಮಾಡಿ ಮತà³à²¤à³ ಅಂತರà³à²œà²¾à²² ಸಂಪರà³à²• ಪರಿಶೀಲಿಸಿ."
@@ -2851,7 +2855,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5553,6 +5557,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6226,6 +6234,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/ko/minetest.po b/po/ko/minetest.po
index 1f17d56bb..d08dc7d72 100644
--- a/po/ko/minetest.po
+++ b/po/ko/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Korean (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-12-05 15:29+0000\n"
"Last-Translator: HunSeongPark <gnstjd980831@naver.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -705,6 +705,11 @@ msgid "Loading..."
msgstr "불러오는 중..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "í´ë¼ì´ì–¸íŠ¸ 스í¬ë¦½íŠ¸ê°€ 비활성화ë¨"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "ì¸í„°ë„· ì—°ê²°ì„ í™•ì¸í•œ 후 서버 목ë¡ì„ 새로 ê³ ì³ë³´ì„¸ìš”."
@@ -2975,7 +2980,8 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "새로 만든 맵ì—ì„œ creative모드를 활성화시킵니다."
#: src/settings_translation_file.cpp
@@ -5980,6 +5986,10 @@ msgstr ""
"설정 ì ìš© 후 ìž¬ì‹œìž‘ì´ í•„ìš”í•©ë‹ˆë‹¤."
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "서버닫힘 메시지"
@@ -6686,6 +6696,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/ky/minetest.po b/po/ky/minetest.po
index 9f7560702..91c6e11b8 100644
--- a/po/ky/minetest.po
+++ b/po/ky/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Kyrgyz (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2019-11-10 15:04+0000\n"
"Last-Translator: Krock <mk939@ymail.com>\n"
"Language-Team: Kyrgyz <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -721,6 +721,10 @@ msgid "Loading..."
msgstr "Жүктөлүүдө..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
@@ -2981,7 +2985,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5709,6 +5713,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6393,6 +6401,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/lt/minetest.po b/po/lt/minetest.po
index e9b9f97eb..98bcff78d 100644
--- a/po/lt/minetest.po
+++ b/po/lt/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Lithuanian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-09-23 07:41+0000\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-23 15:50+0000\n"
"Last-Translator: Kornelijus TvarijanaviÄius <kornelitvari@protonmail.com>\n"
"Language-Team: Lithuanian <https://hosted.weblate.org/projects/minetest/"
"minetest/lt/>\n"
@@ -13,7 +13,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
"%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 4.3-dev\n"
+"X-Generator: Weblate 4.5\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -28,12 +28,10 @@ msgid "OK"
msgstr ""
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred in a Lua script:"
-msgstr "Klaida įvyko Lua scenarijuje, tokiame kaip papildinys:"
+msgstr "Įvyko klaida Lua skripte:"
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred:"
msgstr "Įvyko klaida:"
@@ -67,7 +65,7 @@ msgstr "Mes palaikome tik $1 protokolo versijÄ…."
#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
-msgstr "Mes palaikome protokolo versijas nuo $1 iki $2."
+msgstr "Mes palaikome protokolo versijas tarp $1 ir $2."
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_create_world.lua
@@ -82,16 +80,14 @@ msgstr "Atšaukti"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Dependencies:"
-msgstr "Priklauso:"
+msgstr "Priklauso nuo:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
msgstr "IÅ¡jungti visus papildinius"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "Disable modpack"
msgstr "Išjungti papildinį"
@@ -129,9 +125,8 @@ msgid "No game description provided."
msgstr "Nepateiktas žaidimo aprašymas."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No hard dependencies"
-msgstr "Priklauso:"
+msgstr "Nėra būtinų priklausomybių"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
@@ -177,9 +172,8 @@ msgid ""
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Įkeliama..."
+msgstr "$1 atsiunÄiama..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
@@ -738,6 +732,10 @@ msgid "Loading..."
msgstr "Įkeliama..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Pabandykite dar kart įjungti viešą serverių sąrašą ir patikrinkite savo "
@@ -2991,7 +2989,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5728,6 +5726,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6409,6 +6411,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/lv/minetest.po b/po/lv/minetest.po
index 2800f7eb5..e1b4de861 100644
--- a/po/lv/minetest.po
+++ b/po/lv/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-07-12 17:41+0000\n"
"Last-Translator: Uko Koknevics <TheZeus121@gmail.com>\n"
"Language-Team: Latvian <https://hosted.weblate.org/projects/minetest/"
@@ -714,6 +714,11 @@ msgid "Loading..."
msgstr "IelÄde..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Klienta puses skriptēšana ir atspējota"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"PamÄ“Ä£iniet atkÄrtoti ieslÄ“gt publisko serveru sarakstu un pÄrbaudiet "
@@ -2894,7 +2899,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5602,6 +5607,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6275,6 +6284,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/minetest.pot b/po/minetest.pot
index 408995dc5..6b454cf16 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: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -698,6 +698,10 @@ msgstr ""
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
msgstr ""
@@ -2960,6 +2964,16 @@ msgid "Basic"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag backgrounds should be shown by default.\n"
+"Mods may still set a background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "VBO"
msgstr ""
@@ -4426,7 +4440,7 @@ msgid "Creative"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
diff --git a/po/ms/minetest.po b/po/ms/minetest.po
index 0ea9bf28a..d35e063cc 100644
--- a/po/ms/minetest.po
+++ b/po/ms/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Malay (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-10-20 18:26+0000\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-01 05:52+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.3.1\n"
+"X-Generator: Weblate 4.5-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -154,52 +154,51 @@ msgstr "Dibolehkan"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" sudah wujud. Adakah anda ingin tulis gantinya?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Kebergantungan $1 dan $2 akan dipasangkan."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 oleh $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 sedang muat turun,\n"
+"$2 menunggu giliran"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Memuat turun..."
+msgstr "$1 memuat turun..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 memerlukan kebergantungan yang tidak dijumpai."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 akan dipasangkan, dan kebergantungan $2 akan dilangkau."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Semua pakej"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Kekunci telah digunakan untuk fungsi lain"
+msgstr "Sudah dipasang"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Kembali ke Menu Utama"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Hos Permainan"
+msgstr "Permainan Asas:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -223,14 +222,12 @@ msgid "Install"
msgstr "Pasang"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Pasang"
+msgstr "Pasang $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Kebergantungan pilihan:"
+msgstr "Pasang kebergantungan yang hilang"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -246,26 +243,24 @@ msgid "No results"
msgstr "Tiada hasil"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Kemas kini"
+msgstr "Tiada kemas kini"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Not found"
-msgstr "Bisukan bunyi"
+msgstr "Tidak dijumpai"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Tulis ganti"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Sila semak dan pastikan permainan asas itu betul."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Menunggu giliran"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -281,11 +276,11 @@ msgstr "Kemas kini"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Kemas Kini Semua [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Lihat maklumat lanjut dalam pelayar sesawang"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -706,6 +701,11 @@ msgid "Loading..."
msgstr "Sedang memuatkan..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Skrip pihak klien dilumpuhkan"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Cuba aktifkan semula senarai pelayan awam dan periksa sambungan internet "
@@ -764,15 +764,16 @@ msgid "Credits"
msgstr "Penghargaan"
#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
msgid "Open User Data Directory"
-msgstr "Pilih direktori"
+msgstr "Buka Direktori Data Pengguna"
#: builtin/mainmenu/tab_credits.lua
msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"Membuka direktori yang mengandungi dunia, permainan, mods, dan pek\n"
+"tekstur yang disediakan oleh pengguna, dalam pengurus / pelayar fail."
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
@@ -812,7 +813,7 @@ msgstr "Pasangkan permainan daripada ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "Nama"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -823,9 +824,8 @@ msgid "No world created or selected!"
msgstr "Tiada dunia dicipta atau dipilih!"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Password"
-msgstr "Kata Laluan Baru"
+msgstr "Kata Laluan"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -836,9 +836,8 @@ msgid "Port"
msgstr "Port"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Pilih Dunia:"
+msgstr "Pilih Mods"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -990,9 +989,8 @@ msgid "Shaders"
msgstr "Pembayang"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Tanah terapung (dalam ujikaji)"
+msgstr "Pembayang (dalam ujikaji)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1193,7 +1191,7 @@ msgid "Continue"
msgstr "Teruskan"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1210,18 +1208,18 @@ msgid ""
"- Mouse wheel: select item\n"
"- %s: chat\n"
msgstr ""
-"Kawalan:\n"
+"Controls:\n"
"- %s: bergerak ke depan\n"
"- %s: bergerak ke belakang\n"
"- %s: bergerak ke kiri\n"
"- %s: bergerak ke kanan\n"
"- %s: lompat/naik atas\n"
+"- %s: gali/ketuk\n"
+"- %s: letak/guna\n"
"- %s: selinap/turun bawah\n"
"- %s: jatuhkan item\n"
"- %s: inventori\n"
"- Tetikus: pusing/lihat sekeliling\n"
-"- Tetikus kiri: gali/ketuk\n"
-"- Tetikus kanan: letak/guna\n"
"- Roda tetikus: pilih item\n"
"- %s: sembang\n"
@@ -1752,19 +1750,18 @@ msgid "Minimap hidden"
msgstr "Peta mini disembunyikan"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Peta mini dalam mod radar, Zum 1x"
+msgstr "Peta mini dalam mod radar, Zum x%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Peta mini dalam mod permukaan, Zum 1x"
+msgstr "Peta mini dalam mod permukaan, Zum x%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Saiz tekstur minimum"
+msgstr "Peta mini dalam mod tekstur"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -2164,11 +2161,11 @@ msgstr "Selang masa ABM"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "Peruntukan masa ABM"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
-msgstr "Had mutlak untuk blok dibarisgilirkan untuk timbul"
+msgstr "Had mutlak untuk blok menunggu giliran untuk timbul"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
@@ -2671,7 +2668,7 @@ msgstr "Senarai Hitam Bendera ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "Muat Turun Serempak Maksimum ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2740,11 +2737,12 @@ msgid "Crosshair alpha"
msgstr "Nilai alfa rerambut silang"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"Also controls the object crosshair color"
-msgstr "Nilai alfa rerambut silang (kelegapan, antara 0 dan 255)."
+msgstr ""
+"Nilai alfa rerambut silang (kelegapan, antara 0 dan 255).\n"
+"Juga mengawal warna rerambut silang objek"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2755,6 +2753,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Warna rerambut silang (R,G,B).\n"
+"Juga mengawal warna rerambut silang objek"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2939,9 +2939,8 @@ msgid "Desynchronize block animation"
msgstr "Menyahsegerakkan animasi blok"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "Kekunci ke kanan"
+msgstr "Kekunci gali"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -3009,7 +3008,8 @@ msgid "Enable console window"
msgstr "Membolehkan tetingkap konsol"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Membolehkan mod kreatif untuk peta baru dicipta."
#: src/settings_translation_file.cpp
@@ -3166,9 +3166,8 @@ msgstr ""
"bahagian tanah yang lebih rata, sesuai untuk lapisan tanah terapung pejal."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
-msgstr "Bingkai per saat (FPS) maksima apabila permainan dijedakan."
+msgstr "Bingkai per saat (FPS) apabila permainan hilang fokus atau dijedakan"
#: src/settings_translation_file.cpp
msgid "FSAA"
@@ -3561,7 +3560,6 @@ msgid "HUD toggle key"
msgstr "Kekunci menogol papar pandu (HUD)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
@@ -3569,11 +3567,10 @@ msgid ""
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
"Cara pengendalian panggilan API Lua yang terkecam:\n"
-"- legacy: (cuba untuk) meniru tingkah laku yang lama (lalai untuk "
-"terbitan).\n"
-"- log: meniru dan menulis log runut balik kesemua panggilan terkecam "
-"(lalai untuk nyahpepijat).\n"
-"- error: gugurkan penggunaan panggilan terkecam (dicadangkan untuk "
+"- none: Jangan log panggilan terkecam\n"
+"- log: meniru dan menulis log runut balik bagi panggilan terkecam "
+"(lalai).\n"
+"- error: gugurkan penggunaan panggilan terkecam (digalakkan untuk "
"pembangun mods)."
#: src/settings_translation_file.cpp
@@ -4106,9 +4103,8 @@ msgid "Joystick button repetition interval"
msgstr "Selang masa pengulangan butang kayu bedik"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick deadzone"
-msgstr "Jenis kayu bedik"
+msgstr "Zon mati kayu bedik"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -4213,13 +4209,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Kekunci untuk melompat.\n"
+"Kekunci untuk menggali.\n"
"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4366,13 +4361,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for placing.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Kekunci untuk melompat.\n"
+"Kekunci untuk meletak.\n"
"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5143,11 +5137,11 @@ msgstr "Buatkan semua cecair menjadi legap"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "Tahap Pemampatan Peta untuk Simpanan Cakera"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "Tahap Pemampatan Peta untuk Pemindahan Rangkaian"
#: src/settings_translation_file.cpp
msgid "Map directory"
@@ -5332,9 +5326,10 @@ msgid "Maximum FPS"
msgstr "FPS maksima"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum FPS when the window is not focused, or when the game is paused."
-msgstr "Bingkai per saat (FPS) maksima apabila permainan dijedakan."
+msgstr ""
+"Bingkai per saat (FPS) maksimum apabila tetingkap tidak difokuskan, atau "
+"apabila permainan dijedakan."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -5372,14 +5367,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum number of blocks that can be queued for loading."
-msgstr "Jumlah maksimum blok yang boleh dibaris gilirkan untuk dimuatkan."
+msgstr "Jumlah maksimum blok yang boleh menunggu giliran untuk dimuatkan."
#: 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 ""
-"Jumlah maksimum blok untuk dibarisgilirkan untuk dijana.\n"
+"Jumlah maksimum blok untuk menunggu giliran untuk dijana.\n"
"Had ini dikuatkuasakan per pemain."
#: src/settings_translation_file.cpp
@@ -5387,7 +5382,7 @@ msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
"This limit is enforced per player."
msgstr ""
-"Jumlah maksimum blok untuk dibarisgilirkan untuk dimuatkan daripada fail.\n"
+"Jumlah maksimum blok untuk menunggu giliran untuk dimuatkan daripada fail.\n"
"Had ini dikuatkuasakan per pemain."
#: src/settings_translation_file.cpp
@@ -5396,6 +5391,9 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"Jumlah maksimum muat turun serempak. Muat turun melebihi had ini akan "
+"ditunggu giliran.\n"
+"Ini mestilah lebih rendah dari curl_parallel_limit."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5809,14 +5807,12 @@ msgid "Pitch move mode"
msgstr "Mod pergerakan pic"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "Kekunci terbang"
+msgstr "Kekunci letak"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place repetition interval"
-msgstr "Selang pengulangan klik kanan"
+msgstr "Selang pengulangan perbuatan letak"
#: src/settings_translation_file.cpp
msgid ""
@@ -6304,13 +6300,17 @@ msgid "Show entity selection boxes"
msgstr "Tunjukkan kotak pemilihan entiti"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
-"Menetapkan bahasa. Biarkan kosong untuk menggunakan bahasa sistem.\n"
-"Sebuah mula semula diperlukan selepas menukar tetapan ini."
+"Tunjuk kotak pemilihan entiti\n"
+"Anda perlu mulakan semula selepas mengubah tetapan ini."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Fon tebal secara lalainya"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6595,9 +6595,8 @@ msgid "The URL for the content repository"
msgstr "URL untuk repositori kandungan"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The deadzone of the joystick"
-msgstr "Pengenal pasti kayu bedik yang digunakan"
+msgstr "Zon mati bagi kayu bedik yang digunakan"
#: src/settings_translation_file.cpp
msgid ""
@@ -6670,7 +6669,6 @@ msgstr ""
"(active_object_send_range_blocks)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The rendering back-end for Irrlicht.\n"
"A restart is required after changing this.\n"
@@ -6681,12 +6679,10 @@ msgid ""
msgstr ""
"Terjemahan bahagian belakang untuk Irrlicht.\n"
"Anda perlu memulakan semula selepas mengubah tetapan ini.\n"
-"Nota: Di Android, kekalkan dengan OGLES1 jika tidak pasti! Aplikasi mungkin "
-"tidak\n"
-"boleh dimulakan jika menggunakan tetapan lain. Di platform lain, OpenGL "
-"disyorkan,\n"
-"dan ia ialah satu-satunya pemacu yang mempunyai sokongan pembayang ketika "
-"ini."
+"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)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6725,6 +6721,8 @@ msgid ""
"The time budget allowed for ABMs to execute on each step\n"
"(as a fraction of the ABM Interval)"
msgstr ""
+"Peruntukan masa yang dibenarkan untuk ABM dilakukan di setiap langkah\n"
+"(sebagai pecahan dari selang masa ABM)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6735,14 +6733,12 @@ msgstr ""
"apabila menekan kombinasi butang kayu bedik."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
-"Jumlah masa dalam saat diambil untuk melakukan klik kanan yang berulang "
-"apabila\n"
-"pemain menekan butang tetikus kanan tanpa melepaskannya."
+"Jumlah masa dalam saat diambil untuk meletakan nod yang berulang apabila\n"
+"pemain menekan butang letak tanpa melepaskannya."
#: src/settings_translation_file.cpp
msgid "The type of joystick"
@@ -6909,6 +6905,14 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"Gunakan antialias pelbagai sampel (MSAA) untuk melembutkan sisi bongkah.\n"
+"Algoritma ini melembutkan port pandangan 3D sambil mengekalkan ketajaman "
+"imej,\n"
+"tetapi ia tidak memberi kesan bahagian dalam sesuatu tekstur\n"
+"(yang mana ia tampak lebih nyata dengan tekstur lutsinar).\n"
+"Ruangan kosong akan kelihatan di antara nod apabila pembayang dilumpuhkan.\n"
+"Jika ditetapkan ke 0, MSAA akan dilumpuhkan.\n"
+"Anda perlu mulakan semula selepas mengubah pilihan ini."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
@@ -7139,7 +7143,8 @@ msgstr ""
"saiz tekstur minima untuk tekstur penyesuai-naikkan; nilai lebih tinggi "
"tampak\n"
"lebih tajam, tetapi memerlukan memori yang lebih banyak. Nilai kuasa 2\n"
-"disyorkan. Menetapkan nilai ini lebih tinggi dari 1 tidak akan menampakkan\n"
+"digalakkan. Menetapkan nilai ini lebih tinggi dari 1 tidak akan "
+"menampakkan\n"
"kesan yang nyata melainkan tapisan bilinear/trilinear/anisotropik "
"dibolehkan.\n"
"Ini juga digunakan sebagai saiz tekstur nod asas untuk autopenyesuaian\n"
@@ -7156,6 +7161,12 @@ msgstr ""
"digunakan."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
"Sama ada animasi tekstur nod perlu dinyahsegerakkan pada setiap blok peta."
@@ -7319,6 +7330,11 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Tahap pemampatan ZLib untuk digunakan apabila menyimpan blokpeta ke cakera.\n"
+"-1 - tahap pemampatan lalai Zlib\n"
+"0 - tiada pemampatan, paling laju\n"
+"9 - pemampatan terbaik, paling lambat\n"
+"(tahap 1-3 menggunakan kaedah \"fast\" Zlib, 4-9 menggunakan kaedah biasa)"
#: src/settings_translation_file.cpp
msgid ""
@@ -7328,6 +7344,12 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Tahap pemampatan ZLib untuk digunakan apabila menghantar blokpeta kepada "
+"klien.\n"
+"-1 - tahap pemampatan lalai Zlib\n"
+"0 - tiada pemampatan, paling laju\n"
+"9 - pemampatan terbaik, paling lambat\n"
+"(tahap 1-3 menggunakan kaedah \"fast\" Zlib, 4-9 menggunakan kaedah biasa)"
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
diff --git a/po/ms_Arab/minetest.po b/po/ms_Arab/minetest.po
index 2520856c3..42d758b7d 100644
--- a/po/ms_Arab/minetest.po
+++ b/po/ms_Arab/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-10-20 18:26+0000\n"
"Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat "
"Yasuyoshi <translation@mnh48.moe>\n"
@@ -711,6 +711,11 @@ msgid "Loading..."
msgstr "سدڠ ممواتکن..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "سکريڤ ڤيهق کليئن دلومڤوهکن"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "چوب اکتيÙÚ©Ù† سمولا سناراي ڤلاين عوام Ùان ڤريقسا سمبوڠن اينترنيت اندا."
@@ -2948,7 +2953,8 @@ msgid "Enable console window"
msgstr "ممبوليهکن تتيڠکڤ کونسول"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "ممبوليهکن مود کرياتي٠اونتوق ڤتا بارو دچيڤتا."
#: src/settings_translation_file.cpp
@@ -6030,6 +6036,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Ùون تبل سچارا لالايڽ"
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "ميسيج ڤنوتوڤن"
@@ -6798,6 +6809,12 @@ msgstr ""
"دکومڤيل برسام. جيک دلومڤوهکن⹠Ùون ڤتا بيت دان Ûيکتور XML اکن دݢوناکن."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 "سام اد انيماسي تيکستور نود ڤرلو دڽهسݢرقکن ڤد ستياڤ بلوک ڤتا."
diff --git a/po/nb/minetest.po b/po/nb/minetest.po
index b3d6ae154..3762509a4 100644
--- a/po/nb/minetest.po
+++ b/po/nb/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Norwegian Bokmål (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2021-01-10 01:32+0000\n"
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/"
@@ -703,6 +703,11 @@ msgid "Loading..."
msgstr "Laster..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Skripting er slått av på klientside"
+
+#: 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 "
@@ -2974,7 +2979,8 @@ msgid "Enable console window"
msgstr "Skru på konsollvindu"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Skru på kreativt modusfor nye opprettede kart."
#: src/settings_translation_file.cpp
@@ -5888,6 +5894,11 @@ msgstr ""
"Krever omstart etter endring."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Fet skrifttype som forvalg"
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "Beskjed ved avslutning"
@@ -6587,6 +6598,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/nl/minetest.po b/po/nl/minetest.po
index f2efafdc9..f1982536a 100644
--- a/po/nl/minetest.po
+++ b/po/nl/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Dutch (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2021-01-25 20:32+0000\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-01 05:52+0000\n"
"Last-Translator: eol <joshua.de.clercq@gmail.com>\n"
"Language-Team: Dutch <https://hosted.weblate.org/projects/minetest/minetest/"
"nl/>\n"
@@ -153,52 +153,52 @@ msgstr "aangeschakeld"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" bestaat al. Wilt u het overschrijven ?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Afhankelijkheden $1 en $2 zullen geïnstalleerd worden."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 door $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 is aan het downloaden,\n"
+"$2 is ingepland"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Downloaden..."
+msgstr "$1 is aan het downloaden..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 benodigde afhankelijkheden werden niet gevonden."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
msgstr ""
+"$1 zal worden geïnstalleerd, en $2 afhankelijkheden worden overgeslagen."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Alle pakketten"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Toets is al in gebruik"
+msgstr "Reeds geïnstalleerd"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Terug naar hoofdmenu"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Spel Hosten"
+msgstr "Basis Spel:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -223,14 +223,12 @@ msgid "Install"
msgstr "Installeren"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Installeren"
+msgstr "Installeer $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Optionele afhankelijkheden:"
+msgstr "Installeer ontbrekende afhankelijkheden"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -246,26 +244,24 @@ msgid "No results"
msgstr "Geen resultaten"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Update"
+msgstr "Geen updates"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Not found"
-msgstr "Geluid dempen"
+msgstr "Niet gevonden"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Overschrijven"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Controleer of het basis spel correct is, aub."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Ingepland"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -281,11 +277,11 @@ msgstr "Update"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Allemaal bijwerken [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Bekijk meer informatie in een webbrowser"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -710,6 +706,11 @@ msgid "Loading..."
msgstr "Laden..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Client-side scripting is uitgeschakeld"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Probeer de publieke serverlijst opnieuw in te schakelen en controleer de "
@@ -768,15 +769,16 @@ msgid "Credits"
msgstr "Credits"
#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
msgid "Open User Data Directory"
-msgstr "Selecteer map"
+msgstr "Open de gebruikersdatamap"
#: builtin/mainmenu/tab_credits.lua
msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"Open de map die de door de gebruiker aangeleverde werelden, spellen, mods\n"
+"en textuur pakketten bevat in een bestandsbeheer toepassing / verkenner."
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
@@ -816,7 +818,7 @@ msgstr "Installeer spellen van ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "Naam"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -827,9 +829,8 @@ msgid "No world created or selected!"
msgstr "Geen wereldnaam opgegeven of geen wereld aangemaakt!"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Password"
-msgstr "Nieuw wachtwoord"
+msgstr "Wachtwoord"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -840,9 +841,8 @@ msgid "Port"
msgstr "Poort"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Selecteer Wereld:"
+msgstr "Selecteer Mods"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -994,9 +994,8 @@ msgid "Shaders"
msgstr "Shaders"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Zwevende eilanden (experimenteel)"
+msgstr "Shaders (experimenteel)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1196,7 +1195,7 @@ msgid "Continue"
msgstr "Verder spelen"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1219,12 +1218,12 @@ msgstr ""
"-%s: ga naar links \n"
"-%s: ga naar rechts \n"
"-%s: springen / klimmen \n"
+"-%s: graaf/duw\n"
+"-%s: plaats/gebruik \n"
"-%s: sluip / ga naar beneden \n"
"-%s: drop item \n"
"-%s: inventaris \n"
"- Muis: draaien / kijken \n"
-"- Muis links: graven / stoten \n"
-"- Muis rechts: plaats / gebruik \n"
"- Muiswiel: item selecteren \n"
"-%s: chat\n"
@@ -1753,19 +1752,18 @@ msgid "Minimap hidden"
msgstr "Mini-kaart verborgen"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Mini-kaart in radar modus, Zoom x1"
+msgstr "Mini-kaart in radar modus, Zoom x%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Minimap in oppervlaktemodus, Zoom x1"
+msgstr "Minimap in oppervlaktemodus, Zoom x%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Minimale textuur-grootte"
+msgstr "Minimap textuur modus"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -2176,7 +2174,7 @@ msgstr "Interval voor ABM's"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "ABM tijd budget"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
@@ -2688,7 +2686,7 @@ msgstr "ContentDB optie: verborgen pakketten lijst"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "ContentDB Maximum Gelijktijdige Downloads"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2759,11 +2757,12 @@ msgid "Crosshair alpha"
msgstr "Draadkruis-alphawaarde"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"Also controls the object crosshair color"
-msgstr "Draadkruis-alphawaarde. (ondoorzichtigheid; tussen 0 en 255)."
+msgstr ""
+"Draadkruis-alphawaarde (ondoorzichtigheid; tussen 0 en 255).\n"
+"Controleert ook het object draadkruis kleur"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2774,6 +2773,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Draadkruis kleur (R,G,B).\n"
+"Controleert ook het object draadkruis kleur"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2956,9 +2957,8 @@ msgid "Desynchronize block animation"
msgstr "Textuur-animaties niet synchroniseren"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "Toets voor rechts"
+msgstr "Toets voor graven"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -3025,7 +3025,8 @@ msgid "Enable console window"
msgstr "Schakel het console venster in"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Schakel creatieve modus in voor nieuwe kaarten."
#: src/settings_translation_file.cpp
@@ -3186,9 +3187,8 @@ msgstr ""
"platte laaglanden, geschikt voor een solide zwevende eilanden laag."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
-msgstr "Maximum FPS als het spel gepauzeerd is."
+msgstr "FPS als het spel gepauzeerd of niet gefocussed is"
#: src/settings_translation_file.cpp
msgid "FSAA"
@@ -3583,20 +3583,18 @@ msgid "HUD toggle key"
msgstr "HUD aan/uitschakelen toets"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
"- log: mimic and log backtrace of deprecated call (default).\n"
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
-"Behandeling van verouderde lua api aanroepen:\n"
-"- legacy: (probeer) het oude gedrag na te bootsen\n"
-" (standaard voor een 'release' versie).\n"
-"- log: boots het oude gedrag na, en log een backtrace van de aanroep\n"
-" (standaard voor een 'debug' versie).\n"
-"- error: stop de server bij gebruik van een verouderde aanroep\n"
-" (aanbevolen voor mod ontwikkelaars)."
+"Behandeling van verouderde Lua API aanroepen:\n"
+"- none: log geen verouderde aanroepen\n"
+"- log: boots het oude gedrag na, en log een backtrace van de aanroep "
+"(standaard voor een 'debug' versie).\n"
+"- error: stop de server bij gebruik van een verouderde aanroep "
+"(aanbevolen voor mod ontwikkelaars)."
#: src/settings_translation_file.cpp
msgid ""
@@ -4131,9 +4129,8 @@ msgid "Joystick button repetition interval"
msgstr "Joystick-knop herhalingsinterval"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick deadzone"
-msgstr "Joystick type"
+msgstr "Joystick dode zone"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -4238,13 +4235,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Toets voor springen.\n"
+"Toets voor graven.\n"
"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4391,13 +4387,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for placing.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Toets voor springen.\n"
+"Toets voor plaatsen.\n"
"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5171,11 +5166,11 @@ msgstr "Maak alle vloeistoffen ondoorzichtig"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "Map compressie niveau voor het bewaren op de harde schijf"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "Map compressie niveau voor netwerk transfert"
#: src/settings_translation_file.cpp
msgid "Map directory"
@@ -5363,9 +5358,10 @@ msgid "Maximum FPS"
msgstr "Maximum FPS"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum FPS when the window is not focused, or when the game is paused."
-msgstr "Maximum FPS als het spel gepauzeerd is."
+msgstr ""
+"Maximum FPS als het venster niet gefocussed is, of wanneer het spel "
+"gepauzeerd is."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -5429,6 +5425,9 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"Maximaal aantal gelijktijdige downloads. Downloads die deze limiet "
+"overschrijden zullen in de wachtrij geplaats worden.\n"
+"Deze instelling zou lager moeten zijn dan curl_parallel_limit."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5867,14 +5866,12 @@ msgid "Pitch move mode"
msgstr "Pitch beweeg modus"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "Vliegen toets"
+msgstr "Plaats toets"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place repetition interval"
-msgstr "Rechts-klik herhalingsinterval"
+msgstr "Plaats (Rechts-klik) herhalingsinterval"
#: src/settings_translation_file.cpp
msgid ""
@@ -6357,13 +6354,17 @@ msgid "Show entity selection boxes"
msgstr "Toon selectie-box voor objecten"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
-"Stel de taal in. De systeem-taal wordt gebruikt indien leeg.\n"
-"Een herstart is noodzakelijk om de nieuwe taal te activeren."
+"Toon selectievakjes voor entiteiten\n"
+"Een herstart is noodzakelijk om de wijziging te activeren."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Standaard vetgedrukt"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6649,9 +6650,8 @@ msgid "The URL for the content repository"
msgstr "De URL voor de inhoudsrepository"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The deadzone of the joystick"
-msgstr "De identificatie van de stuurknuppel die u gebruikt"
+msgstr "De dode zone van de stuurknuppel die u gebruikt"
#: src/settings_translation_file.cpp
msgid ""
@@ -6727,7 +6727,6 @@ msgstr ""
"Dit moet samen met active_object_send_range_blocks worden geconfigureerd."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The rendering back-end for Irrlicht.\n"
"A restart is required after changing this.\n"
@@ -6740,8 +6739,9 @@ msgstr ""
"Na het wijzigen hiervan is een herstart vereist. \n"
"Opmerking: op Android, blijf bij OGLES1 als je het niet zeker weet! Anders "
"start de app mogelijk niet. \n"
-"Op andere platforms wordt OpenGL aanbevolen en het is de enige driver met \n"
-"shader-ondersteuning momenteel."
+"Op andere platformen wordt OpenGL aanbevolen.\n"
+"OpenGL (alleen op desktop pc) en OGLES2 (experimenteel), zijn de enige "
+"drivers met shader-ondersteuning momenteel"
#: src/settings_translation_file.cpp
msgid ""
@@ -6779,6 +6779,8 @@ msgid ""
"The time budget allowed for ABMs to execute on each step\n"
"(as a fraction of the ABM Interval)"
msgstr ""
+"Het tijdsbudget dat toegestaan wordt aan ABM's om elke stap uit te voeren\n"
+"(als een deel van het ABM interval)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6789,12 +6791,12 @@ msgstr ""
" ingedrukt gehouden wordt."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
-"De tijd in seconden tussen herhaalde rechts-klikken als de rechter muisknop\n"
+"De tijd in seconden tussen herhaalde rechts-klikken als de plaats knop "
+"(rechter muisknop)\n"
"ingedrukt gehouden wordt."
#: src/settings_translation_file.cpp
@@ -6968,6 +6970,14 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"Gebruik multi-sample anti-aliasing (MSAA) om de randen van de blokken glad "
+"te maken.\n"
+"Dit algoritme maakt de 3D viewport glad en houdt intussen het beeld scherp,\n"
+"zonder de binnenkant van de texturen te wijzigen\n"
+"(wat erg opvalt bij transparante texturen)\n"
+"Zichtbare ruimtes verschijnen tussen nodes als de shaders uitgezet zijn.\n"
+"Als de waarde op 0 staat, is MSAA uitgeschakeld.\n"
+"Een herstart is nodig om deze wijziging te laten functioneren."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
@@ -7210,6 +7220,12 @@ msgstr ""
"worden."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 "Node-animaties in wereldblokken niet synchroniseren."
@@ -7377,6 +7393,12 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Zlib compressie niveau om mapblokken op de harde schijf te bewaren.\n"
+"-1: Zlib's standaard compressie niveau\n"
+"0: geen compressie, snelst\n"
+"9: maximale compressie, traagst\n"
+"(niveau's 1 tot 3 gebruiken Zlib's snelle methode, 4 tot 9 gebruiken de "
+"normale methode)"
#: src/settings_translation_file.cpp
msgid ""
@@ -7386,6 +7408,12 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Zlib compressie niveau om mapblokken te versturen naar de client.\n"
+"-1: Zlib's standaard compressie niveau\n"
+"0: geen compressie, snelst\n"
+"9: maximale compressie, traagst\n"
+"(niveau's 1 tot 3 gebruiken Zlib's snelle methode, 4 tot 9 gebruiken de "
+"normale methode)"
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
diff --git a/po/nn/minetest.po b/po/nn/minetest.po
index 2968d5a1a..4ad47fbf8 100644
--- a/po/nn/minetest.po
+++ b/po/nn/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Norwegian Nynorsk (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2021-01-10 01:32+0000\n"
-"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-20 05:50+0000\n"
+"Last-Translator: Tor Egil Hoftun Kvæstad <toregilhk@hotmail.com>\n"
"Language-Team: Norwegian Nynorsk <https://hosted.weblate.org/projects/"
"minetest/minetest/nn/>\n"
"Language: 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.4.1-dev\n"
+"X-Generator: Weblate 4.5\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -24,12 +24,11 @@ msgstr "Du døydde"
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
-msgstr ""
+msgstr "OK"
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred in a Lua script:"
-msgstr "Ein feil har skjedd med eit Lua manus, slik som ein mod:"
+msgstr "Ein feil oppstod i eit LUA-skript:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
@@ -41,11 +40,11 @@ msgstr "Hovudmeny"
#: builtin/fstk/ui.lua
msgid "Reconnect"
-msgstr "Kople attende sambandet"
+msgstr "Kople til igjen"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
-msgstr "Tenarmaskinen ber om å få forbindelsen attende:"
+msgstr "Tenaren har førespurt å kople til igjen:"
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
@@ -53,19 +52,19 @@ msgstr "Protkoll versjon bommert. "
#: builtin/mainmenu/common.lua
msgid "Server enforces protocol version $1. "
-msgstr "Tenarmaskinen krevjar protokoll versjon $1. "
+msgstr "Tenaren krev protokoll versjon $1. "
#: builtin/mainmenu/common.lua
msgid "Server supports protocol versions between $1 and $2. "
-msgstr "Tenarmaskinen støttar protokoll versjonar mellom $1 og $2. "
+msgstr "Tenaren støtter protokollversjonar mellom $1 og $2. "
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
-msgstr "Vi støttar berre protokoll versjon $1."
+msgstr "Me støtter berre protokoll versjon $1."
#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
-msgstr "Vi støttar protokoll versjonar mellom $1 og $2."
+msgstr "Me støtter protokollversjonar mellom $1 og $2."
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_create_world.lua
@@ -85,62 +84,59 @@ msgstr "Avhengigheiter:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
-msgstr "Deaktiver allt"
+msgstr "Deaktiver alt"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "Deaktivere modifikasjons-pakka"
+msgstr "Deaktiver modifikasjonspakken"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
-msgstr "Aktiver allt"
+msgstr "Aktiver alt"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "Aktiver modifikasjons-pakka"
+msgstr "Aktiver modifikasjonspakken"
#: 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 ""
-"Fåfengt å aktivere modifikasjon \"$1\" sia den innehald ugyldige teikn. "
-"Berre teikna [a-z0-9_] e tillaten."
+"Klarte ikkje å aktivere modifikasjon «$1», då den inneheld ugyldige teikn. "
+"Berre teikna [a-z0-9_] er tillatne."
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr ""
+msgstr "Finn fleire modifikasjonar"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Modifikasjon:"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No (optional) dependencies"
-msgstr "Valgbare avhengigheiter:"
+msgstr "Ingen (valfrie) avhengigheiter"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
msgstr "Ikkje nokon spill skildring e sørgja for."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No hard dependencies"
-msgstr "Ikkje nokon avhengigheiter."
+msgstr "Ingen obligatoriske avhengigheiter"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
msgstr "Ikkje noko modifikasjons-pakke skildring e sørgja for."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No optional dependencies"
-msgstr "Valgbare avhengigheiter:"
+msgstr "Ingen valfrie avhengigheiter"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
-msgstr "Valgbare avhengigheiter:"
+msgstr "Valfrie avhengigheiter:"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
@@ -149,19 +145,19 @@ msgstr "Lagre"
#: builtin/mainmenu/dlg_config_world.lua
msgid "World:"
-msgstr "Verda:"
+msgstr "Verd:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr "Aktivert"
+msgstr "aktivert"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "«$1» eksisterer allereie. Vil du overskrive den?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "$1 og $2 avhengigheiter vil verte installerte."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
@@ -174,39 +170,36 @@ msgid ""
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Laster ned..."
+msgstr "$1 lastar ned …"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 obligatoriske avhengigheiter vart ikkje funne."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 vil verte installert, og $2 avhengigheiter vil verte hoppa over."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Alle pakker"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Knapp er allereie i bruk"
+msgstr "Allereie installert"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Attende til hovudmeny"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Bli husvert"
+msgstr "Basisspel:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
-msgstr ""
+msgstr "ContentDB er ikkje tilgjengeleg når Minetest vart kompilert utan cURL"
#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
@@ -215,7 +208,7 @@ msgstr "Laster ned..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr "Fåfengt å laste ned $1"
+msgstr "Klarte ikkje å laste ned $1"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -227,44 +220,41 @@ msgid "Install"
msgstr "Installer"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Installer"
+msgstr "Installer $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Valgbare avhengigheiter:"
+msgstr "Installer manglande avhengigheiter"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
-msgstr "Modder"
+msgstr "Modifikasjonar"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr "Ikkje nokon pakkar kunne bli henta"
+msgstr "Ingen pakkar kunne verte henta"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
-msgstr "Ikkje noko resultat"
+msgstr "Ingen resultat"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Oppdater"
+msgstr "Ingen oppdateringar"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "Ikkje funnen"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Overskriv"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Ver venleg å sjekke at basisspelet er korrekt."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
@@ -284,19 +274,19 @@ msgstr "Oppdater"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Oppdater alt [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Sjå meir informasjon i ein nettlesar"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
-msgstr "Ein verd med namnet \"$1\" finns allereie"
+msgstr "Ein verd med namnet «$1» eksisterer allereie"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Additional terrain"
-msgstr ""
+msgstr "Ytterlegare terreng"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Altitude chill"
@@ -312,11 +302,11 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biomes"
-msgstr ""
+msgstr "Biom"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caverns"
-msgstr ""
+msgstr "Holer"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
@@ -328,17 +318,16 @@ msgid "Create"
msgstr "Skap"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Decorations"
-msgstr "Informasjon:"
+msgstr "Dekorasjonar"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Last ned eit spel, sånn som Minetest spellet, ifrå 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 eit ned på minetest.net"
+msgstr "Last ned eit frå minetest.net"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -346,15 +335,15 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Flat terrain"
-msgstr ""
+msgstr "Flatt terreng"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr ""
+msgstr "Svevande landmassar på himmelen"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-msgstr ""
+msgstr "Flyteland (eksperimentell)"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
@@ -362,11 +351,11 @@ msgstr "Spel"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr ""
+msgstr "Generer ikkjefraktalterreng: Hav og undergrunn"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
-msgstr ""
+msgstr "Haugar"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Humid rivers"
@@ -374,15 +363,15 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Increases humidity around rivers"
-msgstr ""
+msgstr "Aukar fuktigheita rundt elver"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
-msgstr ""
+msgstr "Sjøar"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Low humidity and high heat causes shallow or dry rivers"
-msgstr ""
+msgstr "Låg fuktigheit og høg temperatur fører til grunne eller tørre elver"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
@@ -398,15 +387,15 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
-msgstr ""
+msgstr "Fjell"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
-msgstr ""
+msgstr "Leireflyt"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
-msgstr ""
+msgstr "Nettverk av tunellar og holer"
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
@@ -422,11 +411,11 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Rivers"
-msgstr ""
+msgstr "Elver"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
-msgstr ""
+msgstr "Elver på havnivå"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -449,15 +438,15 @@ msgstr ""
#: 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"
@@ -465,15 +454,15 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
-msgstr ""
+msgstr "Tre og jungelgras"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Vary river depth"
-msgstr ""
+msgstr "Varier elvedjupne"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Very large caverns deep in the underground"
-msgstr ""
+msgstr "Svært store holer djupt i undergrunnen"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
@@ -490,7 +479,7 @@ msgstr "Du har ikkje installert noko spel."
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr "Er du sikker på at du har lyst til å 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
@@ -500,23 +489,23 @@ msgstr "Slett"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "pkgmgr: sletting av \"$1\" gjekk ikkje"
+msgstr "pkgmgr: klarte ikkje å slette «$1»"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
-msgstr "pkgmgr: ugyldig rute \"$1\""
+msgstr "pkgmgr: ugyldig sti «$1»"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr "Slett verd \"$1\"?"
+msgstr "Slett verd «$1»?"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
-msgstr "Akseptér"
+msgstr "Aksepter"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Omdøp Modpakka:"
+msgstr "Døyp om modifikasjonspakken:"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
@@ -532,11 +521,11 @@ msgstr "(Ikkje nokon skildring gjeven)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
-msgstr "To-dimensjonal lyd"
+msgstr "2D-støy"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
-msgstr "< Attende til innstillingar"
+msgstr "< Tilbake til innstillingssida"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
@@ -592,11 +581,11 @@ msgstr "Søk"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
-msgstr "Velje ein mappe"
+msgstr "Vel katalog"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select file"
-msgstr "Velje eit dokument"
+msgstr "Vel fil"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Show technical names"
@@ -604,11 +593,11 @@ msgstr "Vis tekniske namn"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
-msgstr "Verdien må i det minste være $1."
+msgstr "Verdien må minst vere $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
-msgstr "Verdien må ikkje være høgare enn $1."
+msgstr "Verdien må ikkje vere større enn $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
@@ -647,7 +636,7 @@ msgstr "Absolutt verdi"
#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
-msgstr "Standard"
+msgstr "standardar"
#. ~ "eased" is a noise parameter flag.
#. It is used to make the map smoother and
@@ -663,35 +652,37 @@ msgstr "$1 (Aktivert)"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
-msgstr "$1 modder"
+msgstr "$1 modifikasjonar"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "Funka ikkje å installere $1 til $2"
+msgstr "Klarte ikkje å installere $1 til $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
msgstr ""
-"Installer modifikasjon: Funka ikkje å finne eit ekte modifikasjons namn for: "
-"$1"
+"Installer modifikasjon: Klarte ikkje å finne det reelle modifikasjonsnamnet "
+"for: $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
-"Installer Modifikasjon: Funka ikkje å finne ein passande for modpakke $1"
+"Installer modifikasjon: Klarte ikkje å finne ein passande katalog for "
+"modifikasjonspakke $1"
#: builtin/mainmenu/pkgmgr.lua
+#, fuzzy
msgid "Install: Unsupported file type \"$1\" or broken archive"
msgstr ""
"Installer: Ikkje-støtta dokument type \"$1\" eller så funker ikkje arkivet"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: file: \"$1\""
-msgstr "Installer: dokument: \"$1\""
+msgstr "Installer: fil: «$1»"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr "Funka ikkje å finne ein gyldig modifikasjon eller mod-pakke"
+msgstr "Klarte ikkje å finne ein gyldig modifikasjon eller modifikasjonspakke"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
@@ -711,9 +702,15 @@ msgstr "Funka ikkje å installere mod-pakka som ein $1"
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
msgid "Loading..."
-msgstr "Laster ned..."
+msgstr "Lastar …"
+
+#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Klient side-skildring er 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 "
@@ -729,7 +726,7 @@ msgstr "Innhald"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
-msgstr "Deaktivér tekstur pakke"
+msgstr "Deaktiver teksturpakke"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
@@ -737,15 +734,15 @@ msgstr "Informasjon:"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
-msgstr "Installer pakker:"
+msgstr "Installerte pakker:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
-msgstr "Ikkje nokon avhengigheiter."
+msgstr "Ingen avhengigheiter."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr "Ikkje nokon pakke skildring tilgjengelig"
+msgstr "Inga pakkeskildring tilgjengeleg"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
@@ -757,15 +754,15 @@ msgstr "Avinstallér pakka"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
-msgstr "Bruk tekstur pakke"
+msgstr "Bruk teksturpakke"
#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
-msgstr "Aktive bidragere"
+msgstr "Aktive bidragsytarar"
#: builtin/mainmenu/tab_credits.lua
msgid "Core Developers"
-msgstr "Kjerne-utviklere"
+msgstr "Kjerne-utviklarar"
#: builtin/mainmenu/tab_credits.lua
msgid "Credits"
@@ -784,11 +781,11 @@ msgstr ""
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
-msgstr "Førre bidragere"
+msgstr "Tidlegare bidragsytarar"
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Core Developers"
-msgstr "Førre kjerne-utviklere"
+msgstr "Tidlegare kjerne-utviklarar"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
@@ -807,20 +804,22 @@ msgid "Enable Damage"
msgstr "Aktivér skading"
#: builtin/mainmenu/tab_local.lua
+#, fuzzy
msgid "Host Game"
msgstr "Bli husvert"
#: builtin/mainmenu/tab_local.lua
+#, fuzzy
msgid "Host Server"
msgstr "Bli tenarmaskin's vert"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
-msgstr ""
+msgstr "Installer spel frå ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "Namn"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -828,12 +827,11 @@ msgstr "Ny"
#: builtin/mainmenu/tab_local.lua
msgid "No world created or selected!"
-msgstr "Ikkje noko verd skapt eller valgt!"
+msgstr "Inga verd skapt eller valt!"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Password"
-msgstr "Nytt passord"
+msgstr "Passord"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -844,9 +842,8 @@ msgid "Port"
msgstr "Port"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Vel verd:"
+msgstr "Vel modifikasjonar"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -854,7 +851,7 @@ msgstr "Vel verd:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr "Tenarmaskin port"
+msgstr "Tenarport"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
@@ -862,7 +859,7 @@ msgstr "Start spel"
#: builtin/mainmenu/tab_online.lua
msgid "Address / Port"
-msgstr "Stad/port"
+msgstr "Adresse / port"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -926,6 +923,7 @@ msgid "Antialiasing:"
msgstr "Kantutjemning:"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Autosave Screen Size"
msgstr "Automatisk sjerm størrelse"
@@ -962,10 +960,12 @@ msgid "No Mipmap"
msgstr "Ingen Mipkart"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Node Highlighting"
msgstr "Knute-fremheving"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Node Outlining"
msgstr "Knute-utlinjing"
@@ -983,17 +983,18 @@ msgstr "Ugjennomsiktig vatn"
#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
-msgstr "Partikkler"
+msgstr "Partiklar"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
-msgstr "Sjerm:"
+msgstr "Skjerm:"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
msgstr "Innstillingar"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
msgid "Shaders"
msgstr "Dybdeskaper"
@@ -1003,6 +1004,7 @@ msgid "Shaders (experimental)"
msgstr "Dybdeskaper (ikkje tilgjengelig)"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Shaders (unavailable)"
msgstr "Dybdeskaper (ikkje tilgjengelig)"
@@ -1019,10 +1021,12 @@ msgid "Texturing:"
msgstr "Teksturering:"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr "For å aktivere skumrings-effekt så må OpenGL driveren være i bruk."
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
msgid "Tone Mapping"
msgstr "Tone kartlegging"
@@ -1035,6 +1039,7 @@ msgid "Trilinear Filter"
msgstr "Tri-lineær filtréring"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Waving Leaves"
msgstr "Raslende lauv"
@@ -1044,6 +1049,7 @@ msgid "Waving Liquids"
msgstr "Raslende lauv"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Waving Plants"
msgstr "Raslende planter"
@@ -1061,23 +1067,24 @@ msgstr "Førebur noder"
#: src/client/client.cpp
msgid "Initializing nodes..."
-msgstr "Førebur node..."
+msgstr "Førebur nodar …"
#: src/client/client.cpp
msgid "Loading textures..."
-msgstr "Lastar teksturar..."
+msgstr "Lastar teksturar …"
#: src/client/client.cpp
+#, fuzzy
msgid "Rebuilding shaders..."
msgstr "Gjennbygger dybdeskaper..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
-msgstr "Kopling gikk galen (Tidsavbrott?)"
+msgstr "Tilkoplingsfeil (Tidsavbrot?)"
#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
-msgstr "Kunne ikkje finne eller ha i gang spelet \""
+msgstr "Kunne ikkje finne eller laste spelet \""
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1088,8 +1095,9 @@ msgid "Main Menu"
msgstr "Hovudmeny"
#: src/client/clientlauncher.cpp
+#, fuzzy
msgid "No world selected and no address provided. Nothing to do."
-msgstr "Ingen verd valgt og ikkje nokon adresse valg. Ikkje noko å gjere."
+msgstr "Inga verd er vald og ikkje nokon adresse valg. Ikkje noko å gjere."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
@@ -1097,13 +1105,15 @@ msgstr "Spelarnamn for langt."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr "Ver vennleg og velje eit anna namn!"
+msgstr "Ver venleg å velje eit namn!"
#: src/client/clientlauncher.cpp
+#, fuzzy
msgid "Provided password file failed to open: "
msgstr "Passord dokumentet du ga går ikkje an å åpne: "
#: src/client/clientlauncher.cpp
+#, fuzzy
msgid "Provided world path doesn't exist: "
msgstr "Verds-ruta du ga finnes ikkje: "
@@ -1132,6 +1142,7 @@ msgid "- Address: "
msgstr "- Adresse: "
#: src/client/game.cpp
+#, fuzzy
msgid "- Creative Mode: "
msgstr "- Gude løyving: "
@@ -1158,7 +1169,7 @@ msgstr "- Spelar mot spelar (PvP): "
#: src/client/game.cpp
msgid "- Server Name: "
-msgstr "- Tenarmaskin namn: "
+msgstr "- Tenarnamn: "
#: src/client/game.cpp
msgid "Automatic forward disabled"
@@ -1198,10 +1209,10 @@ msgstr "Kopler til tenarmaskin..."
#: src/client/game.cpp
msgid "Continue"
-msgstr "Fortsetja"
+msgstr "Fortset"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1219,19 +1230,19 @@ msgid ""
"- %s: chat\n"
msgstr ""
"Styring:\n"
-"- %s: Framsteg\n"
-"- %s: Baksteg\n"
-"- %s: Sidesteg mot venstre\n"
-"- %s: Sidesteg mot høyre\n"
-"- %s: hopp/klatre\n"
-"- %s: snike seg rundt/bøye seg\n"
-"- %s: slipp gjennstand\n"
+"- %s: gå framover\n"
+"- %s: gå bakover\n"
+"- %s: gå mot venstre\n"
+"- %s: gå mot høgre\n"
+"- %s: hopp/klatre opp\n"
+"- %s: grav/slå\n"
+"- %s: plasser/nytt\n"
+"- %s: snik/klatre ned\n"
+"- %s: slepp ting\n"
"- %s: inventar\n"
-"- Datamus: snu seg/sjå rundt\n"
-"- Datamus, venstre klikk: grave/slå\n"
-"- Datamus, høgre klikk: plassér/bruk\n"
-"- Datamus, skrolle-hjul: select item\n"
-"- %s: skravlerør\n"
+"- Mus: snu deg/sjå\n"
+"- Musehjul: vel ting\n"
+"- %s: nettprat\n"
#: src/client/game.cpp
msgid "Creating client..."
@@ -1424,7 +1435,7 @@ msgstr "Lyd e dempa"
#: src/client/game.cpp
msgid "Sound system is disabled"
-msgstr ""
+msgstr "Lydsystemet er slått av"
#: src/client/game.cpp
msgid "Sound system is not supported on this build"
@@ -1759,14 +1770,14 @@ msgid "Minimap hidden"
msgstr "Minikart er gøymt"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Minikart i radar modus, Zoom x1"
+msgstr "Minikart i radarmodus, Zoom x%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Minikart i overflate modus, Zoom x1"
+msgstr "Minikart i overflatemodus, Zoom x%d"
#: src/client/minimap.cpp
#, fuzzy
@@ -2054,11 +2065,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "3D clouds"
-msgstr ""
+msgstr "3D-skyer"
#: src/settings_translation_file.cpp
msgid "3D mode"
-msgstr ""
+msgstr "3D-modus"
#: src/settings_translation_file.cpp
msgid "3D mode parallax strength"
@@ -2066,13 +2077,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
-msgstr ""
+msgstr "3D-støy som definerer gigantiske holer."
#: src/settings_translation_file.cpp
msgid ""
"3D noise defining mountain structure and height.\n"
"Also defines structure of floatland mountain terrain."
msgstr ""
+"3D-støy som definerer fjellstruktur og -høgde.\n"
+"Definerer og strukturen på fjellterreng for flyteland."
#: src/settings_translation_file.cpp
msgid ""
@@ -2088,7 +2101,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "3D noise defining terrain."
-msgstr ""
+msgstr "3D-støy som definerer terreng."
#: src/settings_translation_file.cpp
msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
@@ -2120,11 +2133,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
-msgstr ""
+msgstr "Ein beskjed som skal visast til alle klientane når tenaren kræsjar."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
msgstr ""
+"Ein beskjed som skal visast til alle klientane når tenaren vert slått av."
#: src/settings_translation_file.cpp
msgid "ABM interval"
@@ -2140,11 +2154,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
-msgstr ""
+msgstr "Akselerasjon i luft"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
-msgstr ""
+msgstr "Gravitasjonsakselerasjon, i nodar per sekund per sekund."
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
@@ -2191,7 +2205,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Advanced"
-msgstr ""
+msgstr "Avansert"
#: src/settings_translation_file.cpp
msgid ""
@@ -2212,11 +2226,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr ""
+msgstr "Antal meldingar ein spelar kan sende per 10 sekund."
#: src/settings_translation_file.cpp
msgid "Amplifies the valleys."
-msgstr ""
+msgstr "Forsterkar dalane."
#: src/settings_translation_file.cpp
msgid "Anisotropic filtering"
@@ -2281,7 +2295,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
-msgstr ""
+msgstr "Rapporter automatisk til tenarlista."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
@@ -2289,7 +2303,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
-msgstr ""
+msgstr "Autoskaleringsmodus"
#: src/settings_translation_file.cpp
msgid "Backward key"
@@ -2305,11 +2319,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Basic"
-msgstr ""
+msgstr "Basis"
#: src/settings_translation_file.cpp
msgid "Basic privileges"
-msgstr ""
+msgstr "Basisprivilegium"
#: src/settings_translation_file.cpp
msgid "Beach noise"
@@ -2365,7 +2379,7 @@ msgstr "Bygg intern spelar"
#: src/settings_translation_file.cpp
msgid "Builtin"
-msgstr ""
+msgstr "Innebygd"
#: src/settings_translation_file.cpp
msgid ""
@@ -2439,11 +2453,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Chat font size"
-msgstr ""
+msgstr "Tekststørrelse for nettprat"
#: src/settings_translation_file.cpp
msgid "Chat key"
-msgstr ""
+msgstr "Nettpratstast"
#: src/settings_translation_file.cpp
msgid "Chat log level"
@@ -2491,11 +2505,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Client"
-msgstr ""
+msgstr "Klient"
#: src/settings_translation_file.cpp
msgid "Client and Server"
-msgstr ""
+msgstr "Klient og tenar"
#: src/settings_translation_file.cpp
msgid "Client modding"
@@ -2511,15 +2525,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Climbing speed"
-msgstr ""
+msgstr "Klatrefart"
#: src/settings_translation_file.cpp
msgid "Cloud radius"
-msgstr ""
+msgstr "Skyradius"
#: src/settings_translation_file.cpp
msgid "Clouds"
-msgstr ""
+msgstr "Skyer"
#: src/settings_translation_file.cpp
msgid "Clouds are a client side effect."
@@ -2527,11 +2541,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Clouds in menu"
-msgstr ""
+msgstr "Skyer i meny"
#: src/settings_translation_file.cpp
msgid "Colored fog"
-msgstr ""
+msgstr "Farga tåke"
#: src/settings_translation_file.cpp
msgid ""
@@ -2594,7 +2608,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
-msgstr ""
+msgstr "URL til ContentDB"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
@@ -2638,11 +2652,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Crash message"
-msgstr ""
+msgstr "Kræsjmelding"
#: src/settings_translation_file.cpp
msgid "Creative"
-msgstr ""
+msgstr "Kreativ"
#: src/settings_translation_file.cpp
msgid "Crosshair alpha"
@@ -2698,29 +2712,31 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Default acceleration"
-msgstr ""
+msgstr "Standard akselerasjon"
#: src/settings_translation_file.cpp
msgid "Default game"
-msgstr ""
+msgstr "Standard spel"
#: 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 ""
+"Standard spel når du lagar ei ny verd.\n"
+"Dette vil verte overstyrt når du lagar ei verd frå hovudmenyen."
#: src/settings_translation_file.cpp
msgid "Default password"
-msgstr ""
+msgstr "Standard passord"
#: src/settings_translation_file.cpp
msgid "Default privileges"
-msgstr ""
+msgstr "Standard privilegium"
#: src/settings_translation_file.cpp
msgid "Default report format"
-msgstr ""
+msgstr "Standard rapportformat"
#: src/settings_translation_file.cpp
msgid "Default stack size"
@@ -2895,7 +2911,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5597,6 +5613,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6274,6 +6294,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/pl/minetest.po b/po/pl/minetest.po
index e8d3b20f3..4c5d166e8 100644
--- a/po/pl/minetest.po
+++ b/po/pl/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Polish (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-12-27 00:29+0000\n"
"Last-Translator: Atrate <Atrate@protonmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -722,6 +722,11 @@ msgid "Loading..."
msgstr "Åadowanie..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Skryptowanie po stronie klienta jest wyłączone"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Spróbuj ponownie włączyć publiczną listę serwerów i sprawdź swoje połączenie "
@@ -3031,7 +3036,8 @@ msgid "Enable console window"
msgstr "Odblokuj okno konsoli"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Zezwól na tryb kreatywny dla nowo powstałych map."
#: src/settings_translation_file.cpp
@@ -6389,6 +6395,10 @@ msgstr ""
"Wymagany restart po zmianie ustawienia."
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "Komunikat zamknięcia serwera"
@@ -7181,6 +7191,12 @@ msgstr ""
"wspierajÄ…ca takie czcionki."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 "Określ kiedy animacje tekstur na blok powinny być niesynchronizowane."
diff --git a/po/pt/minetest.po b/po/pt/minetest.po
index e79a3841d..78c46b6d8 100644
--- a/po/pt/minetest.po
+++ b/po/pt/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Portuguese (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-12-10 19:29+0000\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-23 15:50+0000\n"
"Last-Translator: ssantos <ssantos@web.de>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/minetest/"
"minetest/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.4-dev\n"
+"X-Generator: Weblate 4.5\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -154,52 +154,51 @@ msgstr "ativado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" já existe. Gostaria de sobrescrevê-lo?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "As dependências de $1 e $2 serão instaladas."
#: 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 ""
+"A descarregar $1,\n"
+"$2 na fila"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "A descarregar..."
+msgstr "A descarregar $1..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 dependências necessárias não foram encontradas."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 serão instalados e $2 dependências serão ignoradas."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Todos os pacotes"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Tecla já em uso"
+msgstr "Já instalado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Voltar ao menu principal"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Hospedar Jogo"
+msgstr "Jogo base:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -223,14 +222,12 @@ msgid "Install"
msgstr "Instalar"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Instalar"
+msgstr "Instalar $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Dependências opcionais:"
+msgstr "Instalar dependências ausentes"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -246,26 +243,24 @@ msgid "No results"
msgstr "Sem resultados"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Atualizar"
+msgstr "Sem atualizações"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Not found"
-msgstr "Mutar som"
+msgstr "Não encontrado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Sobrescrever"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Verifique se o jogo base está correto."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Enfileirado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -281,11 +276,11 @@ msgstr "Atualizar"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Atualizar tudo [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Exibir mais informações num navegador da Web"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -709,6 +704,11 @@ msgid "Loading..."
msgstr "A carregar..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "O scripting de cliente está desativado"
+
+#: 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 à "
@@ -767,15 +767,16 @@ msgid "Credits"
msgstr "Méritos"
#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
msgid "Open User Data Directory"
-msgstr "Selecione o diretório"
+msgstr "Abrir o diretório de dados do utilizador"
#: builtin/mainmenu/tab_credits.lua
msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"Abre o diretório que contém mundos, jogos, mods fornecidos pelo utilizador,\n"
+"e pacotes de textura num gestor de ficheiros / explorador."
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
@@ -815,7 +816,7 @@ msgstr "Instalar jogos do ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "Nome"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -826,9 +827,8 @@ msgid "No world created or selected!"
msgstr "Nenhum mundo criado ou seleccionado!"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Password"
-msgstr "Palavra-passe nova"
+msgstr "Palavra-passe"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -839,9 +839,8 @@ msgid "Port"
msgstr "Porta"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Seleccionar Mundo:"
+msgstr "Selecionar mods"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -993,9 +992,8 @@ msgid "Shaders"
msgstr "Sombras"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Terrenos flutuantes (experimental)"
+msgstr "Shaders (experimental)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1195,7 +1193,7 @@ msgid "Continue"
msgstr "Continuar"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1215,15 +1213,15 @@ msgstr ""
"Controles:\n"
"- %s: mover para a frente\n"
"- %s: mover para trás\n"
-"- %s: mover à esquerda\n"
-"- %s: mover-se para a direita\n"
+"- %s: mover para a esquerda\n"
+"- %s: mover para a direita\n"
"- %s: saltar/escalar\n"
+"- %s: cavar/socar\n"
+"- %s: colocar/usar\n"
"- %s: esgueirar/descer\n"
"- %s: soltar item\n"
"- %s: inventário\n"
"- Rato: virar/ver\n"
-"- Rato à esquerda: escavar/dar soco\n"
-"- Rato direito: posicionar/usar\n"
"- Roda do rato: selecionar item\n"
"- %s: bate-papo\n"
@@ -1752,19 +1750,18 @@ msgid "Minimap hidden"
msgstr "Minimapa escondido"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Minimapa em modo radar, zoom 1x"
+msgstr "Minimapa em modo radar, ampliação %dx"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Minimapa em modo de superfície, zoom 1x"
+msgstr "Minimapa em modo de superfície, ampliação %dx"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Tamanho mínimo da textura"
+msgstr "Minimapa em modo de textura"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -2170,7 +2167,7 @@ msgstr "Intervalo do ABM"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "Orçamento de tempo do ABM"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
@@ -2676,7 +2673,7 @@ msgstr "Lista negra de flags do ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "Máximo de descargas simultâneas de ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -3013,7 +3010,8 @@ msgid "Enable console window"
msgstr "Ativar janela de console"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Ativar modo criativo para mundos novos."
#: src/settings_translation_file.cpp
@@ -6308,6 +6306,11 @@ msgstr ""
"Apos mudar isso uma reinicialização é necessária."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Fonte em negrito por predefinição"
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "Mensagem de desligamento"
@@ -7121,6 +7124,12 @@ msgstr ""
"compilado."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
"Determina se animações das texturas dos cubos devem ser dessincronizadas "
diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po
index 811834c6b..295a59bc5 100644
--- a/po/pt_BR/minetest.po
+++ b/po/pt_BR/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Portuguese (Brazil) (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2021-01-22 03:32+0000\n"
-"Last-Translator: Ronoaldo Pereira <ronoaldo@gmail.com>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-23 15:50+0000\n"
+"Last-Translator: Victor Barcelos Lacerda <victornuti.1@gmail.com>\n"
"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.5-dev\n"
+"X-Generator: Weblate 4.5\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -60,11 +60,11 @@ msgstr "O servidor suporta versões de protocolo entre $1 e $2. "
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
-msgstr "Nós apenas suportamos a versão de protocolo $1."
+msgstr "Suportamos apenas o protocolo de versão $1."
#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
-msgstr "Nós suportamos as versões de protocolo entre $1 e $2 ."
+msgstr "Suportamos protocolos com versões entre $1 e $2."
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_create_world.lua
@@ -125,7 +125,7 @@ msgstr "Nenhuma descrição de jogo disponível."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr "Sem dependências rígidas"
+msgstr "Sem dependências"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
@@ -154,52 +154,51 @@ msgstr "habilitado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" já existe. Gostaria de sobrescrevê-lo?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "As dependências $1 e $2 serão instaladas."
#: 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 baixando,\n"
+"$2 na fila"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Baixando..."
+msgstr "$1 baixando..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 dependências obrigatórias não puderam ser encontradas."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 será instalado, e $2 dependências serão ignoradas."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Todos os pacotes"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Essa tecla já está em uso"
+msgstr "Já instalado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Voltar ao menu principal"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Criar Jogo"
+msgstr "Jogo Base:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -211,7 +210,7 @@ msgstr "Baixando..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr "Falhou em baixar $1"
+msgstr "Falha ao baixar $1"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -223,14 +222,12 @@ msgid "Install"
msgstr "Instalar"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Instalar"
+msgstr "Instalar $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Dependências opcionais:"
+msgstr "Instalar dependências ausentes"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -239,33 +236,31 @@ msgstr "Modulos (Mods)"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr "Nenhum pacote pode ser recuperado"
+msgstr "Nenhum pacote pôde ser recuperado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
msgstr "Sem resultados"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Atualizar"
+msgstr "Sem atualizações"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Not found"
-msgstr "Mutar som"
+msgstr "Não encontrado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Sobrescrever"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Verifique se o jogo base está correto."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Na fila"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -281,11 +276,11 @@ msgstr "Atualizar"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Atualizar tudo [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Veja mais informações em um navegador da web"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -297,15 +292,15 @@ msgstr "Terreno adicional"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Altitude chill"
-msgstr "Frio de altitude"
+msgstr "Altitude fria"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Altitude dry"
-msgstr "Frio de altitude"
+msgstr "Altitude seca"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biome blending"
-msgstr "Harmonização do bioma"
+msgstr "Transição de bioma"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biomes"
@@ -333,7 +328,7 @@ 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 apartir do site minetest.net"
+msgstr "Baixe um a partir do site minetest.net"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -345,7 +340,7 @@ msgstr "Terreno plano"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr "Ilhas flutuantes"
+msgstr "Ilhas flutuantes no céu"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
@@ -361,7 +356,7 @@ msgstr "Gera terrenos não fractais: Oceanos e subterrâneos"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
-msgstr "Montanhas"
+msgstr "Colinas"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Humid rivers"
@@ -385,11 +380,11 @@ msgstr "Gerador de mapa"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen flags"
-msgstr "Flags do gerador de mundo"
+msgstr "Opções do gerador de mapas"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mapgen-specific flags"
-msgstr "Parâmetros específicos do gerador de mundo V5"
+msgstr "Parâmetros específicos do gerador de mapas"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
@@ -409,11 +404,11 @@ msgstr "Nenhum jogo selecionado"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces heat with altitude"
-msgstr "Reduz calor com altitude"
+msgstr "Reduz calor com a altitude"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces humidity with altitude"
-msgstr "Reduz humidade com altitude"
+msgstr "Reduz humidade com a altitude"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Rivers"
@@ -426,7 +421,7 @@ msgstr "Rios ao nível do mar"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
-msgstr "Seed"
+msgstr "Semente (Seed)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
@@ -454,11 +449,11 @@ msgstr "Temperado, Deserto, Selva"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr "Temperado, Deserto, Selva, Tundra, Floresta Boreal"
+msgstr "Temperado, Deserto, Selva, Tundra, Taiga"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Terrain surface erosion"
-msgstr "Altura da erosão de terreno"
+msgstr "Erosão na superfície do terreno"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
@@ -466,16 +461,15 @@ msgstr "Ãrvores e relva da selva"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Vary river depth"
-msgstr "Rios profundos"
+msgstr "Variar altura dos rios"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Very large caverns deep in the underground"
-msgstr "Cavernas bastante profundas"
+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 game \"minimal development test\" apenas serve para desenvolvedores."
+msgstr "Aviso: O jogo Development Test é projetado para desenvolvedores."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -513,7 +507,7 @@ msgstr "Aceitar"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Renomear pacote de módulos:"
+msgstr "Renomear Modpack:"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
@@ -521,7 +515,7 @@ msgid ""
"override any renaming here."
msgstr ""
"Esse modpack possui um nome explícito em seu modpack.conf que vai "
-"sobrescrever qualquer renomeio aqui."
+"sobrescrever qualquer nome aqui."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
@@ -569,7 +563,7 @@ msgstr "Persistência"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
-msgstr "Por favor insira um inteiro válido."
+msgstr "Por favor, insira um inteiro válido."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid number."
@@ -577,7 +571,7 @@ msgstr "Por favor, insira um número válido."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
-msgstr "Restaurar para o padrão"
+msgstr "Restaurar Padrão"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
@@ -644,7 +638,7 @@ msgstr "valor absoluto"
#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
-msgstr "Padrões"
+msgstr "padrão"
#. ~ "eased" is a noise parameter flag.
#. It is used to make the map smoother and
@@ -660,34 +654,33 @@ msgstr "$1 (Habilitado)"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
-msgstr "$1 módulos"
+msgstr "$1 mods"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "Não foi possível instalar $1 para $2"
+msgstr "Não foi possível instalar $1 em $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr ""
-"Instalação de módulo: não foi possível encontrar o nome real do módulo: $1"
+msgstr "Instalação de mod: não foi possível encontrar o nome real do mod: $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
-"Instalação do Mod: não foi possível encontrar o nome da pasta adequado para "
+"Instalação de mod: não foi possível encontrar o nome da pasta adequado para "
"o modpack $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Instalar: Tipo de arquivo \"$1\" não suportado ou corrompido"
+msgstr "Instalação: Tipo de arquivo \"$1\" não suportado ou corrompido"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: file: \"$1\""
-msgstr "Instalar: arquivo: \"$1\""
+msgstr "Instalação: arquivo: \"$1\""
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr "Incapaz de encontrar um módulo ou modpack válido"
+msgstr "Incapaz de encontrar um mod ou modpack válido"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
@@ -699,7 +692,7 @@ msgstr "Não foi possível instalar um jogo como um $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a mod as a $1"
-msgstr "Não foi possível instalar um módulo como um $1"
+msgstr "Não foi possível instalar um mod como um $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a modpack as a $1"
@@ -710,10 +703,15 @@ msgid "Loading..."
msgstr "Carregando..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Scripting de cliente está desabilitado"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-"Tente reabilitar a lista de servidores públicos e verifique sua conexão com "
-"a internet."
+"Tente reativar a lista de servidores públicos e verifique sua conexão com a "
+"internet."
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
@@ -725,7 +723,7 @@ msgstr "Conteúdo"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
-msgstr "Desabilitar pacote de texturas"
+msgstr "Desabilitar Pacote de Texturas"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
@@ -733,7 +731,7 @@ msgstr "Informação:"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
-msgstr "Pacotes instalados:"
+msgstr "Pacotes Instalados:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
@@ -741,7 +739,7 @@ msgstr "Sem dependências."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr "Nenhuma descrição do pacote disponível"
+msgstr "Nenhuma descrição de pacote disponível"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
@@ -749,66 +747,67 @@ msgstr "Renomear"
#: builtin/mainmenu/tab_content.lua
msgid "Uninstall Package"
-msgstr "Desinstalar o pacote"
+msgstr "Desinstalar Pacote"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
-msgstr "Usar pacote de texturas"
+msgstr "Usar Pacote de Texturas"
#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
-msgstr "Colaboradores ativos"
+msgstr "Colaboradores Ativos"
#: builtin/mainmenu/tab_credits.lua
msgid "Core Developers"
-msgstr "Desenvolvedores principais"
+msgstr "Desenvolvedores Principais"
#: builtin/mainmenu/tab_credits.lua
msgid "Credits"
msgstr "Créditos"
#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
msgid "Open User Data Directory"
-msgstr "Selecione o diretório"
+msgstr "Abrir diretório de dados do usuário"
#: builtin/mainmenu/tab_credits.lua
msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"Abre o diretório que contém mundos, jogos, mods fornecidos pelo usuário,\n"
+"e pacotes de textura em um gerenciador / navegador de arquivos."
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
-msgstr "Colaboradores anteriores"
+msgstr "Colaboradores Anteriores"
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Core Developers"
-msgstr "Desenvolvedores principais anteriores"
+msgstr "Desenvolvedores Principais Anteriores"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr "Anunciar servidor"
+msgstr "Anunciar Servidor"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr "Endereço de Bind"
+msgstr "Endereço"
#: builtin/mainmenu/tab_local.lua
msgid "Creative Mode"
-msgstr "Modo criativo"
+msgstr "Modo Criativo"
#: builtin/mainmenu/tab_local.lua
msgid "Enable Damage"
-msgstr "Habilitar dano"
+msgstr "Habilitar Dano"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
-msgstr "Criar Jogo"
+msgstr "Hospedar Jogo"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
-msgstr "Criar Servidor"
+msgstr "Hospedar Servidor"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
@@ -816,7 +815,7 @@ msgstr "Instalar jogos do ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "Nome"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -827,9 +826,8 @@ msgid "No world created or selected!"
msgstr "Nenhum mundo criado ou selecionado!"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Password"
-msgstr "Nova senha"
+msgstr "Senha"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -840,9 +838,8 @@ msgid "Port"
msgstr "Porta"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Selecione um mundo:"
+msgstr "Selecione Mods"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -850,11 +847,11 @@ msgstr "Selecione um mundo:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr "Porta do servidor"
+msgstr "Porta do Servidor"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
-msgstr "Iniciar o jogo"
+msgstr "Iniciar Jogo"
#: builtin/mainmenu/tab_online.lua
msgid "Address / Port"
@@ -874,15 +871,15 @@ msgstr "Dano habilitado"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
-msgstr "Deletar Favorito"
+msgstr "Rem. Favorito"
#: builtin/mainmenu/tab_online.lua
msgid "Favorite"
-msgstr "Favoritos"
+msgstr "Favorito"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
-msgstr "Juntar-se ao jogo"
+msgstr "Entrar em um Jogo"
#: builtin/mainmenu/tab_online.lua
msgid "Name / Password"
@@ -919,7 +916,7 @@ msgstr "Todas as configurações"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
-msgstr "Antialiasing:"
+msgstr "Anti-aliasing:"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
@@ -994,9 +991,8 @@ msgid "Shaders"
msgstr "Sombreadores"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Ilhas flutuantes (experimental)"
+msgstr "Sombreadores (experimental)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1093,7 +1089,7 @@ msgstr "Nome de jogador muito longo."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr "Por favor escolha um nome!"
+msgstr "Por favor, escolha um nome!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
@@ -1101,7 +1097,7 @@ msgstr "Arquivo de senha fornecido falhou em abrir : "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
-msgstr "O caminho do mundo providenciado não existe. "
+msgstr "Caminho informado para o mundo não existe: "
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string. Put either "no" or "yes"
@@ -1129,7 +1125,7 @@ msgstr "- Endereço: "
#: src/client/game.cpp
msgid "- Creative Mode: "
-msgstr "Modo Criativo: "
+msgstr "- Modo Criativo: "
#: src/client/game.cpp
msgid "- Damage: "
@@ -1197,7 +1193,7 @@ msgid "Continue"
msgstr "Continuar"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1215,32 +1211,19 @@ msgid ""
"- %s: chat\n"
msgstr ""
"Controles:\n"
-"\n"
-"- %s1: andar para frente\n"
-"\n"
-"- %s2: andar para trás\n"
-"\n"
-"- %s3: andar para a esquerda\n"
-"\n"
-"-%s4: andar para a direita\n"
-"\n"
-"- %s5: pular/escalar\n"
-"\n"
-"- %s6: esgueirar/descer\n"
-"\n"
-"- %s7: soltar item\n"
-"\n"
-"- %s8: inventário\n"
-"\n"
+"- %s: mover para frente\n"
+"- %s: mover para trás\n"
+"- %s: mover para esquerda\n"
+"- %s: mover para direita\n"
+"- %s: pular/subir\n"
+"- %s: cavar/socar\n"
+"- %s: colocar/usar\n"
+"- %s: andar furtivamente/descer\n"
+"- %s: soltar item\n"
+"- %s: inventário\n"
"- Mouse: virar/olhar\n"
-"\n"
-"- Botão esquerdo do mouse: cavar/dar soco\n"
-"\n"
-"- Botão direito do mouse: colocar/usar\n"
-"\n"
"- Roda do mouse: selecionar item\n"
-"\n"
-"- %s9: bate-papo\n"
+"- %s: bate-papo\n"
#: src/client/game.cpp
msgid "Creating client..."
@@ -1316,7 +1299,7 @@ msgstr "Modo rápido habilitado"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr "Modo rápido habilitado(note: sem privilégio 'fast')"
+msgstr "Modo rápido habilitado (nota: sem o privilégio 'fast')"
#: src/client/game.cpp
msgid "Fly mode disabled"
@@ -1432,11 +1415,11 @@ msgstr "Som mutado"
#: src/client/game.cpp
msgid "Sound system is disabled"
-msgstr "Som do sistema está desativado"
+msgstr "Sistema de som está desativado"
#: src/client/game.cpp
msgid "Sound system is not supported on this build"
-msgstr "Som do sistema não é suportado nesta versão"
+msgstr "Sistema de som não é suportado nesta versão"
#: src/client/game.cpp
msgid "Sound unmuted"
@@ -1767,19 +1750,18 @@ msgid "Minimap hidden"
msgstr "Minimapa escondido"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Minimapa em modo radar, zoom 1x"
+msgstr "Minimapa em modo radar, Zoom %dx"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Minimapa em modo de superfície, zoom 1x"
+msgstr "Minimapa em modo de superfície, Zoom %dx"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Tamanho mínimo da textura"
+msgstr "Minimapa em modo de textura"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -1889,11 +1871,11 @@ msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
-msgstr "Comandos de Local"
+msgstr "Comando local"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Mute"
-msgstr "Mutar"
+msgstr "Mudo"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Next item"
@@ -2066,7 +2048,7 @@ msgstr "Ruído 2D que controla o formato/tamanho de colinas."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
-msgstr "Ruído 2D que controla o formato/tamanho de montanhas de etapa."
+msgstr "Ruído 2D que controla o formato/tamanho de montanhas de caminhada."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
@@ -2078,7 +2060,9 @@ msgstr "2D noise que controla o tamanho/ocorrência de colinas."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
-msgstr "Ruído 2D que controla o tamanho/ocorrência de montanhas de passo."
+msgstr ""
+"Ruído 2D que controla o tamanho/ocorrência de intervalos de montanhas de "
+"caminhar."
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
@@ -2098,14 +2082,14 @@ msgstr "Força de paralaxe do modo 3D"
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
-msgstr "barulho 3D que define cavernas gigantes."
+msgstr "Ruído 3D que define cavernas gigantes."
#: src/settings_translation_file.cpp
msgid ""
"3D noise defining mountain structure and height.\n"
"Also defines structure of floatland mountain terrain."
msgstr ""
-"barulho 3D que define estrutura de montanha e altura.\n"
+"Ruído 3D que define estrutura de montanha e altura.\n"
"Também define a estrutura do terreno da montanha das ilhas flutuantes."
#: src/settings_translation_file.cpp
@@ -2190,7 +2174,7 @@ msgstr "Intervalo do ABM"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "Alocação de tempo do ABM"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
@@ -2314,7 +2298,7 @@ msgstr "Concatenar nome do item a descrição."
#: src/settings_translation_file.cpp
msgid "Apple trees noise"
-msgstr "Barulho das Ãrvores de Macieira"
+msgstr "Ruído de Ãrvores de Macieira"
#: src/settings_translation_file.cpp
msgid "Arm inertia"
@@ -2401,11 +2385,11 @@ msgstr "Privilégios básicos"
#: src/settings_translation_file.cpp
msgid "Beach noise"
-msgstr "barulho de praia"
+msgstr "Ruído de praias"
#: src/settings_translation_file.cpp
msgid "Beach noise threshold"
-msgstr "Limitar o barulho da praia"
+msgstr "Limiar do ruído de praias."
#: src/settings_translation_file.cpp
msgid "Bilinear filtering"
@@ -2484,15 +2468,15 @@ msgstr "Tecla para alternar atualização da câmera"
#: src/settings_translation_file.cpp
msgid "Cave noise"
-msgstr "Barulho nas caverna"
+msgstr "Ruído de cavernas"
#: src/settings_translation_file.cpp
msgid "Cave noise #1"
-msgstr "Barulho na caverna #1"
+msgstr "Ruído de cavernas #1"
#: src/settings_translation_file.cpp
msgid "Cave noise #2"
-msgstr "Barulho na caverna #2"
+msgstr "Ruído de cavernas #2"
#: src/settings_translation_file.cpp
msgid "Cave width"
@@ -2500,11 +2484,11 @@ msgstr "Largura da caverna"
#: src/settings_translation_file.cpp
msgid "Cave1 noise"
-msgstr "Barulho na caverna1"
+msgstr "Ruídos de Cave1"
#: src/settings_translation_file.cpp
msgid "Cave2 noise"
-msgstr "Barulho na caverna2"
+msgstr "Ruídos de Cave2"
#: src/settings_translation_file.cpp
msgid "Cavern limit"
@@ -2512,7 +2496,7 @@ msgstr "Limite da caverna"
#: src/settings_translation_file.cpp
msgid "Cavern noise"
-msgstr "Barulho da caverna"
+msgstr "Ruído de cavernas"
#: src/settings_translation_file.cpp
msgid "Cavern taper"
@@ -2531,6 +2515,8 @@ msgid ""
"Center of light curve boost range.\n"
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
+"Centro da faixa de aumento da curva de luz.\n"
+"Onde 0.0 é o nível mínimo de luz, 1.0 é o nível máximo de luz."
#: src/settings_translation_file.cpp
msgid "Chat font size"
@@ -2698,7 +2684,7 @@ msgstr "Lista negra de flags do ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "Máximo de downloads simultâneos de ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2766,11 +2752,12 @@ msgid "Crosshair alpha"
msgstr "Alpha do cursor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"Also controls the object crosshair color"
-msgstr "Alpha do cursor (o quanto ele é opaco, níveis entre 0 e 255)."
+msgstr ""
+"Alpha do cursor (o quanto ele é opaco, níveis entre 0 e 255).\n"
+"Também controla a cor da cruz do objeto"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2781,6 +2768,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Cor da cruz (R, G, B).\n"
+"Também controla a cor da cruz do objeto"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2945,8 +2934,8 @@ msgid ""
"Description of server, to be displayed when players join and in the "
"serverlist."
msgstr ""
-"Descrição do servidor, a ser exibida quando os jogadores se se conectarem e "
-"na lista de servidores."
+"Descrição do servidor, a ser exibida quando os jogadores se conectarem e na "
+"lista de servidores."
#: src/settings_translation_file.cpp
msgid "Desert noise threshold"
@@ -2965,9 +2954,8 @@ msgid "Desynchronize block animation"
msgstr "Dessincronizar animação do bloco"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "Tecla direita"
+msgstr "Tecla para escavar"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -3034,7 +3022,8 @@ msgid "Enable console window"
msgstr "Habilitar janela de console"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Habilitar modo criativo para mundos novos."
#: src/settings_translation_file.cpp
@@ -3184,11 +3173,18 @@ 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 ""
+"Expoente de estreitamento das ilhas flutuantes. Altera o comportamento de "
+"afilamento.\n"
+"Valor = 1.0 cria um afunilamento linear uniforme.\n"
+"Valores> 1.0 criam um estreitamento suave adequado para as ilhas flutuantes\n"
+"padrão (separadas).\n"
+"Valores <1.0 (por exemplo 0.25) criam um nível de superfície mais definido "
+"com\n"
+"planícies mais planas, adequadas para uma camada sólida de ilhas flutuantes."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
-msgstr "Máximo FPS quando o jogo é pausado."
+msgstr "FPS quando o jogo é pausado ou perde o foco"
#: src/settings_translation_file.cpp
msgid "FSAA"
@@ -3203,9 +3199,8 @@ msgid "Fall bobbing factor"
msgstr "Fator de balanço em queda"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "Fonte Alternativa"
+msgstr "Fonte reserva"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
@@ -3306,39 +3301,32 @@ msgid "Fixed virtual joystick"
msgstr "Joystick virtual fixo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland density"
-msgstr "Densidade da Ilha Flutuante montanhosa"
+msgstr "Densidade das terras flutuantes"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland maximum Y"
-msgstr "Y máximo da dungeon"
+msgstr "Y máximo das terras flutuantes"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland minimum Y"
-msgstr "Y mínimo da dungeon"
+msgstr "Y mínimo das terras flutuantes"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland noise"
-msgstr "Ruído base de Ilha Flutuante"
+msgstr "Ruído das terras flutuantes"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland taper exponent"
-msgstr "Expoente de terras flutuantes montanhosas"
+msgstr "Expoente de conicidade das ilhas flutuantes"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland tapering distance"
-msgstr "Ruído base de Ilha Flutuante"
+msgstr "Distância de afilamento da ilha flutuante"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland water level"
-msgstr "Nível de água"
+msgstr "Nível de água da ilha flutuante"
#: src/settings_translation_file.cpp
msgid "Fly key"
@@ -3362,11 +3350,11 @@ msgstr "Tecla de comutação de névoa"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "Fonte em negrito por padrão"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Fonte em itálico por padrão"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -3382,21 +3370,24 @@ msgstr "Tamanho da fonte"
#: src/settings_translation_file.cpp
msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgstr "Tamanho da fonte padrão em pontos (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+msgstr "Tamanho da fonte reserva em pontos (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font in point (pt)."
-msgstr ""
+msgstr "Tamanho da fonte de largura fixa em pontos (pt)."
#: src/settings_translation_file.cpp
msgid ""
"Font size of the recent chat text and chat prompt in point (pt).\n"
"Value 0 will use the default font size."
msgstr ""
+"Tamanho da fonte do texto de bate-papo recente e do prompt do bate-papo em "
+"pontos (pt).\n"
+"O valor 0 irá utilizar o tamanho padrão de fonte."
#: src/settings_translation_file.cpp
msgid ""
@@ -3404,6 +3395,9 @@ msgid ""
"placeholders:\n"
"@name, @message, @timestamp (optional)"
msgstr ""
+"Formato das mensagem de bate-papo dos jogadores. Os textos abaixo são "
+"palavras-chave válidas:\n"
+"@name, @message, @timestamp (opcional)"
#: src/settings_translation_file.cpp
msgid "Format of screenshots."
@@ -3532,18 +3526,20 @@ msgstr ""
"todas as decorações."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Gradient of light curve at maximum light level.\n"
"Controls the contrast of the highest light levels."
-msgstr "Curva gradiente de iluminaçao no nível de luz maximo."
+msgstr ""
+"Gradiente da curva de luz no nível de luz máximo.\n"
+"Controla o contraste dos níveis de luz mais altos."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Gradient of light curve at minimum light level.\n"
"Controls the contrast of the lowest light levels."
-msgstr "Curva gradiente de iluminação no nível de luz mínimo."
+msgstr ""
+"Gradiente da curva de luz no nível de luz mínimo.\n"
+"Controla o contraste dos níveis de luz mais baixos."
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3574,7 +3570,6 @@ msgid "HUD toggle key"
msgstr "Tecla de comutação HUD"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
@@ -3582,9 +3577,9 @@ msgid ""
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
"Lidando com funções obsoletas da API Lua:\n"
-"-...legacy: (tenta) imitar o comportamento antigo (padrão para release).\n"
-"-...log: Imita e gera log das funções obsoletas (padrão para debug).\n"
-"-...error: Aborta quando chama uma função obsoleta (sugerido para "
+"-...none: não registra funções obsoletas.\n"
+"-...log: imita e registra as funções obsoletas chamadas (padrão).\n"
+"-...error: aborta quando chama uma função obsoleta (sugerido para "
"desenvolvedores de mods)."
#: src/settings_translation_file.cpp
@@ -3619,7 +3614,7 @@ msgstr "Ruído de altura"
#: src/settings_translation_file.cpp
msgid "Height select noise"
-msgstr "Parâmetros de ruido de seleção de altura do gerador de mundo v6"
+msgstr "Parâmetros de ruido de seleção de altura"
#: src/settings_translation_file.cpp
msgid "High-precision FPU"
@@ -3627,11 +3622,11 @@ msgstr "FPU de alta precisão"
#: src/settings_translation_file.cpp
msgid "Hill steepness"
-msgstr "Esparsamento das colinas no gerador de mundo plano"
+msgstr "Inclinação dos morros"
#: src/settings_translation_file.cpp
msgid "Hill threshold"
-msgstr "Threshold das colinas no gerador de mundo plano"
+msgstr "Limite das colinas no gerador de mundo plano"
#: src/settings_translation_file.cpp
msgid "Hilliness1 noise"
@@ -3658,18 +3653,24 @@ msgid ""
"Horizontal acceleration in air when jumping or falling,\n"
"in nodes per second per second."
msgstr ""
+"Aceleração horizontal no ar ao saltar ou cair,\n"
+"em nós por segundo por segundo."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration in fast mode,\n"
"in nodes per second per second."
msgstr ""
+"Aceleração horizontal e vertical no modo rápido,\n"
+"em nós por segundo 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 ""
+"Aceleração horizontal e vertical no solo ou ao escalar,\n"
+"em nós por segundo por segundo."
#: src/settings_translation_file.cpp
msgid "Hotbar next key"
@@ -3817,6 +3818,9 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"A velocidade com que as ondas líquidas se movem. Maior = mais rápido.\n"
+"Se negativo, as ondas líquidas se moverão para trás.\n"
+"Requer que a ondulação de líquidos esteja ativada."
#: src/settings_translation_file.cpp
msgid ""
@@ -3957,6 +3961,12 @@ msgid ""
"deleting an older debug.txt.1 if it exists.\n"
"debug.txt is only moved if this setting is positive."
msgstr ""
+"Se o tamanho do arquivo debug.txt exceder o número de megabytes "
+"especificado\n"
+"nesta configuração quando ele for aberto, o arquivo é movido para debug."
+"txt.1,\n"
+"excluindo um debug.txt.1 mais antigo, se houver.\n"
+"debug.txt só é movido se esta configuração for positiva."
#: src/settings_translation_file.cpp
msgid "If this is set, players will always (re)spawn at the given position."
@@ -3994,15 +4004,15 @@ msgstr "Tecla de aumentar volume"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
-msgstr ""
+msgstr "Velocidade vertical inicial ao saltar, em nós por segundo."
#: src/settings_translation_file.cpp
msgid ""
"Instrument builtin.\n"
"This is usually only needed by core/builtin contributors"
msgstr ""
-"Monitoração imbutida.\n"
-"Isto é usualmente apenas nessesário por contribuidores core/builtin"
+"Monitoração embutida.\n"
+"Isto é necessário apenas por contribuidores core/builtin"
#: src/settings_translation_file.cpp
msgid "Instrument chatcommands on registration."
@@ -4063,14 +4073,12 @@ msgid "Invert vertical mouse movement."
msgstr "Inverta o movimento vertical do mouse."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "Caminho de fonte monoespaçada"
+msgstr "Caminho da fonte em itálico"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "Caminho de fonte monoespaçada"
+msgstr "Caminho da fonte em itálico monoespaçada"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -4102,9 +4110,8 @@ msgid "Joystick button repetition interval"
msgstr "Intervalo de repetição do botão do Joystick"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick deadzone"
-msgstr "Tipo do Joystick"
+msgstr "\"Zona morta\" do joystick"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -4202,18 +4209,17 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Tecla para diminuir o alcance de visão.\n"
+"Tecla para diminuir o volume.\n"
"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Tecla para pular. \n"
+"Tecla para escavar. \n"
"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4243,7 +4249,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Tecla para aumentar o alcance de visão.\n"
+"Tecla para aumentar o volume.\n"
"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4315,7 +4321,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Tecla para pular. \n"
+"Tecla para por o som em mudo. \n"
"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4360,13 +4366,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for placing.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Tecla para pular. \n"
+"Tecla para colocar objetos. \n"
"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4928,15 +4933,15 @@ msgstr "Profundidade de cavernas grandes"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "Número máximo de cavernas grandes"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "Número mínimo de cavernas grandes"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "Proporção inundada de cavernas grandes"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
@@ -4972,13 +4977,12 @@ msgstr ""
"geralmente atualizados em rede."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"Definido como true habilita balanço folhas.\n"
-"Requer sombreadores serem ativados."
+"Comprimento das ondas líquidas.\n"
+"Requer que a ondulação de líquidos esteja ativada."
#: src/settings_translation_file.cpp
msgid "Length of time between Active Block Modifier (ABM) execution cycles"
@@ -5013,34 +5017,28 @@ msgstr ""
"- verbose"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost"
-msgstr "Aumento leve da curva de luz"
+msgstr "Aumento da curva de luz"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost center"
-msgstr "Centro do aumento leve da curva de luz"
+msgstr "Centro do aumento da curva de luz"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost spread"
-msgstr "Extensão do aumento leve da curva de luz"
+msgstr "Extensão do aumento da curva de luz"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve gamma"
-msgstr "Aumento leve da curva de luz"
+msgstr "Gamma da curva de luz"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve high gradient"
-msgstr "Aumento leve da curva de luz"
+msgstr "Gradiente alto da curva de luz"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve low gradient"
-msgstr "Centro do aumento leve da curva de luz"
+msgstr "Gradiente baixo da curva de luz"
#: src/settings_translation_file.cpp
msgid ""
@@ -5084,9 +5082,8 @@ msgid "Liquid queue purge time"
msgstr "Tempo para limpar a lista de espera para a atualização de líquidos"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Liquid sinking"
-msgstr "Velocidade do afundamento de liquido"
+msgstr "Afundamento do líquido"
#: src/settings_translation_file.cpp
msgid "Liquid update interval in seconds."
@@ -5119,9 +5116,8 @@ msgid "Lower Y limit of dungeons."
msgstr "Menor limite Y de dungeons."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Lower Y limit of floatlands."
-msgstr "Menor limite Y de dungeons."
+msgstr "Menor limite Y de ilhas flutuantes."
#: src/settings_translation_file.cpp
msgid "Main menu script"
@@ -5144,11 +5140,11 @@ msgstr "Torna todos os líquidos opacos"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "Nível de Compressão de Mapa no Armazenamento em Disco"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "Nível de Compressão do Mapa na Transferência em Rede"
#: src/settings_translation_file.cpp
msgid "Map directory"
@@ -5159,23 +5155,22 @@ msgid "Map generation attributes specific to Mapgen Carpathian."
msgstr "Atributos de geração de mapa específicos ao gerador Carpathian."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen Flat.\n"
"Occasional lakes and hills can be added to the flat world."
msgstr ""
-"Atributos de geração de mapas específicos para o gerador de mundo plano.\n"
+"Atributos de geração de mapas específicos para o Gerador de mundo Plano.\n"
"Lagos e colinas ocasionalmente podem ser adicionados ao mundo plano."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen Fractal.\n"
"'terrain' enables the generation of non-fractal terrain:\n"
"ocean, islands and underground."
msgstr ""
-"Atributos de geração de mapa específicos ao gerador V7.\n"
-"'ridges' habilitam os rios."
+"Atributos de geração de mapas específicos para o Gerador de mundo Fractal.\n"
+"'terreno' permite a geração de terreno não fractal:\n"
+"oceano, ilhas e subterrâneos."
#: src/settings_translation_file.cpp
msgid ""
@@ -5190,7 +5185,7 @@ msgstr ""
"'altitude_chill':Reduz o calor com a altitude.\n"
"'humid_rivers':Aumenta a umidade em volta dos rios.\n"
"'profundidade_variada_rios': Se habilitado, baixa umidade e alto calor faz "
-"com que que rios se tornem mais rasos e eventualmente sumam.\n"
+"com que rios se tornem mais rasos e eventualmente sumam.\n"
"'altitude_dry': Reduz a umidade com a altitude."
#: src/settings_translation_file.cpp
@@ -5198,28 +5193,29 @@ msgid "Map generation attributes specific to Mapgen v5."
msgstr "Atributos de geração de mapa específicos ao gerador V5."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v6.\n"
"The 'snowbiomes' flag enables the new 5 biome system.\n"
"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
"the 'jungles' flag is ignored."
msgstr ""
-"Atributos de geração de mapas específico para o gerador de mundo v6.\n"
-" O 'snowbiomes' flag habilita o novo sistema de bioma 5.\n"
-"Quando o sistema de novo bioma estiver habilitado, selvas são "
-"automaticamente habilitadas e a flag 'jungles' é ignorada."
+"Atributos de geração de mapas específicos para Gerador de mapas v6.\n"
+"A opção 'snowbiomes' habilita o novo sistema de 5 biomas.\n"
+"Quando a opção 'snowbiomes' está ativada, as selvas são ativadas "
+"automaticamente e\n"
+"a opção 'jungles' é ignorada."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
"'ridges': Rivers.\n"
"'floatlands': Floating land masses in the atmosphere.\n"
"'caverns': Giant caves deep underground."
msgstr ""
-"Atributos de geração de mapa específicos ao gerador V7.\n"
-"'ridges' habilitam os rios."
+"Atributos de geração de mapas específicos para Gerador de mapas v7.\n"
+"'ridges': rios.\n"
+"'floatlands': massas de terra flutuantes na atmosfera.\n"
+"'caverns': cavernas gigantes no subsolo."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -5268,9 +5264,8 @@ msgid "Mapgen Fractal"
msgstr "Gerador de mundo Fractal"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal specific flags"
-msgstr "Flags específicas do gerador de mundo plano"
+msgstr "Opções específicas do Gerador de mapas Fractal"
#: src/settings_translation_file.cpp
msgid "Mapgen V5"
@@ -5337,9 +5332,9 @@ msgid "Maximum FPS"
msgstr "FPS máximo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum FPS when the window is not focused, or when the game is paused."
-msgstr "Máximo FPS quando o jogo é pausado."
+msgstr ""
+"FPS máximo quando a janela não está com foco, ou quando o jogo é pausado."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -5351,17 +5346,19 @@ msgstr "Largura máxima da hotbar"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Limite máximo do número aleatório de cavernas grandes por mapchunk."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Limite máximo do número aleatório de cavernas pequenas por mapchunk."
#: src/settings_translation_file.cpp
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
+"Resistência líquida máxima. Controla desaceleração ao entrar num líquido\n"
+"em alta velocidade."
#: src/settings_translation_file.cpp
msgid ""
@@ -5379,25 +5376,22 @@ msgstr ""
"Número máximo de blocos que podem ser enfileirados para o carregamento."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
"This limit is enforced per player."
msgstr ""
-"Número máximo de blocos para serem enfileirados que estão a ser gerados.\n"
-"Definido em branco para uma quantidade apropriada ser escolhida "
-"automaticamente."
+"Número máximo de blocos para serem enfileirado, dos que estão para ser "
+"gerados.\n"
+"Esse limite é forçado para cada jogador."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
"This limit is enforced per player."
msgstr ""
-"Número máximo de blocos para ser enfileirado que serão carregados do "
-"arquivo.\n"
-"Definido em branco para uma quantidade apropriada ser escolhida "
-"automaticamente."
+"Número máximo de blocos para serem enfileirado, dos que estão para ser "
+"carregados do arquivo.\n"
+"Esse limite é forçado para cada jogador."
#: src/settings_translation_file.cpp
msgid ""
@@ -5405,6 +5399,9 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"Número máximo de downloads paralelos. Downloads excedendo esse limite "
+"esperarão numa fila.\n"
+"Deve ser menor que curl_parallel_limit."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5501,7 +5498,7 @@ msgstr "Método usado para destacar o objeto selecionado."
#: src/settings_translation_file.cpp
msgid "Minimal level of logging to be written to chat."
-msgstr ""
+msgstr "Nível mínimo de registro a ser impresso no chat."
#: src/settings_translation_file.cpp
msgid "Minimap"
@@ -5516,13 +5513,12 @@ msgid "Minimap scan height"
msgstr "Altura de escaneamento do minimapa"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr "Ruído 3D que determina o número de cavernas por pedaço de mapa."
+msgstr "Limite mínimo do número aleatório de grandes cavernas por mapchunk."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Limite mínimo do número aleatório de cavernas pequenas por mapchunk."
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
@@ -5593,19 +5589,17 @@ msgid "Mute sound"
msgstr "Mutar som"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Name of map generator to be used when creating a new world.\n"
"Creating a world in the main menu will override this.\n"
"Current mapgens in a highly unstable state:\n"
"- The optional floatlands of v7 (disabled by default)."
msgstr ""
-"Nome do gerador de mapa usando quando criar um novo mundo.\n"
-"Criar um mundo no menu principal vai sobrescrever isto.\n"
-"Geradores de mapa estáveis atualmente:\n"
-"v5, v6, v7(exceto terras flutuantes), singlenode.\n"
-"'estável' significa que a forma do terreno em um mundo existente não será "
-"alterado no futuro. Note que biomas definidos por jogos ainda podem mudar."
+"Nome do gerador de mapas a ser usado ao criar um novo mundo.\n"
+"Criar um mundo no menu principal substituirá isso.\n"
+"Geradores de mapa atuais em um estado altamente instável:\n"
+"- A opção de ilhas flutuantes do Gerador de mapas de v7 (desabilitado por "
+"padrão)."
#: src/settings_translation_file.cpp
msgid ""
@@ -5626,9 +5620,8 @@ msgstr ""
"servidores."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Near plane"
-msgstr "plano próximo"
+msgstr "Plano próximo"
#: src/settings_translation_file.cpp
msgid "Network"
@@ -5671,7 +5664,6 @@ msgid "Number of emerge threads"
msgstr "Número de seguimentos de emersão"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Number of emerge threads to use.\n"
"Value 0:\n"
@@ -5684,17 +5676,19 @@ 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 thread emergentes para usar.\n"
-"Vazio ou valor 0:\n"
-"- Seleção automática. O número de threads emergentes será 'número de "
-"processadores - 2', com limite mínimo de 1.\n"
+"Número de threads de emersão a serem usadas.\n"
+"Valor 0:\n"
+"- Seleção automática. O número de threads de emersão será\n"
+"- 'número de processadores - 2', com um limite inferior de 1.\n"
"Qualquer outro valor:\n"
-"- Especifica o número de threads emergentes com limite mínimo de 1.\n"
-"Alerta: aumentando o número de threads emergentes aumenta a velocidade do "
-"gerador, mas pode prejudicar o desemepenho interferindo com outros "
-"processos, especialmente in singleplayer e/ou quando executando código lua "
-"em 'on_generated'.\n"
-"Para muitos usuários a opção mais recomendada é 1."
+"- Especifica o número de threads de emersão, com um limite inferior de 1.\n"
+"AVISO: Aumentar o número de threads de emersão aumenta a velocidade do motor "
+"de\n"
+"geração de mapas, mas isso pode prejudicar o desempenho do jogo, "
+"interferindo com outros\n"
+"processos, especialmente em singleplayer e / ou ao executar código Lua em "
+"eventos\n"
+"'on_generated'. Para muitos usuários, a configuração ideal pode ser '1'."
#: src/settings_translation_file.cpp
msgid ""
@@ -5718,12 +5712,12 @@ msgstr "Líquidos Opacos"
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
-msgstr ""
+msgstr "Opacidade (alpha) das sombras atrás da fonte padrão, entre 0 e 255."
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
+msgstr "Opacidade (alpha) da sombra atrás da fonte alternativa, entre 0 e 255."
#: src/settings_translation_file.cpp
msgid ""
@@ -5742,12 +5736,20 @@ 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."
#: src/settings_translation_file.cpp
msgid ""
"Path to save screenshots at. Can be an absolute or relative path.\n"
"The folder will be created if it doesn't already exist."
msgstr ""
+"Caminho para salvar capturas de tela. Pode ser absoluto ou relativo.\n"
+"A pasta será criada se já não existe."
#: src/settings_translation_file.cpp
msgid ""
@@ -5770,6 +5772,11 @@ msgid ""
"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
+"Caminho para a fonte padrão.\n"
+"Se a configuração \"freetype\" estiver ativa: Deve ser uma fonte TrueType.\n"
+"Se a configuração \"freetype\" não estiver ativa: Deve ser uma fonte bitmap "
+"ou de vetores XML.\n"
+"A fonte alternativa será usada se não for possível carregar essa."
#: src/settings_translation_file.cpp
msgid ""
@@ -5778,6 +5785,11 @@ msgid ""
"If “freetype†setting is disabled: Must be a bitmap or XML vectors 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."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
@@ -5786,11 +5798,11 @@ msgstr "Pausa quando o foco da janela é perdido"
#: src/settings_translation_file.cpp
msgid "Per-player limit of queued blocks load from disk"
msgstr ""
+"Limite de blocos na fila de espera de carregamento do disco por jogador"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Per-player limit of queued blocks to generate"
-msgstr "Limite de filas emerge para gerar"
+msgstr "Limite por jogador de blocos enfileirados para gerar"
#: src/settings_translation_file.cpp
msgid "Physics"
@@ -5805,14 +5817,12 @@ msgid "Pitch move mode"
msgstr "Modo movimento pitch"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "Tecla de voar"
+msgstr "Tecla de colocar"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place repetition interval"
-msgstr "Intervalo de repetição do clique direito"
+msgstr "Intervalo de repetição da ação colocar"
#: src/settings_translation_file.cpp
msgid ""
@@ -5882,7 +5892,7 @@ msgstr "Analizando"
#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
-msgstr ""
+msgstr "Endereço do Prometheus"
#: src/settings_translation_file.cpp
msgid ""
@@ -5891,10 +5901,14 @@ msgid ""
"enable metrics listener for Prometheus on that address.\n"
"Metrics can be fetch on http://127.0.0.1:30000/metrics"
msgstr ""
+"Endereço do Prometheus\n"
+"Se o minetest for compilado com a opção ENABLE_PROMETHEUS ativa,\n"
+"habilita a obtenção de métricas do Prometheus neste endereço.\n"
+"As métricas podem ser obtidas em http://127.0.0.1:30000/metrics"
#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
-msgstr ""
+msgstr "Proporção de cavernas grandes que contém líquido."
#: src/settings_translation_file.cpp
msgid ""
@@ -5923,9 +5937,8 @@ msgid "Recent Chat Messages"
msgstr "Mensagens de chat recentes"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "Diretorio de reporte"
+msgstr "Caminho da fonte regular"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -5998,14 +6011,12 @@ msgid "Right key"
msgstr "Tecla direita"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel depth"
-msgstr "Profundidade do Rio"
+msgstr "Profundidade do canal do rio"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel width"
-msgstr "Profundidade do Rio"
+msgstr "Largura do canal do rio"
#: src/settings_translation_file.cpp
msgid "River depth"
@@ -6020,9 +6031,8 @@ msgid "River size"
msgstr "Tamanho do Rio"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River valley width"
-msgstr "Profundidade do Rio"
+msgstr "Largura do vale do rio"
#: src/settings_translation_file.cpp
msgid "Rollback recording"
@@ -6138,7 +6148,6 @@ msgid "Selection box width"
msgstr "Largura da caixa de seleção"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Selects one of 18 fractal types.\n"
"1 = 4D \"Roundy\" Mandelbrot set.\n"
@@ -6231,31 +6240,28 @@ msgstr ""
"clientes."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
-"Definido como true habilita balanço folhas.\n"
-"Requer sombreadores serem ativados."
+"Definido como true habilita o balanço das folhas.\n"
+"Requer que os sombreadores estejam ativados."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
-"Definido como true permite ondulação da água.\n"
-"Requer sombreadores seres ativados."
+"Definido como true permite ondulação de líquidos (como a água).\n"
+"Requer que os sombreadores estejam ativados."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
msgstr ""
"Definido como true permite balanço de plantas.\n"
-"Requer sombreadores serem ativados."
+"Requer que os sombreadores estejam ativados."
#: src/settings_translation_file.cpp
msgid "Shader path"
@@ -6273,18 +6279,20 @@ msgstr ""
"Só funcionam com o modo de vídeo OpenGL."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
-msgstr "Fonte de compensador de sombra, se 0 então sombra não será desenhada."
+msgstr ""
+"Distância (em pixels) da sombra da fonte padrão. Se 0, então a sombra não "
+"será desenhada."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
"be drawn."
-msgstr "Fonte de compensador de sombra, se 0 então sombra não será desenhada."
+msgstr ""
+"Distância (em pixels) da sombra da fonte de backup. Se 0, então nenhuma "
+"sombra será desenhada."
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6299,13 +6307,17 @@ msgid "Show entity selection boxes"
msgstr "Mostrar as caixas de seleção entidades"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
-"Defina o idioma. Deixe vazio para usar a linguagem do sistema.\n"
-"Apos mudar isso uma reinicialização é necessária."
+"Mostrar caixas de seleção de entidades\n"
+"É necessário reiniciar após alterar isso."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Fonte em negrito por padrão"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6346,11 +6358,11 @@ msgstr "Inclinação e preenchimento trabalham juntos para modificar as alturas.
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "Número máximo de cavernas pequenas"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "Número mínimo de cavernas pequenas"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
@@ -6393,7 +6405,7 @@ msgstr "Velocidade da furtividade"
#: src/settings_translation_file.cpp
msgid "Sneaking speed, in nodes per second."
-msgstr ""
+msgstr "Velocidade ao esgueirar-se, em nós (blocos) por segundo."
#: src/settings_translation_file.cpp
msgid "Sound"
@@ -6426,16 +6438,19 @@ msgid ""
"Note that mods or games may explicitly set a stack for certain (or all) "
"items."
msgstr ""
+"Especifica o tamanho padrão da pilha de nós, items e ferramentas.\n"
+"Note que mods e games talvez definam explicitamente um tamanho para certos "
+"(ou todos) os itens."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
msgstr ""
-"Extensão do aumento médio da curva da luz.\n"
-"Desvio padrão do aumento médio gaussiano."
+"Ampliação da faixa de aumento da curva de luz.\n"
+"Controla a largura do intervalo a ser aumentado.\n"
+"O desvio padrão da gaussiana do aumento da curva de luz."
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
@@ -6454,9 +6469,8 @@ msgid "Step mountain spread noise"
msgstr "Extensão do ruído da montanha de passo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Strength of 3D mode parallax."
-msgstr "Intensidade de paralaxe."
+msgstr "Força da paralaxe do modo 3D."
#: src/settings_translation_file.cpp
msgid ""
@@ -6464,6 +6478,9 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
+"Aumento da força da curva de luz.\n"
+"Os 3 parâmetros de 'aumento' definem uma faixa\n"
+"da curva de luz que é aumentada em brilho."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -6486,6 +6503,21 @@ msgid ""
"server-intensive extreme water flow and to avoid vast flooding of the\n"
"world surface below."
msgstr ""
+"Nível de superfície de água opcional colocada em uma camada sólida de "
+"flutuação.\n"
+"A água está desativada por padrão e só será colocada se este valor for "
+"definido\n"
+"acima de 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (o início do\n"
+"afilamento superior).\n"
+"*** AVISO, POTENCIAL PERIGO PARA OS MUNDOS E DESEMPENHO DO SERVIDOR ***:\n"
+"Ao habilitar a colocação de água, as áreas flutuantes devem ser configuradas "
+"e testadas\n"
+"para ser uma camada sólida, definindo 'mgv7_floatland_density' para 2.0 (ou "
+"outro\n"
+"valor necessário dependendo de 'mgv7_np_floatland'), para evitar\n"
+"fluxo de água extremo intensivo do servidor e para evitar grandes inundações "
+"do\n"
+"superfície do mundo abaixo."
#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
@@ -6565,9 +6597,8 @@ msgid "The URL for the content repository"
msgstr "A url para o repositório de conteúdo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The deadzone of the joystick"
-msgstr "O identificador do joystick para usar"
+msgstr "A zona morta do joystick"
#: src/settings_translation_file.cpp
msgid ""
@@ -6605,6 +6636,11 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"A altura máxima da superfície de líquidos com ondas.\n"
+"4.0 = Altura da onda é dois nós.\n"
+"0.0 = Onda nem se move.\n"
+"O padrão é 1.0 (meio nó).\n"
+"Requer ondas em líquidos habilitada."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
@@ -6620,7 +6656,6 @@ msgstr ""
"servidor e dos modificadores."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The radius of the volume of blocks around every player that is subject to "
"the\n"
@@ -6630,14 +6665,14 @@ msgid ""
"maintained.\n"
"This should be configured together with active_object_send_range_blocks."
msgstr ""
-"O raio do volume de blocos em volta de cada jogador que é sujeito a coisas "
-"de bloco ativo, em mapblocks (16 nós).\n"
-"Em blocos ativos, objetos são carregados e ABMs executam.\n"
-"Isto é também o alcançe mínimo em que objetos ativos(mobs) são mantidos.\n"
-"Isto deve ser configurado junto com o alcance_objeto_ativo."
+"O raio do volume dos blocos em torno de cada jogador que está sujeito ao\n"
+"material de bloco ativo, declarado em mapblocks (16 nós).\n"
+"Nos blocos ativos, os objetos são carregados e os ABMs executados.\n"
+"Este também é o intervalo mínimo no qual os objetos ativos (mobs) são "
+"mantidos.\n"
+"Isso deve ser configurado junto com active_object_send_range_blocks."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The rendering back-end for Irrlicht.\n"
"A restart is required after changing this.\n"
@@ -6646,12 +6681,12 @@ msgid ""
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"Renderizador de fundo para o irrlight.\n"
-"Uma reinicialização é necessária após alterar isso.\n"
-"Note: no android, use o OGLES1 caso em dúvida! O aplicativo pode falhar ao "
-"abrir em outro caso.\n"
-"Em outras plataformas, OpenGL é recomendo, e é o único driver com suporte a "
-"sombreamento atualmente."
+"O back-end de renderização para Irrlicht.\n"
+"É necessário reiniciar após alterar isso.\n"
+"Nota: No Android, use OGLES1 se não tiver certeza! O aplicativo pode falhar "
+"ao iniciar de outra forma.\n"
+"Em outras plataformas, OpenGL é recomendado.\n"
+"Shaders são suportados por OpenGL (somente desktop) e OGLES2 (experimental)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6691,6 +6726,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)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6701,13 +6738,12 @@ msgstr ""
"quando pressionando uma combinação de botão no joystick."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
-"O tempo em segundos entre repetidos cliques direitos ao segurar o botão "
-"direito do mouse."
+"O tempo em segundos que leva entre as colocações de nó repetidas ao segurar\n"
+"o botão de colocar."
#: src/settings_translation_file.cpp
msgid "The type of joystick"
@@ -6787,7 +6823,6 @@ msgid "Trilinear filtering"
msgstr "Filtragem tri-linear"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"True = 256\n"
"False = 128\n"
@@ -6810,7 +6845,6 @@ msgid "Undersampling"
msgstr "Subamostragem"
#: 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"
@@ -6818,10 +6852,12 @@ msgid ""
"image.\n"
"Higher values result in a less detailed image."
msgstr ""
-"A subamostragem é semelhante ao uso de resolução de tela menor, mas se "
-"aplica apenas ao mundo do jogo, mantendo a GUI (Interface Gráfica do "
-"Usuário) intacta. Deve dar um aumento significativo no desempenho ao custo "
-"de uma imagem menos detalhada."
+"A subamostragem é semelhante a usar uma resolução de tela inferior, mas se "
+"aplica\n"
+"apenas para o mundo do jogo, mantendo a GUI intacta.\n"
+"Deve dar um aumento significativo de desempenho ao custo de uma imagem menos "
+"detalhada.\n"
+"Valores mais altos resultam em uma imagem menos detalhada."
#: src/settings_translation_file.cpp
msgid "Unlimited player transfer distance"
@@ -6836,9 +6872,8 @@ msgid "Upper Y limit of dungeons."
msgstr "Limite topo Y de dungeons."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Upper Y limit of floatlands."
-msgstr "Limite topo Y de dungeons."
+msgstr "Limite máximo Y para as ilhas flutuantes."
#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
@@ -6877,6 +6912,16 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"Use o anti-serrilhamento de várias amostras (MSAA) para suavizar as bordas "
+"do bloco.\n"
+"Este algoritmo suaviza a janela de visualização 3D enquanto mantém a imagem "
+"nítida,\n"
+"mas não afeta o interior das texturas\n"
+"(que é especialmente perceptível com texturas transparentes).\n"
+"Espaços visíveis aparecem entre os nós quando os sombreadores são "
+"desativados.\n"
+"Se definido como 0, MSAA é desativado.\n"
+"É necessário reiniciar após alterar esta opção."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
@@ -6945,7 +6990,7 @@ msgstr "Controla o esparsamento/altura das colinas."
#: src/settings_translation_file.cpp
msgid "Vertical climbing speed, in nodes per second."
-msgstr ""
+msgstr "Velocidade vertical de escalda, em nós por segundo."
#: src/settings_translation_file.cpp
msgid "Vertical screen synchronization."
@@ -6990,13 +7035,12 @@ msgid "Volume"
msgstr "Volume do som"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
-"Ativar mapeamento de oclusão de paralaxe.\n"
-"Requer shaders a serem ativados."
+"Volume de todos os sons.\n"
+"Requer que o sistema de som esteja ativado."
#: src/settings_translation_file.cpp
msgid ""
@@ -7013,7 +7057,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Walking and flying speed, in nodes per second."
-msgstr ""
+msgstr "Velocidade do andar e voar, em nós por segundo."
#: src/settings_translation_file.cpp
msgid "Walking speed"
@@ -7022,6 +7066,7 @@ msgstr "Velocidade de caminhada"
#: src/settings_translation_file.cpp
msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
msgstr ""
+"Velocidade do caminhar, voar e escalar no modo rápido, em nós por segundo."
#: src/settings_translation_file.cpp
msgid "Water level"
@@ -7040,22 +7085,18 @@ msgid "Waving leaves"
msgstr "Balanço das árvores"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids"
-msgstr "Nós que balancam"
+msgstr "Líquidos ondulantes"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave height"
-msgstr "Altura de balanço da água"
+msgstr "Altura da onda nos líquidos ondulantes"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave speed"
msgstr "Velocidade de balanço da água"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wavelength"
msgstr "Comprimento de balanço da água"
@@ -7111,14 +7152,20 @@ msgstr ""
"texturas."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Whether FreeType fonts are used, requires FreeType support to be compiled "
"in.\n"
"If disabled, bitmap and XML vectors fonts are used instead."
msgstr ""
-"Se forem utilizadas fontes freetype, requer suporte a freetype para ser "
-"compilado."
+"Se as fontes FreeType são usadas, requer que suporte FreeType tenha sido "
+"compilado.\n"
+"Se desativado, fontes de bitmap e de vetores XML são usadas em seu lugar."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag backgrounds should be shown by default.\n"
+"Mods may still set a background."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -7159,6 +7206,10 @@ msgid ""
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
+"Quando mutar os sons. Você pode mutar os sons a qualquer hora, a não ser\n"
+"que o sistema de som esteja desabilitado (enable_sound=false).\n"
+"No jogo, você pode habilitar o estado de mutado com o botão de mutar\n"
+"ou usando o menu de pausa."
#: src/settings_translation_file.cpp
msgid ""
@@ -7245,6 +7296,12 @@ msgid ""
"For a solid floatland layer, this controls the height of hills/mountains.\n"
"Must be less than or equal to half the distance between the Y limits."
msgstr ""
+"Distância de Y sobre a qual as ilhas flutuantes diminuem de densidade total "
+"para nenhuma densidade.\n"
+"O afunilamento começa nesta distância do limite Y.\n"
+"Para uma ilha flutuante sólida, isso controla a altura das colinas / "
+"montanhas.\n"
+"Deve ser menor ou igual a metade da distância entre os limites Y."
#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
@@ -7274,6 +7331,12 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Nível de compressão ZLib a ser usada ao salvar mapblocks no disco.\n"
+"-1 - Nível de compressão padrão do Zlib\n"
+"0 - Nenhuma compressão; o mais rápido\n"
+"9 - Melhor compressão; o mais devagar\n"
+"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método "
+"normal)"
#: src/settings_translation_file.cpp
msgid ""
@@ -7283,6 +7346,12 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Nível de compressão ZLib a ser usada ao mandar mapblocks para o cliente.\n"
+"-1 - Nível de compressão padrão do Zlib\n"
+"0 - Nenhuma compressão; o mais rápido\n"
+"9 - Melhor compressão; o mais devagar\n"
+"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método "
+"normal)"
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
diff --git a/po/ro/minetest.po b/po/ro/minetest.po
index ba54a3f65..48ad46e2c 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: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-11-24 11:29+0000\n"
"Last-Translator: Nicolae Crefelean <kneekoo@yahoo.com>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/minetest/"
@@ -708,6 +708,11 @@ msgid "Loading..."
msgstr "Se încarcă..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Scripturile din partea clientului sunt dezactivate"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Încercați să activați lista de servere publică și să vă verificați "
@@ -2984,7 +2989,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5688,6 +5693,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6361,6 +6370,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/ru/minetest.po b/po/ru/minetest.po
index c2211caed..9f78a12da 100644
--- a/po/ru/minetest.po
+++ b/po/ru/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Russian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-11-14 18:28+0000\n"
-"Last-Translator: Andrei Stepanov <adem4ik@gmail.com>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-13 08:50+0000\n"
+"Last-Translator: Ertu (Er2, Err) <er2official@outlook.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/minetest/"
"minetest/ru/>\n"
"Language: ru\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.4-dev\n"
+"X-Generator: Weblate 4.5-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -154,52 +154,51 @@ 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"
@@ -223,14 +222,12 @@ 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
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -246,26 +243,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"
@@ -281,11 +276,11 @@ msgstr "Обновить"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Обновить вÑе [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "ПоÑмотреть дополнительную информацию в веб-браузере"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -710,6 +705,11 @@ msgid "Loading..."
msgstr "Загрузка..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "КлиентÑкие моды отключены"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Попробуйте обновить ÑпиÑок публичных Ñерверов и проверьте ÑвÑзь Ñ Ð˜Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð¾Ð¼."
@@ -767,15 +767,16 @@ msgid "Credits"
msgstr "БлагодарноÑти"
#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
msgid "Open User Data Directory"
-msgstr "Выбрать каталог"
+msgstr "Открыть каталог данных пользователÑ"
#: builtin/mainmenu/tab_credits.lua
msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"Открывает каталог, Ñодержащий пользовательÑкие миры, игры, моды,\n"
+"и пакеты текÑтур в файловом менеджере / проводнике."
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
@@ -815,7 +816,7 @@ msgstr "УÑтановить игры из ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "ИмÑ"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -826,9 +827,8 @@ msgid "No world created or selected!"
msgstr "Мир не Ñоздан или не выбран!"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Password"
-msgstr "Ðовый пароль"
+msgstr "Пароль"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -839,9 +839,8 @@ msgid "Port"
msgstr "Порт"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Выберите мир:"
+msgstr "Выберите моды"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -993,9 +992,8 @@ msgid "Shaders"
msgstr "Шейдеры"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "ПарÑщие оÑтрова (ÑкÑпериментальный)"
+msgstr "Шейдеры (ÑкÑпериментально)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1195,7 +1193,7 @@ msgid "Continue"
msgstr "Продолжить"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1753,17 +1751,16 @@ msgid "Minimap hidden"
msgstr "Миникарта Ñкрыта"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Миникарта в режиме радара, увеличение x1"
+msgstr "Миникарта в режиме радара, увеличение x%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Миникарта в поверхноÑтном режиме, увеличение x1"
+msgstr "Миникарта в поверхноÑтном режиме, увеличение x%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
msgstr "Минимальный размер текÑтуры"
@@ -2678,7 +2675,7 @@ msgstr "Чёрный ÑпиÑок флагов ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "МакÑимальное количеÑтво одновременных загрузок ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2747,11 +2744,12 @@ msgid "Crosshair alpha"
msgstr "ПрозрачноÑÑ‚ÑŒ перекреÑтиÑ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"Also controls the object crosshair color"
-msgstr "ПрозрачноÑÑ‚ÑŒ прицела (от 0 (прозрачно) до 255 (непрозрачно))."
+msgstr ""
+"ПрозрачноÑÑ‚ÑŒ прицела (от 0 (прозрачно) до 255 (непрозрачно)).\n"
+"Также контролирует цвет перекреÑÑ‚Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2762,6 +2760,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"
@@ -2947,9 +2947,8 @@ msgid "Desynchronize block animation"
msgstr "РаÑÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ð¸ блоков"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° меню"
+msgstr "Кнопка копать"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -3016,7 +3015,8 @@ msgid "Enable console window"
msgstr "Включить окно конÑоли"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Включить творчеÑкий режим Ð´Ð»Ñ Ð²Ð½Ð¾Ð²ÑŒ Ñозданных карт."
#: src/settings_translation_file.cpp
@@ -3173,7 +3173,6 @@ msgstr ""
"Ñ Ð±Ð¾Ð»ÐµÐµ плоÑкими низинами, подходит Ð´Ð»Ñ Ð¼Ð°ÑÑивного ÑƒÑ€Ð¾Ð²Ð½Ñ Ð¿Ð°Ñ€Ñщих оÑтровов."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
msgstr "МакÑимум кадровой чаÑтоты при паузе."
@@ -3557,7 +3556,6 @@ msgid "HUD toggle key"
msgstr "Клавиша Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð³Ñ€Ð¾Ð²Ð¾Ð³Ð¾ интерфейÑа"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
@@ -3565,8 +3563,7 @@ msgid ""
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
"Обработка уÑтаревших вызовов Lua API:\n"
-"- legacy: (пытатьÑÑ) имитировать прежнее поведение (по умолчанию Ð´Ð»Ñ "
-"релиза).\n"
+"- none: не запиÑывать уÑтаревшие вызовы\n"
"- log: имитировать и журналировать уÑтаревшие вызовы (по умолчанию Ð´Ð»Ñ "
"отладки).\n"
"- error: прерывание при иÑпользовании уÑтаревших вызовов (рекомендовано "
@@ -4086,9 +4083,8 @@ msgid "Joystick button repetition interval"
msgstr "Интервал повторного клика кнопкой джойÑтика"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick deadzone"
-msgstr "Тип джойÑтика"
+msgstr "ÐœÐµÑ€Ñ‚Ð²Ð°Ñ Ð·Ð¾Ð½Ð° джойÑтика"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -4193,13 +4189,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Клавиша прыжка.\n"
+"Клавиша копаниÑ.\n"
"См. http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5124,11 +5119,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"
@@ -5313,9 +5308,9 @@ 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 "МакÑимум кадровой чаÑтоты при паузе."
+msgstr ""
+"МакÑимальный FPS, когда окно не ÑфокуÑировано, или когда игра приоÑтановлена."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -5382,6 +5377,9 @@ 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."
@@ -6293,6 +6291,11 @@ msgstr ""
"Требует перезапуÑка поÑле изменениÑ."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Стандартный жирный шрифт"
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "Сообщение о выключении"
@@ -6574,9 +6577,8 @@ msgid "The URL for the content repository"
msgstr "ÐÐ´Ñ€ÐµÑ Ñетевого репозиториÑ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The deadzone of the joystick"
-msgstr "Идентификатор иÑпользуемого джойÑтика"
+msgstr "ÐœÐµÑ€Ñ‚Ð²Ð°Ñ Ð·Ð¾Ð½Ð° джойÑтика"
#: src/settings_translation_file.cpp
msgid ""
@@ -6890,6 +6892,15 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"ИÑпользуйте многовыборочное Ñглаживание (MSAA) Ð´Ð»Ñ ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÐºÑ€Ð°ÐµÐ² "
+"блоков.\n"
+"Этот алгоритм Ñглаживает облаÑÑ‚ÑŒ проÑмотра 3D, ÑохранÑÑ Ñ€ÐµÐ·ÐºÐ¾ÑÑ‚ÑŒ "
+"изображениÑ,\n"
+"но Ñто не влиÑет на внутренноÑти текÑтур\n"
+"(что оÑобенно заметно на прозрачных текÑтурах).\n"
+"Когда шейдеры отключены, между узлами поÑвлÑÑŽÑ‚ÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñ‹Ðµ пробелы.\n"
+"ЕÑли уÑтановлено значение 0, MSAA отключено.\n"
+"ПоÑле Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñтой опции требуетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
@@ -7129,6 +7140,12 @@ msgstr ""
"ЕÑли отключено, иÑпользуютÑÑ Ñ€Ð°Ñтровые и XML-векторные изображениÑ."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
"ОпределÑет необходимоÑÑ‚ÑŒ раÑÑинхронизации анимации текÑтур нод между блоками "
@@ -7286,6 +7303,12 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ ZLib Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ Ñохранении картографичеÑких блоков "
+"на диÑке.\n"
+"-1 - уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ Zlib по умолчанию\n"
+"0 - без компреÑÑора, Ñамый быÑтрый\n"
+"9 - лучшее Ñжатие, Ñамое медленное\n"
+"(уровни 1-3 иÑпользуют \"быÑтрый\" метод Zlib, 4-9 иÑпользуют обычный метод)"
#: src/settings_translation_file.cpp
msgid ""
@@ -7295,6 +7318,11 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ ZLib Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ отправке блоков карты клиенту.\n"
+"-1 - уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ Zlib по умолчанию\n"
+"0 - без компреÑÑора, Ñамый быÑтрый\n"
+"9 - лучшее Ñжатие, Ñамое медленное\n"
+"(уровни 1-3 иÑпользуют \"быÑтрый\" метод Zlib, 4-9 иÑпользуют обычный метод)"
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
diff --git a/po/sk/minetest.po b/po/sk/minetest.po
index 3c4009c00..c8249c0f0 100644
--- a/po/sk/minetest.po
+++ b/po/sk/minetest.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-11-17 08:28+0000\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-13 08:50+0000\n"
"Last-Translator: Marian <daretmavi@gmail.com>\n"
"Language-Team: Slovak <https://hosted.weblate.org/projects/minetest/minetest/"
"sk/>\n"
@@ -17,7 +17,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.4-dev\n"
+"X-Generator: Weblate 4.5-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -158,52 +158,51 @@ msgstr "aktívne"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" už exituje. Chcel by si ho prepísať?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Závislosti $1 a $2 budú nainštalované."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 od $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 sťahujem,\n"
+"$2 Äaká v rade"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "SÅ¥ahujem..."
+msgstr "$1 sťahujem..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 požadované závislosti nie je možné nájsť."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 bude nainÅ¡talovaný, a $2 závislosti budú preskoÄené."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "VÅ¡etky balíÄky"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Klávesa sa už používa"
+msgstr "Už je nainštalované"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Naspäť do hlavného menu"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Hosťuj hru"
+msgstr "Základná hra:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -227,14 +226,12 @@ msgid "Install"
msgstr "Inštaluj"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Inštaluj"
+msgstr "Inštaluj $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Voliteľné závislosti:"
+msgstr "Nainštaluj chýbajúce závislosti"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -250,26 +247,24 @@ msgid "No results"
msgstr "Bez výsledku"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Aktualizuj"
+msgstr "Bez aktualizácií"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Not found"
-msgstr "Stíš hlasitosť"
+msgstr "Nenájdené"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Prepíš"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Prosím skontroluj Äi je základná hra v poriadku."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Čaká v rade"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -285,11 +280,11 @@ msgstr "Aktualizuj"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Aktualizuj všetky [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Pozri si viac informácií vo webovom prehliadaÄi"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -715,6 +710,11 @@ msgid "Loading..."
msgstr "Nahrávam..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Skriptovanie na strane klienta je zakázané"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Skús znova povoliť verejný zoznam serverov a skontroluj internetové "
@@ -773,15 +773,16 @@ msgid "Credits"
msgstr "PoÄakovanie"
#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
msgid "Open User Data Directory"
-msgstr "Zvoľ adresár"
+msgstr "Otvor adresár s užívateľskými dátami"
#: builtin/mainmenu/tab_credits.lua
msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"Otvor adresár, ktorý obsahuje svety, hry, mody a textúry\n"
+"od užívateľov v správcovi/prieskumníkovi súborov."
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
@@ -821,7 +822,7 @@ msgstr "Inštaluj hry z ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "Meno"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -832,9 +833,8 @@ msgid "No world created or selected!"
msgstr "Nie je vytvorený ani zvolený svet!"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Password"
-msgstr "Staré heslo"
+msgstr "Heslo"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -845,9 +845,8 @@ msgid "Port"
msgstr "Port"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Zvoľ si svet:"
+msgstr "Zvoľ mody"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -999,9 +998,8 @@ msgid "Shaders"
msgstr "Shadery"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Lietajúce krajiny (experimentálne)"
+msgstr "Shadery (experimentálne)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1201,7 +1199,7 @@ msgid "Continue"
msgstr "PokraÄuj"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1224,12 +1222,12 @@ msgstr ""
"- %s: pohyb doľava\n"
"- %s: pohyb doprava\n"
"- %s: skoÄ/vylez\n"
+"- %s: kop/udri\n"
+"- %s: polož/použi\n"
"- %s: zakrádaj sa/choÄ dole\n"
-"- %s: polož vec\n"
+"- %s: odhoÄ vec\n"
"- %s: inventár\n"
"- MyÅ¡: otoÄ sa/obzeraj sa\n"
-"- MyÅ¡, ľavé tlaÄítko: kopaj/udri\n"
-"- MyÅ¡, pravé tlaÄítko: polož/použi\n"
"- Myš koliesko: zvoľ si vec\n"
"- %s: komunikácia\n"
@@ -1759,19 +1757,18 @@ msgid "Minimap hidden"
msgstr "Minimapa je skrytá"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Minimapa v radarovom režime, priblíženie x1"
+msgstr "Minimapa v radarovom režime, priblíženie x%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Minimapa v povrchovom režime, priblíženie x1"
+msgstr "Minimapa v povrchovom režime, priblíženie x%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Minimálna veľkosť textúry"
+msgstr "Minimapa v móde textúry"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -2171,7 +2168,7 @@ msgstr "ABM interval"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "Vyhradená doba ABM"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
@@ -2674,7 +2671,7 @@ msgstr "Čierna listina príznakov z ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "ContentDB Maximum súbežných sťahovaní"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2742,11 +2739,12 @@ msgid "Crosshair alpha"
msgstr "PriehľadnosÅ¥ zameriavaÄa"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"Also controls the object crosshair color"
-msgstr "PriehľadnosÅ¥ zameriavaÄa (nepriehľadnosÅ¥, medzi 0 a 255)."
+msgstr ""
+"PriehľadnosÅ¥ zameriavaÄa (nepriehľadnosÅ¥, medzi 0 a 255).\n"
+"Tiež nastavuje farbu objektu zameriavaÄa"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2757,6 +2755,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Farba zameriavaÄa (R,G,B).\n"
+"Nastavuje farbu objektu zameriavaÄa"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2937,9 +2937,8 @@ msgid "Desynchronize block animation"
msgstr "Nesynchronizuj animáciu blokov"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "TlaÄidlo Vpravo"
+msgstr "TlaÄidlo Kopanie"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -3006,7 +3005,8 @@ msgid "Enable console window"
msgstr "Aktivuj okno konzoly"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Aktivuj kreatívny režim pre novo vytvorené mapy."
#: src/settings_translation_file.cpp
@@ -3161,9 +3161,8 @@ msgstr ""
"rovnejšími nížinami, vhodné ako pevná základná vrstva lietajúcej pevniny."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
-msgstr "Maximálne FPS, ak je hra pozastavená."
+msgstr "FPS ak je hra nezameraná, alebo pozastavená"
#: src/settings_translation_file.cpp
msgid "FSAA"
@@ -3554,7 +3553,6 @@ msgid "HUD toggle key"
msgstr "TlaÄidlo Prepínanie HUD"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
@@ -3562,9 +3560,8 @@ msgid ""
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
"Spracovanie zastaralých Lua API volaní:\n"
-"- legacy: (skús to) napodobni staré správanie (štandard pre release).\n"
-"- log: napodobni log backtrace zastaralého volania (štandard pre "
-"debug).\n"
+"- none: Zastarané funkcie neukladaj do logu\n"
+"- log: napodobni log backtrace zastaralého volania (štandardne).\n"
"- error: preruÅ¡ spracovanie zastaralého volania (odporúÄané pre vývojárov "
"rozšírení)."
@@ -4086,9 +4083,8 @@ msgid "Joystick button repetition interval"
msgstr "Interval opakovania tlaÄidla joysticku"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick deadzone"
-msgstr "Typ joysticku"
+msgstr "Mŕtva zóna joysticku"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -4193,13 +4189,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"TlaÄidlo pre skákanie.\n"
+"TlaÄidlo pre kopanie.\n"
"ViÄ. http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4346,13 +4341,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for placing.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"TlaÄidlo pre skákanie.\n"
+"TlaÄidlo pre pokladanie.\n"
"ViÄ. http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5124,11 +5118,11 @@ msgstr "Všetky tekutiny budú nepriehľadné"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "Úroveň kompresie mapy pre diskové úložisko"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "Úroveň kompresie mapy pre sieťový prenos"
#: src/settings_translation_file.cpp
msgid "Map directory"
@@ -5313,9 +5307,9 @@ msgid "Maximum FPS"
msgstr "Maximálne FPS"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum FPS when the window is not focused, or when the game is paused."
-msgstr "Maximálne FPS, ak je hra pozastavená."
+msgstr ""
+"Maximálne FPS, ak je hra nie je v aktuálnom okne, alebo je pozastavená."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -5379,6 +5373,9 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"Maximálny poÄet súÄasných sÅ¥ahovaní. SÅ¥ahovania presahujúce tento limit budú "
+"ÄakaÅ¥ v rade.\n"
+"Mal by byť nižší ako curl_parallel_limit."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5786,14 +5783,12 @@ msgid "Pitch move mode"
msgstr "Režim pohybu podľa sklonu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "TlaÄidlo Lietanie"
+msgstr "TlaÄidlo na pokladanie"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place repetition interval"
-msgstr "Interval opakovania pravého kliknutia"
+msgstr "Interval opakovania pokladania"
#: src/settings_translation_file.cpp
msgid ""
@@ -6273,15 +6268,19 @@ msgid "Show entity selection boxes"
msgstr "Zobraz obrys bytosti"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
-"Nastav jazyk. Ponechaj prázdne pre systémové nastavenie.\n"
+"Zobraz obrysy bytosti\n"
"Po zmene je požadovaný reštart."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Å tandardne tuÄné písmo"
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "Správa pri vypínaní"
@@ -6555,9 +6554,8 @@ msgid "The URL for the content repository"
msgstr "Webová adresa (URL) k úložisku doplnkov"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The deadzone of the joystick"
-msgstr "Identifikátor joysticku na použitie"
+msgstr "Mŕtva zóna joysticku"
#: src/settings_translation_file.cpp
msgid ""
@@ -6631,7 +6629,6 @@ msgstr ""
"Malo by to byť konfigurované spolu s active_object_send_range_blocks."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The rendering back-end for Irrlicht.\n"
"A restart is required after changing this.\n"
@@ -6642,10 +6639,10 @@ msgid ""
msgstr ""
"Renderovací back-end pre Irrlicht.\n"
"Po zmene je vyžadovaný reštart.\n"
-"Poznámka: Na Androidw, ak si nie si istý, ponechaj OGLES1! Aplikácia by "
+"Poznámka: Na Androide, ak si nie si istý, ponechaj OGLES1! Aplikácia by "
"nemusela naštartovať.\n"
-"Na iných platformách, sa odporúÄa OpenGL, a je to aktuálne jediný ovládaÄ\n"
-"s podporou shaderov."
+"Na iných platformách, sa odporúÄa OpenGL.\n"
+"Shadery sú podporované v OpenGL (len pre desktop) a v OGLES2 (experimentálne)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6682,6 +6679,8 @@ msgid ""
"The time budget allowed for ABMs to execute on each step\n"
"(as a fraction of the ABM Interval)"
msgstr ""
+"Vyhradená doba pre ABM na vykonanie v každom kroku\n"
+"(ako zlomok ABM imtervalu)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6692,13 +6691,12 @@ msgstr ""
"pri stlaÄenej kombinácií tlaÄidiel na joysticku."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
-"Čas v sekundách pre zopakovanie pravého kliknutia v prípade\n"
-"držania pravého tlaÄítka myÅ¡i."
+"Čas v sekundách pre opakované položenie kocky\n"
+"ak je držané tlaÄítko pokladania."
#: src/settings_translation_file.cpp
msgid "The type of joystick"
@@ -6862,6 +6860,13 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"Použi multi-sample antialiasing (MSAA) pre zjemnenie hrán blokov.\n"
+"Tento algoritmus zjemní 3D vzhľad zatiaľ Äo zachová ostrosÅ¥ obrazu,\n"
+"ale neovplyvní vnútro textúr\n"
+"(Äo je obzvlášť viditeľné pri priesvitných textúrach).\n"
+"Ak sú shadery zakázané, objavia sa viditeľné medzery medzi kockami.\n"
+"Ak sú nastavené na 0, MSAA je zakázané.\n"
+"Po zmene tohto nastavenia je požadovaný reštart."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
@@ -7098,6 +7103,12 @@ msgstr ""
"Ak je zakázané, budú použité bitmapové a XML vektorové písma."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag backgrounds should be shown by default.\n"
+"Mods may still set a background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
msgstr "Či sa nemá animácia textúry kocky synchronizovať."
@@ -7253,6 +7264,12 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Úroveň kompresie ZLib používaný pri ukladaní blokov mapy na disk.\n"
+"-1 - predvolená úroveň kompresie Zlib\n"
+"0 - bez kompresie, najrýchlejšie\n"
+"9 - najlepšia kompresia, najpomalšie\n"
+"(pre úrovne 1-3 používa Zlib \"rýchlu\" metódu, pre 4-9 používa normálnu "
+"metódu)"
#: src/settings_translation_file.cpp
msgid ""
@@ -7262,6 +7279,12 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Úroveň kompresie ZLib používaný pri posielaní blokov mapy klientom.\n"
+"-1 - predvolená úroveň kompresie Zlib\n"
+"0 - bez kompresie, najrýchlejšie\n"
+"9 - najlepšia kompresia, najpomalšie\n"
+"(pre úrovne 1-3 používa Zlib \"rýchlu\" metódu, pre 4-9 používa normálnu "
+"metódu)"
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
diff --git a/po/sl/minetest.po b/po/sl/minetest.po
index 2b9b0e188..a67ac9c65 100644
--- a/po/sl/minetest.po
+++ b/po/sl/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Slovenian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-09-30 19:41+0000\n"
"Last-Translator: Iztok Bajcar <iztok.bajcar@gmail.com>\n"
"Language-Team: Slovenian <https://hosted.weblate.org/projects/minetest/"
@@ -726,6 +726,11 @@ msgid "Loading..."
msgstr "Poteka nalaganje ..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "Skriptiranje s strani odjemalca je onemogoÄeno"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Morda je treba ponovno omogoÄiti javni seznam strežnikov oziroma preveriti "
@@ -3011,7 +3016,8 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "OmogoÄi ustvarjalni naÄin za novo ustvarjene svetove."
#: src/settings_translation_file.cpp
@@ -5748,6 +5754,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6431,6 +6441,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/sr_Cyrl/minetest.po b/po/sr_Cyrl/minetest.po
index 6c6c3a9df..5223e55e2 100644
--- a/po/sr_Cyrl/minetest.po
+++ b/po/sr_Cyrl/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Serbian (cyrillic) (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-07-08 20:47+0000\n"
"Last-Translator: sfan5 <sfan5@live.de>\n"
"Language-Team: Serbian (cyrillic) <https://hosted.weblate.org/projects/"
@@ -752,6 +752,10 @@ msgid "Loading..."
msgstr "Учитавање..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Покушајте да поновно укључите лиÑту Ñервера и проверите вашу интернет "
@@ -3029,7 +3033,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5773,6 +5777,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6454,6 +6462,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/sr_Latn/minetest.po b/po/sr_Latn/minetest.po
index 8fab135b3..7c5ad11fc 100644
--- a/po/sr_Latn/minetest.po
+++ b/po/sr_Latn/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-08-15 23:32+0000\n"
"Last-Translator: Milos <milosfilic97@gmail.com>\n"
"Language-Team: Serbian (latin) <https://hosted.weblate.org/projects/minetest/"
@@ -706,6 +706,10 @@ msgid "Loading..."
msgstr "Ucitavanje..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Pokusajte ponovo omoguciti javnu listu servera i proverite vasu internet "
@@ -1105,7 +1109,7 @@ msgstr ""
#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
-msgstr ""
+msgstr "no"
#: src/client/game.cpp
msgid ""
@@ -1936,7 +1940,7 @@ msgstr ""
#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
-msgstr ""
+msgstr "sr_Latn"
#: src/settings_translation_file.cpp
msgid ""
@@ -2845,7 +2849,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5547,6 +5551,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6220,6 +6228,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/sv/minetest.po b/po/sv/minetest.po
index 079a88256..e608d85e2 100644
--- a/po/sv/minetest.po
+++ b/po/sv/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Swedish (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-03-31 10:14+0000\n"
"Last-Translator: sfan5 <sfan5@live.de>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/minetest/"
@@ -734,6 +734,10 @@ msgid "Loading..."
msgstr "Laddar..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Försök återaktivera allmän serverlista och kolla din internetanslutning."
@@ -3035,7 +3039,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5771,6 +5775,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6453,6 +6461,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/sw/minetest.po b/po/sw/minetest.po
index 79c837878..d0fffcb91 100644
--- a/po/sw/minetest.po
+++ b/po/sw/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Swahili (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Swahili <https://hosted.weblate.org/projects/minetest/"
@@ -755,6 +755,10 @@ msgid "Loading..."
msgstr "Inapakia..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "Jaribu reenabling serverlist umma na Kagua muunganisho wako wa tovuti."
@@ -3072,7 +3076,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6353,6 +6357,10 @@ msgstr ""
"Kuanza upya inahitajika baada ya kubadilisha hii."
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "Uzimaji ujumbe"
@@ -7125,6 +7133,12 @@ msgstr ""
"katika."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 "Kama fundo unamu uhuishaji lazima desynchronized kwa mapblock."
diff --git a/po/th/minetest.po b/po/th/minetest.po
index 0a5c905da..06e322f79 100644
--- a/po/th/minetest.po
+++ b/po/th/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Thai (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-07-08 08:41+0000\n"
"Last-Translator: TZTarzan <khunsatyptiphan@gmail.com>\n"
"Language-Team: Thai <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -713,6 +713,11 @@ msgid "Loading..."
msgstr "à¸à¸³à¸¥à¸±à¸‡à¹‚หลด..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "à¸à¸²à¸£à¹€à¸‚ียนสคริปต์à¸à¸±à¹ˆà¸‡à¹„คลเอ็นต์ถูà¸à¸›à¸´à¸”ใช้งาน"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "ลองเปิดใช้งานเซิร์ฟเวอร์ลิสต์สาธารณะอีà¸à¸„รั้งà¹à¸¥à¸°à¸•à¸£à¸§à¸ˆà¸ªà¸­à¸šà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸­à¸´à¸™à¹€à¸—อร์เน็ต"
@@ -2966,7 +2971,8 @@ msgid "Enable console window"
msgstr "เปิดใช้งานหน้าต่างคอนโซล"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "เปิดใช้งานโหมดสร้างสรรค์สำหรับà¹à¸œà¸™à¸—ี่ที่สร้างขึ้นใหม่."
#: src/settings_translation_file.cpp
@@ -5997,6 +6003,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "ข้อความปิดเครื่อง"
@@ -6750,6 +6760,12 @@ msgstr ""
"หาà¸à¸›à¸´à¸”ใช้งาน ฟอนต์บิตà¹à¸¡à¸›à¹à¸¥à¸°à¹€à¸­à¹‡à¸à¸‹à¹Œà¹€à¸­à¹‡à¸¡à¹à¸­à¸¥à¹€à¸§à¸à¹€à¸•à¸­à¸£à¹Œà¸ˆà¸°à¹ƒà¸Šà¹‰à¹à¸—น"
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 "ระบุว่าควรสร้างà¸à¸²à¸£à¸‹à¸´à¸‡à¹‚ครไนซ์ภาพเคลื่อนไหวพื้นผิวของโหนดต่อà¹à¸¡à¹‡à¸›à¸šà¸¥à¹‡à¸­à¸à¸«à¸£à¸·à¸­à¹„ม่"
diff --git a/po/tr/minetest.po b/po/tr/minetest.po
index 3b4aec62c..a2311124b 100644
--- a/po/tr/minetest.po
+++ b/po/tr/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Turkish (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2020-06-15 22:41+0000\n"
-"Last-Translator: monolifed <monolifed@protonmail.com>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-02-13 08:50+0000\n"
+"Last-Translator: OÄŸuz Ersen <oguzersen@protonmail.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/minetest/"
"minetest/tr/>\n"
"Language: tr\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.1\n"
+"X-Generator: Weblate 4.5-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -153,52 +153,51 @@ msgstr "etkin"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" zaten var.DeÄŸiÅŸtirilsin mi?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "$ 1 ve $ 2 destek dosyaları yüklenecek."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 'e $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 indiriliyor,\n"
+"$2 sırada"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Ä°ndiriliyor..."
+msgstr "$1 indiriliyor..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 için destek dosyaları bulanamadı."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 indirilecek, ve $2 destek dosyaları atlanacak."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Tüm paketler"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Tuş zaten kullanımda"
+msgstr "Zaten kuruldu"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Ana Menüye Dön"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Oyun Barındır"
+msgstr "Yerel oyun:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -222,14 +221,12 @@ msgid "Install"
msgstr "Kur"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Kur"
+msgstr "$1 kur"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "İsteğe bağlı bağımlılıklar:"
+msgstr "Eksik bağımlılıkları kur"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -245,26 +242,24 @@ msgid "No results"
msgstr "Sonuç yok"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Güncelle"
+msgstr "Güncelleme yok"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Not found"
-msgstr "Sesi kapat"
+msgstr "Bulunamadı"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Ãœzerine yaz"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Lütfen asıl oyunun doğru olup olmadığını gözden geçirin."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Sıraya alındı"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -280,11 +275,11 @@ msgstr "Güncelle"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Hepsini güncelle [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Tarayıcı'da daha fazla bilgi edinin"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -705,6 +700,11 @@ msgid "Loading..."
msgstr "Yükleniyor..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "İstemci tarafı betik devre dışı"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Açık sunucu listesini tekrar etkinleştirmeyi deneyin ve internet "
@@ -763,15 +763,16 @@ msgid "Credits"
msgstr "Hakkında"
#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
msgid "Open User Data Directory"
-msgstr "Dizin seç"
+msgstr "Kullanıcı Veri Dizinini Aç"
#: builtin/mainmenu/tab_credits.lua
msgid ""
"Opens the directory that contains user-provided worlds, games, mods,\n"
"and texture packs in a file manager / explorer."
msgstr ""
+"Bir dosya yöneticisi / gezgininde kullanıcı tarafından sağlanan dünyaları,\n"
+"oyunları, modları ve doku paketlerini içeren dizini açar."
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
@@ -811,7 +812,7 @@ msgstr "ContentDB'den oyunlar yükle"
#: builtin/mainmenu/tab_local.lua
msgid "Name"
-msgstr ""
+msgstr "Ad"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -822,9 +823,8 @@ msgid "No world created or selected!"
msgstr "Dünya seçilmedi ya da yaratılmadı!"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Password"
-msgstr "Yeni Åžifre"
+msgstr "Parola"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
@@ -835,9 +835,8 @@ msgid "Port"
msgstr "Port"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Dünya Seç:"
+msgstr "Mod seçin"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -881,7 +880,7 @@ msgstr "Oyuna Katıl"
#: builtin/mainmenu/tab_online.lua
msgid "Name / Password"
-msgstr "Ad / Åžifre"
+msgstr "Ad / Parola"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
@@ -989,9 +988,8 @@ msgid "Shaders"
msgstr "Gölgelemeler"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Yüzenkaralar (deneysel)"
+msgstr "Gölgelendirme (deneysel)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1091,7 +1089,7 @@ msgstr "Lütfen bir ad seçin!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr "Sağlanan şifre dosyası açılamadı: "
+msgstr "Sağlanan parola dosyası açılamadı: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
@@ -1168,7 +1166,7 @@ msgstr "Kamera güncelleme etkin"
#: src/client/game.cpp
msgid "Change Password"
-msgstr "Åžifre deÄŸiÅŸtir"
+msgstr "Parola deÄŸiÅŸtir"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
@@ -1191,7 +1189,7 @@ msgid "Continue"
msgstr "Devam et"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1214,12 +1212,12 @@ msgstr ""
"- %s: sola hareket\n"
"- %s: saÄŸa hareket\n"
"- %s: zıpla/tırman\n"
+"- %s: kaz/vur\n"
+"- %s: yerleÅŸtir/kullan\n"
"- %s: sız/aşağı in\n"
"- %s: ögeyi at\n"
"- %s: envanter\n"
"- Fare: dön/bak\n"
-"- Sol fare: kaz/vur\n"
-"- SaÄŸ fare: yerleÅŸtir/kullan\n"
"- Fare tekerleği: öge seç\n"
"- %s: sohbet\n"
@@ -1748,23 +1746,22 @@ msgid "Minimap hidden"
msgstr "Mini harita gizli"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Radar kipinde mini harita, Yakınlaştırma x1"
+msgstr "Radar kipinde mini harita, Yakınlaştırma x%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Yüzey kipinde mini harita, Yakınlaştırma x1"
+msgstr "Yüzey kipinde mini harita, Yakınlaştırma x%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Minimum doku boyutu"
+msgstr "Doku kipinde mini harita"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
-msgstr "Şifreler aynı değil!"
+msgstr "Parolalar eÅŸleÅŸmiyor!"
#: src/gui/guiConfirmRegistration.cpp
msgid "Register and Join"
@@ -1782,7 +1779,7 @@ 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 şifrenizi tekrar yazın ve hesap oluşturmayı onaylamak için 'Kayıt Ol "
+"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
@@ -1939,15 +1936,15 @@ msgstr "DeÄŸiÅŸtir"
#: src/gui/guiPasswordChange.cpp
msgid "Confirm Password"
-msgstr "Şifreyi Doğrulayın"
+msgstr "Parolayı Doğrula"
#: src/gui/guiPasswordChange.cpp
msgid "New Password"
-msgstr "Yeni Åžifre"
+msgstr "Yeni Parola"
#: src/gui/guiPasswordChange.cpp
msgid "Old Password"
-msgstr "Eski Åžifre"
+msgstr "Eski Parola"
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
@@ -2158,7 +2155,7 @@ msgstr "ABM aralığı"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "ABM zаman gideri"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
@@ -2663,7 +2660,7 @@ msgstr "ContentDB: Kara Liste"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "ContentDB aşırı eşzamanlı indirmeler"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2732,11 +2729,12 @@ msgid "Crosshair alpha"
msgstr "Artı saydamlığı"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
"Also controls the object crosshair color"
-msgstr "Artı saydamlığı (solukluk, 0 ile 255 arasında)."
+msgstr ""
+"Artı saydamlığı (solukluk, 0 ile 255 arasında).\n"
+"Ayrıca nesne artı rengini de denetler"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2747,6 +2745,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Artı rengi (R,G,B).\n"
+"Ayrıca nesne artı rengini de değiştirir"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2798,7 +2798,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Default password"
-msgstr "Öntanımlı şifre"
+msgstr "Öntanımlı parola"
#: src/settings_translation_file.cpp
msgid "Default privileges"
@@ -2931,9 +2931,8 @@ msgid "Desynchronize block animation"
msgstr "Blok animasyonlarını eşzamansız yap"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "SaÄŸ tuÅŸ"
+msgstr "Kazma tuÅŸu"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2945,7 +2944,7 @@ msgstr "Hile önleme devre dışı"
#: src/settings_translation_file.cpp
msgid "Disallow empty passwords"
-msgstr "BoÅŸ ÅŸifrelere izin verme"
+msgstr "BoÅŸ parolalara izin verme"
#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
@@ -3000,7 +2999,8 @@ msgid "Enable console window"
msgstr "Konsol penceresini etkinleÅŸtir"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "Yeni yaratılan haritalar için yaratıcı kipi etkinleştir."
#: src/settings_translation_file.cpp
@@ -3155,9 +3155,8 @@ msgstr ""
"seviyesi oluşturur: katı bir yüzenkara katmanı için uygundur."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
-msgstr "Oyun duraklatıldığında maksimum FPS."
+msgstr "Odaklanmadığında veya duraklatıldığında FPS"
#: src/settings_translation_file.cpp
msgid "FSAA"
@@ -3543,18 +3542,17 @@ msgid "HUD toggle key"
msgstr "HUD açma/kapama tuşu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
"- log: mimic and log backtrace of deprecated call (default).\n"
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
-"Kullanım dışı lua API çağrılarının ele alınması:\n"
-"- legacy: (eski) Eski davranış taklit etmeye çalışır (öntanımlı).\n"
-"- log: (günlük) kullanım dışı çağrıları taklit eder ve günlükler (hata "
-"ayıklama için öntanımlı).\n"
-"- error: (hata) kullanım dışı çağrıların kullanımını iptal eder (mod "
+"Kullanım dışı Lua API çağrılarının ele alınması:\n"
+"- none: (yok) kullanım dışı çağrıları günlüğe kaydetmez.\n"
+"- log: (günlük) kullanım dışı çağrıları taklit eder ve geri izlemesini "
+"günlüğe kaydeder (öntanımlı).\n"
+"- error: (hata) kullanım dışı çağrılar kullanıldığında iptal eder (mod "
"geliştiricileri için önerilen)."
#: src/settings_translation_file.cpp
@@ -3910,7 +3908,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "If enabled, new players cannot join with an empty password."
-msgstr "Etkinleştirilirse, yeni oyuncular boş bir şifre ile katılamaz."
+msgstr "Etkinleştirilirse, yeni oyuncular boş bir parola ile katılamaz."
#: src/settings_translation_file.cpp
msgid ""
@@ -4078,9 +4076,8 @@ msgid "Joystick button repetition interval"
msgstr "Joystick düğmesi tekrarlama aralığı"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick deadzone"
-msgstr "Joystick türü"
+msgstr "Joystick ölü bölgesi"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -4185,13 +4182,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Zıplama tuşu.\n"
+"Kazma tuÅŸu.\n"
"Bakın: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4338,13 +4334,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for placing.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Zıplama tuşu.\n"
+"YerleÅŸtirme tuÅŸu.\n"
"Bakın: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5112,11 +5107,11 @@ msgstr "Tüm sıvıları opak yapar"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "Hafıza deposu için harita sıkıştırma düzeyi"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "Ağ aktarma hızı için harita sıkıştırma düzeyi"
#: src/settings_translation_file.cpp
msgid "Map directory"
@@ -5302,9 +5297,8 @@ msgid "Maximum FPS"
msgstr "Maksimum FPS"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum FPS when the window is not focused, or when the game is paused."
-msgstr "Oyun duraklatıldığında maksimum FPS."
+msgstr "Pencere odaklanmadığında veya oyun duraklatıldığında en yüksek FPS."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -5366,6 +5360,9 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"En yüksek eşzamanlı indirme sayısı.Bu sınırı aşan indirmeler sıraya "
+"alınacaktır.\n"
+"Bu curl_parallel_limit den daha az olmalıdır."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5598,7 +5595,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "New users need to input this password."
-msgstr "Yeni kullanıcıların bu şifreyi girmesi gerekir."
+msgstr "Yeni kullanıcıların bu parolayı girmesi gerekir."
#: src/settings_translation_file.cpp
msgid "Noclip"
@@ -5772,14 +5769,12 @@ msgid "Pitch move mode"
msgstr "EÄŸim hareket kipi"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "Uçma tuşu"
+msgstr "YerleÅŸtirme tuÅŸu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place repetition interval"
-msgstr "Sağ tık tekrarlama aralığı"
+msgstr "Yerleştirme tekrarlama aralığı"
#: src/settings_translation_file.cpp
msgid ""
@@ -6261,13 +6256,17 @@ msgid "Show entity selection boxes"
msgstr "Varlık seçim kutularını göster"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
-"Dili ayarlayın. Sistem dilini kullanmak için boş bırakın.\n"
-"Bunu deÄŸiÅŸtirdikten sonra yeniden baÅŸlatmak gerekir."
+"Varlık seçim kutularını göster.\n"
+"Bunu deÄŸiÅŸtirdikten sonra yeniden baÅŸlatma gerekir."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "Öntanımlı kalın yazı tipi"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6541,9 +6540,8 @@ msgid "The URL for the content repository"
msgstr "İçerik deposu için URL"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The deadzone of the joystick"
-msgstr "Kullanılacak joystick'in tanımlayıcısı"
+msgstr "Joystick ölü bölgesi"
#: src/settings_translation_file.cpp
msgid ""
@@ -6617,7 +6615,6 @@ msgstr ""
"Bu active_object_send_range_blocks ile birlikte ayarlanmalıdır."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The rendering back-end for Irrlicht.\n"
"A restart is required after changing this.\n"
@@ -6627,10 +6624,12 @@ msgid ""
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
"Irrlicht için işleme arka ucu.\n"
-"Bunu deÄŸiÅŸtirdikten sonra tekrar baÅŸlatma gerekir.\n"
-"Not: Android'de, emin değilseniz OGLES1 kullanın! Başka türlü, uygulama\n"
-"başlayamayabilir. Diğer platformlarda, OpenGL önerilir ve şu anda gölgeleme\n"
-"desteği olan tek sürücüdür."
+"Bunu deÄŸiÅŸtirdikten sonra yeniden baÅŸlatma gerekir.\n"
+"Not: Android'de, emin değilseniz OGLES1 kullanın! Başka türlü, uygulama "
+"baÅŸlayamayabilir.\n"
+"Diğer platformlarda, OpenGL önerilir.\n"
+"Gölgelendiriciler OpenGL (yalnızca masaüstü) ve OGLES2 (deneysel) tarafından "
+"desteklenmektedir"
#: src/settings_translation_file.cpp
msgid ""
@@ -6669,6 +6668,8 @@ msgid ""
"The time budget allowed for ABMs to execute on each step\n"
"(as a fraction of the ABM Interval)"
msgstr ""
+"ABM'lerin her adımda yürütülmesi için izin verilen zaman gideri\n"
+"(ABM aralığının bir parçası olarak)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6679,14 +6680,13 @@ msgstr ""
"cinsinden tekrar eden olaylar arasında geçen süre."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
-"Sağ fare tuşuna basılı tutarken tekrar eden sağ tıklar arasında saniye "
-"cinsinden\n"
-"geçen süre."
+"Yerleştirme tuşuna basılı tutarken tekrarlanan düğüm yerleşimleri arasında "
+"geçen\n"
+"saniye cinsinden süre."
#: src/settings_translation_file.cpp
msgid "The type of joystick"
@@ -6854,6 +6854,14 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"Öbek/Küme kenarlarını düzeltmek için çok örnekli düzgünleştirmeyi(anti-"
+"aliasing) kullanın.\n"
+"Bu işlem görüntüyü keskinleştirirken 3 boyutlu görüş alanını düzeltir.\n"
+"ama doku(texture) içindeki görüntüyü etkilemez.\n"
+"(Saydam dokularda etkisi daha belirgindir)\n"
+"Gölgelendirme kapalı ise düğüm arası(nod) boşluk görülür.\n"
+"0'da ise düzgünleştirme kapalıdır.\n"
+"Ayarları değiştirdikten sonra yenileme gereklidir."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
@@ -7093,6 +7101,12 @@ msgstr ""
"Devre dışı kılınırsa, yerine bitmap ve XML vektör yazı tipleri kullanılır."
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag backgrounds should be shown by default.\n"
+"Mods may still set a background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
msgstr ""
"Harita bloğu başına nod doku animasyonlarının eşzamansız yapılıp "
@@ -7256,6 +7270,11 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Harita kütlerini diske kaydederken kullanılacak ZLib sıkıştırma düzeyi.\n"
+"-1 - Zlib'in varsayılan sıkıştırma düzeyi\n"
+"0 - hiçbir sıkıştırma yok, en hızlı\n"
+"9 - en iyi sıkıştırma, en yavaş\n"
+"(seviye 1-3, Zlib'in \"hızlı\" , 4-9 sıradan yöntemi kullanır)"
#: src/settings_translation_file.cpp
msgid ""
@@ -7265,6 +7284,12 @@ msgid ""
"9 - best compression, slowest\n"
"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
msgstr ""
+"Harita kütlerini istemciye(client) gönderirken kullanılacak ZLib sıkıştırma "
+"düzeyi.\n"
+"-1 - Zlib'in varsayılan sıkıştırma düzeyi\n"
+"0 - hiçbir sıkıştırma yok, en hızlı\n"
+"9 - en iyi sıkıştırma, en yavaş\n"
+"(seviye 1-3, Zlib'in \"hızlı\" , 4-9 sıradan yöntemi kullanır)"
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
diff --git a/po/uk/minetest.po b/po/uk/minetest.po
index 043cb2fdd..81b100511 100644
--- a/po/uk/minetest.po
+++ b/po/uk/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Ukrainian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-10-25 19:26+0000\n"
"Last-Translator: Nick Naumenko <mykola.naumenko@protonmail.com>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/minetest/"
@@ -708,6 +708,11 @@ msgid "Loading..."
msgstr "ЗавантаженнÑ..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "КлієнтоÑторонні Ñкрипти на клієнті вимкнено"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Спробуйте оновити ÑпиÑок публічних Ñерверів та перевірте Ñвоє Інтернет-"
@@ -2939,7 +2944,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5660,6 +5665,10 @@ msgstr ""
"Потрібен перезапуÑк піÑÐ»Ñ Ñ†Ñ–Ñ”Ñ— зміни."
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6337,6 +6346,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/vi/minetest.po b/po/vi/minetest.po
index 3a5ae4862..1238015ec 100644
--- a/po/vi/minetest.po
+++ b/po/vi/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Vietnamese (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
"PO-Revision-Date: 2020-06-13 21:08+0000\n"
"Last-Translator: darkcloudcat <leducthn@gmail.com>\n"
"Language-Team: Vietnamese <https://hosted.weblate.org/projects/minetest/"
@@ -700,6 +700,10 @@ msgid "Loading..."
msgstr "Äang tải..."
#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Hãy thử kích hoạt lại danh sách máy chủ công cộng và kiểm tra kết nối "
@@ -2838,7 +2842,7 @@ msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+msgid "Enable creative mode for all players"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5540,6 +5544,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -6213,6 +6221,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag 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 ""
diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po
index f1cf938ac..aa816e11d 100644
--- a/po/zh_CN/minetest.po
+++ b/po/zh_CN/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Chinese (Simplified) (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2021-01-24 16:19+0000\n"
-"Last-Translator: AISS <cretaceous@mail.ee>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2021-01-20 15:10+0000\n"
+"Last-Translator: ZhiZe-ZG <qi_wang_zz@outlook.com>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"minetest/minetest/zh_Hans/>\n"
"Language: zh_CN\n"
@@ -700,6 +700,11 @@ msgid "Loading..."
msgstr "载入中..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "客户端脚本已ç¦ç”¨"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "请å°è¯•é‡æ–°å¯ç”¨å…¬å…±æœåŠ¡å™¨åˆ—表并检查您的网络连接。"
@@ -2206,10 +2211,10 @@ msgid ""
"to be sure) creates a solid floatland layer."
msgstr ""
"调整悬空岛层的密度。\n"
-"增大数值å¯å¢žåŠ å¯†åº¦ï¼Œå¯ä»¥æ˜¯æ­£å€¼æˆ–负值。\n"
-"值=0.0:50% o的体积是平原。\n"
-"值 = 2.0 (å¯ä»¥æ›´é«˜ï¼Œå–决于'mgv7_np_floatland'。\n"
-"总是测试以确ä¿ï¼Œåˆ›å»ºä¸€ä¸ªåšå®žçš„悬空岛层。"
+"增加值以增加密度。å¯ä»¥æ˜¯æ­£å€¼æˆ–负值。\n"
+"值等于0.0, 容积的50%是floatland。\n"
+"值等于2.0 ,(å¯ä»¥æ›´é«˜ï¼Œå–决于 'mgv7_np_floatland' ,始终测试以确定)\n"
+"创建一个åšå®žçš„悬空岛层。"
#: src/settings_translation_file.cpp
msgid "Advanced"
@@ -2970,7 +2975,8 @@ msgid "Enable console window"
msgstr "å¯ç”¨æŽ§åˆ¶å°çª—å£"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "为新建地图å¯ç”¨åˆ›é€ æ¨¡å¼ã€‚"
#: src/settings_translation_file.cpp
@@ -3116,10 +3122,9 @@ msgid ""
"flatter lowlands, suitable for a solid floatland layer."
msgstr ""
"悬空岛锥度的指数,更改锥度的行为。\n"
-"值等于1.0 ,创建一个统一的,线性锥度。\n"
-"值大于1.0 ,创建一个平滑的ã€åˆé€‚的锥度,\n"
-"默认分隔的悬空岛。\n"
-"值å°äºŽ1.0,(例如0.25)创建一个带有平å¦ä½Žåœ°çš„更加轮廓分明的表é¢çº§åˆ«ã€‚\n"
+"值等于1.0,创建一个统一的,线性锥度。\n"
+"值大于1.0,创建一个平滑的ã€åˆé€‚的锥度,默认分隔的悬空岛。\n"
+"值å°äºŽ1.0,(例如0.25)创建一个带有平å¦ä½Žåœ°çš„更加轮廓分明的表é¢çº§åˆ«ï¼Œ\n"
"适用于固体悬空岛层。"
#: src/settings_translation_file.cpp
@@ -3877,8 +3882,8 @@ msgid ""
"limited\n"
"to this distance from the player to the node."
msgstr ""
-"如果客户端modæ–¹å—范围é™åˆ¶å¯ç”¨ï¼Œé™åˆ¶get_node至玩家。\n"
-"到方å—çš„è·ç¦»ã€‚"
+"如果客户端modæ–¹å—范围é™åˆ¶å¯ç”¨ï¼Œé™åˆ¶get_node至玩家\n"
+"到方å—çš„è·ç¦»"
#: src/settings_translation_file.cpp
msgid ""
@@ -6189,6 +6194,11 @@ msgstr ""
"å˜æ›´åŽé¡»é‡æ–°å¯åŠ¨ã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show nametag backgrounds by default"
+msgstr "默认粗体"
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "关闭消æ¯"
@@ -6444,46 +6454,38 @@ msgid ""
"this option allows enforcing it for certain node types. Note though that\n"
"that is considered EXPERIMENTAL and may not work properly."
msgstr ""
-"节点上的纹ç†å¯ä»¥ä¸Žè¯¥èŠ‚点对é½ï¼Œä¹Ÿå¯ä»¥ä¸Žä¸–界对é½ã€‚\n"
-"å‰ä¸€ç§æ¨¡å¼é€‚åˆæœºå™¨ï¼Œå®¶å…·ç­‰æ›´å¥½çš„东西,而\n"
-"åŽè€…使楼梯和微区å—更适åˆå‘¨å›´çŽ¯å¢ƒã€‚\n"
-"但是,由于这ç§å¯èƒ½æ€§æ˜¯æ–°çš„,因此较旧的æœåŠ¡å™¨å¯èƒ½ä¸ä¼šä½¿ç”¨ï¼Œ\n"
-"此选项å…许对æŸäº›èŠ‚点类型强制实施。 注æ„尽管\n"
-"被认为是实验性的,å¯èƒ½æ— æ³•æ­£å¸¸å·¥ä½œã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "The URL for the content repository"
msgstr "内容存储库的 URL"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The deadzone of the joystick"
-msgstr "è¦ä½¿ç”¨çš„æ“纵æ†çš„标识符"
+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 ""
-"ä¿å­˜é…置文件的默认格å¼ï¼Œ\n"
-"调用`/profiler save[format]`æ—¶ä¸å¸¦æ ¼å¼ã€‚"
#: 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 ""
#: src/settings_translation_file.cpp
msgid "The identifier of the joystick to use"
-msgstr "è¦ä½¿ç”¨çš„æ“纵æ†çš„标识符"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "The length in pixels it takes for touch screen interaction to start."
-msgstr "开始触摸å±äº¤äº’所需的长度(以åƒç´ ä¸ºå•ä½ï¼‰ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -6493,11 +6495,6 @@ 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."
@@ -6521,14 +6518,8 @@ msgid ""
"maintained.\n"
"This should be configured together with active_object_send_range_blocks."
msgstr ""
-"æ¯ä¸ªçŽ©å®¶å‘¨å›´çš„æ–¹å—体积的åŠå¾„å—制于\n"
-"活动å—内容,以mapblock(16个节点)表示。\n"
-"在活动å—中,将加载对象并è¿è¡ŒABM。\n"
-"这也是ä¿æŒæ´»åŠ¨å¯¹è±¡ï¼ˆç”Ÿç‰©ï¼‰çš„最å°èŒƒå›´ã€‚\n"
-"这应该与active_object_send_range_blocks一起é…置。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The rendering back-end for Irrlicht.\n"
"A restart is required after changing this.\n"
@@ -6537,19 +6528,12 @@ 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"
-"ç›®å‰æ”¯æŒç€è‰²å™¨ã€‚"
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
"ingame view frustum around."
msgstr ""
-"æ“纵æ†è½´çš„çµæ•åº¦ï¼Œç”¨äºŽç§»åŠ¨\n"
-"在游æˆä¸­æŸ¥çœ‹å‘¨å›´ frustum。"
#: src/settings_translation_file.cpp
msgid ""
@@ -6558,10 +6542,6 @@ 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"
-"设置为最接近的有效值。"
#: src/settings_translation_file.cpp
msgid ""
@@ -6569,9 +6549,6 @@ 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 ""
@@ -6584,21 +6561,16 @@ msgid ""
"The time in seconds it takes between repeated events\n"
"when holding down a joystick button combination."
msgstr ""
-"按ä½æ“纵手柄按钮组åˆæ—¶ï¼Œ\n"
-"é‡å¤äº‹ä»¶ä¹‹é—´çš„时间(以秒为å•ä½ï¼‰ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
-"按ä½é¼ æ ‡å³é”®æ—¶ä¸¤æ¬¡é‡å¤å•å‡»ä¹‹é—´æ‰€èŠ±è´¹çš„时间(以秒为å•ä½ï¼‰\n"
-"鼠标按钮。"
#: src/settings_translation_file.cpp
msgid "The type of joystick"
-msgstr "手柄类型"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -6611,8 +6583,9 @@ msgstr ""
"å·²å¯ç”¨â€œ altitude_dryâ€ã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Third of 4 2D noises that together define hill/mountain range height."
-msgstr "å››ç§2D波状定义了,频率,幅度,噪声,颜色。"
+msgstr "定义tunnels的最åˆ2个3D噪音。"
#: src/settings_translation_file.cpp
msgid ""
@@ -6645,8 +6618,6 @@ msgid ""
"This determines how long they are slowed down after placing or removing a "
"node."
msgstr ""
-"为了å‡å°‘延迟,当一个玩家正在构建æŸä¸ªä¸œè¥¿æ—¶ï¼Œé˜»å¡žä¼ è¾“会å‡æ…¢ã€‚\n"
-"这决定了放置或删除节点åŽå®ƒä»¬çš„速度å‡æ…¢çš„时间。"
#: src/settings_translation_file.cpp
msgid "Toggle camera mode key"
@@ -6687,8 +6658,9 @@ msgid "URL to the server list displayed in the Multiplayer Tab."
msgstr "显示在“多人游æˆâ€é€‰é¡¹å¡ä¸­çš„æœåŠ¡å™¨åˆ—表的URL。"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Undersampling"
-msgstr "采集"
+msgstr "欠采样"
#: src/settings_translation_file.cpp
msgid ""
@@ -6698,10 +6670,6 @@ msgid ""
"image.\n"
"Higher values result in a less detailed image."
msgstr ""
-"采集类似于使用较低的å±å¹•åˆ†è¾¨çŽ‡ï¼Œä½†æ˜¯å®ƒé€‚用\n"
-"ä»…é™äºŽæ¸¸æˆä¸–界,ä¿æŒGUI完整。\n"
-"它应该以ä¸é‚£ä¹ˆè¯¦ç»†çš„图åƒä¸ºä»£ä»·æ˜¾ç€æ高性能。\n"
-"较高的值会导致图åƒä¸å¤ªæ¸…晰。"
#: src/settings_translation_file.cpp
msgid "Unlimited player transfer distance"
@@ -6724,16 +6692,17 @@ msgid "Use 3D cloud look instead of flat."
msgstr "使用 3D 云彩,而ä¸æ˜¯çœ‹èµ·æ¥æ˜¯å¹³é¢çš„。"
#: src/settings_translation_file.cpp
+#, fuzzy
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 "从æŸä¸ªè§’度查看纹ç†æ—¶ä½¿ç”¨å„å‘异性过滤。"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Use bilinear filtering when scaling textures."
-msgstr "缩放纹ç†æ—¶ä½¿ç”¨åŒçº¿æ€§è¿‡æ»¤ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -6741,9 +6710,6 @@ msgid ""
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
-"使用mip映射缩放纹ç†ã€‚å¯èƒ½ä¼šç¨å¾®æ高性能,\n"
-"尤其是使用高分辨率纹ç†åŒ…时。\n"
-"ä¸æ”¯æŒGamma校正缩å°ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -6758,7 +6724,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
-msgstr "缩放纹ç†æ—¶ä½¿ç”¨ä¸‰çº¿è¿‡æ»¤ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "VBO"
@@ -6773,8 +6739,9 @@ msgid "Valley depth"
msgstr "山谷深度"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Valley fill"
-msgstr "山谷填塞"
+msgstr "山谷弥漫"
#: src/settings_translation_file.cpp
msgid "Valley profile"
@@ -6794,35 +6761,32 @@ 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
+#, fuzzy
msgid "Varies steepness of cliffs."
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."
@@ -6833,6 +6797,7 @@ msgid "Video driver"
msgstr "视频驱动程åº"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "View bobbing factor"
msgstr "范围摇动"
@@ -6858,13 +6823,14 @@ msgstr "å¯è§†èŒƒå›´"
#: src/settings_translation_file.cpp
msgid "Virtual joystick triggers aux button"
-msgstr "虚拟æ“纵手柄触å‘辅助按钮"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Volume"
msgstr "音é‡"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
@@ -6880,11 +6846,6 @@ msgid ""
"Has no effect on 3D fractals.\n"
"Range roughly -2 to 2."
msgstr ""
-"生æˆçš„ 4D 分形 3D 切片的 W å标。\n"
-"确定生æˆçš„ 4D 形状的 3D 切片。\n"
-"更改分形的形状。\n"
-"对 3D 分形没有影å“。\n"
-"范围大约 -2 到 2。"
#: src/settings_translation_file.cpp
msgid "Walking and flying speed, in nodes per second."
@@ -6903,8 +6864,9 @@ msgid "Water level"
msgstr "æ°´ä½"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Water surface level of the world."
-msgstr "地表水é¢é«˜åº¦ã€‚"
+msgstr "世界水平é¢çº§åˆ«ã€‚"
#: src/settings_translation_file.cpp
msgid "Waving Nodes"
@@ -6940,9 +6902,6 @@ msgid ""
"filtered in software, but some images are generated directly\n"
"to hardware (e.g. render-to-texture for nodes in inventory)."
msgstr ""
-"当gui_scaling_filter为 true 时,所有 GUI 映åƒéƒ½éœ€è¦\n"
-"在软件中过滤,但一些图åƒæ˜¯ç›´æŽ¥ç”Ÿæˆçš„\n"
-"硬件(例如,库存中æ质的渲染到纹ç†ï¼‰ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -6951,10 +6910,6 @@ msgid ""
"to the old scaling method, for video drivers that don't\n"
"properly support downloading textures back from hardware."
msgstr ""
-"当gui_scaling_filter_txr2img为 true 时,å¤åˆ¶è¿™äº›å›¾åƒ\n"
-"从硬件到软件进行扩展。 当 false 时,回退\n"
-"到旧的缩放方法,对于ä¸\n"
-"正确支æŒä»Žç¡¬ä»¶ä¸‹è½½çº¹ç†ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -6968,15 +6923,6 @@ msgid ""
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
-"使用åŒçº¿æ€§/三线性/å„å‘异性滤镜时,低分辨率纹ç†ã€‚\n"
-"å¯ä»¥è¢«æ¨¡ç³ŠåŒ–,因此å¯ä»¥ä½¿ç”¨æœ€è¿‘的邻居自动对其进行放大。\n"
-"æ’值以ä¿ç•™æ¸…æ™°åƒç´ ã€‚ 设置最å°çº¹ç†å¤§å°ã€‚\n"
-"用于高档纹ç†ï¼› 较高的值看起æ¥æ›´é”利,但需è¦æ›´å¤šã€‚\n"
-"记忆。 建议使用2的幂。 将此值设置为大于1å¯èƒ½ä¸ä¼šã€‚\n"
-"除éžåŒçº¿æ€§/三线性/å„å‘异性过滤是。\n"
-"å·²å¯ç”¨ã€‚\n"
-"这也用作与世界对é½çš„基本æ质纹ç†å¤§å°ã€‚\n"
-"纹ç†è‡ªåŠ¨ç¼©æ”¾ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -6984,24 +6930,26 @@ msgid ""
"in.\n"
"If disabled, bitmap and XML vectors fonts are used instead."
msgstr ""
-"是å¦ä½¿ç”¨ FreeType 字体,都需è¦åœ¨ 中编译 FreeType 支æŒã€‚\n"
-"如果ç¦ç”¨ï¼Œåˆ™ä½¿ç”¨ä½å›¾å’Œ XML 矢é‡å­—体。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag backgrounds should be shown by default.\n"
+"Mods may still set a background."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
-msgstr "节点纹ç†åŠ¨ç”»æ˜¯å¦åº”按地图å—ä¸åŒæ­¥ã€‚"
+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 ""
-"玩家是å¦æ˜¾ç¤ºç»™å®¢æˆ·ç«¯æ²¡æœ‰ä»»ä½•èŒƒå›´é™åˆ¶ã€‚\n"
-"已弃用,请player_transfer_distance设置。"
#: src/settings_translation_file.cpp
msgid "Whether to allow players to damage and kill each other."
-msgstr "是å¦å…许玩家互相伤害和æ€æ­»ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -7022,10 +6970,6 @@ 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 ""
@@ -7037,8 +6981,9 @@ msgid "Width component of the initial window size."
msgstr "åˆå§‹çª—å£å¤§å°çš„宽度。"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Width of the selection box lines around nodes."
-msgstr "节点周围的选择框线的宽度。"
+msgstr "结点周围的选择框的线宽。"
#: src/settings_translation_file.cpp
msgid ""
@@ -7046,8 +6991,6 @@ msgid ""
"background.\n"
"Contains the same information as the file debug.txt (default name)."
msgstr ""
-"仅适用于 Windows 系统:在命令行中窗å£ä¸­å¯åŠ¨ Minetest。\n"
-"与 debug.txt(默认å称)文件包å«ç›¸åŒçš„调试信æ¯ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -7070,16 +7013,10 @@ msgid ""
"See also texture_min_size.\n"
"Warning: This option is EXPERIMENTAL!"
msgstr ""
-"世界对é½çš„纹ç†å¯ä»¥ç¼©æ”¾ä»¥è·¨è¶Šå¤šä¸ªèŠ‚点。 然而,\n"
-"æœåŠ¡å™¨å¯èƒ½ä¸ä¼šåŒæ„您想è¦çš„请求,特别是如果您使用\n"
-"专门设计的纹ç†åŒ…ï¼› 使用此选项,客户端å°è¯•\n"
-"æ ¹æ®çº¹ç†å¤§å°è‡ªåŠ¨ç¡®å®šæ¯”例。\n"
-"å¦è¯·å‚è§texture_min_size。\n"
-"警告:此选项是实验性的ï¼"
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
-msgstr "世界对é½çº¹ç†æ¨¡å¼"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Y of flat ground."
@@ -7089,15 +7026,16 @@ msgstr "平地的 Y。"
msgid ""
"Y of mountain density gradient zero level. Used to shift mountains "
"vertically."
-msgstr "Y的山地密度梯度为零。用于垂直移动山脉。"
+msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Y of upper limit of large caves."
-msgstr "大型éšæœºæ´žç©´çš„Yå标最大值。"
+msgstr "大型éšæœºæ´žç©´çš„Y轴最大值。"
#: src/settings_translation_file.cpp
msgid "Y-distance over which caverns expand to full size."
-msgstr "洞穴扩大到最大尺寸的Yè½´è·ç¦»ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -7106,22 +7044,18 @@ 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 "地表平å‡Yå标。"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Y-level of cavern upper limit."
-msgstr "洞穴上é™çš„Yå标。"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Y-level of higher terrain that creates cliffs."
-msgstr "å½¢æˆæ‚¬å´–的更高地形的Yå标。"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Y-level of lower terrain and seabed."
diff --git a/po/zh_TW/minetest.po b/po/zh_TW/minetest.po
index 598777a62..99332e226 100644
--- a/po/zh_TW/minetest.po
+++ b/po/zh_TW/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Chinese (Traditional) (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-30 21:13+0100\n"
-"PO-Revision-Date: 2021-01-24 16:19+0000\n"
-"Last-Translator: AISS <cretaceous@mail.ee>\n"
+"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"PO-Revision-Date: 2020-12-24 05:29+0000\n"
+"Last-Translator: Man Ho Yiu <yiufamily.hh@gmail.com>\n"
"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.5-dev\n"
+"X-Generator: Weblate 4.4.1-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -23,6 +23,7 @@ msgid "You died"
msgstr "您已死亡"
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+#, fuzzy
msgid "OK"
msgstr "OK"
@@ -199,10 +200,12 @@ msgid "Base Game:"
msgstr "主æŒéŠæˆ²"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr "在沒有cURL的情æ³ä¸‹ç·¨è­¯Minetest時,ContentDBä¸å¯ç”¨"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
msgid "Downloading..."
msgstr "正在載入..."
@@ -248,9 +251,8 @@ msgid "No updates"
msgstr "æ›´æ–°"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Not found"
-msgstr "éœéŸ³"
+msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
@@ -289,6 +291,7 @@ msgid "A world named \"$1\" already exists"
msgstr "å為「$1ã€çš„世界已存在"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Additional terrain"
msgstr "其他地形"
@@ -297,23 +300,24 @@ msgid "Altitude chill"
msgstr "寒冷海拔"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Altitude dry"
msgstr "寒冷海拔"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "Biome blending"
-msgstr "生物群è½"
+msgstr "生物雜訊"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "Biomes"
-msgstr "生物群è½"
+msgstr "生物雜訊"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "Caverns"
-msgstr "æ´žç©´"
+msgstr "洞穴雜訊"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
@@ -363,7 +367,7 @@ msgstr "éŠæˆ²"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr "生æˆæ›²ç·šæˆ–幾何地形:海洋和地下"
+msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
@@ -421,11 +425,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
#, fuzzy
@@ -463,11 +467,11 @@ msgstr "溫帶沙漠"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle"
-msgstr "溫帶ã€æ²™æ¼ ã€å¢æž—"
+msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr "溫帶,沙漠,å¢æž—,苔原,é‡è‘‰æž—"
+msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
@@ -476,7 +480,7 @@ msgstr "地形基礎高度"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
-msgstr "樹木和å¢æž—è‰"
+msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
@@ -567,7 +571,7 @@ msgstr "已啟用"
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
msgid "Lacunarity"
-msgstr "空隙"
+msgstr "Lacunarity"
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
@@ -723,6 +727,11 @@ msgid "Loading..."
msgstr "正在載入..."
#: builtin/mainmenu/serverlistmgr.lua
+#, fuzzy
+msgid "Public server list is disabled"
+msgstr "å·²åœç”¨ç”¨æˆ¶ç«¯æŒ‡ä»¤ç¨¿"
+
+#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "請嘗試é‡æ–°å•Ÿç”¨å…¬å…±ä¼ºæœå™¨æ¸…單並檢查您的網際網路連線。"
@@ -1999,13 +2008,12 @@ msgstr ""
"如åœç”¨ï¼Œè™›æ“¬æ–桿將會置中於第一個觸碰的ä½ç½®ã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"(Android) Use virtual joystick to trigger \"aux\" button.\n"
"If enabled, virtual joystick will also tap \"aux\" button when out of main "
"circle."
-msgstr ""
-"(Android)使用虛擬æ“縱桿觸發“auxâ€æŒ‰éˆ•ã€‚\n"
-"如果啟用,則虛擬éŠæˆ²æ¡¿ä¹Ÿæœƒåœ¨é›¢é–‹ä¸»åœ“時點擊“auxâ€æŒ‰éˆ•ã€‚"
+msgstr "(Android) 使用虛擬æ–桿觸發 \"aux\" 按éµã€‚\n"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2020,16 +2028,11 @@ msgid ""
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
"在「比例尺ã€ä¸­å–®ä½çš„ (X,Y,Z) å移。\n"
-"å¯ç”¨æ–¼å°‡æ‰€éœ€é»žç§»å‹•åˆ°(0, 0)以創建一個。\n"
-"åˆé©çš„生æˆé»žï¼Œæˆ–å…許“放大â€æ‰€éœ€çš„點。\n"
-"通éŽå¢žåŠ â€œè¦æ¨¡â€ä¾†ç¢ºå®šã€‚\n"
-"默èªå€¼å·²èª¿æ•´ç‚ºMandelbrotåˆé©çš„生æˆé»žã€‚\n"
-"設置默èªåƒæ•¸ï¼Œå¯èƒ½éœ€è¦æ›´æ”¹å…¶ä»–åƒæ•¸ã€‚\n"
-"情æ³ã€‚\n"
-"範åœå¤§ç´„在 -2 至 2 間。乘以“比例â€å¯å¾—出節點的å移值。"
+"用於移動é©åˆçš„低地生æˆå€åŸŸé è¿‘ (0, 0)。\n"
+"é è¨­å€¼é©åˆæ›¼å¾·åšé›†åˆï¼Œè‹¥è¦ç”¨æ–¼æœ±åˆ©äºžé›†åˆå‰‡å¿…須修改。\n"
+"範åœå¤§ç´„在 -2 至 2 間。乘以節點的å移值。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) scale of fractal in nodes.\n"
"Actual fractal size will be 2 to 3 times larger.\n"
@@ -2039,13 +2042,6 @@ 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."
@@ -2109,10 +2105,6 @@ 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噪è²å®šç¾©äº†æµ®åœ°çµæ§‹ã€‚\n"
-"如果更改為默èªå€¼ï¼Œå‰‡å¯èƒ½éœ€è¦å™ªè²â€œæ¯”例â€ï¼ˆé»˜èªå€¼ç‚º0.7)。\n"
-"需è¦é€²è¡Œèª¿æ•´ï¼Œå› ç‚ºç•¶å™ªéŸ³é”到。\n"
-"值範åœç´„為-2.0到2.0。"
#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
@@ -2236,11 +2228,6 @@ 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% oçš„é«”ç©æ˜¯æµ®éŠåœ°ã€‚\n"
-"值2.0(å¯ä»¥æ›´é«˜ï¼Œå–決於“mgv7_np_floatlandâ€ï¼Œç¸½æ˜¯æ¸¬è©¦ã€‚\n"
-"肯定)創造一個固體浮游性地層。"
#: src/settings_translation_file.cpp
msgid "Advanced"
@@ -2254,11 +2241,6 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-"通éŽå°å…¶æ‡‰ç”¨â€œgamma correctionâ€ä¾†æ›´æ”¹å…‰æ›²ç·šã€‚\n"
-"較高的值å¯ä½¿ä¸­ç­‰å’Œè¼ƒä½Žçš„光照水平更亮。\n"
-"值“ 1.0â€ä½¿å…‰æ›²ç·šä¿æŒä¸è®Šã€‚\n"
-"這僅å°æ—¥å…‰å’Œäººé€ å…‰æœ‰é‡å¤§å½±éŸ¿ã€‚\n"
-"光線,å°è‡ªç„¶çš„夜光影響很å°ã€‚"
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2270,7 +2252,7 @@ msgstr "環境é®è”½å…‰"
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr "çŽ©å®¶æ¯ 10 秒能傳é€çš„訊æ¯é‡ã€‚"
+msgstr "çŽ©å®¶æ¯ 10 秒能傳é€çš„訊æ¯é‡"
#: src/settings_translation_file.cpp
msgid "Amplifies the valleys."
@@ -2310,15 +2292,14 @@ msgstr "慣性手臂"
msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
-msgstr ""
-"手臂慣性,使動作更加逼真。\n"
-"相機移動時的手臂。"
+msgstr "慣性手臂,當相機移動時æ供更加真實的手臂é‹å‹•ã€‚"
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
msgstr "è©¢å•æ˜¯å¦åœ¨ç•¶æ©Ÿå¾Œé‡æ–°é€£ç·š"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"At this distance the server will aggressively optimize which blocks are sent "
"to\n"
@@ -2332,14 +2313,11 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
-"在這樣的è·é›¢ä¸‹ï¼Œä¼ºæœå™¨å°‡ç©æ¥µæœ€ä½³åŒ–。\n"
-"那些è¦å‚³é€çµ¦ç”¨æˆ¶ç«¯çš„方塊。\n"
-"較å°çš„值å¯èƒ½æœƒæå‡æ•ˆèƒ½ã€‚\n"
-"但代價是一些å¯è¦‹çš„彩ç¾å•é¡Œã€‚\n"
-"(有一些在水中與洞穴中的方塊將ä¸æœƒè¢«å½©ç¾ï¼Œ\n"
-"以åŠæœ‰æ™‚在陸地上)。\n"
+"在這樣的è·é›¢ä¸‹ï¼Œä¼ºæœå™¨å°‡ç©æ¥µæœ€ä½³åŒ–那些è¦å‚³é€çµ¦ç”¨æˆ¶ç«¯çš„方塊。\n"
+"較å°çš„值å¯èƒ½æœƒæå‡æ•ˆèƒ½ï¼Œä½†ä»£åƒ¹æ˜¯ä¸€äº›å¯è¦‹çš„彩ç¾å•é¡Œã€‚\n"
+"(有一些在水中與洞穴中的方塊將ä¸æœƒè¢«å½©ç¾ï¼Œä»¥åŠæœ‰æ™‚在陸地上)\n"
"將此值設定為大於 max_block_send_distance 將會åœç”¨é€™å€‹æœ€ä½³åŒ–。\n"
-"在地圖å€å¡Šä¸­é¡¯ç¤ºï¼ˆ16 個節點)。"
+"在地圖å€å¡Šä¸­é¡¯ç¤ºï¼ˆ16 個節點)"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2347,9 +2325,8 @@ msgid "Automatic forward key"
msgstr "å‰é€²éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatically jump up single-node obstacles."
-msgstr "自動跳éŽå–®ç¯€é»žéšœç¤™ç‰©ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2361,9 +2338,8 @@ msgid "Autosave screen size"
msgstr "自動儲存視窗大å°"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Autoscaling mode"
-msgstr "自動縮放模å¼"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Backward key"
@@ -2375,8 +2351,9 @@ msgid "Base ground level"
msgstr "地é¢é«˜åº¦"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Base terrain height."
-msgstr "基礎地形高度。"
+msgstr "基礎地形高度"
#: src/settings_translation_file.cpp
msgid "Basic"
@@ -2449,17 +2426,12 @@ msgid "Builtin"
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"
"Increasing can reduce artifacting on weaker GPUs.\n"
"0.1 = Default, 0.25 = Good value for weaker tablets."
msgstr ""
-"相機在節點附近的“剪切平é¢é™„è¿‘â€è·é›¢ï¼Œä»‹æ–¼0到0.25之間\n"
-"僅é©ç”¨æ–¼GLESå¹³å°ã€‚ 大多數用戶ä¸éœ€è¦æ›´æ”¹æ­¤è¨­ç½®ã€‚\n"
-"增加å¯ä»¥æ¸›å°‘較弱GPU上的å½å½±ã€‚\n"
-"0.1 =默èªå€¼ï¼Œ0.25 =å°æ–¼è¼ƒå¼±çš„å¹³æ¿é›»è…¦ä¾†èªªæ˜¯å¥½çš„值。"
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
@@ -2523,8 +2495,6 @@ 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
#, fuzzy
@@ -2598,9 +2568,8 @@ msgid "Client side modding restrictions"
msgstr "用戶端修改"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Client side node lookup range restriction"
-msgstr "客戶端節點查找範åœé™åˆ¶"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Climbing speed"
@@ -2627,7 +2596,6 @@ msgid "Colored fog"
msgstr "彩色迷霧"
#: 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 "
@@ -2637,12 +2605,6 @@ 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 ""
@@ -2689,9 +2651,8 @@ msgid "Console height"
msgstr "終端機高度"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ContentDB Flag Blacklist"
-msgstr "ContentDB標誌黑å單列表"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
@@ -2717,18 +2678,18 @@ msgid "Controls"
msgstr "控制"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Controls length of day/night cycle.\n"
"Examples:\n"
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
msgstr ""
"控制日ï¼å¤œå¾ªç’°çš„長度。\n"
-"範例:\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."
-msgstr "控制液體的下沉速度。"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2739,15 +2700,11 @@ msgid "Controls steepness/height of hills."
msgstr "控制山丘的陡度ï¼æ·±åº¦ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Controls width of tunnels, a smaller value creates wider tunnels.\n"
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
-"控制隧é“的寬度,較å°çš„值將創建較寬的隧é“。\n"
-"值> = 10.0完全ç¦ç”¨äº†éš§é“的生æˆï¼Œä¸¦é¿å…了\n"
-"密集的噪è²è¨ˆç®—。"
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2805,7 +2762,7 @@ msgstr "音é‡æ¸›å°‘éµ"
#: src/settings_translation_file.cpp
msgid "Decrease this to increase liquid resistance to movement."
-msgstr "減å°æ­¤å€¼å¯å¢žåŠ æ¶²é«”çš„é‹å‹•é˜»åŠ›ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -3017,8 +2974,6 @@ 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 ""
@@ -3033,7 +2988,8 @@ msgid "Enable console window"
msgstr "啟用終端機視窗"
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for new created maps."
+#, fuzzy
+msgid "Enable creative mode for all players"
msgstr "為新建立的地圖啟用創造模å¼ã€‚"
#: src/settings_translation_file.cpp
@@ -3042,8 +2998,9 @@ msgid "Enable joysticks"
msgstr "啟用æ–æ¡¿"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Enable mod channels support."
-msgstr "啟用Mod Channels支æŒã€‚"
+msgstr "啟用 mod 安全性"
#: src/settings_translation_file.cpp
msgid "Enable mod security"
@@ -3059,15 +3016,13 @@ msgstr "啟用隨機使用者輸入(僅供測試使用)。"
#: src/settings_translation_file.cpp
msgid "Enable register confirmation"
-msgstr "啟用註冊確èª"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Enable register confirmation when connecting to server.\n"
"If disabled, new account will be registered automatically."
msgstr ""
-"連接到æœå‹™å™¨æ™‚啟用註冊確èªã€‚\n"
-"如果ç¦ç”¨ï¼Œæ–°å¸³æˆ¶å°‡è‡ªå‹•è¨»å†Šã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3105,8 +3060,6 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
-"啟用最好圖形緩è¡.\n"
-"這將大大æ高圖形性能。"
#: src/settings_translation_file.cpp
msgid ""
@@ -3128,17 +3081,12 @@ msgstr ""
"當 bind_address 被設定時將會被忽略。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enables Hable's 'Uncharted 2' filmic tone mapping.\n"
"Simulates the tone curve of photographic film and how this approximates the\n"
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
-"啟用Hable的“Uncharted 2â€é›»å½±è‰²èª¿æ˜ å°„。\n"
-"模擬æ”影膠片的色調曲線,\n"
-"以åŠå®ƒå¦‚何近似高動態範åœåœ–åƒçš„外觀。\n"
-"中檔å°æ¯”度略微增強,高光和陰影é€æ¼¸å£“縮。"
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -3159,10 +3107,6 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
-"啟用è²éŸ³ç³»çµ±ã€‚\n"
-"如果ç¦ç”¨ï¼Œå‰‡å°‡å®Œå…¨ç¦ç”¨æ‰€æœ‰è²éŸ³ä»¥åŠéŠæˆ²ä¸­çš„所有è²éŸ³ã€‚\n"
-"è²éŸ³æŽ§ä»¶å°‡ä¸èµ·ä½œç”¨ã€‚\n"
-"更改此設置需è¦é‡æ–°å•Ÿå‹•ã€‚"
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -3181,12 +3125,6 @@ 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
#, fuzzy
@@ -3256,13 +3194,13 @@ msgid "Field of view in degrees."
msgstr "以度計算的視野。"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"File in client/serverlist/ that contains your favorite servers displayed in "
"the\n"
"Multiplayer Tab."
msgstr ""
-"在 用戶端/伺æœå™¨æ¸…å–®/ 中的檔案包å«äº†é¡¯ç¤ºåœ¨ã€‚\n"
-"多人éŠæˆ²åˆ†é ä¸­æ‚¨æœ€æ„›çš„伺æœå™¨ã€‚"
+"在 用戶端/伺æœå™¨æ¸…å–®/ 中的檔案包å«äº†é¡¯ç¤ºåœ¨å¤šäººéŠæˆ²åˆ†é ä¸­æ‚¨æœ€æ„›çš„伺æœå™¨ã€‚"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3307,9 +3245,8 @@ msgid "Fixed map seed"
msgstr "固定的地圖種å­"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fixed virtual joystick"
-msgstr "固定虛擬éŠæˆ²æ¡¿"
+msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3368,11 +3305,11 @@ 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"
@@ -3387,28 +3324,22 @@ msgid "Font size"
msgstr "字型大å°"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Font size of the default font in point (pt)."
-msgstr "默èªå­—體的字體大å°ï¼Œä»¥(pt)為單ä½ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Font size of the fallback font in point (pt)."
-msgstr "後備字體的字體大å°ï¼Œä»¥(pt)為單ä½ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Font size of the monospace font in point (pt)."
-msgstr "以点为å•ä½çš„å•ç©ºæ ¼å­—体的字体大å°ï¼Œä»¥(pt)為單ä½ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Font size of the recent chat text and chat prompt in point (pt).\n"
"Value 0 will use the default font size."
msgstr ""
-"最近的èŠå¤©æ–‡æœ¬å’ŒèŠå¤©æ示的字體大å°,以(pt)為單ä½ã€‚\n"
-"值0將使用默èªå­—體大å°ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3425,19 +3356,19 @@ msgstr "螢幕截圖的格å¼ã€‚"
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Color"
-msgstr "Formspec默èªèƒŒæ™¯è‰²"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Opacity"
-msgstr "Formspec默èªèƒŒæ™¯ä¸é€æ˜Žåº¦"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Color"
-msgstr "Formspecå…¨å±èƒŒæ™¯è‰²"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Opacity"
-msgstr "Formspecå…¨å±èƒŒæ™¯ä¸é€æ˜Žåº¦"
+msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3492,7 +3423,6 @@ msgid ""
msgstr "è¦æŠŠå¤šé çš„å€å¡Šé€åˆ°ç”¨æˆ¶ç«¯ï¼Œä»¥åœ°åœ–å€å¡Šè¨ˆç®—(16 個節點)。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"From how far clients know about objects, stated in mapblocks (16 nodes).\n"
"\n"
@@ -3500,11 +3430,6 @@ 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 ""
-"客戶端了解å°è±¡çš„程度,以mapblocks(16個節點)表示。\n"
-"\n"
-"將此值設置為大於active_block_range也會導致æœå‹™å™¨ã€‚\n"
-"使活動物體在以下方å‘上ä¿æŒæ­¤è·é›¢ã€‚\n"
-"玩家正在尋找。 (這å¯ä»¥é¿å…å°æ€ªçªç„¶å¾žè¦–線中消失)"
#: src/settings_translation_file.cpp
msgid "Full screen"
@@ -3542,26 +3467,22 @@ msgid ""
"and junglegrass, in all other mapgens this flag controls all decorations."
msgstr ""
"全域地圖產生屬性。\n"
-"在 Mapgen v6 中,「decorationsã€æ——標控制所有除了樹木。\n"
+"在 Mapgen v6 中,「decorationsã€æ——標控制所有除了樹木\n"
"與å¢æž—以外的è£é£¾ï¼Œåœ¨å…¶ä»–所有的 mapgen 中,這個旗標控制所有è£é£¾ã€‚\n"
-"未在旗標字串中指定的旗標將ä¸æœƒè‡ªé è¨­å€¼ä¿®æ”¹\n"
-"以「noã€é–‹é ­çš„旗標字串將會用於明確的åœç”¨å®ƒå€‘"
+"未在旗標字串中指定的旗標將ä¸æœƒè‡ªé è¨­å€¼ä¿®æ”¹ã€‚\n"
+"以「noã€é–‹é ­çš„旗標字串將會用於明確的åœç”¨å®ƒå€‘。"
#: src/settings_translation_file.cpp
msgid ""
"Gradient of light curve at maximum light level.\n"
"Controls the contrast of the highest light levels."
msgstr ""
-"最大光水平下的光曲線漸變。\n"
-"控制最高亮度的å°æ¯”度。"
#: src/settings_translation_file.cpp
msgid ""
"Gradient of light curve at minimum light level.\n"
"Controls the contrast of the lowest light levels."
msgstr ""
-"最å°å…‰æ°´å¹³ä¸‹çš„光曲線漸變。\n"
-"控制最低亮度的å°æ¯”度。"
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3675,24 +3596,18 @@ 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"
@@ -3833,7 +3748,7 @@ msgstr "å¿«æ·åˆ—第 9 個槽的按éµ"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "How deep to make rivers."
-msgstr "æ²³æµæ·±åº¦ã€‚"
+msgstr "æ²³æµå¤šæ·±"
#: src/settings_translation_file.cpp
msgid ""
@@ -3841,9 +3756,6 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"液體波將移動多快。 Higher = faster。\n"
-"如果為負,則液體波將å‘後移動。\n"
-"需è¦å•Ÿç”¨æ³¢ç‹€æ¶²é«”。"
#: src/settings_translation_file.cpp
msgid ""
@@ -3856,7 +3768,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid "How wide to make rivers."
-msgstr "æ²³æµå¯¬åº¦ã€‚"
+msgstr "æ²³æµå¤šå¯¬"
#: src/settings_translation_file.cpp
msgid "Humidity blend noise"
@@ -3892,9 +3804,7 @@ msgid ""
"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
"are\n"
"enabled."
-msgstr ""
-"è‹¥åœç”¨ï¼Œåœ¨é£›è¡Œèˆ‡å¿«é€Ÿæ¨¡å¼çš†å•Ÿç”¨æ™‚,\n"
-"「specialã€éµå°‡ç”¨æ–¼å¿«é€Ÿé£›è¡Œã€‚"
+msgstr "è‹¥åœç”¨ï¼Œåœ¨é£›è¡Œèˆ‡å¿«é€Ÿæ¨¡å¼çš†å•Ÿç”¨æ™‚,「使用ã€éµå°‡ç”¨æ–¼å¿«é€Ÿé£›è¡Œã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3924,9 +3834,7 @@ msgid ""
"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
"down and\n"
"descending."
-msgstr ""
-"若啟用,å‘下爬與下é™å°‡ä½¿ç”¨ã€‚\n"
-"「specialã€éµè€Œéžã€Œsneakã€éµã€‚"
+msgstr "若啟用,å‘下爬與下é™å°‡ä½¿ç”¨ã€Œä½¿ç”¨ã€éµè€Œéžã€Œæ½›è¡Œã€éµã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3949,50 +3857,38 @@ msgstr ""
"åªåœ¨æ‚¨çŸ¥é“您在幹嘛時æ‰å•Ÿç”¨é€™å€‹é¸é …。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"If enabled, makes move directions relative to the player's pitch when flying "
"or swimming."
msgstr ""
-"如果啟用,則在飛行或游泳時。\n"
-"相å°æ–¼çŽ©å®¶çš„俯仰方å‘åšå‡ºç§»å‹•æ–¹å‘。"
#: src/settings_translation_file.cpp
msgid "If enabled, new players cannot join with an empty password."
msgstr "若啟用,新玩家將無法以空密碼加入。"
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"若啟用,您å¯ä»¥åœ¨æ‚¨ç«™ç«‹çš„ä½ç½®ï¼ˆè…³èˆ‡çœ¼ç›çš„高度)放置方塊。\n"
-"當在å°å€åŸŸè£¡èˆ‡ç¯€é»žç›’一åŒå·¥ä½œæ™‚éžå¸¸æœ‰ç”¨ã€‚"
+"若啟用,您å¯ä»¥åœ¨æ‚¨ç«™ç«‹çš„ä½ç½®ï¼ˆè…³èˆ‡çœ¼ç›çš„高度)放置方塊。當在å°å€åŸŸè£¡èˆ‡ç¯€é»žç›’"
+"一åŒå·¥ä½œæ™‚éžå¸¸æœ‰ç”¨ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"If the CSM restriction for node range is enabled, get_node calls are "
"limited\n"
"to this distance from the player to the node."
msgstr ""
-"如果啟用了節點範åœçš„CSMé™åˆ¶ï¼Œå‰‡get_node調用將å—到é™åˆ¶\n"
-"從玩家到節點的這個è·é›¢ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
"debug.txt is only moved if this setting is positive."
msgstr ""
-"如果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."
@@ -4024,7 +3920,7 @@ msgstr "æ高音é‡éµ"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
-msgstr "è·³èºæ™‚çš„åˆå§‹åž‚直速度,以æ¯ç§’節點數為單ä½ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -4107,17 +4003,12 @@ msgid "Iterations"
msgstr "迭代"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Iterations of the recursive function.\n"
"Increasing this increases the amount of fine detail, but also\n"
"increases processing load.\n"
"At iterations = 20 this mapgen has a similar load to mapgen V7."
msgstr ""
-"éžæ­¸å‡½æ•¸çš„迭代。\n"
-"增加它會增加細節的數é‡ï¼Œè€Œä¸”。\n"
-"增加處ç†è² è·ã€‚\n"
-"迭代次數iterations = 20時,此mapgen的負載與mapgen V7相似。"
#: src/settings_translation_file.cpp
msgid "Joystick ID"
@@ -4142,6 +4033,7 @@ msgid "Joystick type"
msgstr "æ–æ¡¿é¡žåž‹"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Julia set only.\n"
"W component of hypercomplex constant.\n"
@@ -4149,11 +4041,9 @@ msgid ""
"Has no effect on 3D fractals.\n"
"Range roughly -2 to 2."
msgstr ""
-"è´è¶åªè¨­ç½®è´è¶ã€‚\n"
-"超複雜常數的W分é‡ã€‚\n"
-"改變分形的形狀。\n"
-"å°3D分形沒有影響。\n"
-"範åœç´„為-2至2。"
+"僅朱利亞集åˆï¼šå¯äº¤æ›è¶…複數的 W 元素決定了 朱利亞形狀。\n"
+"在 3D 碎形上沒有效果。\n"
+"範åœç´„在 -2 至 2 間。"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4163,10 +4053,9 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
-"è´è¶åªè¨­ç½®è´è¶ã€‚\n"
-"超複雜常數的X分é‡ã€‚\n"
-"改變分形的形狀。\n"
-"範åœç´„為-2至2。"
+"僅朱利亞集åˆï¼šå¯äº¤æ›è¶…複數的 X 元素決定了 朱利亞形狀。\n"
+"在 3D 碎形上沒有效果。\n"
+"範åœç´„在 -2 至 2 間。"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4176,8 +4065,7 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
-"è´è¶åªè¨­ç½®è´è¶\n"
-"å¯äº¤æ›è¶…複數的 Y 元素決定了 è´è¶å½¢ç‹€ã€‚\n"
+"僅朱利亞集åˆï¼šå¯äº¤æ›è¶…複數的 Y 元素決定了 朱利亞形狀。\n"
"在 3D 碎形上沒有效果。\n"
"範åœç´„在 -2 至 2 間。"
@@ -4189,8 +4077,7 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
-"è´è¶è¨­ç½®ã€‚\n"
-"å¯äº¤æ›è¶…複數的 Z 元素決定了 è´è¶å½¢ç‹€ã€‚\n"
+"僅朱利亞集åˆï¼šå¯äº¤æ›è¶…複數的 Z 元素決定了 朱利亞形狀。\n"
"在 3D 碎形上沒有效果。\n"
"範åœç´„在 -2 至 2 間。"
@@ -4308,7 +4195,6 @@ msgid ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
"將玩家往後方移動的按éµã€‚\n"
-"在活èºæ™‚,還會ç¦ç”¨è‡ªå‹•ã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4938,9 +4824,8 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Kick players who sent more than X messages per 10 seconds."
-msgstr "踢æ¯10秒發é€è¶…éŽXæ¢ä¿¡æ¯çš„玩家。"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Lake steepness"
@@ -4960,11 +4845,11 @@ 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"
@@ -5000,9 +4885,7 @@ msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
"network."
-msgstr ""
-"伺æœå™¨ tick 的長度與相關物件的間隔,\n"
-"通常é€éŽç¶²è·¯æ›´æ–°ã€‚"
+msgstr "伺æœå™¨ tick 的長度與相關物件的間隔通常é€éŽç¶²è·¯æ›´æ–°ã€‚"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5049,28 +4932,27 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Light curve boost"
-msgstr "光曲線增強"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Light curve boost center"
-msgstr "光曲線æå‡ä¸­å¿ƒ"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Light curve boost spread"
-msgstr "光曲線增強擴散"
+msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve gamma"
-msgstr "光線曲線伽瑪"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Light curve high gradient"
-msgstr "光曲線高漸變度"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Light curve low gradient"
-msgstr "光曲線低漸變度"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5182,17 +5064,19 @@ msgid "Map directory"
msgstr "地圖目錄"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Map generation attributes specific to Mapgen Carpathian."
-msgstr "Mapgen Carpathian特有的属性地图生æˆã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen Flat.\n"
"Occasional lakes and hills can be added to the flat world."
msgstr ""
-"專用於 Mapgen Flat 的地圖生æˆå±¬æ€§ã€‚\n"
-"å¯èƒ½æœƒæœ‰å°‘數的湖泊或是丘陵會在æ‰å¹³çš„世界中生æˆã€‚"
+"專用於 Mapgen flat 的地圖生æˆå±¬æ€§ã€‚\n"
+"å¯èƒ½æœƒæœ‰å°‘數的湖泊或是丘陵會在æ‰å¹³çš„世界中生æˆã€‚\n"
+"未在旗標字串中指定的旗標將ä¸æœƒè‡ªé è¨­å€¼ä¿®æ”¹ã€‚\n"
+"以「noã€é–‹é ­çš„旗標字串將會用於明確的åœç”¨å®ƒå€‘。"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5201,12 +5085,12 @@ msgid ""
"'terrain' enables the generation of non-fractal terrain:\n"
"ocean, islands and underground."
msgstr ""
-"Mapgen Fractal特有的地圖生æˆå±¬æ€§ã€‚\n"
-"“terrainâ€å¯ç”Ÿæˆéžå¹¾ä½•åœ°å½¢ï¼š\n"
-"海洋,島嶼和地下。"
+"專用於 Mapgen flat 的地圖生æˆå±¬æ€§ã€‚\n"
+"å¯èƒ½æœƒæœ‰å°‘數的湖泊或是丘陵會在æ‰å¹³çš„世界中生æˆã€‚\n"
+"未在旗標字串中指定的旗標將ä¸æœƒè‡ªé è¨­å€¼ä¿®æ”¹ã€‚\n"
+"以「noã€é–‹é ­çš„旗標字串將會用於明確的åœç”¨å®ƒå€‘。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen Valleys.\n"
"'altitude_chill': Reduces heat with altitude.\n"
@@ -5215,17 +5099,10 @@ 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
-#, fuzzy
msgid "Map generation attributes specific to Mapgen v5."
-msgstr "Mapgen v5特有的地圖生æˆå±¬æ€§ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5235,10 +5112,12 @@ msgid ""
"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
"the 'jungles' flag is ignored."
msgstr ""
-"Mapgen v6特有的地圖生æˆå±¬æ€§ã€‚\n"
-"“ snowbiomesâ€æ¨™èªŒå•Ÿç”¨äº†æ–°çš„5個生物群è½ç³»çµ±ã€‚\n"
-"啟用“ snowbiomesâ€æ¨™èªŒæ™‚,會自動啟用å¢æž—並。\n"
-"“å¢æž—â€æ¨™èªŒå°‡è¢«å¿½ç•¥ã€‚"
+"專用於 Mapgen v6 的地圖生æˆå±¬æ€§ã€‚\n"
+"'snowbiomes' 旗標啟用了五個新的生態系。\n"
+"當新的生態系啟用時,å¢æž—生態系會自動啟用,\n"
+"而 'jungles' 會被忽略。\n"
+"未在旗標字串中指定的旗標將ä¸æœƒè‡ªé è¨­å€¼ä¿®æ”¹ã€‚\n"
+"以「noã€é–‹é ­çš„旗標字串將會用於明確的åœç”¨å®ƒå€‘。"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5394,30 +5273,24 @@ msgstr "å¿«æ·åˆ—最大寬度"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
-msgstr "æ¯å€‹åœ°åœ–塊的大洞穴隨機數的最大é™åˆ¶ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
-msgstr "æ¯å€‹åœ°åœ–塊隨機å°æ´žæ•¸çš„最大é™åˆ¶ã€‚"
+msgstr ""
#: 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
-#, 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"
-"max_total = ceil((#clients + max_users)* per_client / 4)"
#: src/settings_translation_file.cpp
msgid "Maximum number of blocks that can be queued for loading."
@@ -5500,18 +5373,14 @@ msgid "Maximum simultaneous block sends per client"
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"
-"0表示ç¦ç”¨æŽ’隊,-1表示隊列大å°ä¸å—é™åˆ¶ã€‚"
#: src/settings_translation_file.cpp
msgid "Maximum time in ms a file download (e.g. a mod download) may take."
@@ -5542,9 +5411,8 @@ msgid "Method used to highlight selected object."
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"
@@ -5560,11 +5428,11 @@ msgstr "迷你地圖掃æ高度"
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr "æ¯å€‹åœ°åœ–塊的大洞穴隨機數的最å°é™åˆ¶ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr "æ¯å€‹åœ°åœ–塊隨機å°æ´žæ•¸çš„最å°é™åˆ¶ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5576,9 +5444,8 @@ msgid "Mipmapping"
msgstr "映射貼圖"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mod channels"
-msgstr "Mod 清單"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Modifies the size of the hudbar elements."
@@ -5635,7 +5502,7 @@ msgstr "éœéŸ³æŒ‰éµ"
#: src/settings_translation_file.cpp
msgid "Mute sound"
-msgstr "éœéŸ³"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5730,7 +5597,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Online Content Repository"
-msgstr "在線內容存儲庫"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Opaque liquids"
@@ -5739,22 +5606,19 @@ msgstr "ä¸é€æ˜Žæ¶²é«”"
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
-msgstr "默èªå­—體後é¢çš„陰影的ä¸é€æ˜Žï¼ˆalpha),介於0å’Œ255之間。"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr "後備字體後é¢çš„陰影的ä¸é€æ˜Žåº¦ï¼ˆalpha),介於0å’Œ255之間。"
+msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
-"當窗å£ç„¦é»žä¸Ÿå¤±æ™‚,打開“暫åœâ€èœå–®ã€‚如果formspec是\n"
-"打開的。"
#: src/settings_translation_file.cpp
msgid ""
@@ -5764,18 +5628,12 @@ msgid ""
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
-"後備字體的路徑。\n"
-"如果啟用“freetypeâ€è¨­ç½®ï¼šå¿…須是TrueType字體。\n"
-"如果“freetypeâ€è¨­ç½®è¢«ç¦ç”¨ï¼šå¿…須是ä½åœ–或XML矢é‡å­—體。\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 ""
@@ -5794,27 +5652,18 @@ msgid ""
"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
-"默èªå­—體的路徑。\n"
-"如果啟用“freetypeâ€è¨­ç½®ï¼šå¿…須是TrueType字體。\n"
-"如果“freetypeâ€è¨­ç½®è¢«ç¦ç”¨ï¼šå¿…須是ä½åœ–或XML矢é‡å­—體。\n"
-"如果無法加載字體,將使用後備字體。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Path to the monospace font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
-"等寬字體的路徑。\n"
-"如果啟用了“ freetypeâ€è¨­ç½®ï¼šå¿…須為TrueType字體。\n"
-"如果ç¦ç”¨äº†â€œ freetypeâ€è¨­ç½®ï¼šå¿…須為ä½åœ–或XML矢é‡å­—體。\n"
-"該字體用於例如 控制å°å’ŒæŽ¢æŸ¥å™¨å±å¹•ã€‚"
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
-msgstr "窗å£ç„¦é»žä¸Ÿå¤±æ™‚æš«åœ"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Per-player limit of queued blocks load from disk"
@@ -5836,7 +5685,7 @@ msgstr "飛行按éµ"
#: src/settings_translation_file.cpp
msgid "Pitch move mode"
-msgstr "俯仰移動模å¼"
+msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5882,20 +5731,17 @@ 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 ""
-"按ä½é¼ æ¨™æŒ‰éˆ•æ™‚,é¿å…é‡è¤‡æŒ–掘和放置。\n"
-"當您æ„外挖掘或放置éŽå¤šæ™‚,請啟用此功能。"
#: src/settings_translation_file.cpp
msgid "Prevent mods from doing insecure things like running shell commands."
msgstr "é¿å… mod åšå‡ºä¸å®‰å…¨çš„舉動,åƒæ˜¯åŸ·è¡Œ shell 指令等。"
#: 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"
-"0 = åœç”¨ã€‚å°é–‹ç™¼è€…有用。"
+msgstr "引擎性能資料å°å‡ºé–“隔的秒數。0 = åœç”¨ã€‚å°é–‹ç™¼è€…有用。"
#: src/settings_translation_file.cpp
msgid "Privileges that players with basic_privs can grant"
@@ -5939,8 +5785,9 @@ msgstr ""
"大於 26 的值將會在雲的角è½æœ‰éŠ³è§’的產生。"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Raises terrain to make valleys around the rivers."
-msgstr "抬高地形,使河æµå‘¨åœå½¢æˆå±±è°·ã€‚"
+msgstr "æå‡åœ°å½¢ä»¥è®“山谷在河æµå‘¨åœ"
#: src/settings_translation_file.cpp
msgid "Random input"
@@ -5996,16 +5843,6 @@ msgid ""
"csm_restriction_noderange)\n"
"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
msgstr ""
-"é™åˆ¶å°æœå‹™å™¨ä¸ŠæŸäº›å®¢æˆ¶ç«¯åŠŸèƒ½çš„訪å•ã€‚\n"
-"組åˆä¸‹é¢çš„字節標誌以é™åˆ¶å®¢æˆ¶ç«¯åŠŸèƒ½ï¼Œæˆ–設置為0\n"
-"ç„¡é™åˆ¶ï¼š\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"
-"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"
@@ -6085,9 +5922,8 @@ msgid "Save the map received by the client on disk."
msgstr "由用戶端儲存接收到的地圖到ç£ç¢Ÿä¸Šã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Save window size automatically when modified."
-msgstr "修改時自動ä¿å­˜çª—å£å¤§å°ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Saving map received from server"
@@ -6294,14 +6130,14 @@ msgid "Shader path"
msgstr "著色器路徑"
#: src/settings_translation_file.cpp
+#, fuzzy
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 ""
-"著色器讓您å¯ä»¥æœ‰é€²éšŽè¦–覺效果並å¯èƒ½æœƒåœ¨æŸäº›é¡¯ç¤ºå¡ä¸Šï¼Œ\n"
-"增強效能。\n"
+"著色器讓您å¯ä»¥æœ‰é€²éšŽè¦–覺效果並å¯èƒ½æœƒåœ¨æŸäº›é¡¯ç¤ºå¡ä¸Šå¢žå¼·æ•ˆèƒ½ã€‚\n"
"這僅在 OpenGL 視訊後端上æ‰èƒ½é‹ä½œã€‚"
#: src/settings_translation_file.cpp
@@ -6340,6 +6176,10 @@ msgstr ""
"變更後必須é‡æ–°å•Ÿå‹•ä»¥ä½¿å…¶ç”Ÿæ•ˆã€‚"
#: src/settings_translation_file.cpp
+msgid "Show nametag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr "關閉訊æ¯"
@@ -6368,16 +6208,17 @@ msgid "Slice w"
msgstr "切片 w"
#: src/settings_translation_file.cpp
+#, fuzzy
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."
@@ -6417,9 +6258,8 @@ msgid "Sneaking speed"
msgstr "走路速度"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Sneaking speed, in nodes per second."
-msgstr "潛行速度,以æ¯ç§’節點數為單ä½ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Sound"
@@ -6448,25 +6288,18 @@ 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"
-"請注æ„,mods或gameså¯ä»¥é¡¯å¼åœ°ç‚ºæŸäº›ï¼ˆæˆ–所有)項目設置堆棧。"
#: 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"
-"控制è¦å¢žåŠ ç¯„åœçš„寬度。\n"
-"光曲線的標準å差增強了高斯。"
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
@@ -6492,15 +6325,11 @@ msgid "Strength of 3D mode parallax."
msgstr "視差強度。"
#: src/settings_translation_file.cpp
-#, fuzzy
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 ""
-"光強度曲線增強。\n"
-"3個“ boostâ€åƒæ•¸å®šç¾©å…‰æºçš„範åœ\n"
-"亮度增加的曲線。"
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -6508,7 +6337,7 @@ msgstr "åš´æ ¼å”議檢查"
#: src/settings_translation_file.cpp
msgid "Strip color codes"
-msgstr "帶é¡è‰²ä»£ç¢¼"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -6523,16 +6352,6 @@ 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"
@@ -6592,7 +6411,6 @@ msgid "Texture path"
msgstr "æ質路徑"
#: 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"
@@ -6601,16 +6419,10 @@ msgid ""
"this option allows enforcing it for certain node types. Note though that\n"
"that is considered EXPERIMENTAL and may not work properly."
msgstr ""
-"節點上的紋ç†å¯ä»¥èˆ‡ç¯€é»žå°é½Šï¼Œä¹Ÿå¯ä»¥èˆ‡ä¸–ç•Œå°é½Šã€‚\n"
-"å‰ä¸€ç¨®æ¨¡å¼é©åˆæ©Ÿå™¨ï¼Œå®¶å…·ç­‰æ›´å¥½çš„æ±è¥¿ï¼Œè€Œ\n"
-"後者使樓梯和微å€å¡Šæ›´é©åˆå‘¨åœç’°å¢ƒã€‚\n"
-"但是,由於這種å¯èƒ½æ€§æ˜¯æ–°çš„,因此較舊的æœå‹™å™¨å¯èƒ½ä¸æœƒä½¿ç”¨ï¼Œ\n"
-"æ­¤é¸é …å…許å°æŸäº›ç¯€é»žé¡žåž‹å¼·åˆ¶å¯¦æ–½ã€‚ 注æ„儘管\n"
-"被èªç‚ºæ˜¯å¯¦é©—性的,å¯èƒ½ç„¡æ³•æ­£å¸¸å·¥ä½œã€‚"
#: src/settings_translation_file.cpp
msgid "The URL for the content repository"
-msgstr "內容存儲庫的URL"
+msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6626,8 +6438,9 @@ msgstr ""
"當呼å«ã€Œ/profiler save [æ ¼å¼]ã€ä½†ä¸åŒ…å«æ ¼å¼æ™‚。"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "The depth of dirt or other biome filler node."
-msgstr "塵土或其他填充物的深度。"
+msgstr "塵土或其他填充物的深度"
#: src/settings_translation_file.cpp
msgid ""
@@ -6650,11 +6463,6 @@ 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."
@@ -6669,7 +6477,6 @@ msgstr ""
"在éŠæˆ²ä¸­è«‹è¦‹ /privs 以å–得在您的伺æœå™¨ä¸Šèˆ‡ mod 設定的完整清單。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The radius of the volume of blocks around every player that is subject to "
"the\n"
@@ -6679,14 +6486,8 @@ msgid ""
"maintained.\n"
"This should be configured together with active_object_send_range_blocks."
msgstr ""
-"æ¯å€‹çŽ©å®¶å‘¨åœçš„方塊體ç©çš„åŠå¾‘å—制於。\n"
-"活動塊內容,以地图å—(16個節點)表示。\n"
-"在活動塊中,將加載å°è±¡ä¸¦é‹è¡ŒABM。\n"
-"這也是ä¿æŒæ´»å‹•å°è±¡ï¼ˆç”Ÿç‰©ï¼‰çš„最å°ç¯„åœã€‚\n"
-"這應該與active_object_send_range_blocks一起é…置。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The rendering back-end for Irrlicht.\n"
"A restart is required after changing this.\n"
@@ -6695,11 +6496,6 @@ 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"
-"ç›®å‰æ”¯æŒè‘—色器。"
#: src/settings_translation_file.cpp
msgid ""
@@ -6750,9 +6546,7 @@ msgstr ""
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
-msgstr ""
-"當按ä½æ»‘é¼ å³éµæ™‚,\n"
-"é‡è¦†å³éµé»žé¸çš„間隔以秒計。"
+msgstr "當按ä½æ»‘é¼ å³éµæ™‚,é‡è¦†å³éµé»žé¸çš„間隔以秒計。"
#: src/settings_translation_file.cpp
msgid "The type of joystick"
@@ -6764,9 +6558,6 @@ msgid ""
"enabled. Also the vertical distance over which humidity drops by 10 if\n"
"'altitude_dry' is enabled."
msgstr ""
-"如果'altitude_chill'為,則熱é‡ä¸‹é™20çš„åž‚ç›´è·é›¢\n"
-"已啟用。 如果濕度下é™çš„åž‚ç›´è·é›¢ä¹Ÿæ˜¯10\n"
-"已啟用“ altitude_dryâ€ã€‚"
#: src/settings_translation_file.cpp
msgid "Third of 4 2D noises that together define hill/mountain range height."
@@ -6782,7 +6573,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 ""
#: src/settings_translation_file.cpp
msgid "Time send interval"
@@ -6851,6 +6642,7 @@ msgid "Undersampling"
msgstr "Undersampling"
#: 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"
@@ -6858,8 +6650,7 @@ msgid ""
"image.\n"
"Higher values result in a less detailed image."
msgstr ""
-"Undersampling 類似於較低的螢幕解æžåº¦ï¼Œ\n"
-"但其,\n"
+"Undersampling 類似於較低的螢幕解æžåº¦ï¼Œä½†å…¶\n"
"僅é©ç”¨æ–¼éŠæˆ²ä¸–界,ä¿æŒåœ–形使用者介é¢å®Œå¥½ç„¡æ。\n"
"它應該有顯著的效能æå‡ï¼Œä»£åƒ¹æ˜¯ç´°ç¯€è¼ƒå·®çš„圖片。"
@@ -6897,15 +6688,11 @@ msgid "Use bilinear filtering when scaling textures."
msgstr "當縮放æ質時使用雙線性éŽæ¿¾ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Use mip mapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
-"使用Mip映射縮放紋ç†ã€‚ å¯èƒ½æœƒç¨å¾®æ高性能,\n"
-"尤其是在使用高分辨率紋ç†åŒ…時。\n"
-"ä¸æ”¯æŒGamma正確縮å°ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -6988,9 +6775,8 @@ msgid "Varies steepness of cliffs."
msgstr "懸崖å¡åº¦è®ŠåŒ–。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Vertical climbing speed, in nodes per second."
-msgstr "垂直爬å‡é€Ÿåº¦ï¼Œä»¥æ¯ç§’節點數為單ä½ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Vertical screen synchronization."
@@ -7026,7 +6812,7 @@ msgstr "視野"
#: src/settings_translation_file.cpp
msgid "Virtual joystick triggers aux button"
-msgstr "虛擬æ“縱桿觸發aux按鈕"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Volume"
@@ -7052,23 +6838,20 @@ msgid ""
msgstr ""
"4D 碎形生æˆçš„ 3D 切片的 W 座標。\n"
"決定了會生æˆæ€Žæ¨£çš„ 4D 形狀的 3D 切片。\n"
-"改變碎形的形狀。\n"
"å° 3D 碎形沒有影響。\n"
"範åœç´„在 -2 至 2 間。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Walking and flying speed, in nodes per second."
-msgstr "行走和飛行速度,以æ¯ç§’節點數為單ä½ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Walking speed"
msgstr "走路速度"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
-msgstr "快速模å¼ä¸‹çš„行走,飛行和爬å‡é€Ÿåº¦ï¼Œä»¥æ¯ç§’節點數為單ä½ã€‚"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Water level"
@@ -7133,6 +6916,7 @@ 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"
@@ -7144,14 +6928,12 @@ msgid ""
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
-"當使用雙線性ï¼ä¸‰ç·šæ€§ï¼å„å‘異性éŽæ¿¾å™¨æ™‚,低解æžåº¦æ質。\n"
-"會被模糊,所以會自動將大å°ç¸®æ”¾è‡³æœ€è¿‘çš„å…§æ’值。\n"
-"以讓åƒç´ ä¿æŒæ¸…晰。這會設定最å°æ質大å°ã€‚\n"
-"供放大æ質使用;較高的值看起來較銳利,\n"
-"但需è¦æ›´å¤šçš„記憶體。\n"
-"建議為 2 的次方。將這個值設定高於 1 ä¸æœƒã€‚\n"
-"有任何視覺效果,\n"
-"除éžé›™ç·šæ€§ï¼ä¸‰ç·šæ€§ï¼å„å‘異性éŽæ¿¾ã€‚\n"
+"當使用雙線性ï¼ä¸‰ç·šæ€§ï¼å„å‘異性éŽæ¿¾å™¨æ™‚,低解æžåº¦æ質\n"
+"會被模糊,所以會自動將大å°ç¸®æ”¾è‡³æœ€è¿‘çš„å…§æ’值\n"
+"以讓åƒç´ ä¿æŒæ¸…晰。這會設定最å°æ質大å°\n"
+"供放大æ質使用;較高的值看起來較銳利,但需è¦æ›´å¤šçš„\n"
+"記憶體。建議為 2 的次方。將這個值設定高於 1 ä¸æœƒ\n"
+"有任何視覺效果,除éžé›™ç·šæ€§ï¼ä¸‰ç·šæ€§ï¼å„å‘異性éŽæ¿¾\n"
"已啟用。"
#: src/settings_translation_file.cpp
@@ -7160,9 +6942,13 @@ msgid ""
"Whether FreeType fonts are used, requires FreeType support to be compiled "
"in.\n"
"If disabled, bitmap and XML vectors fonts are used instead."
+msgstr "是å¦ä½¿ç”¨ freetype 字型,需è¦å°‡ freetype 支æ´ç·¨è­¯é€²ä¾†ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether nametag backgrounds should be shown by default.\n"
+"Mods may still set a background."
msgstr ""
-"是å¦ä½¿ç”¨ freetype 字型,\n"
-"需è¦å°‡ freetype 支æ´ç·¨è­¯é€²ä¾†ã€‚"
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -7199,10 +6985,6 @@ 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 ""
@@ -7360,19 +7142,6 @@ msgstr "cURL 逾時"
#~ msgid "Bumpmapping"
#~ msgstr "映射貼圖"
-#~ msgid ""
-#~ "Changes the main menu UI:\n"
-#~ "- Full: Multiple singleplayer worlds, game choice, texture pack "
-#~ "chooser, etc.\n"
-#~ "- Simple: One singleplayer world, no game or texture pack choosers. May "
-#~ "be\n"
-#~ "necessary for smaller screens."
-#~ msgstr ""
-#~ "更改主èœå–®ç”¨æˆ¶ç•Œé¢ï¼š\n"
-#~ "-完整:多個單人éŠæˆ²ä¸–界,éŠæˆ²é¸æ“‡ï¼Œç´‹ç†åŒ…é¸æ“‡å™¨ç­‰ã€‚\n"
-#~ "-簡單:一個單人éŠæˆ²ä¸–界,沒有éŠæˆ²æˆ–ç´‹ç†åŒ…é¸æ“‡å™¨ã€‚ 也許\n"
-#~ "å°æ–¼è¼ƒå°çš„å±å¹•æ˜¯å¿…需的。"
-
#~ msgid "Config mods"
#~ msgstr "設定 Mod"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7bcf8d6c7..8a6eabccc 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -63,14 +63,13 @@ if(ENABLE_GETTEXT)
if(GETTEXTLIB_FOUND)
if(WIN32)
message(STATUS "GetText library: ${GETTEXT_LIBRARY}")
- message(STATUS "GetText DLL: ${GETTEXT_DLL}")
- message(STATUS "GetText iconv DLL: ${GETTEXT_ICONV_DLL}")
+ message(STATUS "GetText DLL(s): ${GETTEXT_DLL}")
endif()
set(USE_GETTEXT TRUE)
message(STATUS "GetText enabled; locales found: ${GETTEXT_AVAILABLE_LOCALES}")
endif(GETTEXTLIB_FOUND)
else()
- mark_as_advanced(GETTEXT_ICONV_DLL GETTEXT_INCLUDE_DIR GETTEXT_LIBRARY GETTEXT_MSGFMT)
+ mark_as_advanced(GETTEXT_INCLUDE_DIR GETTEXT_LIBRARY GETTEXT_MSGFMT)
message(STATUS "GetText disabled.")
endif()
@@ -268,8 +267,10 @@ if(WIN32)
if(ENABLE_SOUND)
set(OPENAL_DLL "" CACHE FILEPATH "Path to OpenAL32.dll for installation (optional)")
set(OGG_DLL "" CACHE FILEPATH "Path to libogg.dll for installation (optional)")
- set(VORBIS_DLL "" CACHE FILEPATH "Path to libvorbis.dll for installation (optional)")
- set(VORBISFILE_DLL "" CACHE FILEPATH "Path to libvorbisfile.dll for installation (optional)")
+ set(VORBIS_DLL "" CACHE FILEPATH "Path to Vorbis DLLs for installation (optional)")
+ endif()
+ if(USE_GETTEXT)
+ set(GETTEXT_DLL "" CACHE FILEPATH "Path to Intl/Iconv DLLs for installation (optional)")
endif()
if(USE_LUAJIT)
set(LUA_DLL "" CACHE FILEPATH "Path to luajit-5.1.dll for installation (optional)")
@@ -295,7 +296,6 @@ else()
endif(NOT HAIKU AND NOT APPLE)
find_package(JPEG REQUIRED)
- find_package(BZip2 REQUIRED)
find_package(PNG REQUIRED)
if(APPLE)
find_library(CARBON_LIB Carbon REQUIRED)
@@ -713,7 +713,7 @@ if(MSVC)
# Flags that cannot be shared between cl and clang-cl
# https://clang.llvm.org/docs/UsersManual.html#clang-cl
- if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=lld")
# Disable pragma-pack warning
@@ -731,7 +731,7 @@ else()
else()
set(RELEASE_WARNING_FLAGS "")
endif()
- if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ if(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?Clang")
set(WARNING_FLAGS "${WARNING_FLAGS} -Wsign-compare")
endif()
@@ -768,7 +768,7 @@ else()
else()
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MATH_FLAGS}")
endif()
- endif(CMAKE_SYSTEM_NAME MATCHES "(Darwin|BSD|DragonFly)")
+ endif()
set(CMAKE_CXX_FLAGS_SEMIDEBUG "-g -O1 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}")
@@ -805,7 +805,7 @@ if(WIN32)
FILES_MATCHING PATTERN "*.dll")
else()
# Use the old-style way to install dll's
- if(USE_SOUND)
+ if(BUILD_CLIENT AND USE_SOUND)
if(OPENAL_DLL)
install(FILES ${OPENAL_DLL} DESTINATION ${BINDIR})
endif()
@@ -815,9 +815,6 @@ if(WIN32)
if(VORBIS_DLL)
install(FILES ${VORBIS_DLL} DESTINATION ${BINDIR})
endif()
- if(VORBISFILE_DLL)
- install(FILES ${VORBISFILE_DLL} DESTINATION ${BINDIR})
- endif()
endif()
if(CURL_DLL)
install(FILES ${CURL_DLL} DESTINATION ${BINDIR})
@@ -825,7 +822,7 @@ if(WIN32)
if(ZLIB_DLL)
install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
endif()
- if(FREETYPE_DLL)
+ if(BUILD_CLIENT AND FREETYPE_DLL)
install(FILES ${FREETYPE_DLL} DESTINATION ${BINDIR})
endif()
if(SQLITE3_DLL)
@@ -837,6 +834,12 @@ if(WIN32)
if(LUA_DLL)
install(FILES ${LUA_DLL} DESTINATION ${BINDIR})
endif()
+ if(BUILD_CLIENT AND IRRLICHT_DLL)
+ install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
+ endif()
+ if(BUILD_CLIENT AND USE_GETTEXT AND GETTEXT_DLL)
+ install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
+ endif()
endif()
endif()
@@ -864,6 +867,7 @@ if(BUILD_CLIENT)
endforeach()
endif()
+ # Install necessary fonts depending on configuration
if(USE_FREETYPE)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../fonts" DESTINATION "${SHAREDIR}"
FILES_MATCHING PATTERN "*.ttf" PATTERN "*.txt")
@@ -871,22 +875,6 @@ if(BUILD_CLIENT)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../fonts" DESTINATION "${SHAREDIR}"
FILES_MATCHING PATTERN "*.png" PATTERN "*.xml")
endif()
-
- if(WIN32)
- if(NOT VCPKG_APPLOCAL_DEPS)
- if(DEFINED IRRLICHT_DLL)
- install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
- endif()
- if(USE_GETTEXT)
- if(DEFINED GETTEXT_DLL)
- install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
- endif()
- if(DEFINED GETTEXT_ICONV_DLL)
- install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR})
- endif()
- endif()
- endif()
- endif()
endif(BUILD_CLIENT)
if(BUILD_SERVER)
diff --git a/src/activeobjectmgr.h b/src/activeobjectmgr.h
index 95e7d3344..aa0538e60 100644
--- a/src/activeobjectmgr.h
+++ b/src/activeobjectmgr.h
@@ -25,7 +25,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class TestClientActiveObjectMgr;
class TestServerActiveObjectMgr;
-template <typename T> class ActiveObjectMgr
+template <typename T>
+class ActiveObjectMgr
{
friend class ::TestClientActiveObjectMgr;
friend class ::TestServerActiveObjectMgr;
diff --git a/src/client/camera.cpp b/src/client/camera.cpp
index 9a08254b4..5158d0dd1 100644
--- a/src/client/camera.cpp
+++ b/src/client/camera.cpp
@@ -79,6 +79,7 @@ Camera::Camera(MapDrawControl &draw_control, Client *client):
m_cache_fov = std::fmax(g_settings->getFloat("fov"), 45.0f);
m_arm_inertia = g_settings->getBool("arm_inertia");
m_nametags.clear();
+ m_show_nametag_backgrounds = g_settings->getBool("show_nametag_backgrounds");
}
Camera::~Camera()
@@ -663,7 +664,7 @@ void Camera::wield(const ItemStack &item)
void Camera::drawWieldedTool(irr::core::matrix4* translation)
{
// Clear Z buffer so that the wielded tool stays in front of world geometry
- m_wieldmgr->getVideoDriver()->clearZBuffer();
+ m_wieldmgr->getVideoDriver()->clearBuffers(video::ECBF_DEPTH);
// Draw the wielded node (in a separate scene manager)
scene::ICameraSceneNode* cam = m_wieldmgr->getActiveCamera();
@@ -696,18 +697,14 @@ void Camera::drawNametags()
v2u32 screensize = driver->getScreenSize();
for (const Nametag *nametag : m_nametags) {
- if (nametag->nametag_color.getAlpha() == 0) {
- // Enforce hiding nametag,
- // because if freetype is enabled, a grey
- // shadow can remain.
- continue;
- }
- v3f pos = nametag->parent_node->getAbsolutePosition() + nametag->nametag_pos * BS;
+ // Nametags are hidden in GenericCAO::updateNametag()
+
+ v3f pos = nametag->parent_node->getAbsolutePosition() + nametag->pos * BS;
f32 transformed_pos[4] = { pos.X, pos.Y, pos.Z, 1.0f };
trans.multiplyWith1x4Matrix(transformed_pos);
if (transformed_pos[3] > 0) {
std::wstring nametag_colorless =
- unescape_translate(utf8_to_wide(nametag->nametag_text));
+ unescape_translate(utf8_to_wide(nametag->text));
core::dimension2d<u32> textsize = font->getDimension(
nametag_colorless.c_str());
f32 zDiv = transformed_pos[3] == 0.0f ? 1.0f :
@@ -720,26 +717,22 @@ void Camera::drawNametags()
core::rect<s32> size(0, 0, textsize.Width, textsize.Height);
core::rect<s32> bg_size(-2, 0, textsize.Width+2, textsize.Height);
- video::SColor textColor = nametag->nametag_color;
-
- bool darkBackground = textColor.getLuminance() > 186;
- video::SColor backgroundColor = darkBackground
- ? video::SColor(50, 50, 50, 50)
- : video::SColor(50, 255, 255, 255);
- driver->draw2DRectangle(backgroundColor, bg_size + screen_pos);
+ auto bgcolor = nametag->getBgColor(m_show_nametag_backgrounds);
+ if (bgcolor.getAlpha() != 0)
+ driver->draw2DRectangle(bgcolor, bg_size + screen_pos);
font->draw(
- translate_string(utf8_to_wide(nametag->nametag_text)).c_str(),
- size + screen_pos, textColor);
+ translate_string(utf8_to_wide(nametag->text)).c_str(),
+ size + screen_pos, nametag->textcolor);
}
}
}
Nametag *Camera::addNametag(scene::ISceneNode *parent_node,
- const std::string &nametag_text, video::SColor nametag_color,
- const v3f &pos)
+ const std::string &text, video::SColor textcolor,
+ Optional<video::SColor> bgcolor, const v3f &pos)
{
- Nametag *nametag = new Nametag(parent_node, nametag_text, nametag_color, pos);
+ Nametag *nametag = new Nametag(parent_node, text, textcolor, bgcolor, pos);
m_nametags.push_back(nametag);
return nametag;
}
diff --git a/src/client/camera.h b/src/client/camera.h
index 16a1961be..6fd8d9aa7 100644
--- a/src/client/camera.h
+++ b/src/client/camera.h
@@ -25,27 +25,47 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <ICameraSceneNode.h>
#include <ISceneNode.h>
#include <list>
+#include "util/Optional.h"
class LocalPlayer;
struct MapDrawControl;
class Client;
class WieldMeshSceneNode;
-struct Nametag {
+struct Nametag
+{
+ scene::ISceneNode *parent_node;
+ std::string text;
+ video::SColor textcolor;
+ Optional<video::SColor> bgcolor;
+ v3f pos;
+
Nametag(scene::ISceneNode *a_parent_node,
- const std::string &a_nametag_text,
- const video::SColor &a_nametag_color,
- const v3f &a_nametag_pos):
+ const std::string &text,
+ const video::SColor &textcolor,
+ const Optional<video::SColor> &bgcolor,
+ const v3f &pos):
parent_node(a_parent_node),
- nametag_text(a_nametag_text),
- nametag_color(a_nametag_color),
- nametag_pos(a_nametag_pos)
+ text(text),
+ textcolor(textcolor),
+ bgcolor(bgcolor),
+ pos(pos)
{
}
- scene::ISceneNode *parent_node;
- std::string nametag_text;
- video::SColor nametag_color;
- v3f nametag_pos;
+
+ video::SColor getBgColor(bool use_fallback) const
+ {
+ if (bgcolor)
+ return bgcolor.value();
+ else if (!use_fallback)
+ return video::SColor(0, 0, 0, 0);
+ else if (textcolor.getLuminance() > 186)
+ // Dark background for light text
+ return video::SColor(50, 50, 50, 50);
+ else
+ // Light background for dark text
+ return video::SColor(50, 255, 255, 255);
+ }
};
enum CameraMode {CAMERA_MODE_FIRST, CAMERA_MODE_THIRD, CAMERA_MODE_THIRD_FRONT};
@@ -164,8 +184,8 @@ public:
}
Nametag *addNametag(scene::ISceneNode *parent_node,
- const std::string &nametag_text, video::SColor nametag_color,
- const v3f &pos);
+ const std::string &text, video::SColor textcolor,
+ Optional<video::SColor> bgcolor, const v3f &pos);
void removeNametag(Nametag *nametag);
@@ -245,4 +265,5 @@ private:
bool m_arm_inertia;
std::list<Nametag *> m_nametags;
+ bool m_show_nametag_backgrounds;
};
diff --git a/src/client/client.cpp b/src/client/client.cpp
index ef4a3cdfc..0486bc0a9 100644
--- a/src/client/client.cpp
+++ b/src/client/client.cpp
@@ -663,12 +663,15 @@ bool Client::loadMedia(const std::string &data, const std::string &filename,
io::IFileSystem *irrfs = RenderingEngine::get_filesystem();
video::IVideoDriver *vdrv = RenderingEngine::get_video_driver();
+#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
+ io::IReadFile *rfile = irrfs->createMemoryReadFile(
+ data.c_str(), data.size(), "_tempreadfile");
+#else
// Silly irrlicht's const-incorrectness
Buffer<char> data_rw(data.c_str(), data.size());
-
- // Create an irrlicht memory file
io::IReadFile *rfile = irrfs->createMemoryReadFile(
*data_rw, data_rw.getSize(), "_tempreadfile");
+#endif
FATAL_ERROR_IF(!rfile, "Could not create irrlicht memory file.");
@@ -1914,13 +1917,20 @@ scene::IAnimatedMesh* Client::getMesh(const std::string &filename, bool cache)
// Create the mesh, remove it from cache and return it
// This allows unique vertex colors and other properties for each instance
+#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
+ io::IReadFile *rfile = RenderingEngine::get_filesystem()->createMemoryReadFile(
+ data.c_str(), data.size(), filename.c_str());
+#else
Buffer<char> data_rw(data.c_str(), data.size()); // Const-incorrect Irrlicht
- io::IReadFile *rfile = RenderingEngine::get_filesystem()->createMemoryReadFile(
+ io::IReadFile *rfile = RenderingEngine::get_filesystem()->createMemoryReadFile(
*data_rw, data_rw.getSize(), filename.c_str());
+#endif
FATAL_ERROR_IF(!rfile, "Could not create/open RAM file");
scene::IAnimatedMesh *mesh = RenderingEngine::get_scene_manager()->getMesh(rfile);
rfile->drop();
+ if (!mesh)
+ return nullptr;
mesh->grab();
if (!cache)
RenderingEngine::get_mesh_cache()->removeMesh(mesh);
diff --git a/src/client/client.h b/src/client/client.h
index 25a1b97ba..da7f8e8a1 100644
--- a/src/client/client.h
+++ b/src/client/client.h
@@ -412,12 +412,7 @@ public:
inline bool checkCSMRestrictionFlag(CSMRestrictionFlags flag) const
{
- return m_csm_restriction_flags & flag;
- }
-
- inline std::unordered_map<u32, u32> &getHUDTranslationMap()
- {
- return m_hud_server_to_client;
+ return m_csm_restriction_flags & 0;
}
bool joinModChannel(const std::string &channel) override;
@@ -556,9 +551,6 @@ private:
// Relation of client id to object id
std::unordered_map<int, u16> m_sounds_to_objects;
- // Map server hud ids to client hud ids
- std::unordered_map<u32, u32> m_hud_server_to_client;
-
// Privileges
std::unordered_set<std::string> m_privileges;
diff --git a/src/client/clientevent.h b/src/client/clientevent.h
index 9bd31efce..2215aecbd 100644
--- a/src/client/clientevent.h
+++ b/src/client/clientevent.h
@@ -52,6 +52,31 @@ enum ClientEventType : u8
CLIENTEVENT_MAX,
};
+struct ClientEventHudAdd
+{
+ u32 server_id;
+ u8 type;
+ v2f pos, scale;
+ std::string name;
+ std::string text, text2;
+ u32 number, item, dir;
+ v2f align, offset;
+ v3f world_pos;
+ v2s32 size;
+ s16 z_index;
+};
+
+struct ClientEventHudChange
+{
+ u32 id;
+ HudElementStat stat;
+ v2f v2fdata;
+ std::string sdata;
+ u32 data;
+ v3f v3fdata;
+ v2s32 v2s32data;
+};
+
struct ClientEvent
{
ClientEventType type;
@@ -93,38 +118,12 @@ struct ClientEvent
{
u32 id;
} delete_particlespawner;
- struct
- {
- u32 server_id;
- u8 type;
- v2f *pos;
- std::string *name;
- v2f *scale;
- std::string *text;
- u32 number;
- u32 item;
- u32 dir;
- v2f *align;
- v2f *offset;
- v3f *world_pos;
- v2s32 *size;
- s16 z_index;
- std::string *text2;
- } hudadd;
+ ClientEventHudAdd *hudadd;
struct
{
u32 id;
} hudrm;
- struct
- {
- u32 id;
- HudElementStat stat;
- v2f *v2fdata;
- std::string *sdata;
- u32 data;
- v3f *v3fdata;
- v2s32 *v2s32data;
- } hudchange;
+ ClientEventHudChange *hudchange;
SkyboxParams *set_sky;
struct
{
diff --git a/src/client/clientmap.cpp b/src/client/clientmap.cpp
index b9e0cc2ce..be8343009 100644
--- a/src/client/clientmap.cpp
+++ b/src/client/clientmap.cpp
@@ -165,6 +165,9 @@ void ClientMap::updateDrawList()
v3s16 p_blocks_max;
getBlocksInViewRange(cam_pos_nodes, &p_blocks_min, &p_blocks_max);
+ // Read the vision range, unless unlimited range is enabled.
+ float range = m_control.range_all ? 1e7 : m_control.wanted_range;
+
// Number of blocks currently loaded by the client
u32 blocks_loaded = 0;
// Number of blocks with mesh in rendering range
@@ -182,6 +185,7 @@ void ClientMap::updateDrawList()
occlusion_culling_enabled = false;
}
+
// Uncomment to debug occluded blocks in the wireframe mode
// TODO: Include this as a flag for an extended debugging setting
//if (occlusion_culling_enabled && m_control.show_wireframe)
@@ -218,32 +222,34 @@ void ClientMap::updateDrawList()
continue;
}
- float range = 100000 * BS;
- if (!m_control.range_all)
- range = m_control.wanted_range * BS;
+ v3s16 block_coord = block->getPos();
+ v3s16 block_position = block->getPosRelative() + MAP_BLOCKSIZE / 2;
- float d = 0.0;
- if (!isBlockInSight(block->getPos(), camera_position,
- camera_direction, camera_fov, range, &d))
- continue;
+ // First, perform a simple distance check, with a padding of one extra block.
+ if (!m_control.range_all &&
+ block_position.getDistanceFrom(cam_pos_nodes) > range + MAP_BLOCKSIZE)
+ continue; // Out of range, skip.
+ // Keep the block alive as long as it is in range.
+ block->resetUsageTimer();
blocks_in_range_with_mesh++;
- /*
- Occlusion culling
- */
+ // Frustum culling
+ float d = 0.0;
+ if (!isBlockInSight(block_coord, camera_position,
+ camera_direction, camera_fov, range * BS, &d))
+ continue;
+
+ // Occlusion culling
if ((!m_control.range_all && d > m_control.wanted_range * BS) ||
(occlusion_culling_enabled && isBlockOccluded(block, cam_pos_nodes))) {
blocks_occlusion_culled++;
continue;
}
- // This block is in range. Reset usage timer.
- block->resetUsageTimer();
-
// Add to set
block->refGrab();
- m_drawlist[block->getPos()] = block;
+ m_drawlist[block_coord] = block;
sector_blocks_drawn++;
} // foreach sectorblocks
@@ -282,8 +288,6 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
const u32 daynight_ratio = m_client->getEnv().getDayNightRatio();
const v3f camera_position = m_camera_position;
- const v3f camera_direction = m_camera_direction;
- const f32 camera_fov = m_camera_fov;
/*
Get all blocks and draw all visible ones
@@ -310,11 +314,10 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
if (!block->mesh)
continue;
- float d = 0.0;
- if (!isBlockInSight(block->getPos(), camera_position,
- camera_direction, camera_fov, 100000 * BS, &d))
- continue;
-
+ v3f block_pos_r = intToFloat(block->getPosRelative() + MAP_BLOCKSIZE / 2, BS);
+ float d = camera_position.getDistanceFrom(block_pos_r);
+ d = MYMAX(0,d - BLOCK_MAX_RADIUS);
+
// Mesh animation
if (pass == scene::ESNRP_SOLID) {
//MutexAutoLock lock(block->mesh_mutex);
diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp
index c65977b44..97ae9afc4 100644
--- a/src/client/content_cao.cpp
+++ b/src/client/content_cao.cpp
@@ -934,7 +934,7 @@ void GenericCAO::updateNametag()
if (m_is_local_player) // No nametag for local player
return;
- if (m_prop.nametag.empty()) {
+ if (m_prop.nametag.empty() || m_prop.nametag_color.getAlpha() == 0) {
// Delete nametag
if (m_nametag) {
m_client->getCamera()->removeNametag(m_nametag);
@@ -952,12 +952,14 @@ void GenericCAO::updateNametag()
if (!m_nametag) {
// Add nametag
m_nametag = m_client->getCamera()->addNametag(node,
- m_prop.nametag, m_prop.nametag_color, pos);
+ m_prop.nametag, m_prop.nametag_color,
+ m_prop.nametag_bgcolor, pos);
} else {
// Update nametag
- m_nametag->nametag_text = m_prop.nametag;
- m_nametag->nametag_color = m_prop.nametag_color;
- m_nametag->nametag_pos = pos;
+ m_nametag->text = m_prop.nametag;
+ m_nametag->textcolor = m_prop.nametag_color;
+ m_nametag->bgcolor = m_prop.nametag_bgcolor;
+ m_nametag->pos = pos;
}
}
diff --git a/src/client/game.cpp b/src/client/game.cpp
index 3c58fb46f..31c782c51 100644
--- a/src/client/game.cpp
+++ b/src/client/game.cpp
@@ -68,6 +68,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/pointedthing.h"
#include "util/quicktune_shortcutter.h"
#include "irrlicht_changes/static_text.h"
+#include "irr_ptr.h"
#include "version.h"
#include "script/scripting_client.h"
#include "hud.h"
@@ -425,6 +426,7 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
CachedPixelShaderSetting<float, 3> m_camera_offset_pixel;
CachedPixelShaderSetting<float, 3> m_camera_offset_vertex;
CachedPixelShaderSetting<SamplerLayer_t> m_base_texture;
+ CachedPixelShaderSetting<SamplerLayer_t> m_normal_texture;
Client *m_client;
public:
@@ -458,6 +460,7 @@ public:
m_camera_offset_pixel("cameraOffset"),
m_camera_offset_vertex("cameraOffset"),
m_base_texture("baseTexture"),
+ m_normal_texture("normalTexture"),
m_client(client)
{
g_settings->registerChangedCallback("enable_fog", settingsCallback, this);
@@ -545,8 +548,9 @@ public:
m_camera_offset_pixel.set(camera_offset_array, services);
m_camera_offset_vertex.set(camera_offset_array, services);
- SamplerLayer_t base_tex = 0;
+ SamplerLayer_t base_tex = 0, normal_tex = 1;
m_base_texture.set(&base_tex, services);
+ m_normal_texture.set(&normal_tex, services);
}
};
@@ -647,6 +651,8 @@ struct ClientEventHandler
THE GAME
****************************************************************************/
+using PausedNodesList = std::vector<std::pair<irr_ptr<scene::IAnimatedMeshSceneNode>, float>>;
+
/* This is not intended to be a public class. If a public class becomes
* desirable then it may be better to create another 'wrapper' class that
* hides most of the stuff in this class (nothing in this class is required
@@ -796,6 +802,9 @@ private:
void showDeathFormspec();
void showPauseMenu();
+ void pauseAnimation();
+ void resumeAnimation();
+
// ClientEvent handlers
void handleClientEvent_None(ClientEvent *event, CameraOrientation *cam);
void handleClientEvent_PlayerDamage(ClientEvent *event, CameraOrientation *cam);
@@ -823,6 +832,8 @@ private:
const NodeMetadata *meta);
static const ClientEventHandler clientEventHandler[CLIENTEVENT_MAX];
+ f32 getSensitivityScaleFactor() const;
+
InputHandler *input = nullptr;
Client *client = nullptr;
@@ -856,6 +867,9 @@ private:
Hud *hud = nullptr;
Minimap *mapper = nullptr;
+ // Map server hud ids to client hud ids
+ std::unordered_map<u32, u32> m_hud_server_to_client;
+
GameRunData runData;
Flags m_flags;
@@ -870,6 +884,7 @@ private:
std::string *error_message;
bool *reconnect_requested;
scene::ISceneNode *skybox;
+ PausedNodesList paused_animated_nodes;
bool simple_singleplayer_mode;
/* End 'cache' */
@@ -2331,7 +2346,6 @@ void Game::checkZoomEnabled()
m_game_ui->showTranslatedStatusText("Zoom currently disabled by game or mod");
}
-
void Game::updateCameraDirection(CameraOrientation *cam, float dtime)
{
if ((device->isWindowActive() && device->isWindowFocused()
@@ -2367,6 +2381,18 @@ void Game::updateCameraDirection(CameraOrientation *cam, float dtime)
}
}
+// Get the factor to multiply with sensitivity to get the same mouse/joystick
+// responsiveness independently of FOV.
+f32 Game::getSensitivityScaleFactor() const
+{
+ f32 fov_y = client->getCamera()->getFovY();
+
+ // Multiply by a constant such that it becomes 1.0 at 72 degree FOV and
+ // 16:9 aspect ratio to minimize disruption of existing sensitivity
+ // settings.
+ return tan(fov_y / 2.0f) * 1.3763818698f;
+}
+
void Game::updateCameraOrientation(CameraOrientation *cam, float dtime)
{
#ifdef HAVE_TOUCHSCREENGUI
@@ -2382,8 +2408,9 @@ void Game::updateCameraOrientation(CameraOrientation *cam, float dtime)
dist.Y = -dist.Y;
}
- cam->camera_yaw -= dist.X * m_cache_mouse_sensitivity;
- cam->camera_pitch += dist.Y * m_cache_mouse_sensitivity;
+ f32 sens_scale = getSensitivityScaleFactor();
+ cam->camera_yaw -= dist.X * m_cache_mouse_sensitivity * sens_scale;
+ cam->camera_pitch += dist.Y * m_cache_mouse_sensitivity * sens_scale;
if (dist.X != 0 || dist.Y != 0)
input->setMousePos(center.X, center.Y);
@@ -2392,7 +2419,8 @@ void Game::updateCameraOrientation(CameraOrientation *cam, float dtime)
#endif
if (m_cache_enable_joysticks) {
- f32 c = m_cache_joystick_frustum_sensitivity * (1.f / 32767.f) * dtime;
+ f32 sens_scale = getSensitivityScaleFactor();
+ f32 c = m_cache_joystick_frustum_sensitivity * (1.f / 32767.f) * dtime * sens_scale;
cam->camera_yaw -= input->joystick.getAxisWithoutDead(JA_FRUSTUM_HORIZONTAL) * c;
cam->camera_pitch += input->joystick.getAxisWithoutDead(JA_FRUSTUM_VERTICAL) * c;
}
@@ -2415,7 +2443,7 @@ void Game::updatePlayerControl(const CameraOrientation &cam)
input->isKeyDown(KeyType::LEFT),
input->isKeyDown(KeyType::RIGHT),
isKeyDown(KeyType::JUMP),
- isKeyDown(KeyType::SPECIAL1),
+ isKeyDown(KeyType::AUX1),
isKeyDown(KeyType::SNEAK),
isKeyDown(KeyType::ZOOM),
isKeyDown(KeyType::DIG),
@@ -2432,7 +2460,7 @@ void Game::updatePlayerControl(const CameraOrientation &cam)
( (u32)(isKeyDown(KeyType::LEFT) & 0x1) << 2) |
( (u32)(isKeyDown(KeyType::RIGHT) & 0x1) << 3) |
( (u32)(isKeyDown(KeyType::JUMP) & 0x1) << 4) |
- ( (u32)(isKeyDown(KeyType::SPECIAL1) & 0x1) << 5) |
+ ( (u32)(isKeyDown(KeyType::AUX1) & 0x1) << 5) |
( (u32)(isKeyDown(KeyType::SNEAK) & 0x1) << 6) |
( (u32)(isKeyDown(KeyType::DIG) & 0x1) << 7) |
( (u32)(isKeyDown(KeyType::PLACE) & 0x1) << 8) |
@@ -2481,6 +2509,9 @@ inline void Game::step(f32 *dtime)
if (can_be_and_is_paused) { // This is for a singleplayer server
*dtime = 0; // No time passes
} else {
+ if (simple_singleplayer_mode && !paused_animated_nodes.empty())
+ resumeAnimation();
+
if (server)
server->step(*dtime);
@@ -2488,6 +2519,33 @@ inline void Game::step(f32 *dtime)
}
}
+static void pauseNodeAnimation(PausedNodesList &paused, scene::ISceneNode *node) {
+ if (!node)
+ return;
+ for (auto &&child: node->getChildren())
+ pauseNodeAnimation(paused, child);
+ if (node->getType() != scene::ESNT_ANIMATED_MESH)
+ return;
+ auto animated_node = static_cast<scene::IAnimatedMeshSceneNode *>(node);
+ float speed = animated_node->getAnimationSpeed();
+ if (!speed)
+ return;
+ paused.push_back({grab(animated_node), speed});
+ animated_node->setAnimationSpeed(0.0f);
+}
+
+void Game::pauseAnimation()
+{
+ pauseNodeAnimation(paused_animated_nodes, smgr->getRootSceneNode());
+}
+
+void Game::resumeAnimation()
+{
+ for (auto &&pair: paused_animated_nodes)
+ pair.first->setAnimationSpeed(pair.second);
+ paused_animated_nodes.clear();
+}
+
const ClientEventHandler Game::clientEventHandler[CLIENTEVENT_MAX] = {
{&Game::handleClientEvent_None},
{&Game::handleClientEvent_PlayerDamage},
@@ -2602,132 +2660,100 @@ void Game::handleClientEvent_HandleParticleEvent(ClientEvent *event,
void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
{
LocalPlayer *player = client->getEnv().getLocalPlayer();
- auto &hud_server_to_client = client->getHUDTranslationMap();
- u32 server_id = event->hudadd.server_id;
+ u32 server_id = event->hudadd->server_id;
// ignore if we already have a HUD with that ID
- auto i = hud_server_to_client.find(server_id);
- if (i != hud_server_to_client.end()) {
- delete event->hudadd.pos;
- delete event->hudadd.name;
- delete event->hudadd.scale;
- delete event->hudadd.text;
- delete event->hudadd.align;
- delete event->hudadd.offset;
- delete event->hudadd.world_pos;
- delete event->hudadd.size;
- delete event->hudadd.text2;
+ auto i = m_hud_server_to_client.find(server_id);
+ if (i != m_hud_server_to_client.end()) {
+ delete event->hudadd;
return;
}
HudElement *e = new HudElement;
- e->type = (HudElementType)event->hudadd.type;
- e->pos = *event->hudadd.pos;
- e->name = *event->hudadd.name;
- e->scale = *event->hudadd.scale;
- e->text = *event->hudadd.text;
- e->number = event->hudadd.number;
- e->item = event->hudadd.item;
- e->dir = event->hudadd.dir;
- e->align = *event->hudadd.align;
- e->offset = *event->hudadd.offset;
- e->world_pos = *event->hudadd.world_pos;
- e->size = *event->hudadd.size;
- e->z_index = event->hudadd.z_index;
- e->text2 = *event->hudadd.text2;
- hud_server_to_client[server_id] = player->addHud(e);
-
- delete event->hudadd.pos;
- delete event->hudadd.name;
- delete event->hudadd.scale;
- delete event->hudadd.text;
- delete event->hudadd.align;
- delete event->hudadd.offset;
- delete event->hudadd.world_pos;
- delete event->hudadd.size;
- delete event->hudadd.text2;
+ e->type = static_cast<HudElementType>(event->hudadd->type);
+ e->pos = event->hudadd->pos;
+ e->name = event->hudadd->name;
+ e->scale = event->hudadd->scale;
+ e->text = event->hudadd->text;
+ e->number = event->hudadd->number;
+ e->item = event->hudadd->item;
+ e->dir = event->hudadd->dir;
+ e->align = event->hudadd->align;
+ e->offset = event->hudadd->offset;
+ e->world_pos = event->hudadd->world_pos;
+ e->size = event->hudadd->size;
+ e->z_index = event->hudadd->z_index;
+ e->text2 = event->hudadd->text2;
+ m_hud_server_to_client[server_id] = player->addHud(e);
+
+ delete event->hudadd;
}
void Game::handleClientEvent_HudRemove(ClientEvent *event, CameraOrientation *cam)
{
LocalPlayer *player = client->getEnv().getLocalPlayer();
- HudElement *e = player->removeHud(event->hudrm.id);
- delete e;
+
+ auto i = m_hud_server_to_client.find(event->hudrm.id);
+ if (i != m_hud_server_to_client.end()) {
+ HudElement *e = player->removeHud(i->second);
+ delete e;
+ m_hud_server_to_client.erase(i);
+ }
+
}
void Game::handleClientEvent_HudChange(ClientEvent *event, CameraOrientation *cam)
{
LocalPlayer *player = client->getEnv().getLocalPlayer();
- u32 id = event->hudchange.id;
- HudElement *e = player->getHud(id);
+ HudElement *e = nullptr;
- if (e == NULL) {
- delete event->hudchange.v3fdata;
- delete event->hudchange.v2fdata;
- delete event->hudchange.sdata;
- delete event->hudchange.v2s32data;
+ auto i = m_hud_server_to_client.find(event->hudchange->id);
+ if (i != m_hud_server_to_client.end()) {
+ e = player->getHud(i->second);
+ }
+
+ if (e == nullptr) {
+ delete event->hudchange;
return;
}
- switch (event->hudchange.stat) {
- case HUD_STAT_POS:
- e->pos = *event->hudchange.v2fdata;
- break;
+#define CASE_SET(statval, prop, dataprop) \
+ case statval: \
+ e->prop = event->hudchange->dataprop; \
+ break
- case HUD_STAT_NAME:
- e->name = *event->hudchange.sdata;
- break;
+ switch (event->hudchange->stat) {
+ CASE_SET(HUD_STAT_POS, pos, v2fdata);
- case HUD_STAT_SCALE:
- e->scale = *event->hudchange.v2fdata;
- break;
+ CASE_SET(HUD_STAT_NAME, name, sdata);
- case HUD_STAT_TEXT:
- e->text = *event->hudchange.sdata;
- break;
+ CASE_SET(HUD_STAT_SCALE, scale, v2fdata);
- case HUD_STAT_NUMBER:
- e->number = event->hudchange.data;
- break;
+ CASE_SET(HUD_STAT_TEXT, text, sdata);
- case HUD_STAT_ITEM:
- e->item = event->hudchange.data;
- break;
+ CASE_SET(HUD_STAT_NUMBER, number, data);
- case HUD_STAT_DIR:
- e->dir = event->hudchange.data;
- break;
+ CASE_SET(HUD_STAT_ITEM, item, data);
- case HUD_STAT_ALIGN:
- e->align = *event->hudchange.v2fdata;
- break;
+ CASE_SET(HUD_STAT_DIR, dir, data);
- case HUD_STAT_OFFSET:
- e->offset = *event->hudchange.v2fdata;
- break;
+ CASE_SET(HUD_STAT_ALIGN, align, v2fdata);
- case HUD_STAT_WORLD_POS:
- e->world_pos = *event->hudchange.v3fdata;
- break;
+ CASE_SET(HUD_STAT_OFFSET, offset, v2fdata);
- case HUD_STAT_SIZE:
- e->size = *event->hudchange.v2s32data;
- break;
+ CASE_SET(HUD_STAT_WORLD_POS, world_pos, v3fdata);
- case HUD_STAT_Z_INDEX:
- e->z_index = event->hudchange.data;
- break;
+ CASE_SET(HUD_STAT_SIZE, size, v2s32data);
- case HUD_STAT_TEXT2:
- e->text2 = *event->hudchange.sdata;
- break;
+ CASE_SET(HUD_STAT_Z_INDEX, z_index, data);
+
+ CASE_SET(HUD_STAT_TEXT2, text2, sdata);
}
- delete event->hudchange.v3fdata;
- delete event->hudchange.v2fdata;
- delete event->hudchange.sdata;
- delete event->hudchange.v2s32data;
+#undef CASE_SET
+
+ delete event->hudchange;
}
void Game::handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam)
@@ -3279,7 +3305,8 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
const ItemStack &selected_item, const v3s16 &nodepos, const v3s16 &neighbourpos,
const PointedThing &pointed, const NodeMetadata *meta)
{
- std::string prediction = selected_def.node_placement_prediction;
+ const auto &prediction = selected_def.node_placement_prediction;
+
const NodeDefManager *nodedef = client->ndef();
ClientMap &map = client->getEnv().getClientMap();
MapNode node;
@@ -3349,8 +3376,7 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
if (!found) {
errorstream << "Node placement prediction failed for "
- << selected_def.name << " (places "
- << prediction
+ << selected_def.name << " (places " << prediction
<< ") - Name not known" << std::endl;
// Handle this as if prediction was empty
// Report to server
@@ -3361,9 +3387,14 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
const ContentFeatures &predicted_f = nodedef->get(id);
// Predict param2 for facedir and wallmounted nodes
+ // Compare core.item_place_node() for what the server does
u8 param2 = 0;
- if (predicted_f.param_type_2 == CPT2_WALLMOUNTED ||
+ const u8 place_param2 = selected_def.place_param2;
+
+ if (place_param2) {
+ param2 = place_param2;
+ } else if (predicted_f.param_type_2 == CPT2_WALLMOUNTED ||
predicted_f.param_type_2 == CPT2_COLORED_WALLMOUNTED) {
v3s16 dir = nodepos - neighbourpos;
@@ -3374,9 +3405,7 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
} else {
param2 = dir.Z < 0 ? 5 : 4;
}
- }
-
- if (predicted_f.param_type_2 == CPT2_FACEDIR ||
+ } else if (predicted_f.param_type_2 == CPT2_FACEDIR ||
predicted_f.param_type_2 == CPT2_COLORED_FACEDIR) {
v3s16 dir = nodepos - floatToInt(client->getEnv().getLocalPlayer()->getPosition(), BS);
@@ -3387,11 +3416,9 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
}
}
- assert(param2 <= 5);
-
- //Check attachment if node is in group attached_node
- if (((ItemGroupList) predicted_f.groups)["attached_node"] != 0) {
- static v3s16 wallmounted_dirs[8] = {
+ // Check attachment if node is in group attached_node
+ if (itemgroup_get(predicted_f.groups, "attached_node") != 0) {
+ const static v3s16 wallmounted_dirs[8] = {
v3s16(0, 1, 0),
v3s16(0, -1, 0),
v3s16(1, 0, 0),
@@ -3416,11 +3443,11 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
}
// Apply color
- if ((predicted_f.param_type_2 == CPT2_COLOR
+ if (!place_param2 && (predicted_f.param_type_2 == CPT2_COLOR
|| predicted_f.param_type_2 == CPT2_COLORED_FACEDIR
|| predicted_f.param_type_2 == CPT2_COLORED_WALLMOUNTED)) {
- const std::string &indexstr = selected_item.metadata.getString(
- "palette_index", 0);
+ const auto &indexstr = selected_item.metadata.
+ getString("palette_index", 0);
if (!indexstr.empty()) {
s32 index = mystoi(indexstr);
if (predicted_f.param_type_2 == CPT2_COLOR) {
@@ -3460,11 +3487,10 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
soundmaker->m_player_rightpunch_sound = selected_def.sound_place_failed;
return false;
}
- } catch (InvalidPositionException &e) {
+ } catch (const InvalidPositionException &e) {
errorstream << "Node placement prediction failed for "
<< selected_def.name << " (places "
- << prediction
- << ") - Position not loaded" << std::endl;
+ << prediction << ") - Position not loaded" << std::endl;
soundmaker->m_player_rightpunch_sound = selected_def.sound_place_failed;
return false;
}
@@ -4218,6 +4244,9 @@ void Game::showPauseMenu()
fs_src, txt_dst, client->getFormspecPrepend(), sound);
formspec->setFocus("btn_continue");
formspec->doPause = true;
+
+ if (simple_singleplayer_mode)
+ pauseAnimation();
}
/****************************************************************************/
diff --git a/src/client/guiscalingfilter.cpp b/src/client/guiscalingfilter.cpp
index 406c096e6..8c565a52f 100644
--- a/src/client/guiscalingfilter.cpp
+++ b/src/client/guiscalingfilter.cpp
@@ -129,7 +129,7 @@ video::ITexture *guiScalingResizeCached(video::IVideoDriver *driver,
#endif
// Convert the scaled image back into a texture.
- scaled = driver->addTexture(scalename, destimg, NULL);
+ scaled = driver->addTexture(scalename, destimg);
destimg->drop();
g_txrCache[scalename] = scaled;
diff --git a/src/client/hud.cpp b/src/client/hud.cpp
index 46736b325..74c1828e3 100644
--- a/src/client/hud.cpp
+++ b/src/client/hud.cpp
@@ -950,7 +950,7 @@ void drawItemStack(
if (imesh && imesh->mesh) {
scene::IMesh *mesh = imesh->mesh;
- driver->clearZBuffer();
+ driver->clearBuffers(video::ECBF_DEPTH);
s32 delta = 0;
if (rotation_kind < IT_ROT_NONE) {
MeshTimeInfo &ti = rotation_time_infos[rotation_kind];
diff --git a/src/client/inputhandler.cpp b/src/client/inputhandler.cpp
index 608a405a8..b7e70fa6c 100644
--- a/src/client/inputhandler.cpp
+++ b/src/client/inputhandler.cpp
@@ -35,7 +35,7 @@ void KeyCache::populate()
key[KeyType::LEFT] = getKeySetting("keymap_left");
key[KeyType::RIGHT] = getKeySetting("keymap_right");
key[KeyType::JUMP] = getKeySetting("keymap_jump");
- key[KeyType::SPECIAL1] = getKeySetting("keymap_special1");
+ key[KeyType::AUX1] = getKeySetting("keymap_aux1");
key[KeyType::SNEAK] = getKeySetting("keymap_sneak");
key[KeyType::DIG] = getKeySetting("keymap_dig");
key[KeyType::PLACE] = getKeySetting("keymap_place");
@@ -113,17 +113,12 @@ bool MyEventReceiver::OnEvent(const SEvent &event)
if (event.EventType == irr::EET_KEY_INPUT_EVENT) {
const KeyPress &keyCode = event.KeyInput;
if (keysListenedFor[keyCode]) {
- // If the key is being held down then the OS may
- // send a continuous stream of keydown events.
- // In this case, we don't want to let this
- // stream reach the application as it will cause
- // certain actions to repeat constantly.
if (event.KeyInput.PressedDown) {
- if (!IsKeyDown(keyCode)) {
- keyWasDown.set(keyCode);
+ if (!IsKeyDown(keyCode))
keyWasPressed.set(keyCode);
- }
+
keyIsDown.set(keyCode);
+ keyWasDown.set(keyCode);
} else {
if (IsKeyDown(keyCode))
keyWasReleased.set(keyCode);
@@ -224,7 +219,7 @@ void RandomInputHandler::step(float dtime)
{
static RandomInputHandlerSimData rnd_data[] = {
{ "keymap_jump", 0.0f, 40 },
- { "keymap_special1", 0.0f, 40 },
+ { "keymap_aux1", 0.0f, 40 },
{ "keymap_forward", 0.0f, 40 },
{ "keymap_left", 0.0f, 40 },
{ "keymap_dig", 0.0f, 30 },
diff --git a/src/client/inputhandler.h b/src/client/inputhandler.h
index 7487bbdc7..1fb4cf0ec 100644
--- a/src/client/inputhandler.h
+++ b/src/client/inputhandler.h
@@ -201,7 +201,7 @@ private:
// The current state of keys
KeyList keyIsDown;
- // Whether a key was down
+ // Like keyIsDown but only reset when that key is read
KeyList keyWasDown;
// Whether a key has just been pressed
diff --git a/src/client/joystick_controller.cpp b/src/client/joystick_controller.cpp
index f61ae4ae6..919db5315 100644
--- a/src/client/joystick_controller.cpp
+++ b/src/client/joystick_controller.cpp
@@ -79,7 +79,7 @@ JoystickLayout create_default_layout()
// Accessible without any modifier pressed
JLO_B_PB(KeyType::JUMP, bm | 1 << 0, 1 << 0);
- JLO_B_PB(KeyType::SPECIAL1, bm | 1 << 1, 1 << 1);
+ JLO_B_PB(KeyType::AUX1, bm | 1 << 1, 1 << 1);
// Accessible with start button not pressed, but four pressed
// TODO find usage for button 0
@@ -126,11 +126,11 @@ JoystickLayout create_xbox_layout()
// 4 Buttons
JLO_B_PB(KeyType::JUMP, 1 << 0, 1 << 0); // A/green
JLO_B_PB(KeyType::ESC, 1 << 1, 1 << 1); // B/red
- JLO_B_PB(KeyType::SPECIAL1, 1 << 2, 1 << 2); // X/blue
+ JLO_B_PB(KeyType::AUX1, 1 << 2, 1 << 2); // X/blue
JLO_B_PB(KeyType::INVENTORY, 1 << 3, 1 << 3); // Y/yellow
// Analog Sticks
- JLO_B_PB(KeyType::SPECIAL1, 1 << 11, 1 << 11); // left
+ JLO_B_PB(KeyType::AUX1, 1 << 11, 1 << 11); // left
JLO_B_PB(KeyType::SNEAK, 1 << 12, 1 << 12); // right
// Triggers
diff --git a/src/client/keys.h b/src/client/keys.h
index 60a7a3c45..9f90da6b8 100644
--- a/src/client/keys.h
+++ b/src/client/keys.h
@@ -32,7 +32,7 @@ public:
LEFT,
RIGHT,
JUMP,
- SPECIAL1,
+ AUX1,
SNEAK,
AUTOFORWARD,
DIG,
diff --git a/src/client/mapblock_mesh.cpp b/src/client/mapblock_mesh.cpp
index d78a86b2d..167e1e3ec 100644
--- a/src/client/mapblock_mesh.cpp
+++ b/src/client/mapblock_mesh.cpp
@@ -404,7 +404,7 @@ static void getNodeVertexDirs(const v3s16 &dir, v3s16 *vertex_dirs)
static void getNodeTextureCoords(v3f base, const v3f &scale, const v3s16 &dir, float *u, float *v)
{
- if (dir.X > 0 || dir.Y > 0 || dir.Z < 0)
+ if (dir.X > 0 || dir.Y != 0 || dir.Z < 0)
base -= scale;
if (dir == v3s16(0,0,1)) {
*u = -base.X - 1;
@@ -422,8 +422,8 @@ static void getNodeTextureCoords(v3f base, const v3f &scale, const v3s16 &dir, f
*u = base.X + 1;
*v = -base.Z - 2;
} else if (dir == v3s16(0,-1,0)) {
- *u = base.X;
- *v = base.Z;
+ *u = base.X + 1;
+ *v = base.Z + 1;
}
}
diff --git a/src/client/minimap.cpp b/src/client/minimap.cpp
index c6ccf86e8..dd810ee0a 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, N_("Minimap hidden"), 0, 0, ""};
+ data->mode = MinimapModeDef{MINIMAP_TYPE_OFF, gettext("Minimap hidden"), 0, 0, ""};
m_current_mode_index = 0;
}
@@ -330,25 +330,26 @@ void Minimap::addMode(MinimapModeDef mode)
if (mode.label == "") {
switch (mode.type) {
case MINIMAP_TYPE_OFF:
- mode.label = N_("Minimap hidden");
+ mode.label = gettext("Minimap hidden");
break;
case MINIMAP_TYPE_SURFACE:
- mode.label = N_("Minimap in surface mode, Zoom x%d");
+ mode.label = gettext("Minimap in surface mode, Zoom x%d");
if (mode.map_size > 0)
zoom = 256 / mode.map_size;
break;
case MINIMAP_TYPE_RADAR:
- mode.label = N_("Minimap in radar mode, Zoom x%d");
+ mode.label = gettext("Minimap in radar mode, Zoom x%d");
if (mode.map_size > 0)
zoom = 512 / mode.map_size;
break;
case MINIMAP_TYPE_TEXTURE:
- mode.label = N_("Minimap in texture mode");
+ mode.label = gettext("Minimap in texture mode");
break;
default:
break;
}
}
+ // else: Custom labels need mod-provided client-side translation
if (zoom >= 0) {
char label_buf[1024];
diff --git a/src/client/render/anaglyph.cpp b/src/client/render/anaglyph.cpp
index 9ba4464a2..153e77400 100644
--- a/src/client/render/anaglyph.cpp
+++ b/src/client/render/anaglyph.cpp
@@ -40,7 +40,7 @@ void RenderingCoreAnaglyph::setupMaterial(int color_mask)
void RenderingCoreAnaglyph::useEye(bool right)
{
RenderingCoreStereo::useEye(right);
- driver->clearZBuffer();
+ driver->clearBuffers(video::ECBF_DEPTH);
setupMaterial(right ? video::ECP_GREEN | video::ECP_BLUE : video::ECP_RED);
}
diff --git a/src/client/render/interlaced.cpp b/src/client/render/interlaced.cpp
index ce8e92f21..3f79a8eb5 100644
--- a/src/client/render/interlaced.cpp
+++ b/src/client/render/interlaced.cpp
@@ -35,7 +35,11 @@ void RenderingCoreInterlaced::initMaterial()
IShaderSource *s = client->getShaderSource();
mat.UseMipMaps = false;
mat.ZBuffer = false;
+#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
+ mat.ZWriteEnable = video::EZW_OFF;
+#else
mat.ZWriteEnable = false;
+#endif
u32 shader = s->getShader("3d_interlaced_merge", TILE_MATERIAL_BASIC);
mat.MaterialType = s->getShaderInfo(shader).material;
for (int k = 0; k < 3; ++k) {
diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp
index 99ff8c1ee..4f59bbae3 100644
--- a/src/client/renderingengine.cpp
+++ b/src/client/renderingengine.cpp
@@ -118,6 +118,8 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver)
}
SIrrlichtCreationParameters params = SIrrlichtCreationParameters();
+ if (g_logger.getTraceEnabled())
+ params.LoggingLevel = irr::ELL_DEBUG;
params.DriverType = driverType;
params.WindowSize = core::dimension2d<u32>(screen_w, screen_h);
params.Bits = bits;
@@ -325,9 +327,11 @@ static bool getWindowHandle(irr::video::IVideoDriver *driver, HWND &hWnd)
const video::SExposedVideoData exposedData = driver->getExposedVideoData();
switch (driver->getDriverType()) {
+#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9
case video::EDT_DIRECT3D8:
hWnd = reinterpret_cast<HWND>(exposedData.D3D8.HWnd);
break;
+#endif
case video::EDT_DIRECT3D9:
hWnd = reinterpret_cast<HWND>(exposedData.D3D9.HWnd);
break;
diff --git a/src/client/shader.h b/src/client/shader.h
index 38ab76704..49a563115 100644
--- a/src/client/shader.h
+++ b/src/client/shader.h
@@ -96,9 +96,10 @@ public:
if (has_been_set && std::equal(m_sent, m_sent + count, value))
return;
if (is_pixel)
- services->setPixelShaderConstant(m_name, value, count);
+ services->setPixelShaderConstant(services->getPixelShaderConstantID(m_name), value, count);
else
- services->setVertexShaderConstant(m_name, value, count);
+ services->setVertexShaderConstant(services->getVertexShaderConstantID(m_name), value, count);
+
std::copy(value, value + count, m_sent);
has_been_set = true;
}
diff --git a/src/client/sky.cpp b/src/client/sky.cpp
index 3a40321dd..caf695e7a 100644
--- a/src/client/sky.cpp
+++ b/src/client/sky.cpp
@@ -39,12 +39,13 @@ static video::SMaterial baseMaterial()
{
video::SMaterial mat;
mat.Lighting = false;
-#if ENABLE_GLES
+#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
mat.ZBuffer = video::ECFN_DISABLED;
+ mat.ZWriteEnable = video::EZW_OFF;
#else
+ mat.ZWriteEnable = false;
mat.ZBuffer = video::ECFN_NEVER;
#endif
- mat.ZWriteEnable = false;
mat.AntiAliasing = 0;
mat.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE;
mat.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE;
diff --git a/src/client/sound_openal.cpp b/src/client/sound_openal.cpp
index f4e61f93e..8dceeede6 100644
--- a/src/client/sound_openal.cpp
+++ b/src/client/sound_openal.cpp
@@ -671,8 +671,8 @@ public:
alSourcei(sound->source_id, AL_SOURCE_RELATIVE, false);
alSource3f(sound->source_id, AL_POSITION, pos.X, pos.Y, pos.Z);
- alSource3f(sound->source_id, AL_VELOCITY, 0, 0, 0);
- alSourcef(sound->source_id, AL_REFERENCE_DISTANCE, 30.0);
+ alSource3f(sound->source_id, AL_VELOCITY, 0.0f, 0.0f, 0.0f);
+ alSourcef(sound->source_id, AL_REFERENCE_DISTANCE, 10.0f);
}
bool updateSoundGain(int id, float gain)
diff --git a/src/client/tile.cpp b/src/client/tile.cpp
index aad956ada..7e3901247 100644
--- a/src/client/tile.cpp
+++ b/src/client/tile.cpp
@@ -837,17 +837,16 @@ static video::IImage *createInventoryCubeImage(
image = scaled;
}
sanity_check(image->getPitch() == 4 * size);
- return reinterpret_cast<u32 *>(image->lock());
+ return reinterpret_cast<u32 *>(image->getData());
};
auto free_image = [] (video::IImage *image) -> void {
- image->unlock();
image->drop();
};
video::IImage *result = driver->createImage(video::ECF_A8R8G8B8, {cube_size, cube_size});
sanity_check(result->getPitch() == 4 * cube_size);
result->fill(video::SColor(0x00000000u));
- u32 *target = reinterpret_cast<u32 *>(result->lock());
+ u32 *target = reinterpret_cast<u32 *>(result->getData());
// Draws single cube face
// `shade_factor` is face brightness, in range [0.0, 1.0]
@@ -906,7 +905,6 @@ static video::IImage *createInventoryCubeImage(
{0, 5}, {1, 5},
});
- result->unlock();
return result;
}
@@ -2224,9 +2222,14 @@ video::SColor TextureSource::getTextureAverageColor(const std::string &name)
video::IVideoDriver *driver = RenderingEngine::get_video_driver();
video::SColor c(0, 0, 0, 0);
video::ITexture *texture = getTexture(name);
+ if (!texture)
+ return c;
video::IImage *image = driver->createImage(texture,
core::position2d<s32>(0, 0),
texture->getOriginalSize());
+ if (!image)
+ return c;
+
u32 total = 0;
u32 tR = 0;
u32 tG = 0;
diff --git a/src/client/wieldmesh.cpp b/src/client/wieldmesh.cpp
index ad583210a..387eb17c3 100644
--- a/src/client/wieldmesh.cpp
+++ b/src/client/wieldmesh.cpp
@@ -294,7 +294,7 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename,
}
material.setFlag(video::EMF_ANISOTROPIC_FILTER, m_anisotropic_filter);
// mipmaps cause "thin black line" artifacts
-#if (IRRLICHT_VERSION_MAJOR >= 1 && IRRLICHT_VERSION_MINOR >= 8) || IRRLICHT_VERSION_MAJOR >= 2
+#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR >= 8) || IRRLICHT_VERSION_MAJOR >= 2
material.setFlag(video::EMF_USE_MIP_MAPS, false);
#endif
if (m_enable_shaders) {
@@ -303,23 +303,26 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename,
}
}
-scene::SMesh *createSpecialNodeMesh(Client *client, content_t id, std::vector<ItemPartColor> *colors, const ContentFeatures &f)
+static scene::SMesh *createSpecialNodeMesh(Client *client, MapNode n,
+ std::vector<ItemPartColor> *colors, const ContentFeatures &f)
{
MeshMakeData mesh_make_data(client, false);
MeshCollector collector;
mesh_make_data.setSmoothLighting(false);
MapblockMeshGenerator gen(&mesh_make_data, &collector);
- u8 param2 = 0;
- if (f.param_type_2 == CPT2_WALLMOUNTED ||
+
+ if (n.getParam2()) {
+ // keep it
+ } else if (f.param_type_2 == CPT2_WALLMOUNTED ||
f.param_type_2 == CPT2_COLORED_WALLMOUNTED) {
if (f.drawtype == NDT_TORCHLIKE)
- param2 = 1;
+ n.setParam2(1);
else if (f.drawtype == NDT_SIGNLIKE ||
f.drawtype == NDT_NODEBOX ||
f.drawtype == NDT_MESH)
- param2 = 4;
+ n.setParam2(4);
}
- gen.renderSingle(id, param2);
+ gen.renderSingle(n.getContent(), n.getParam2());
colors->clear();
scene::SMesh *mesh = new scene::SMesh();
@@ -413,9 +416,12 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
case NDT_LIQUID:
setCube(f, def.wield_scale);
break;
- default:
+ default: {
// Render non-trivial drawtypes like the actual node
- mesh = createSpecialNodeMesh(client, id, &m_colors, f);
+ MapNode n(id);
+ n.setParam2(def.place_param2);
+
+ mesh = createSpecialNodeMesh(client, n, &m_colors, f);
changeToMesh(mesh);
mesh->drop();
m_meshnode->setScale(
@@ -423,6 +429,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
/ (BS * f.visual_scale));
break;
}
+ }
u32 material_count = m_meshnode->getMaterialCount();
for (u32 i = 0; i < material_count; ++i) {
@@ -585,12 +592,16 @@ void getItemMesh(Client *client, const ItemStack &item, ItemMesh *result)
result->buffer_colors.emplace_back(l0.has_color, l0.color);
break;
}
- default:
+ default: {
// Render non-trivial drawtypes like the actual node
- mesh = createSpecialNodeMesh(client, id, &result->buffer_colors, f);
+ MapNode n(id);
+ n.setParam2(def.place_param2);
+
+ mesh = createSpecialNodeMesh(client, n, &result->buffer_colors, f);
scaleMesh(mesh, v3f(0.12, 0.12, 0.12));
break;
}
+ }
u32 mc = mesh->getMeshBufferCount();
for (u32 i = 0; i < mc; ++i) {
diff --git a/src/content/mods.cpp b/src/content/mods.cpp
index 95ab0290a..434004b29 100644
--- a/src/content/mods.cpp
+++ b/src/content/mods.cpp
@@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "settings.h"
#include "porting.h"
#include "convert_json.h"
+#include "script/common/c_internal.h"
bool parseDependsString(std::string &dep, std::unordered_set<char> &symbols)
{
@@ -44,20 +45,24 @@ bool parseDependsString(std::string &dep, std::unordered_set<char> &symbols)
return !dep.empty();
}
-void parseModContents(ModSpec &spec)
+static void log_mod_deprecation(const ModSpec &spec, const std::string &warning)
{
- // NOTE: this function works in mutual recursion with getModsInPath
- Settings info;
- info.readConfigFile((spec.path + DIR_DELIM + "mod.conf").c_str());
-
- if (info.exists("name"))
- spec.name = info.get("name");
+ auto handling_mode = get_deprecated_handling_mode();
+ if (handling_mode != DeprecatedHandlingMode::Ignore) {
+ std::ostringstream os;
+ os << warning << " (" << spec.name << " at " << spec.path << ")" << std::endl;
- if (info.exists("author"))
- spec.author = info.get("author");
+ if (handling_mode == DeprecatedHandlingMode::Error) {
+ throw ModError(os.str());
+ } else {
+ warningstream << os.str();
+ }
+ }
+}
- if (info.exists("release"))
- spec.release = info.getS32("release");
+void parseModContents(ModSpec &spec)
+{
+ // NOTE: this function works in mutual recursion with getModsInPath
spec.depends.clear();
spec.optdepends.clear();
@@ -78,6 +83,20 @@ void parseModContents(ModSpec &spec)
spec.modpack_content = getModsInPath(spec.path, true);
} else {
+ Settings info;
+ info.readConfigFile((spec.path + DIR_DELIM + "mod.conf").c_str());
+
+ if (info.exists("name"))
+ spec.name = info.get("name");
+ else
+ log_mod_deprecation(spec, "Mods not having a mod.conf file with the name is deprecated.");
+
+ if (info.exists("author"))
+ spec.author = info.get("author");
+
+ if (info.exists("release"))
+ spec.release = info.getS32("release");
+
// Attempt to load dependencies from mod.conf
bool mod_conf_has_depends = false;
if (info.exists("depends")) {
@@ -109,6 +128,10 @@ void parseModContents(ModSpec &spec)
std::vector<std::string> dependencies;
std::ifstream is((spec.path + DIR_DELIM + "depends.txt").c_str());
+
+ if (is.good())
+ log_mod_deprecation(spec, "depends.txt is deprecated, please use mod.conf instead.");
+
while (is.good()) {
std::string dep;
std::getline(is, dep);
@@ -127,14 +150,10 @@ void parseModContents(ModSpec &spec)
}
}
- if (info.exists("description")) {
+ if (info.exists("description"))
spec.desc = info.get("description");
- } else {
- std::ifstream is((spec.path + DIR_DELIM + "description.txt")
- .c_str());
- spec.desc = std::string((std::istreambuf_iterator<char>(is)),
- std::istreambuf_iterator<char>());
- }
+ else if (fs::ReadFile(spec.path + DIR_DELIM + "description.txt", spec.desc))
+ log_mod_deprecation(spec, "description.txt is deprecated, please use mod.conf instead.");
}
}
diff --git a/src/convert_json.cpp b/src/convert_json.cpp
index c774aa002..e9ff1e56c 100644
--- a/src/convert_json.cpp
+++ b/src/convert_json.cpp
@@ -68,12 +68,17 @@ Json::Value fetchJsonValue(const std::string &url,
return root;
}
-std::string fastWriteJson(const Json::Value &value)
+void fastWriteJson(const Json::Value &value, std::ostream &to)
{
- std::ostringstream oss;
Json::StreamWriterBuilder builder;
builder["indentation"] = "";
std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
- writer->write(value, &oss);
+ writer->write(value, &to);
+}
+
+std::string fastWriteJson(const Json::Value &value)
+{
+ std::ostringstream oss;
+ fastWriteJson(value, oss);
return oss.str();
}
diff --git a/src/convert_json.h b/src/convert_json.h
index d8825acdc..2c094a946 100644
--- a/src/convert_json.h
+++ b/src/convert_json.h
@@ -20,8 +20,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include <json/json.h>
+#include <ostream>
Json::Value fetchJsonValue(const std::string &url,
std::vector<std::string> *extra_headers);
+void fastWriteJson(const Json::Value &value, std::ostream &to);
+
std::string fastWriteJson(const Json::Value &value);
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index 132e31d2b..d5bd56bc9 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -80,7 +80,7 @@ void set_default_settings()
settings->setDefault("keymap_drop", "KEY_KEY_Q");
settings->setDefault("keymap_zoom", "KEY_KEY_Z");
settings->setDefault("keymap_inventory", "KEY_KEY_I");
- settings->setDefault("keymap_special1", "KEY_KEY_E");
+ settings->setDefault("keymap_aux1", "KEY_KEY_E");
settings->setDefault("keymap_chat", "KEY_KEY_T");
settings->setDefault("keymap_cmd", "/");
settings->setDefault("keymap_cmd_local", ".");
@@ -240,6 +240,7 @@ void set_default_settings()
#endif
settings->setDefault("enable_particles", "true");
settings->setDefault("arm_inertia", "true");
+ settings->setDefault("show_nametag_backgrounds", "true");
settings->setDefault("enable_minimap", "true");
settings->setDefault("minimap_shape_round", "true");
@@ -466,7 +467,7 @@ void set_default_settings()
settings->setDefault("touchtarget", "true");
settings->setDefault("touchscreen_threshold","20");
settings->setDefault("fixed_virtual_joystick", "false");
- settings->setDefault("virtual_joystick_triggers_aux", "false");
+ settings->setDefault("virtual_joystick_triggers_aux1", "false");
settings->setDefault("smooth_lighting", "false");
settings->setDefault("max_simultaneous_block_sends_per_client", "10");
settings->setDefault("emergequeue_limit_diskonly", "16");
diff --git a/src/emerge.cpp b/src/emerge.cpp
index e0dc5628e..32e7d9f24 100644
--- a/src/emerge.cpp
+++ b/src/emerge.cpp
@@ -113,13 +113,15 @@ EmergeParams::~EmergeParams()
{
infostream << "EmergeParams: destroying " << this << std::endl;
// Delete everything that was cloned on creation of EmergeParams
+ delete biomegen;
delete biomemgr;
delete oremgr;
delete decomgr;
delete schemmgr;
}
-EmergeParams::EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr,
+EmergeParams::EmergeParams(EmergeManager *parent, const BiomeGen *biomegen,
+ const BiomeManager *biomemgr,
const OreManager *oremgr, const DecorationManager *decomgr,
const SchematicManager *schemmgr) :
ndef(parent->ndef),
@@ -129,6 +131,7 @@ EmergeParams::EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr,
biomemgr(biomemgr->clone()), oremgr(oremgr->clone()),
decomgr(decomgr->clone()), schemmgr(schemmgr->clone())
{
+ this->biomegen = biomegen->clone(this->biomemgr);
}
////
@@ -143,6 +146,10 @@ EmergeManager::EmergeManager(Server *server)
this->decomgr = new DecorationManager(server);
this->schemmgr = new SchematicManager(server);
+ // initialized later
+ this->mgparams = nullptr;
+ this->biomegen = nullptr;
+
// Note that accesses to this variable are not synchronized.
// This is because the *only* thread ever starting or stopping
// EmergeThreads should be the ServerThread.
@@ -240,9 +247,12 @@ void EmergeManager::initMapgens(MapgenParams *params)
mgparams = params;
+ v3s16 csize = v3s16(1, 1, 1) * (params->chunksize * MAP_BLOCKSIZE);
+ biomegen = biomemgr->createBiomeGen(BIOMEGEN_ORIGINAL, params->bparams, csize);
+
for (u32 i = 0; i != m_threads.size(); i++) {
- EmergeParams *p = new EmergeParams(
- this, biomemgr, oremgr, decomgr, schemmgr);
+ EmergeParams *p = new EmergeParams(this, biomegen,
+ biomemgr, oremgr, decomgr, schemmgr);
infostream << "EmergeManager: Created params " << p
<< " for thread " << i << std::endl;
m_mapgens.push_back(Mapgen::createMapgen(params->mgtype, params, p));
diff --git a/src/emerge.h b/src/emerge.h
index da845e243..aac3e7dd3 100644
--- a/src/emerge.h
+++ b/src/emerge.h
@@ -99,13 +99,15 @@ public:
u32 gen_notify_on;
const std::set<u32> *gen_notify_on_deco_ids; // shared
+ BiomeGen *biomegen;
BiomeManager *biomemgr;
OreManager *oremgr;
DecorationManager *decomgr;
SchematicManager *schemmgr;
private:
- EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr,
+ EmergeParams(EmergeManager *parent, const BiomeGen *biomegen,
+ const BiomeManager *biomemgr,
const OreManager *oremgr, const DecorationManager *decomgr,
const SchematicManager *schemmgr);
};
@@ -140,6 +142,8 @@ public:
~EmergeManager();
DISABLE_CLASS_COPY(EmergeManager);
+ const BiomeGen *getBiomeGen() const { return biomegen; }
+
// no usage restrictions
const BiomeManager *getBiomeManager() const { return biomemgr; }
const OreManager *getOreManager() const { return oremgr; }
@@ -196,6 +200,7 @@ private:
// Managers of various map generation-related components
// Note that each Mapgen gets a copy(!) of these to work with
+ BiomeGen *biomegen;
BiomeManager *biomemgr;
OreManager *oremgr;
DecorationManager *decomgr;
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index fdd36914a..5552cebea 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -23,7 +23,6 @@ set(gui_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/guiTable.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiHyperText.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiVolumeChange.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/intlGUIEditBox.cpp
${CMAKE_CURRENT_SOURCE_DIR}/modalMenu.cpp
${CMAKE_CURRENT_SOURCE_DIR}/profilergraph.cpp
PARENT_SCOPE
diff --git a/src/gui/guiButton.cpp b/src/gui/guiButton.cpp
index b98e5de82..d6dbddf54 100644
--- a/src/gui/guiButton.cpp
+++ b/src/gui/guiButton.cpp
@@ -506,6 +506,13 @@ video::SColor GUIButton::getOverrideColor() const
return OverrideColor;
}
+#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
+video::SColor GUIButton::getActiveColor() const
+{
+ return video::SColor(0,0,0,0); // unused?
+}
+#endif
+
void GUIButton::enableOverrideColor(bool enable)
{
OverrideColorEnabled = enable;
diff --git a/src/gui/guiButton.h b/src/gui/guiButton.h
index 4e1b04aac..834405f51 100644
--- a/src/gui/guiButton.h
+++ b/src/gui/guiButton.h
@@ -69,6 +69,12 @@ using namespace irr;
class ISimpleTextureSource;
+#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR <= 8)
+#define OVERRIDE_19
+#else
+#define OVERRIDE_19 override
+#endif
+
class GUIButton : public gui::IGUIButton
{
public:
@@ -97,22 +103,27 @@ public:
virtual gui::IGUIFont* getActiveFont() const override;
//! Sets another color for the button text.
- virtual void setOverrideColor(video::SColor color);
+ virtual void setOverrideColor(video::SColor color) OVERRIDE_19;
//! Gets the override color
- virtual video::SColor getOverrideColor(void) const;
+ virtual video::SColor getOverrideColor(void) const OVERRIDE_19;
+
+ #if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
+ //! Gets the currently used text color
+ virtual video::SColor getActiveColor() const override;
+ #endif
//! Sets if the button text should use the override color or the color in the gui skin.
- virtual void enableOverrideColor(bool enable);
+ virtual void enableOverrideColor(bool enable) OVERRIDE_19;
//! Checks if an override color is enabled
- virtual bool isOverrideColorEnabled(void) const;
+ virtual bool isOverrideColorEnabled(void) const OVERRIDE_19;
// PATCH
//! Sets an image which should be displayed on the button when it is in the given state.
virtual void setImage(gui::EGUI_BUTTON_IMAGE_STATE state,
video::ITexture* image=nullptr,
- const core::rect<s32>& sourceRect=core::rect<s32>(0,0,0,0));
+ const core::rect<s32>& sourceRect=core::rect<s32>(0,0,0,0)) OVERRIDE_19;
//! Sets an image which should be displayed on the button when it is in normal state.
virtual void setImage(video::ITexture* image=nullptr) override;
@@ -141,7 +152,7 @@ public:
*/
virtual void setSprite(gui::EGUI_BUTTON_STATE state, s32 index,
video::SColor color=video::SColor(255,255,255,255),
- bool loop=false, bool scale=false);
+ bool loop=false, bool scale=false) OVERRIDE_19;
#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR <= 8)
void setSprite(gui::EGUI_BUTTON_STATE state, s32 index, video::SColor color, bool loop) override {
@@ -150,16 +161,16 @@ public:
#endif
//! Get the sprite-index for the given state or -1 when no sprite is set
- virtual s32 getSpriteIndex(gui::EGUI_BUTTON_STATE state) const;
+ virtual s32 getSpriteIndex(gui::EGUI_BUTTON_STATE state) const OVERRIDE_19;
//! Get the sprite color for the given state. Color is only used when a sprite is set.
- virtual video::SColor getSpriteColor(gui::EGUI_BUTTON_STATE state) const;
+ virtual video::SColor getSpriteColor(gui::EGUI_BUTTON_STATE state) const OVERRIDE_19;
//! Returns if the sprite in the given state does loop
- virtual bool getSpriteLoop(gui::EGUI_BUTTON_STATE state) const;
+ virtual bool getSpriteLoop(gui::EGUI_BUTTON_STATE state) const OVERRIDE_19;
//! Returns if the sprite in the given state is scaled
- virtual bool getSpriteScale(gui::EGUI_BUTTON_STATE state) const;
+ virtual bool getSpriteScale(gui::EGUI_BUTTON_STATE state) const OVERRIDE_19;
//! Sets if the button should behave like a push button. Which means it
//! can be in two states: Normal or Pressed. With a click on the button,
@@ -199,13 +210,13 @@ public:
virtual bool isScalingImage() const override;
//! Get if the shift key was pressed in last EGET_BUTTON_CLICKED event
- virtual bool getClickShiftState() const
+ virtual bool getClickShiftState() const OVERRIDE_19
{
return ClickShiftState;
}
//! Get if the control key was pressed in last EGET_BUTTON_CLICKED event
- virtual bool getClickControlState() const
+ virtual bool getClickControlState() const OVERRIDE_19
{
return ClickControlState;
}
diff --git a/src/gui/guiChatConsole.cpp b/src/gui/guiChatConsole.cpp
index 6330d95d4..fd92cf298 100644
--- a/src/gui/guiChatConsole.cpp
+++ b/src/gui/guiChatConsole.cpp
@@ -635,13 +635,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
prompt.nickCompletion(names, backwards);
return true;
} else if (!iswcntrl(event.KeyInput.Char) && !event.KeyInput.Control) {
- #if defined(__linux__) && (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9)
- wchar_t wc = L'_';
- mbtowc( &wc, (char *) &event.KeyInput.Char, sizeof(event.KeyInput.Char) );
- prompt.input(wc);
- #else
- prompt.input(event.KeyInput.Char);
- #endif
+ prompt.input(event.KeyInput.Char);
return true;
}
}
diff --git a/src/gui/guiConfirmRegistration.cpp b/src/gui/guiConfirmRegistration.cpp
index 4a798c39b..4ca9a64ed 100644
--- a/src/gui/guiConfirmRegistration.cpp
+++ b/src/gui/guiConfirmRegistration.cpp
@@ -25,7 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <IGUIButton.h>
#include <IGUIStaticText.h>
#include <IGUIFont.h>
-#include "intlGUIEditBox.h"
+#include "guiEditBoxWithScrollbar.h"
#include "porting.h"
#include "gettext.h"
@@ -109,10 +109,9 @@ void GUIConfirmRegistration::regenerateGui(v2u32 screensize)
porting::mt_snprintf(info_text_buf, sizeof(info_text_buf),
info_text_template.c_str(), m_playername.c_str());
- wchar_t *info_text_buf_wide = utf8_to_wide_c(info_text_buf);
- gui::IGUIEditBox *e = new gui::intlGUIEditBox(info_text_buf_wide, true,
- Environment, this, ID_intotext, rect2, false, true);
- delete[] info_text_buf_wide;
+ std::wstring info_text_w = utf8_to_wide(info_text_buf);
+ gui::IGUIEditBox *e = new GUIEditBoxWithScrollBar(info_text_w.c_str(),
+ true, Environment, this, ID_intotext, rect2, false, true);
e->drop();
e->setMultiLine(true);
e->setWordWrap(true);
diff --git a/src/gui/guiEditBox.cpp b/src/gui/guiEditBox.cpp
index 79979dbc3..cd5a0868d 100644
--- a/src/gui/guiEditBox.cpp
+++ b/src/gui/guiEditBox.cpp
@@ -208,31 +208,10 @@ bool GUIEditBox::OnEvent(const SEvent &event)
}
}
break;
- case EET_KEY_INPUT_EVENT: {
-#if (defined(__linux__) || defined(__FreeBSD__)) || defined(__DragonFly__)
- // ################################################################
- // ValkaTR:
- // This part is the difference from the original intlGUIEditBox
- // It converts UTF-8 character into a UCS-2 (wchar_t)
- wchar_t wc = L'_';
- mbtowc(&wc, (char *)&event.KeyInput.Char,
- sizeof(event.KeyInput.Char));
-
- // printf( "char: %lc (%u) \r\n", wc, wc );
-
- SEvent irrevent(event);
- irrevent.KeyInput.Char = wc;
- // ################################################################
-
- if (processKey(irrevent))
- return true;
-#else
+ case EET_KEY_INPUT_EVENT:
if (processKey(event))
return true;
-#endif // defined(linux)
-
break;
- }
case EET_MOUSE_INPUT_EVENT:
if (processMouse(event))
return true;
diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp
index 5aa6dc9ae..fd35f2d84 100644
--- a/src/gui/guiFormSpecMenu.cpp
+++ b/src/gui/guiFormSpecMenu.cpp
@@ -65,7 +65,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "guiInventoryList.h"
#include "guiItemImage.h"
#include "guiScrollContainer.h"
-#include "intlGUIEditBox.h"
#include "guiHyperText.h"
#include "guiScene.h"
@@ -1547,21 +1546,13 @@ void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec,
}
gui::IGUIEditBox *e = nullptr;
- static constexpr bool use_intl_edit_box = USE_FREETYPE &&
- IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9;
-
- if (use_intl_edit_box && g_settings->getBool("freetype")) {
- e = new gui::intlGUIEditBox(spec.fdefault.c_str(), true, Environment,
- data->current_parent, spec.fid, rect, is_editable, is_multiline);
- } else {
- if (is_multiline) {
- e = new GUIEditBoxWithScrollBar(spec.fdefault.c_str(), true, Environment,
- data->current_parent, spec.fid, rect, is_editable, true);
- } else if (is_editable) {
- e = Environment->addEditBox(spec.fdefault.c_str(), rect, true,
- data->current_parent, spec.fid);
- e->grab();
- }
+ if (is_multiline) {
+ e = new GUIEditBoxWithScrollBar(spec.fdefault.c_str(), true, Environment,
+ data->current_parent, spec.fid, rect, is_editable, true);
+ } else if (is_editable) {
+ e = Environment->addEditBox(spec.fdefault.c_str(), rect, true,
+ data->current_parent, spec.fid);
+ e->grab();
}
auto style = getDefaultStyleForElement(is_multiline ? "textarea" : "field", spec.fname);
@@ -2746,7 +2737,7 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element)
{
std::vector<std::string> parts = split(element, ';');
- if (parts.size() < 5 || (parts.size() > 9 &&
+ if (parts.size() < 5 || (parts.size() > 10 &&
m_formspec_version <= FORMSPEC_API_VERSION)) {
errorstream << "Invalid model element (" << parts.size() << "): '" << element
<< "'" << std::endl;
@@ -2754,8 +2745,8 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element)
}
// Avoid length checks by resizing
- if (parts.size() < 9)
- parts.resize(9);
+ if (parts.size() < 10)
+ parts.resize(10);
std::vector<std::string> v_pos = split(parts[0], ',');
std::vector<std::string> v_geom = split(parts[1], ',');
@@ -2766,6 +2757,7 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element)
bool inf_rotation = is_yes(parts[6]);
bool mousectrl = is_yes(parts[7]) || parts[7].empty(); // default true
std::vector<std::string> frame_loop = split(parts[8], ',');
+ std::string speed = unescape_string(parts[9]);
MY_CHECKPOS("model", 0);
MY_CHECKGEOM("model", 1);
@@ -2825,6 +2817,7 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element)
}
e->setFrameLoop(frame_loop_begin, frame_loop_end);
+ e->setAnimationSpeed(stof(speed));
auto style = getStyleForElement("model", spec.fname);
e->setStyles(style);
diff --git a/src/gui/guiKeyChangeMenu.cpp b/src/gui/guiKeyChangeMenu.cpp
index 4dcb47779..84678b629 100644
--- a/src/gui/guiKeyChangeMenu.cpp
+++ b/src/gui/guiKeyChangeMenu.cpp
@@ -46,7 +46,7 @@ enum
GUI_ID_KEY_BACKWARD_BUTTON,
GUI_ID_KEY_LEFT_BUTTON,
GUI_ID_KEY_RIGHT_BUTTON,
- GUI_ID_KEY_USE_BUTTON,
+ GUI_ID_KEY_AUX1_BUTTON,
GUI_ID_KEY_FLY_BUTTON,
GUI_ID_KEY_FAST_BUTTON,
GUI_ID_KEY_JUMP_BUTTON,
@@ -177,7 +177,7 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
{
core::rect<s32> rect(0, 0, option_w, 30 * s);
rect += topleft + v2s32(option_x, option_y);
- const wchar_t *text = wgettext("\"Special\" = climb down");
+ const wchar_t *text = wgettext("\"Aux1\" = climb down");
Environment->addCheckBox(g_settings->getBool("aux1_descends"), rect, this,
GUI_ID_CB_AUX1_DESCENDS, text);
delete[] text;
@@ -416,7 +416,7 @@ void GUIKeyChangeMenu::init_keys()
this->add_key(GUI_ID_KEY_BACKWARD_BUTTON, wgettext("Backward"), "keymap_backward");
this->add_key(GUI_ID_KEY_LEFT_BUTTON, wgettext("Left"), "keymap_left");
this->add_key(GUI_ID_KEY_RIGHT_BUTTON, wgettext("Right"), "keymap_right");
- this->add_key(GUI_ID_KEY_USE_BUTTON, wgettext("Special"), "keymap_special1");
+ this->add_key(GUI_ID_KEY_AUX1_BUTTON, wgettext("Aux1"), "keymap_aux1");
this->add_key(GUI_ID_KEY_JUMP_BUTTON, wgettext("Jump"), "keymap_jump");
this->add_key(GUI_ID_KEY_SNEAK_BUTTON, wgettext("Sneak"), "keymap_sneak");
this->add_key(GUI_ID_KEY_DROP_BUTTON, wgettext("Drop"), "keymap_drop");
diff --git a/src/gui/guiScene.cpp b/src/gui/guiScene.cpp
index 5f4c50b91..f0cfbec5e 100644
--- a/src/gui/guiScene.cpp
+++ b/src/gui/guiScene.cpp
@@ -34,9 +34,6 @@ GUIScene::GUIScene(gui::IGUIEnvironment *env, scene::ISceneManager *smgr,
m_cam = m_smgr->addCameraSceneNode(0, v3f(0.f, 0.f, -100.f), v3f(0.f));
m_cam->setFOV(30.f * core::DEGTORAD);
- scene::ILightSceneNode *light = m_smgr->addLightSceneNode(m_cam);
- light->setRadius(1000.f);
-
m_smgr->getParameters()->setAttribute(scene::ALLOW_ZWRITE_ON_TRANSPARENT, true);
}
@@ -60,6 +57,7 @@ scene::IAnimatedMeshSceneNode *GUIScene::setMesh(scene::IAnimatedMesh *mesh)
m_mesh = m_smgr->addAnimatedMeshSceneNode(mesh);
m_mesh->setPosition(-m_mesh->getBoundingBox().getCenter());
m_mesh->animateJoints();
+
return m_mesh;
}
@@ -73,10 +71,13 @@ void GUIScene::setTexture(u32 idx, video::ITexture *texture)
material.setFlag(video::EMF_FOG_ENABLE, true);
material.setFlag(video::EMF_BILINEAR_FILTER, false);
material.setFlag(video::EMF_BACK_FACE_CULLING, false);
+ material.setFlag(video::EMF_ZWRITE_ENABLE, true);
}
void GUIScene::draw()
{
+ m_driver->clearBuffers(video::ECBF_DEPTH);
+
// Control rotation speed based on time
u64 new_time = porting::getTimeMs();
u64 dtime_ms = 0;
@@ -161,6 +162,14 @@ void GUIScene::setFrameLoop(s32 begin, s32 end)
m_mesh->setFrameLoop(begin, end);
}
+/**
+ * Sets the animation speed (FPS) for the mesh
+ */
+void GUIScene::setAnimationSpeed(f32 speed)
+{
+ m_mesh->setAnimationSpeed(speed);
+}
+
/* Camera control functions */
inline void GUIScene::calcOptimalDistance()
diff --git a/src/gui/guiScene.h b/src/gui/guiScene.h
index 08eb7f350..0f5f3a891 100644
--- a/src/gui/guiScene.h
+++ b/src/gui/guiScene.h
@@ -37,6 +37,7 @@ public:
void setTexture(u32 idx, video::ITexture *texture);
void setBackgroundColor(const video::SColor &color) noexcept { m_bgcolor = color; };
void setFrameLoop(s32 begin, s32 end);
+ void setAnimationSpeed(f32 speed);
void enableMouseControl(bool enable) noexcept { m_mouse_ctrl = enable; };
void setRotation(v2f rot) noexcept { m_custom_rot = rot; };
void enableContinuousRotation(bool enable) noexcept { m_inf_rot = enable; };
diff --git a/src/gui/intlGUIEditBox.cpp b/src/gui/intlGUIEditBox.cpp
deleted file mode 100644
index 0f09ea746..000000000
--- a/src/gui/intlGUIEditBox.cpp
+++ /dev/null
@@ -1,626 +0,0 @@
-// 11.11.2011 11:11 ValkaTR
-//
-// This is a copy of intlGUIEditBox from the irrlicht, but with a
-// fix in the OnEvent function, which doesn't allowed input of
-// other keyboard layouts than latin-1
-//
-// Characters like: ä ö ü õ Ñ‹ й ÑŽ Ñ ÑŠ â„– € ° ...
-//
-// This fix is only needed for linux, because of a bug
-// in the CIrrDeviceLinux.cpp:1014-1015 of the irrlicht
-//
-// Also locale in the programm should not be changed to
-// a "C", "POSIX" or whatever, it should be set to "",
-// or XLookupString will return nothing for the international
-// characters.
-//
-// From the "man setlocale":
-//
-// On startup of the main program, the portable "C" locale
-// is selected as default. A program may be made
-// portable to all locales by calling:
-//
-// setlocale(LC_ALL, "");
-//
-// after program initialization....
-//
-
-// Copyright (C) 2002-2013 Nikolaus Gebhardt
-// This file is part of the "Irrlicht Engine".
-// For conditions of distribution and use, see copyright notice in irrlicht.h
-
-#include <util/numeric.h>
-#include "intlGUIEditBox.h"
-
-#include "IGUISkin.h"
-#include "IGUIEnvironment.h"
-#include "IGUIFont.h"
-#include "IVideoDriver.h"
-//#include "irrlicht/os.cpp"
-#include "porting.h"
-//#include "Keycodes.h"
-#include "log.h"
-
-/*
- todo:
- optional scrollbars
- ctrl+left/right to select word
- double click/ctrl click: word select + drag to select whole words, triple click to select line
- optional? dragging selected text
- numerical
-*/
-
-namespace irr
-{
-namespace gui
-{
-
-//! constructor
-intlGUIEditBox::intlGUIEditBox(const wchar_t* text, bool border,
- IGUIEnvironment* environment, IGUIElement* parent, s32 id,
- const core::rect<s32>& rectangle, bool writable, bool has_vscrollbar)
- : GUIEditBox(environment, parent, id, rectangle, border, writable)
-{
- #ifdef _DEBUG
- setDebugName("intlintlGUIEditBox");
- #endif
-
- Text = text;
-
- if (Environment)
- m_operator = Environment->getOSOperator();
-
- if (m_operator)
- m_operator->grab();
-
- // this element can be tabbed to
- setTabStop(true);
- setTabOrder(-1);
-
- IGUISkin *skin = 0;
- if (Environment)
- skin = Environment->getSkin();
- if (m_border && skin)
- {
- m_frame_rect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
- m_frame_rect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
- m_frame_rect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
- m_frame_rect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
- }
-
- if (skin && has_vscrollbar) {
- m_scrollbar_width = skin->getSize(gui::EGDS_SCROLLBAR_SIZE);
-
- if (m_scrollbar_width > 0) {
- createVScrollBar();
- }
- }
-
- breakText();
-
- calculateScrollPos();
- setWritable(writable);
-}
-
-//! Sets whether to draw the background
-void intlGUIEditBox::setDrawBackground(bool draw)
-{
-}
-
-void intlGUIEditBox::updateAbsolutePosition()
-{
- core::rect<s32> oldAbsoluteRect(AbsoluteRect);
- IGUIElement::updateAbsolutePosition();
- if ( oldAbsoluteRect != AbsoluteRect )
- {
- breakText();
- }
-}
-
-
-//! draws the element and its children
-void intlGUIEditBox::draw()
-{
- if (!IsVisible)
- return;
-
- const bool focus = Environment->hasFocus(this);
-
- IGUISkin* skin = Environment->getSkin();
- if (!skin)
- return;
-
- m_frame_rect = AbsoluteRect;
-
- // draw the border
-
- if (m_border)
- {
- if (m_writable) {
- skin->draw3DSunkenPane(this, skin->getColor(EGDC_WINDOW),
- false, true, m_frame_rect, &AbsoluteClippingRect);
- }
-
- m_frame_rect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
- m_frame_rect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
- m_frame_rect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
- m_frame_rect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
- }
-
- updateVScrollBar();
- core::rect<s32> localClipRect = m_frame_rect;
- localClipRect.clipAgainst(AbsoluteClippingRect);
-
- // draw the text
-
- IGUIFont* font = m_override_font;
- if (!m_override_font)
- font = skin->getFont();
-
- s32 cursorLine = 0;
- s32 charcursorpos = 0;
-
- if (font)
- {
- if (m_last_break_font != font)
- {
- breakText();
- }
-
- // calculate cursor pos
-
- core::stringw *txtLine = &Text;
- s32 startPos = 0;
-
- core::stringw s, s2;
-
- // get mark position
- const bool ml = (!m_passwordbox && (m_word_wrap || m_multiline));
- const s32 realmbgn = m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end;
- const s32 realmend = m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin;
- const s32 hlineStart = ml ? getLineFromPos(realmbgn) : 0;
- const s32 hlineCount = ml ? getLineFromPos(realmend) - hlineStart + 1 : 1;
- const s32 lineCount = ml ? m_broken_text.size() : 1;
-
- // Save the override color information.
- // Then, alter it if the edit box is disabled.
- const bool prevOver = m_override_color_enabled;
- const video::SColor prevColor = m_override_color;
-
- if (!Text.empty()) {
- if (!IsEnabled && !m_override_color_enabled)
- {
- m_override_color_enabled = true;
- m_override_color = skin->getColor(EGDC_GRAY_TEXT);
- }
-
- for (s32 i=0; i < lineCount; ++i)
- {
- setTextRect(i);
-
- // clipping test - don't draw anything outside the visible area
- core::rect<s32> c = localClipRect;
- c.clipAgainst(m_current_text_rect);
- if (!c.isValid())
- continue;
-
- // get current line
- if (m_passwordbox)
- {
- if (m_broken_text.size() != 1)
- {
- m_broken_text.clear();
- m_broken_text.emplace_back();
- }
- if (m_broken_text[0].size() != Text.size())
- {
- m_broken_text[0] = Text;
- for (u32 q = 0; q < Text.size(); ++q)
- {
- m_broken_text[0] [q] = m_passwordchar;
- }
- }
- txtLine = &m_broken_text[0];
- startPos = 0;
- }
- else
- {
- txtLine = ml ? &m_broken_text[i] : &Text;
- startPos = ml ? m_broken_text_positions[i] : 0;
- }
-
-
- // draw normal text
- font->draw(txtLine->c_str(), m_current_text_rect,
- m_override_color_enabled ? m_override_color : skin->getColor(EGDC_BUTTON_TEXT),
- false, true, &localClipRect);
-
- // draw mark and marked text
- if (focus && m_mark_begin != m_mark_end && i >= hlineStart && i < hlineStart + hlineCount)
- {
-
- s32 mbegin = 0, mend = 0;
- s32 lineStartPos = 0, lineEndPos = txtLine->size();
-
- if (i == hlineStart)
- {
- // highlight start is on this line
- s = txtLine->subString(0, realmbgn - startPos);
- mbegin = font->getDimension(s.c_str()).Width;
-
- // deal with kerning
- mbegin += font->getKerningWidth(
- &((*txtLine)[realmbgn - startPos]),
- realmbgn - startPos > 0 ? &((*txtLine)[realmbgn - startPos - 1]) : 0);
-
- lineStartPos = realmbgn - startPos;
- }
- if (i == hlineStart + hlineCount - 1)
- {
- // highlight end is on this line
- s2 = txtLine->subString(0, realmend - startPos);
- mend = font->getDimension(s2.c_str()).Width;
- lineEndPos = (s32)s2.size();
- }
- else
- mend = font->getDimension(txtLine->c_str()).Width;
-
- m_current_text_rect.UpperLeftCorner.X += mbegin;
- m_current_text_rect.LowerRightCorner.X = m_current_text_rect.UpperLeftCorner.X + mend - mbegin;
-
- // draw mark
- skin->draw2DRectangle(this, skin->getColor(EGDC_HIGH_LIGHT), m_current_text_rect, &localClipRect);
-
- // draw marked text
- s = txtLine->subString(lineStartPos, lineEndPos - lineStartPos);
-
- if (!s.empty())
- font->draw(s.c_str(), m_current_text_rect,
- m_override_color_enabled ? m_override_color : skin->getColor(EGDC_HIGH_LIGHT_TEXT),
- false, true, &localClipRect);
-
- }
- }
-
- // Return the override color information to its previous settings.
- m_override_color_enabled = prevOver;
- m_override_color = prevColor;
- }
-
- // draw cursor
-
- if (m_word_wrap || m_multiline)
- {
- cursorLine = getLineFromPos(m_cursor_pos);
- txtLine = &m_broken_text[cursorLine];
- startPos = m_broken_text_positions[cursorLine];
- }
- s = txtLine->subString(0,m_cursor_pos-startPos);
- charcursorpos = font->getDimension(s.c_str()).Width +
- font->getKerningWidth(L"_", m_cursor_pos-startPos > 0 ? &((*txtLine)[m_cursor_pos-startPos-1]) : 0);
-
- if (m_writable) {
- if (focus && (porting::getTimeMs() - m_blink_start_time) % 700 < 350) {
- setTextRect(cursorLine);
- m_current_text_rect.UpperLeftCorner.X += charcursorpos;
-
- font->draw(L"_", m_current_text_rect,
- m_override_color_enabled ? m_override_color : skin->getColor(EGDC_BUTTON_TEXT),
- false, true, &localClipRect);
- }
- }
- }
-
- // draw children
- IGUIElement::draw();
-}
-
-
-s32 intlGUIEditBox::getCursorPos(s32 x, s32 y)
-{
- IGUIFont* font = getActiveFont();
-
- const u32 lineCount = (m_word_wrap || m_multiline) ? m_broken_text.size() : 1;
-
- core::stringw *txtLine = NULL;
- s32 startPos = 0;
- u32 curr_line_idx = 0;
- x += 3;
-
- for (; curr_line_idx < lineCount; ++curr_line_idx) {
- setTextRect(curr_line_idx);
- if (curr_line_idx == 0 && y < m_current_text_rect.UpperLeftCorner.Y)
- y = m_current_text_rect.UpperLeftCorner.Y;
- if (curr_line_idx == lineCount - 1 && y > m_current_text_rect.LowerRightCorner.Y)
- y = m_current_text_rect.LowerRightCorner.Y;
-
- // is it inside this region?
- if (y >= m_current_text_rect.UpperLeftCorner.Y && y <= m_current_text_rect.LowerRightCorner.Y) {
- // we've found the clicked line
- txtLine = (m_word_wrap || m_multiline) ? &m_broken_text[curr_line_idx] : &Text;
- startPos = (m_word_wrap || m_multiline) ? m_broken_text_positions[curr_line_idx] : 0;
- break;
- }
- }
-
- if (x < m_current_text_rect.UpperLeftCorner.X)
- x = m_current_text_rect.UpperLeftCorner.X;
- else if (x > m_current_text_rect.LowerRightCorner.X)
- x = m_current_text_rect.LowerRightCorner.X;
-
- s32 idx = font->getCharacterFromPos(txtLine->c_str(), x - m_current_text_rect.UpperLeftCorner.X);
- // Special handling for last line, if we are on limits, add 1 extra shift because idx
- // will be the last char, not null char of the wstring
- if (curr_line_idx == lineCount - 1 && x == m_current_text_rect.LowerRightCorner.X)
- idx++;
-
- return rangelim(idx + startPos, 0, S32_MAX);
-}
-
-
-//! Breaks the single text line.
-void intlGUIEditBox::breakText()
-{
- IGUISkin* skin = Environment->getSkin();
-
- if ((!m_word_wrap && !m_multiline) || !skin)
- return;
-
- m_broken_text.clear(); // need to reallocate :/
- m_broken_text_positions.clear();
-
- IGUIFont* font = m_override_font;
- if (!m_override_font)
- font = skin->getFont();
-
- if (!font)
- return;
-
- m_last_break_font = font;
-
- core::stringw line;
- core::stringw word;
- core::stringw whitespace;
- s32 lastLineStart = 0;
- s32 size = Text.size();
- s32 length = 0;
- s32 elWidth = RelativeRect.getWidth() - m_scrollbar_width - 10;
- wchar_t c;
-
- for (s32 i=0; i<size; ++i)
- {
- c = Text[i];
- bool lineBreak = false;
-
- if (c == L'\r') // Mac or Windows breaks
- {
- lineBreak = true;
- c = ' ';
- if (Text[i+1] == L'\n') // Windows breaks
- {
- Text.erase(i+1);
- --size;
- }
- }
- else if (c == L'\n') // Unix breaks
- {
- lineBreak = true;
- c = ' ';
- }
-
- // don't break if we're not a multi-line edit box
- if (!m_multiline)
- lineBreak = false;
-
- if (c == L' ' || c == 0 || i == (size-1))
- {
- if (!word.empty()) {
- // here comes the next whitespace, look if
- // we can break the last word to the next line.
- s32 whitelgth = font->getDimension(whitespace.c_str()).Width;
- s32 worldlgth = font->getDimension(word.c_str()).Width;
-
- if (m_word_wrap && length + worldlgth + whitelgth > elWidth)
- {
- // break to next line
- length = worldlgth;
- m_broken_text.push_back(line);
- m_broken_text_positions.push_back(lastLineStart);
- lastLineStart = i - (s32)word.size();
- line = word;
- }
- else
- {
- // add word to line
- line += whitespace;
- line += word;
- length += whitelgth + worldlgth;
- }
-
- word = L"";
- whitespace = L"";
- }
-
- whitespace += c;
-
- // compute line break
- if (lineBreak)
- {
- line += whitespace;
- line += word;
- m_broken_text.push_back(line);
- m_broken_text_positions.push_back(lastLineStart);
- lastLineStart = i+1;
- line = L"";
- word = L"";
- whitespace = L"";
- length = 0;
- }
- }
- else
- {
- // yippee this is a word..
- word += c;
- }
- }
-
- line += whitespace;
- line += word;
- m_broken_text.push_back(line);
- m_broken_text_positions.push_back(lastLineStart);
-}
-
-
-void intlGUIEditBox::setTextRect(s32 line)
-{
- core::dimension2du d;
-
- IGUISkin* skin = Environment->getSkin();
- if (!skin)
- return;
-
- IGUIFont* font = m_override_font ? m_override_font : skin->getFont();
-
- if (!font)
- return;
-
- // get text dimension
- const u32 lineCount = (m_word_wrap || m_multiline) ? m_broken_text.size() : 1;
- if (m_word_wrap || m_multiline)
- {
- d = font->getDimension(m_broken_text[line].c_str());
- }
- else
- {
- d = font->getDimension(Text.c_str());
- d.Height = AbsoluteRect.getHeight();
- }
- d.Height += font->getKerningHeight();
-
- // justification
- switch (m_halign)
- {
- case EGUIA_CENTER:
- // align to h centre
- m_current_text_rect.UpperLeftCorner.X = (m_frame_rect.getWidth()/2) - (d.Width/2);
- m_current_text_rect.LowerRightCorner.X = (m_frame_rect.getWidth()/2) + (d.Width/2);
- break;
- case EGUIA_LOWERRIGHT:
- // align to right edge
- m_current_text_rect.UpperLeftCorner.X = m_frame_rect.getWidth() - d.Width;
- m_current_text_rect.LowerRightCorner.X = m_frame_rect.getWidth();
- break;
- default:
- // align to left edge
- m_current_text_rect.UpperLeftCorner.X = 0;
- m_current_text_rect.LowerRightCorner.X = d.Width;
-
- }
-
- switch (m_valign)
- {
- case EGUIA_CENTER:
- // align to v centre
- m_current_text_rect.UpperLeftCorner.Y =
- (m_frame_rect.getHeight()/2) - (lineCount*d.Height)/2 + d.Height*line;
- break;
- case EGUIA_LOWERRIGHT:
- // align to bottom edge
- m_current_text_rect.UpperLeftCorner.Y =
- m_frame_rect.getHeight() - lineCount*d.Height + d.Height*line;
- break;
- default:
- // align to top edge
- m_current_text_rect.UpperLeftCorner.Y = d.Height*line;
- break;
- }
-
- m_current_text_rect.UpperLeftCorner.X -= m_hscroll_pos;
- m_current_text_rect.LowerRightCorner.X -= m_hscroll_pos;
- m_current_text_rect.UpperLeftCorner.Y -= m_vscroll_pos;
- m_current_text_rect.LowerRightCorner.Y = m_current_text_rect.UpperLeftCorner.Y + d.Height;
-
- m_current_text_rect += m_frame_rect.UpperLeftCorner;
-
-}
-
-void intlGUIEditBox::calculateScrollPos()
-{
- if (!m_autoscroll)
- return;
-
- // calculate horizontal scroll position
- s32 cursLine = getLineFromPos(m_cursor_pos);
- setTextRect(cursLine);
-
- // don't do horizontal scrolling when wordwrap is enabled.
- if (!m_word_wrap)
- {
- // get cursor position
- IGUISkin* skin = Environment->getSkin();
- if (!skin)
- return;
- IGUIFont* font = m_override_font ? m_override_font : skin->getFont();
- if (!font)
- return;
-
- core::stringw *txtLine = m_multiline ? &m_broken_text[cursLine] : &Text;
- s32 cPos = m_multiline ? m_cursor_pos - m_broken_text_positions[cursLine] : m_cursor_pos;
-
- s32 cStart = m_current_text_rect.UpperLeftCorner.X + m_hscroll_pos +
- font->getDimension(txtLine->subString(0, cPos).c_str()).Width;
-
- s32 cEnd = cStart + font->getDimension(L"_ ").Width;
-
- if (m_frame_rect.LowerRightCorner.X < cEnd)
- m_hscroll_pos = cEnd - m_frame_rect.LowerRightCorner.X;
- else if (m_frame_rect.UpperLeftCorner.X > cStart)
- m_hscroll_pos = cStart - m_frame_rect.UpperLeftCorner.X;
- else
- m_hscroll_pos = 0;
-
- // todo: adjust scrollbar
- }
-
- if (!m_word_wrap && !m_multiline)
- return;
-
- // vertical scroll position
- if (m_frame_rect.LowerRightCorner.Y < m_current_text_rect.LowerRightCorner.Y)
- m_vscroll_pos += m_current_text_rect.LowerRightCorner.Y - m_frame_rect.LowerRightCorner.Y; // scrolling downwards
- else if (m_frame_rect.UpperLeftCorner.Y > m_current_text_rect.UpperLeftCorner.Y)
- m_vscroll_pos += m_current_text_rect.UpperLeftCorner.Y - m_frame_rect.UpperLeftCorner.Y; // scrolling upwards
-
- // todo: adjust scrollbar
- if (m_vscrollbar)
- m_vscrollbar->setPos(m_vscroll_pos);
-}
-
-
-//! Create a vertical scrollbar
-void intlGUIEditBox::createVScrollBar()
-{
- s32 fontHeight = 1;
-
- if (m_override_font) {
- fontHeight = m_override_font->getDimension(L"").Height;
- } else {
- if (IGUISkin* skin = Environment->getSkin()) {
- if (IGUIFont* font = skin->getFont()) {
- fontHeight = font->getDimension(L"").Height;
- }
- }
- }
-
- irr::core::rect<s32> scrollbarrect = m_frame_rect;
- scrollbarrect.UpperLeftCorner.X += m_frame_rect.getWidth() - m_scrollbar_width;
- m_vscrollbar = new GUIScrollBar(Environment, getParent(), -1,
- scrollbarrect, false, true);
-
- m_vscrollbar->setVisible(false);
- m_vscrollbar->setSmallStep(3 * fontHeight);
- m_vscrollbar->setLargeStep(10 * fontHeight);
-}
-
-} // end namespace gui
-} // end namespace irr
diff --git a/src/gui/intlGUIEditBox.h b/src/gui/intlGUIEditBox.h
deleted file mode 100644
index 007fe1c93..000000000
--- a/src/gui/intlGUIEditBox.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (C) 2002-2013 Nikolaus Gebhardt
-// This file is part of the "Irrlicht Engine".
-// For conditions of distribution and use, see copyright notice in irrlicht.h
-
-#pragma once
-
-#include "IrrCompileConfig.h"
-//#ifdef _IRR_COMPILE_WITH_GUI_
-
-#include "guiEditBox.h"
-#include "irrArray.h"
-#include "IOSOperator.h"
-
-namespace irr
-{
-namespace gui
-{
- class intlGUIEditBox : public GUIEditBox
- {
- public:
-
- //! constructor
- intlGUIEditBox(const wchar_t* text, bool border, IGUIEnvironment* environment,
- IGUIElement* parent, s32 id, const core::rect<s32>& rectangle,
- bool writable = true, bool has_vscrollbar = false);
-
- //! destructor
- virtual ~intlGUIEditBox() {}
-
- //! Sets whether to draw the background
- virtual void setDrawBackground(bool draw);
-
- virtual bool isDrawBackgroundEnabled() const { return true; }
-
- //! draws the element and its children
- virtual void draw();
-
- //! Updates the absolute position, splits text if required
- virtual void updateAbsolutePosition();
-
- virtual void setCursorChar(const wchar_t cursorChar) {}
-
- virtual wchar_t getCursorChar() const { return L'|'; }
-
- virtual void setCursorBlinkTime(u32 timeMs) {}
-
- virtual u32 getCursorBlinkTime() const { return 500; }
-
- protected:
- //! Breaks the single text line.
- virtual void breakText();
- //! sets the area of the given line
- virtual void setTextRect(s32 line);
-
- //! calculates the current scroll position
- void calculateScrollPos();
-
- s32 getCursorPos(s32 x, s32 y);
-
- //! Create a vertical scrollbar
- void createVScrollBar();
- };
-
-
-} // end namespace gui
-} // end namespace irr
-
-//#endif // _IRR_COMPILE_WITH_GUI_
diff --git a/src/gui/touchscreengui.cpp b/src/gui/touchscreengui.cpp
index e1a971462..78b18c2d9 100644
--- a/src/gui/touchscreengui.cpp
+++ b/src/gui/touchscreengui.cpp
@@ -40,7 +40,7 @@ const char **button_imagenames = (const char *[]) {
"jump_btn.png",
"down.png",
"zoom.png",
- "aux_btn.png"
+ "aux1_btn.png"
};
const char **joystick_imagenames = (const char *[]) {
@@ -80,8 +80,8 @@ static irr::EKEY_CODE id2keycode(touch_gui_button_id id)
case zoom_id:
key = "zoom";
break;
- case special1_id:
- key = "special1";
+ case aux1_id:
+ key = "aux1";
break;
case fly_id:
key = "freemove";
@@ -425,7 +425,7 @@ TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver *receiver)
m_touchscreen_threshold = g_settings->getU16("touchscreen_threshold");
m_fixed_joystick = g_settings->getBool("fixed_virtual_joystick");
- m_joystick_triggers_special1 = g_settings->getBool("virtual_joystick_triggers_aux");
+ m_joystick_triggers_aux1 = g_settings->getBool("virtual_joystick_triggers_aux1");
m_screensize = m_device->getVideoDriver()->getScreenSize();
button_size = MYMIN(m_screensize.Y / 4.5f,
porting::getDisplayDensity() *
@@ -521,9 +521,9 @@ void TouchScreenGUI::init(ISimpleTextureSource *tsrc)
m_screensize.Y - (3 * button_size)),
L"z", false);
- // init special1/aux button
- if (!m_joystick_triggers_special1)
- initButton(special1_id,
+ // init aux1 button
+ if (!m_joystick_triggers_aux1)
+ initButton(aux1_id,
rect<s32>(m_screensize.X - (1.25 * button_size),
m_screensize.Y - (2.5 * button_size),
m_screensize.X - (0.25 * button_size),
@@ -923,7 +923,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
}
if (distance > button_size) {
- m_joystick_status[j_special1] = true;
+ m_joystick_status[j_aux1] = true;
// move joystick "button"
s32 ndx = button_size * dx / distance - button_size / 2.0f;
s32 ndy = button_size * dy / distance - button_size / 2.0f;
@@ -1039,7 +1039,7 @@ bool TouchScreenGUI::doubleTapDetection()
void TouchScreenGUI::applyJoystickStatus()
{
for (unsigned int i = 0; i < 5; i++) {
- if (i == 4 && !m_joystick_triggers_special1)
+ if (i == 4 && !m_joystick_triggers_aux1)
continue;
SEvent translated{};
diff --git a/src/gui/touchscreengui.h b/src/gui/touchscreengui.h
index 0349624fa..ad5abae87 100644
--- a/src/gui/touchscreengui.h
+++ b/src/gui/touchscreengui.h
@@ -39,7 +39,7 @@ typedef enum
jump_id = 0,
crunch_id,
zoom_id,
- special1_id,
+ aux1_id,
after_last_element_id,
settings_starter_id,
rare_controls_starter_id,
@@ -69,7 +69,7 @@ typedef enum
j_backward,
j_left,
j_right,
- j_special1
+ j_aux1
} touch_gui_joystick_move_id;
typedef enum
@@ -217,7 +217,7 @@ private:
// forward, backward, left, right
touch_gui_button_id m_joystick_names[5] = {
- forward_id, backward_id, left_id, right_id, special1_id};
+ forward_id, backward_id, left_id, right_id, aux1_id};
bool m_joystick_status[5] = {false, false, false, false, false};
/*
@@ -237,7 +237,7 @@ private:
int m_joystick_id = -1;
bool m_joystick_has_really_moved = false;
bool m_fixed_joystick = false;
- bool m_joystick_triggers_special1 = false;
+ bool m_joystick_triggers_aux1 = false;
button_info *m_joystick_btn_off = nullptr;
button_info *m_joystick_btn_bg = nullptr;
button_info *m_joystick_btn_center = nullptr;
diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp
index 635bd2e4b..1e81c1dbc 100644
--- a/src/inventorymanager.cpp
+++ b/src/inventorymanager.cpp
@@ -301,6 +301,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
if (!list_to->getItem(dest_i).empty()) {
to_i = dest_i;
apply(mgr, player, gamedef);
+ assert(move_count <= count);
count -= move_count;
}
}
@@ -339,7 +340,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
*/
ItemStack src_item = list_from->getItem(from_i);
- if (count > 0)
+ if (count > 0 && count < src_item.count)
src_item.count = count;
if (src_item.empty())
return;
@@ -352,10 +353,12 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
bool allow_swap = !list_to->itemFits(to_i, src_item, &restitem)
&& restitem.count == src_item.count
&& !caused_by_move_somewhere;
+ move_count = src_item.count - restitem.count;
// Shift-click: Cannot fill this stack, proceed with next slot
- if (caused_by_move_somewhere && restitem.count == src_item.count)
+ if (caused_by_move_somewhere && move_count == 0) {
return;
+ }
if (allow_swap) {
// Swap will affect the entire stack if it can performed.
@@ -384,9 +387,16 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
src_can_take_count = dst_can_put_count = 0;
} else {
// Take from one inventory, put into another
+ int src_item_count = src_item.count;
+ if (caused_by_move_somewhere)
+ // When moving somewhere: temporarily use the actual movable stack
+ // size to ensure correct callback execution.
+ src_item.count = move_count;
dst_can_put_count = allowPut(src_item, player);
src_can_take_count = allowTake(src_item, player);
-
+ if (caused_by_move_somewhere)
+ // Reset source item count
+ src_item.count = src_item_count;
bool swap_expected = allow_swap;
allow_swap = allow_swap
&& (src_can_take_count == -1 || src_can_take_count >= src_item.count)
@@ -416,12 +426,17 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
count = src_can_take_count;
if (dst_can_put_count != -1 && count > dst_can_put_count)
count = dst_can_put_count;
+
/* Limit according to source item count */
if (count > list_from->getItem(from_i).count)
count = list_from->getItem(from_i).count;
/* If no items will be moved, don't go further */
if (count == 0) {
+ if (caused_by_move_somewhere)
+ // Set move count to zero, as no items have been moved
+ move_count = 0;
+
// Undo client prediction. See 'clientApply'
if (from_inv.type == InventoryLocation::PLAYER)
list_from->setModified();
@@ -438,6 +453,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
<<" list=\""<<to_list<<"\""
<<" i="<<to_i
<<std::endl;
+
return;
}
@@ -455,6 +471,8 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
bool did_swap = false;
move_count = list_from->moveItem(from_i,
list_to, to_i, count, allow_swap, &did_swap);
+ if (caused_by_move_somewhere)
+ count = old_count;
assert(allow_swap == did_swap);
// If source is infinite, reset it's stack
@@ -503,8 +521,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
<< std::endl;
// If we are inside the move somewhere loop, we don't need to report
- // anything if nothing happened (perhaps we don't need to report
- // anything for caused_by_move_somewhere == true, but this way its safer)
+ // anything if nothing happened
if (caused_by_move_somewhere && move_count == 0)
return;
@@ -558,7 +575,15 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
}
mgr->setInventoryModified(from_inv);
} else {
+ int src_item_count = src_item.count;
+ if (caused_by_move_somewhere)
+ // When moving somewhere: temporarily use the actual movable stack
+ // size to ensure correct callback execution.
+ src_item.count = move_count;
onPutAndOnTake(src_item, player);
+ if (caused_by_move_somewhere)
+ // Reset source item count
+ src_item.count = src_item_count;
if (did_swap) {
// Item is now placed in source list
src_item = list_from->getItem(from_i);
diff --git a/src/irrlicht_changes/CGUITTFont.cpp b/src/irrlicht_changes/CGUITTFont.cpp
index bd4e700de..960b2320a 100644
--- a/src/irrlicht_changes/CGUITTFont.cpp
+++ b/src/irrlicht_changes/CGUITTFont.cpp
@@ -103,7 +103,7 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide
// Load the monochrome data in.
const u32 image_pitch = image->getPitch() / sizeof(u16);
- u16* image_data = (u16*)image->lock();
+ u16* image_data = (u16*)image->getData();
u8* glyph_data = bits.buffer;
for (s32 y = 0; y < (s32)bits.rows; ++y)
@@ -119,7 +119,6 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide
}
image_data += image_pitch;
}
- image->unlock();
break;
}
@@ -133,7 +132,7 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide
// Load the grayscale data in.
const float gray_count = static_cast<float>(bits.num_grays);
const u32 image_pitch = image->getPitch() / sizeof(u32);
- u32* image_data = (u32*)image->lock();
+ u32* image_data = (u32*)image->getData();
u8* glyph_data = bits.buffer;
for (s32 y = 0; y < (s32)bits.rows; ++y)
{
@@ -145,7 +144,6 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide
}
glyph_data += bits.pitch;
}
- image->unlock();
break;
}
default:
diff --git a/src/irrlicht_changes/static_text.cpp b/src/irrlicht_changes/static_text.cpp
index bf61cd64e..a8cc33352 100644
--- a/src/irrlicht_changes/static_text.cpp
+++ b/src/irrlicht_changes/static_text.cpp
@@ -255,6 +255,12 @@ video::SColor StaticText::getOverrideColor() const
return ColoredText.getDefaultColor();
}
+#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
+video::SColor StaticText::getActiveColor() const
+{
+ return getOverrideColor();
+}
+#endif
//! Sets if the static text should use the overide color or the
//! color in the gui skin.
diff --git a/src/irrlicht_changes/static_text.h b/src/irrlicht_changes/static_text.h
index 1f111ea56..786129d57 100644
--- a/src/irrlicht_changes/static_text.h
+++ b/src/irrlicht_changes/static_text.h
@@ -140,6 +140,11 @@ namespace gui
virtual video::SColor getOverrideColor() const;
#endif
+ #if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
+ //! Gets the currently used text color
+ virtual video::SColor getActiveColor() const;
+ #endif
+
//! Sets if the static text should use the overide color or the
//! color in the gui skin.
virtual void enableOverrideColor(bool enable);
diff --git a/src/itemdef.cpp b/src/itemdef.cpp
index 5fb1e4c47..d79d6b263 100644
--- a/src/itemdef.cpp
+++ b/src/itemdef.cpp
@@ -71,13 +71,11 @@ ItemDefinition& ItemDefinition::operator=(const ItemDefinition &def)
stack_max = def.stack_max;
usable = def.usable;
liquids_pointable = def.liquids_pointable;
- if(def.tool_capabilities)
- {
- tool_capabilities = new ToolCapabilities(
- *def.tool_capabilities);
- }
+ if (def.tool_capabilities)
+ tool_capabilities = new ToolCapabilities(*def.tool_capabilities);
groups = def.groups;
node_placement_prediction = def.node_placement_prediction;
+ place_param2 = def.place_param2;
sound_place = def.sound_place;
sound_place_failed = def.sound_place_failed;
range = def.range;
@@ -120,8 +118,8 @@ void ItemDefinition::reset()
sound_place = SimpleSoundSpec();
sound_place_failed = SimpleSoundSpec();
range = -1;
-
node_placement_prediction = "";
+ place_param2 = 0;
}
void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const
@@ -166,6 +164,8 @@ void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const
os << serializeString16(wield_overlay);
os << serializeString16(short_description);
+
+ os << place_param2;
}
void ItemDefinition::deSerialize(std::istream &is)
@@ -219,6 +219,8 @@ void ItemDefinition::deSerialize(std::istream &is)
// block to not need to increase the version.
try {
short_description = deSerializeString16(is);
+
+ place_param2 = readU8(is); // 0 if missing
} catch(SerializationError &e) {};
}
diff --git a/src/itemdef.h b/src/itemdef.h
index ebf0d3527..3e302840f 100644
--- a/src/itemdef.h
+++ b/src/itemdef.h
@@ -86,6 +86,7 @@ struct ItemDefinition
// Server will update the precise end result a moment later.
// "" = no prediction
std::string node_placement_prediction;
+ u8 place_param2;
/*
Some helpful methods
diff --git a/src/mapgen/mapgen.cpp b/src/mapgen/mapgen.cpp
index e0dfd2d71..7984ff609 100644
--- a/src/mapgen/mapgen.cpp
+++ b/src/mapgen/mapgen.cpp
@@ -595,7 +595,8 @@ MapgenBasic::MapgenBasic(int mapgenid, MapgenParams *params, EmergeParams *emerg
this->heightmap = new s16[csize.X * csize.Z];
//// Initialize biome generator
- biomegen = m_bmgr->createBiomeGen(BIOMEGEN_ORIGINAL, params->bparams, csize);
+ biomegen = emerge->biomegen;
+ biomegen->assertChunkSize(csize);
biomemap = biomegen->biomemap;
//// Look up some commonly used content
@@ -621,7 +622,6 @@ MapgenBasic::MapgenBasic(int mapgenid, MapgenParams *params, EmergeParams *emerg
MapgenBasic::~MapgenBasic()
{
- delete biomegen;
delete []heightmap;
delete m_emerge; // destroying EmergeParams is our responsibility
diff --git a/src/mapgen/mapgen_valleys.cpp b/src/mapgen/mapgen_valleys.cpp
index c4234857e..80a99b1f0 100644
--- a/src/mapgen/mapgen_valleys.cpp
+++ b/src/mapgen/mapgen_valleys.cpp
@@ -57,7 +57,8 @@ FlagDesc flagdesc_mapgen_valleys[] = {
MapgenValleys::MapgenValleys(MapgenValleysParams *params, EmergeParams *emerge)
: MapgenBasic(MAPGEN_VALLEYS, params, emerge)
{
- // NOTE: MapgenValleys has a hard dependency on BiomeGenOriginal
+ FATAL_ERROR_IF(biomegen->getType() != BIOMEGEN_ORIGINAL,
+ "MapgenValleys has a hard dependency on BiomeGenOriginal");
m_bgen = (BiomeGenOriginal *)biomegen;
spflags = params->spflags;
diff --git a/src/mapgen/mg_biome.cpp b/src/mapgen/mg_biome.cpp
index 610c38594..f08cc190f 100644
--- a/src/mapgen/mg_biome.cpp
+++ b/src/mapgen/mg_biome.cpp
@@ -101,71 +101,6 @@ BiomeManager *BiomeManager::clone() const
return mgr;
}
-
-// For BiomeGen type 'BiomeGenOriginal'
-float BiomeManager::getHeatAtPosOriginal(v3s16 pos, NoiseParams &np_heat,
- NoiseParams &np_heat_blend, u64 seed) const
-{
- return
- NoisePerlin2D(&np_heat, pos.X, pos.Z, seed) +
- NoisePerlin2D(&np_heat_blend, pos.X, pos.Z, seed);
-}
-
-
-// For BiomeGen type 'BiomeGenOriginal'
-float BiomeManager::getHumidityAtPosOriginal(v3s16 pos, NoiseParams &np_humidity,
- NoiseParams &np_humidity_blend, u64 seed) const
-{
- return
- NoisePerlin2D(&np_humidity, pos.X, pos.Z, seed) +
- NoisePerlin2D(&np_humidity_blend, pos.X, pos.Z, seed);
-}
-
-
-// For BiomeGen type 'BiomeGenOriginal'
-const Biome *BiomeManager::getBiomeFromNoiseOriginal(float heat,
- float humidity, v3s16 pos) const
-{
- Biome *biome_closest = nullptr;
- Biome *biome_closest_blend = nullptr;
- float dist_min = FLT_MAX;
- float dist_min_blend = FLT_MAX;
-
- for (size_t i = 1; i < getNumObjects(); i++) {
- Biome *b = (Biome *)getRaw(i);
- if (!b ||
- pos.Y < b->min_pos.Y || pos.Y > b->max_pos.Y + b->vertical_blend ||
- pos.X < b->min_pos.X || pos.X > b->max_pos.X ||
- pos.Z < b->min_pos.Z || pos.Z > b->max_pos.Z)
- continue;
-
- float d_heat = heat - b->heat_point;
- float d_humidity = humidity - b->humidity_point;
- float dist = (d_heat * d_heat) + (d_humidity * d_humidity);
-
- if (pos.Y <= b->max_pos.Y) { // Within y limits of biome b
- if (dist < dist_min) {
- dist_min = dist;
- biome_closest = b;
- }
- } else if (dist < dist_min_blend) { // Blend area above biome b
- dist_min_blend = dist;
- biome_closest_blend = b;
- }
- }
-
- const u64 seed = pos.Y + (heat + humidity) * 0.9f;
- PcgRandom rng(seed);
-
- if (biome_closest_blend && dist_min_blend <= dist_min &&
- rng.range(0, biome_closest_blend->vertical_blend) >=
- pos.Y - biome_closest_blend->max_pos.Y)
- return biome_closest_blend;
-
- return (biome_closest) ? biome_closest : (Biome *)getRaw(BIOME_NONE);
-}
-
-
////////////////////////////////////////////////////////////////////////////////
void BiomeParamsOriginal::readParams(const Settings *settings)
@@ -189,7 +124,7 @@ void BiomeParamsOriginal::writeParams(Settings *settings) const
////////////////////////////////////////////////////////////////////////////////
BiomeGenOriginal::BiomeGenOriginal(BiomeManager *biomemgr,
- BiomeParamsOriginal *params, v3s16 chunksize)
+ const BiomeParamsOriginal *params, v3s16 chunksize)
{
m_bmgr = biomemgr;
m_params = params;
@@ -224,17 +159,26 @@ BiomeGenOriginal::~BiomeGenOriginal()
delete noise_humidity_blend;
}
-// Only usable in a mapgen thread
-Biome *BiomeGenOriginal::calcBiomeAtPoint(v3s16 pos) const
+BiomeGen *BiomeGenOriginal::clone(BiomeManager *biomemgr) const
+{
+ return new BiomeGenOriginal(biomemgr, m_params, m_csize);
+}
+
+float BiomeGenOriginal::calcHeatAtPoint(v3s16 pos) const
{
- float heat =
- NoisePerlin2D(&m_params->np_heat, pos.X, pos.Z, m_params->seed) +
+ return NoisePerlin2D(&m_params->np_heat, pos.X, pos.Z, m_params->seed) +
NoisePerlin2D(&m_params->np_heat_blend, pos.X, pos.Z, m_params->seed);
- float humidity =
- NoisePerlin2D(&m_params->np_humidity, pos.X, pos.Z, m_params->seed) +
+}
+
+float BiomeGenOriginal::calcHumidityAtPoint(v3s16 pos) const
+{
+ return NoisePerlin2D(&m_params->np_humidity, pos.X, pos.Z, m_params->seed) +
NoisePerlin2D(&m_params->np_humidity_blend, pos.X, pos.Z, m_params->seed);
+}
- return calcBiomeFromNoise(heat, humidity, pos);
+Biome *BiomeGenOriginal::calcBiomeAtPoint(v3s16 pos) const
+{
+ return calcBiomeFromNoise(calcHeatAtPoint(pos), calcHumidityAtPoint(pos), pos);
}
diff --git a/src/mapgen/mg_biome.h b/src/mapgen/mg_biome.h
index be4cfea4d..c85afc3a0 100644
--- a/src/mapgen/mg_biome.h
+++ b/src/mapgen/mg_biome.h
@@ -97,6 +97,15 @@ public:
virtual BiomeGenType getType() const = 0;
+ // Clone this BiomeGen and set a the new BiomeManager to be used by the copy
+ virtual BiomeGen *clone(BiomeManager *biomemgr) const = 0;
+
+ // Check that the internal chunk size is what the mapgen expects, just to be sure.
+ inline void assertChunkSize(v3s16 expect) const
+ {
+ FATAL_ERROR_IF(m_csize != expect, "Chunk size mismatches");
+ }
+
// Calculates the biome at the exact position provided. This function can
// be called at any time, but may be less efficient than the latter methods,
// depending on implementation.
@@ -158,12 +167,18 @@ struct BiomeParamsOriginal : public BiomeParams {
class BiomeGenOriginal : public BiomeGen {
public:
BiomeGenOriginal(BiomeManager *biomemgr,
- BiomeParamsOriginal *params, v3s16 chunksize);
+ const BiomeParamsOriginal *params, v3s16 chunksize);
virtual ~BiomeGenOriginal();
BiomeGenType getType() const { return BIOMEGEN_ORIGINAL; }
+ BiomeGen *clone(BiomeManager *biomemgr) const;
+
+ // Slower, meant for Script API use
+ float calcHeatAtPoint(v3s16 pos) const;
+ float calcHumidityAtPoint(v3s16 pos) const;
Biome *calcBiomeAtPoint(v3s16 pos) const;
+
void calcBiomeNoise(v3s16 pmin);
biome_t *getBiomes(s16 *heightmap, v3s16 pmin);
@@ -176,7 +191,7 @@ public:
float *humidmap;
private:
- BiomeParamsOriginal *m_params;
+ const BiomeParamsOriginal *m_params;
Noise *noise_heat;
Noise *noise_humidity;
@@ -229,14 +244,6 @@ public:
virtual void clear();
- // For BiomeGen type 'BiomeGenOriginal'
- float getHeatAtPosOriginal(v3s16 pos, NoiseParams &np_heat,
- NoiseParams &np_heat_blend, u64 seed) const;
- float getHumidityAtPosOriginal(v3s16 pos, NoiseParams &np_humidity,
- NoiseParams &np_humidity_blend, u64 seed) const;
- const Biome *getBiomeFromNoiseOriginal(float heat, float humidity,
- v3s16 pos) const;
-
private:
BiomeManager() {};
diff --git a/src/mapgen/mg_ore.h b/src/mapgen/mg_ore.h
index a58fa9bfe..a757fa6d0 100644
--- a/src/mapgen/mg_ore.h
+++ b/src/mapgen/mg_ore.h
@@ -85,7 +85,7 @@ class OreScatter : public Ore {
public:
OreScatter() : Ore(false) {}
- ObjDef *clone() const;
+ ObjDef *clone() const override;
void generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
@@ -95,7 +95,7 @@ class OreSheet : public Ore {
public:
OreSheet() : Ore(true) {}
- ObjDef *clone() const;
+ ObjDef *clone() const override;
u16 column_height_min;
u16 column_height_max;
@@ -107,7 +107,7 @@ public:
class OrePuff : public Ore {
public:
- ObjDef *clone() const;
+ ObjDef *clone() const override;
NoiseParams np_puff_top;
NoiseParams np_puff_bottom;
@@ -123,7 +123,7 @@ public:
class OreBlob : public Ore {
public:
- ObjDef *clone() const;
+ ObjDef *clone() const override;
OreBlob() : Ore(true) {}
void generate(MMVManip *vm, int mapseed, u32 blockseed,
@@ -132,7 +132,7 @@ public:
class OreVein : public Ore {
public:
- ObjDef *clone() const;
+ ObjDef *clone() const override;
float random_factor;
Noise *noise2 = nullptr;
@@ -147,7 +147,7 @@ public:
class OreStratum : public Ore {
public:
- ObjDef *clone() const;
+ ObjDef *clone() const override;
NoiseParams np_stratum_thickness;
Noise *noise_stratum_thickness = nullptr;
diff --git a/src/mapgen/mg_schematic.cpp b/src/mapgen/mg_schematic.cpp
index e70e97e48..653bad4fe 100644
--- a/src/mapgen/mg_schematic.cpp
+++ b/src/mapgen/mg_schematic.cpp
@@ -76,10 +76,6 @@ void SchematicManager::clear()
///////////////////////////////////////////////////////////////////////////////
-Schematic::Schematic()
-= default;
-
-
Schematic::~Schematic()
{
delete []schemdata;
@@ -108,13 +104,19 @@ ObjDef *Schematic::clone() const
void Schematic::resolveNodeNames()
{
+ c_nodes.clear();
getIdsFromNrBacklog(&c_nodes, true, CONTENT_AIR);
size_t bufsize = size.X * size.Y * size.Z;
for (size_t i = 0; i != bufsize; i++) {
content_t c_original = schemdata[i].getContent();
- content_t c_new = c_nodes[c_original];
- schemdata[i].setContent(c_new);
+ if (c_original >= c_nodes.size()) {
+ errorstream << "Corrupt schematic. name=\"" << name
+ << "\" at index " << i << std::endl;
+ c_original = 0;
+ }
+ // Unfold condensed ID layout to content_t
+ schemdata[i].setContent(c_nodes[c_original]);
}
}
@@ -279,8 +281,7 @@ void Schematic::placeOnMap(ServerMap *map, v3s16 p, u32 flags,
}
-bool Schematic::deserializeFromMts(std::istream *is,
- std::vector<std::string> *names)
+bool Schematic::deserializeFromMts(std::istream *is)
{
std::istream &ss = *is;
content_t cignore = CONTENT_IGNORE;
@@ -312,6 +313,8 @@ bool Schematic::deserializeFromMts(std::istream *is,
slice_probs[y] = (version >= 3) ? readU8(ss) : MTSCHEM_PROB_ALWAYS_OLD;
//// Read node names
+ NodeResolver::reset();
+
u16 nidmapcount = readU16(ss);
for (int i = 0; i != nidmapcount; i++) {
std::string name = deSerializeString16(ss);
@@ -324,9 +327,12 @@ bool Schematic::deserializeFromMts(std::istream *is,
have_cignore = true;
}
- names->push_back(name);
+ m_nodenames.push_back(name);
}
+ // Prepare for node resolver
+ m_nnlistsizes.push_back(m_nodenames.size());
+
//// Read node data
size_t nodecount = size.X * size.Y * size.Z;
@@ -358,9 +364,11 @@ bool Schematic::deserializeFromMts(std::istream *is,
}
-bool Schematic::serializeToMts(std::ostream *os,
- const std::vector<std::string> &names) const
+bool Schematic::serializeToMts(std::ostream *os) const
{
+ // Nodes must not be resolved (-> condensed)
+ // checking here is not possible because "schemdata" might be temporary.
+
std::ostream &ss = *os;
writeU32(ss, MTSCHEM_FILE_SIGNATURE); // signature
@@ -370,9 +378,10 @@ bool Schematic::serializeToMts(std::ostream *os,
for (int y = 0; y != size.Y; y++) // Y slice probabilities
writeU8(ss, slice_probs[y]);
- writeU16(ss, names.size()); // name count
- for (size_t i = 0; i != names.size(); i++)
- ss << serializeString16(names[i]); // node names
+ writeU16(ss, m_nodenames.size()); // name count
+ for (size_t i = 0; i != m_nodenames.size(); i++) {
+ ss << serializeString16(m_nodenames[i]); // node names
+ }
// compressed bulk node data
MapNode::serializeBulk(ss, SER_FMT_VER_HIGHEST_WRITE,
@@ -382,8 +391,7 @@ bool Schematic::serializeToMts(std::ostream *os,
}
-bool Schematic::serializeToLua(std::ostream *os,
- const std::vector<std::string> &names, bool use_comments,
+bool Schematic::serializeToLua(std::ostream *os, bool use_comments,
u32 indent_spaces) const
{
std::ostream &ss = *os;
@@ -392,6 +400,9 @@ bool Schematic::serializeToLua(std::ostream *os,
if (indent_spaces > 0)
indent.assign(indent_spaces, ' ');
+ bool resolve_done = isResolveDone();
+ FATAL_ERROR_IF(resolve_done && !m_ndef, "serializeToLua: NodeDefManager is required");
+
//// Write header
{
ss << "schematic = {" << std::endl;
@@ -436,9 +447,22 @@ bool Schematic::serializeToLua(std::ostream *os,
u8 probability = schemdata[i].param1 & MTSCHEM_PROB_MASK;
bool force_place = schemdata[i].param1 & MTSCHEM_FORCE_PLACE;
- ss << indent << indent << "{"
- << "name=\"" << names[schemdata[i].getContent()]
- << "\", prob=" << (u16)probability * 2
+ // After node resolving: real content_t, lookup using NodeDefManager
+ // Prior node resolving: condensed ID, lookup using m_nodenames
+ content_t c = schemdata[i].getContent();
+
+ ss << indent << indent << "{" << "name=\"";
+
+ if (!resolve_done) {
+ // Prior node resolving (eg. direct schematic load)
+ FATAL_ERROR_IF(c >= m_nodenames.size(), "Invalid node list");
+ ss << m_nodenames[c];
+ } else {
+ // After node resolving (eg. biome decoration)
+ ss << m_ndef->get(c).name;
+ }
+
+ ss << "\", prob=" << (u16)probability * 2
<< ", param2=" << (u16)schemdata[i].param2;
if (force_place)
@@ -467,25 +491,24 @@ bool Schematic::loadSchematicFromFile(const std::string &filename,
return false;
}
- size_t origsize = m_nodenames.size();
- if (!deserializeFromMts(&is, &m_nodenames))
- return false;
+ if (!m_ndef)
+ m_ndef = ndef;
- m_nnlistsizes.push_back(m_nodenames.size() - origsize);
+ if (!deserializeFromMts(&is))
+ return false;
name = filename;
if (replace_names) {
- for (size_t i = origsize; i < m_nodenames.size(); i++) {
- std::string &node_name = m_nodenames[i];
+ for (std::string &node_name : m_nodenames) {
StringMap::iterator it = replace_names->find(node_name);
if (it != replace_names->end())
node_name = it->second;
}
}
- if (ndef)
- ndef->pendNodeResolve(this);
+ if (m_ndef)
+ m_ndef->pendNodeResolve(this);
return true;
}
@@ -494,33 +517,26 @@ bool Schematic::loadSchematicFromFile(const std::string &filename,
bool Schematic::saveSchematicToFile(const std::string &filename,
const NodeDefManager *ndef)
{
- MapNode *orig_schemdata = schemdata;
- std::vector<std::string> ndef_nodenames;
- std::vector<std::string> *names;
+ Schematic *schem = this;
- if (m_resolve_done && ndef == NULL)
- ndef = m_ndef;
+ bool needs_condense = isResolveDone();
- if (ndef) {
- names = &ndef_nodenames;
+ if (!m_ndef)
+ m_ndef = ndef;
- u32 volume = size.X * size.Y * size.Z;
- schemdata = new MapNode[volume];
- for (u32 i = 0; i != volume; i++)
- schemdata[i] = orig_schemdata[i];
+ if (needs_condense) {
+ if (!m_ndef)
+ return false;
- generate_nodelist_and_update_ids(schemdata, volume, names, ndef);
- } else { // otherwise, use the names we have on hand in the list
- names = &m_nodenames;
+ schem = (Schematic *)this->clone();
+ schem->condenseContentIds();
}
std::ostringstream os(std::ios_base::binary);
- bool status = serializeToMts(&os, *names);
+ bool status = schem->serializeToMts(&os);
- if (ndef) {
- delete []schemdata;
- schemdata = orig_schemdata;
- }
+ if (needs_condense)
+ delete schem;
if (!status)
return false;
@@ -556,6 +572,10 @@ bool Schematic::getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2)
}
delete vm;
+
+ // Reset and mark as complete
+ NodeResolver::reset(true);
+
return true;
}
@@ -584,26 +604,29 @@ void Schematic::applyProbabilities(v3s16 p0,
}
-void generate_nodelist_and_update_ids(MapNode *nodes, size_t nodecount,
- std::vector<std::string> *usednodes, const NodeDefManager *ndef)
+void Schematic::condenseContentIds()
{
std::unordered_map<content_t, content_t> nodeidmap;
content_t numids = 0;
+ // Reset node resolve fields
+ NodeResolver::reset();
+
+ size_t nodecount = size.X * size.Y * size.Z;
for (size_t i = 0; i != nodecount; i++) {
content_t id;
- content_t c = nodes[i].getContent();
+ content_t c = schemdata[i].getContent();
- std::unordered_map<content_t, content_t>::const_iterator it = nodeidmap.find(c);
+ auto it = nodeidmap.find(c);
if (it == nodeidmap.end()) {
id = numids;
numids++;
- usednodes->push_back(ndef->get(c).name);
- nodeidmap.insert(std::make_pair(c, id));
+ m_nodenames.push_back(m_ndef->get(c).name);
+ nodeidmap.emplace(std::make_pair(c, id));
} else {
id = it->second;
}
- nodes[i].setContent(id);
+ schemdata[i].setContent(id);
}
}
diff --git a/src/mapgen/mg_schematic.h b/src/mapgen/mg_schematic.h
index 6b31251b6..5f64ea280 100644
--- a/src/mapgen/mg_schematic.h
+++ b/src/mapgen/mg_schematic.h
@@ -92,7 +92,7 @@ enum SchematicFormatType {
class Schematic : public ObjDef, public NodeResolver {
public:
- Schematic();
+ Schematic() = default;
virtual ~Schematic();
ObjDef *clone() const;
@@ -105,11 +105,9 @@ public:
const NodeDefManager *ndef);
bool getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2);
- bool deserializeFromMts(std::istream *is, std::vector<std::string> *names);
- bool serializeToMts(std::ostream *os,
- const std::vector<std::string> &names) const;
- bool serializeToLua(std::ostream *os, const std::vector<std::string> &names,
- bool use_comments, u32 indent_spaces) const;
+ bool deserializeFromMts(std::istream *is);
+ bool serializeToMts(std::ostream *os) const;
+ bool serializeToLua(std::ostream *os, bool use_comments, u32 indent_spaces) const;
void blitToVManip(MMVManip *vm, v3s16 p, Rotation rot, bool force_place);
bool placeOnVManip(MMVManip *vm, v3s16 p, u32 flags, Rotation rot, bool force_place);
@@ -124,6 +122,10 @@ public:
v3s16 size;
MapNode *schemdata = nullptr;
u8 *slice_probs = nullptr;
+
+private:
+ // Counterpart to the node resolver: Condense content_t to a sequential "m_nodenames" list
+ void condenseContentIds();
};
class SchematicManager : public ObjDefManager {
@@ -151,5 +153,3 @@ private:
Server *m_server;
};
-void generate_nodelist_and_update_ids(MapNode *nodes, size_t nodecount,
- std::vector<std::string> *usednodes, const NodeDefManager *ndef);
diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp
index 65db02300..c8a160732 100644
--- a/src/network/clientpackethandler.cpp
+++ b/src/network/clientpackethandler.cpp
@@ -1041,9 +1041,6 @@ void Client::handleCommand_DeleteParticleSpawner(NetworkPacket* pkt)
void Client::handleCommand_HudAdd(NetworkPacket* pkt)
{
- std::string datastring(pkt->getString(0), pkt->getSize());
- std::istringstream is(datastring, std::ios_base::binary);
-
u32 server_id;
u8 type;
v2f pos;
@@ -1070,22 +1067,23 @@ void Client::handleCommand_HudAdd(NetworkPacket* pkt)
} catch(PacketError &e) {};
ClientEvent *event = new ClientEvent();
- event->type = CE_HUDADD;
- event->hudadd.server_id = server_id;
- event->hudadd.type = type;
- event->hudadd.pos = new v2f(pos);
- event->hudadd.name = new std::string(name);
- event->hudadd.scale = new v2f(scale);
- event->hudadd.text = new std::string(text);
- event->hudadd.number = number;
- event->hudadd.item = item;
- event->hudadd.dir = dir;
- event->hudadd.align = new v2f(align);
- event->hudadd.offset = new v2f(offset);
- event->hudadd.world_pos = new v3f(world_pos);
- event->hudadd.size = new v2s32(size);
- event->hudadd.z_index = z_index;
- event->hudadd.text2 = new std::string(text2);
+ event->type = CE_HUDADD;
+ event->hudadd = new ClientEventHudAdd();
+ event->hudadd->server_id = server_id;
+ event->hudadd->type = type;
+ event->hudadd->pos = pos;
+ event->hudadd->name = name;
+ event->hudadd->scale = scale;
+ event->hudadd->text = text;
+ event->hudadd->number = number;
+ event->hudadd->item = item;
+ event->hudadd->dir = dir;
+ event->hudadd->align = align;
+ event->hudadd->offset = offset;
+ event->hudadd->world_pos = world_pos;
+ event->hudadd->size = size;
+ event->hudadd->z_index = z_index;
+ event->hudadd->text2 = text2;
m_client_event_queue.push(event);
}
@@ -1095,16 +1093,10 @@ void Client::handleCommand_HudRemove(NetworkPacket* pkt)
*pkt >> server_id;
- auto i = m_hud_server_to_client.find(server_id);
- if (i != m_hud_server_to_client.end()) {
- int client_id = i->second;
- m_hud_server_to_client.erase(i);
-
- ClientEvent *event = new ClientEvent();
- event->type = CE_HUDRM;
- event->hudrm.id = client_id;
- m_client_event_queue.push(event);
- }
+ ClientEvent *event = new ClientEvent();
+ event->type = CE_HUDRM;
+ event->hudrm.id = server_id;
+ m_client_event_queue.push(event);
}
void Client::handleCommand_HudChange(NetworkPacket* pkt)
@@ -1131,19 +1123,17 @@ void Client::handleCommand_HudChange(NetworkPacket* pkt)
else
*pkt >> intdata;
- std::unordered_map<u32, u32>::const_iterator i = m_hud_server_to_client.find(server_id);
- if (i != m_hud_server_to_client.end()) {
- ClientEvent *event = new ClientEvent();
- event->type = CE_HUDCHANGE;
- event->hudchange.id = i->second;
- event->hudchange.stat = (HudElementStat)stat;
- event->hudchange.v2fdata = new v2f(v2fdata);
- event->hudchange.v3fdata = new v3f(v3fdata);
- event->hudchange.sdata = new std::string(sdata);
- event->hudchange.data = intdata;
- event->hudchange.v2s32data = new v2s32(v2s32data);
- m_client_event_queue.push(event);
- }
+ ClientEvent *event = new ClientEvent();
+ event->type = CE_HUDCHANGE;
+ event->hudchange = new ClientEventHudChange();
+ event->hudchange->id = server_id;
+ event->hudchange->stat = static_cast<HudElementStat>(stat);
+ event->hudchange->v2fdata = v2fdata;
+ event->hudchange->v3fdata = v3fdata;
+ event->hudchange->sdata = sdata;
+ event->hudchange->data = intdata;
+ event->hudchange->v2s32data = v2s32data;
+ m_client_event_queue.push(event);
}
void Client::handleCommand_HudSetFlags(NetworkPacket* pkt)
diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp
index 270b8e01f..5b378a083 100644
--- a/src/network/serverpackethandler.cpp
+++ b/src/network/serverpackethandler.cpp
@@ -174,6 +174,16 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
return;
}
+ RemotePlayer *player = m_env->getPlayer(playername);
+
+ // If player is already connected, cancel
+ if (player && player->getPeerId() != PEER_ID_INEXISTENT) {
+ actionstream << "Server: Player with name \"" << playername <<
+ "\" tried to connect, but player with same name is already connected" << std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_ALREADY_CONNECTED);
+ return;
+ }
+
m_clients.setPlayerName(peer_id, playername);
//TODO (later) case insensitivity
@@ -488,8 +498,12 @@ void Server::process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao,
pitch = modulo360f(pitch);
yaw = wrapDegrees_0_360(yaw);
- playersao->setBasePosition(position);
- player->setSpeed(speed);
+ if (!playersao->isAttached()) {
+ // Only update player positions when moving freely
+ // to not interfere with attachment handling
+ playersao->setBasePosition(position);
+ player->setSpeed(speed);
+ }
playersao->setLookPitch(pitch);
playersao->setPlayerYaw(yaw);
playersao->setFov(fov);
@@ -622,21 +636,36 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
const bool player_has_interact = checkPriv(player->getName(), "interact");
- auto check_inv_access = [player, player_has_interact] (
+ auto check_inv_access = [player, player_has_interact, this] (
const InventoryLocation &loc) -> bool {
- if (loc.type == InventoryLocation::CURRENT_PLAYER)
- return false; // Only used internally on the client, never sent
- if (loc.type == InventoryLocation::PLAYER) {
- // Allow access to own inventory in all cases
- return loc.name == player->getName();
- }
- if (!player_has_interact) {
+ // Players without interact may modify their own inventory
+ if (!player_has_interact && loc.type != InventoryLocation::PLAYER) {
infostream << "Cannot modify foreign inventory: "
<< "No interact privilege" << std::endl;
return false;
}
- return true;
+
+ switch (loc.type) {
+ case InventoryLocation::CURRENT_PLAYER:
+ // Only used internally on the client, never sent
+ return false;
+ case InventoryLocation::PLAYER:
+ // Allow access to own inventory in all cases
+ return loc.name == player->getName();
+ case InventoryLocation::NODEMETA:
+ {
+ // Check for out-of-range interaction
+ v3f node_pos = intToFloat(loc.p, BS);
+ v3f player_pos = player->getPlayerSAO()->getEyePosition();
+ f32 d = player_pos.getDistanceFrom(node_pos);
+ return checkInteractDistance(player, d, "inventory");
+ }
+ case InventoryLocation::DETACHED:
+ return getInventoryMgr()->checkDetachedInventoryAccess(loc, player->getName());
+ default:
+ return false;
+ }
};
/*
@@ -656,18 +685,6 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
!check_inv_access(ma->to_inv))
return;
- InventoryLocation *remote = ma->from_inv.type == InventoryLocation::PLAYER ?
- &ma->to_inv : &ma->from_inv;
-
- // Check for out-of-range interaction
- if (remote->type == InventoryLocation::NODEMETA) {
- v3f node_pos = intToFloat(remote->p, BS);
- v3f player_pos = player->getPlayerSAO()->getEyePosition();
- f32 d = player_pos.getDistanceFrom(node_pos);
- if (!checkInteractDistance(player, d, "inventory"))
- return;
- }
-
/*
Disable moving items out of craftpreview
*/
diff --git a/src/nodedef.cpp b/src/nodedef.cpp
index 57d4c008f..8a1f6203b 100644
--- a/src/nodedef.cpp
+++ b/src/nodedef.cpp
@@ -1675,8 +1675,7 @@ bool NodeDefManager::nodeboxConnects(MapNode from, MapNode to,
NodeResolver::NodeResolver()
{
- m_nodenames.reserve(16);
- m_nnlistsizes.reserve(4);
+ reset();
}
@@ -1779,3 +1778,16 @@ bool NodeResolver::getIdsFromNrBacklog(std::vector<content_t> *result_out,
return success;
}
+
+void NodeResolver::reset(bool resolve_done)
+{
+ m_nodenames.clear();
+ m_nodenames_idx = 0;
+ m_nnlistsizes.clear();
+ m_nnlistsizes_idx = 0;
+
+ m_resolve_done = resolve_done;
+
+ m_nodenames.reserve(16);
+ m_nnlistsizes.reserve(4);
+}
diff --git a/src/nodedef.h b/src/nodedef.h
index 6fc20518d..3e77624eb 100644
--- a/src/nodedef.h
+++ b/src/nodedef.h
@@ -44,6 +44,9 @@ class ITextureSource;
class IShaderSource;
class IGameDef;
class NodeResolver;
+#if BUILD_UNITTESTS
+class TestSchematic;
+#endif
enum ContentParamType
{
@@ -789,10 +792,13 @@ private:
NodeDefManager *createNodeDefManager();
+// NodeResolver: Queue for node names which are then translated
+// to content_t after the NodeDefManager was initialized
class NodeResolver {
public:
NodeResolver();
virtual ~NodeResolver();
+ // Callback which is run as soon NodeDefManager is ready
virtual void resolveNodeNames() = 0;
// required because this class is used as mixin for ObjDef
@@ -804,12 +810,31 @@ public:
bool getIdsFromNrBacklog(std::vector<content_t> *result_out,
bool all_required = false, content_t c_fallback = CONTENT_IGNORE);
- void nodeResolveInternal();
+ inline bool isResolveDone() const { return m_resolve_done; }
+ void reset(bool resolve_done = false);
- u32 m_nodenames_idx = 0;
- u32 m_nnlistsizes_idx = 0;
+ // Vector containing all node names in the resolve "queue"
std::vector<std::string> m_nodenames;
+ // Specifies the "set size" of node names which are to be processed
+ // this is used for getIdsFromNrBacklog
+ // TODO: replace or remove
std::vector<size_t> m_nnlistsizes;
+
+protected:
+ friend class NodeDefManager; // m_ndef
+
const NodeDefManager *m_ndef = nullptr;
+ // Index of the next "m_nodenames" entry to resolve
+ u32 m_nodenames_idx = 0;
+
+private:
+#if BUILD_UNITTESTS
+ // Unittest requires access to m_resolve_done
+ friend class TestSchematic;
+#endif
+ void nodeResolveInternal();
+
+ // Index of the next "m_nnlistsizes" entry to process
+ u32 m_nnlistsizes_idx = 0;
bool m_resolve_done = false;
};
diff --git a/src/noise.cpp b/src/noise.cpp
index e16564b05..a10efa3c4 100644
--- a/src/noise.cpp
+++ b/src/noise.cpp
@@ -369,7 +369,7 @@ float contour(float v)
///////////////////////// [ New noise ] ////////////////////////////
-float NoisePerlin2D(NoiseParams *np, float x, float y, s32 seed)
+float NoisePerlin2D(const NoiseParams *np, float x, float y, s32 seed)
{
float a = 0;
float f = 1.0;
@@ -395,7 +395,7 @@ float NoisePerlin2D(NoiseParams *np, float x, float y, s32 seed)
}
-float NoisePerlin3D(NoiseParams *np, float x, float y, float z, s32 seed)
+float NoisePerlin3D(const NoiseParams *np, float x, float y, float z, s32 seed)
{
float a = 0;
float f = 1.0;
@@ -422,7 +422,7 @@ float NoisePerlin3D(NoiseParams *np, float x, float y, float z, s32 seed)
}
-Noise::Noise(NoiseParams *np_, s32 seed, u32 sx, u32 sy, u32 sz)
+Noise::Noise(const NoiseParams *np_, s32 seed, u32 sx, u32 sy, u32 sz)
{
np = *np_;
this->seed = seed;
diff --git a/src/noise.h b/src/noise.h
index 613879890..854781731 100644
--- a/src/noise.h
+++ b/src/noise.h
@@ -146,7 +146,7 @@ public:
float *persist_buf = nullptr;
float *result = nullptr;
- Noise(NoiseParams *np, s32 seed, u32 sx, u32 sy, u32 sz=1);
+ Noise(const NoiseParams *np, s32 seed, u32 sx, u32 sy, u32 sz=1);
~Noise();
void setSize(u32 sx, u32 sy, u32 sz=1);
@@ -192,8 +192,8 @@ private:
};
-float NoisePerlin2D(NoiseParams *np, float x, float y, s32 seed);
-float NoisePerlin3D(NoiseParams *np, float x, float y, float z, s32 seed);
+float NoisePerlin2D(const NoiseParams *np, float x, float y, s32 seed);
+float NoisePerlin3D(const NoiseParams *np, float x, float y, float z, s32 seed);
inline float NoisePerlin2D_PO(NoiseParams *np, float x, float xoff,
float y, float yoff, s32 seed)
diff --git a/src/object_properties.cpp b/src/object_properties.cpp
index f31773060..2eebc27d6 100644
--- a/src/object_properties.cpp
+++ b/src/object_properties.cpp
@@ -24,6 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/basic_macros.h"
#include <sstream>
+static const video::SColor NULL_BGCOLOR{0, 1, 1, 1};
+
ObjectProperties::ObjectProperties()
{
textures.emplace_back("unknown_object.png");
@@ -62,6 +64,13 @@ std::string ObjectProperties::dump()
os << ", nametag=" << nametag;
os << ", nametag_color=" << "\"" << nametag_color.getAlpha() << "," << nametag_color.getRed()
<< "," << nametag_color.getGreen() << "," << nametag_color.getBlue() << "\" ";
+
+ if (nametag_bgcolor)
+ os << ", nametag_bgcolor=" << "\"" << nametag_color.getAlpha() << "," << nametag_color.getRed()
+ << "," << nametag_color.getGreen() << "," << nametag_color.getBlue() << "\" ";
+ else
+ os << ", nametag_bgcolor=null ";
+
os << ", selectionbox=" << PP(selectionbox.MinEdge) << "," << PP(selectionbox.MaxEdge);
os << ", pointable=" << pointable;
os << ", static_save=" << static_save;
@@ -121,6 +130,13 @@ void ObjectProperties::serialize(std::ostream &os) const
writeU8(os, shaded);
writeU8(os, show_on_minimap);
+ if (!nametag_bgcolor)
+ writeARGB8(os, NULL_BGCOLOR);
+ else if (nametag_bgcolor.value().getAlpha() == 0)
+ writeARGB8(os, video::SColor(0, 0, 0, 0));
+ else
+ writeARGB8(os, nametag_bgcolor.value());
+
// Add stuff only at the bottom.
// Never remove anything, because we don't want new versions of this
}
@@ -182,5 +198,11 @@ void ObjectProperties::deSerialize(std::istream &is)
if (is.eof())
return;
show_on_minimap = tmp;
+
+ auto bgcolor = readARGB8(is);
+ if (bgcolor != NULL_BGCOLOR)
+ nametag_bgcolor = bgcolor;
+ else
+ nametag_bgcolor = nullopt;
} catch (SerializationError &e) {}
}
diff --git a/src/object_properties.h b/src/object_properties.h
index adb483527..db28eebfd 100644
--- a/src/object_properties.h
+++ b/src/object_properties.h
@@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <iostream>
#include <map>
#include <vector>
+#include "util/Optional.h"
struct ObjectProperties
{
@@ -53,6 +54,7 @@ struct ObjectProperties
s8 glow = 0;
std::string nametag = "";
video::SColor nametag_color = video::SColor(255, 255, 255, 255);
+ Optional<video::SColor> nametag_bgcolor = nullopt;
f32 automatic_face_movement_max_rotation_per_sec = -1.0f;
std::string infotext;
//! For dropped items, this contains item information.
diff --git a/src/porting.h b/src/porting.h
index e4ebe36fd..93932e1d9 100644
--- a/src/porting.h
+++ b/src/porting.h
@@ -234,21 +234,21 @@ inline u64 getTimeMs()
{
struct timespec ts;
os_get_clock(&ts);
- return ts.tv_sec * 1000 + ts.tv_nsec / 1000000;
+ return ((u64) ts.tv_sec) * 1000LL + ((u64) ts.tv_nsec) / 1000000LL;
}
inline u64 getTimeUs()
{
struct timespec ts;
os_get_clock(&ts);
- return ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
+ return ((u64) ts.tv_sec) * 1000000LL + ((u64) ts.tv_nsec) / 1000LL;
}
inline u64 getTimeNs()
{
struct timespec ts;
os_get_clock(&ts);
- return ts.tv_sec * 1000000000 + ts.tv_nsec;
+ return ((u64) ts.tv_sec) * 1000000000LL + ((u64) ts.tv_nsec);
}
#endif
diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp
index ecab7baa1..eca0c89d1 100644
--- a/src/script/common/c_content.cpp
+++ b/src/script/common/c_content.cpp
@@ -119,6 +119,8 @@ void read_item_definition(lua_State* L, int index,
// "" = no prediction
getstringfield(L, index, "node_placement_prediction",
def.node_placement_prediction);
+
+ getintfield(L, index, "place_param2", def.place_param2);
}
/******************************************************************************/
@@ -140,8 +142,10 @@ void push_item_definition_full(lua_State *L, const ItemDefinition &i)
lua_setfield(L, -2, "name");
lua_pushstring(L, i.description.c_str());
lua_setfield(L, -2, "description");
- lua_pushstring(L, i.short_description.c_str());
- lua_setfield(L, -2, "short_description");
+ if (!i.short_description.empty()) {
+ lua_pushstring(L, i.short_description.c_str());
+ lua_setfield(L, -2, "short_description");
+ }
lua_pushstring(L, type.c_str());
lua_setfield(L, -2, "type");
lua_pushstring(L, i.inventory_image.c_str());
@@ -310,6 +314,17 @@ void read_object_properties(lua_State *L, int index,
prop->nametag_color = color;
}
lua_pop(L, 1);
+ lua_getfield(L, -1, "nametag_bgcolor");
+ if (!lua_isnil(L, -1)) {
+ if (lua_toboolean(L, -1)) {
+ video::SColor color;
+ if (read_color(L, -1, &color))
+ prop->nametag_bgcolor = color;
+ } else {
+ prop->nametag_bgcolor = nullopt;
+ }
+ }
+ lua_pop(L, 1);
lua_getfield(L, -1, "automatic_face_movement_max_rotation_per_sec");
if (lua_isnumber(L, -1)) {
@@ -401,6 +416,13 @@ void push_object_properties(lua_State *L, ObjectProperties *prop)
lua_setfield(L, -2, "nametag");
push_ARGB8(L, prop->nametag_color);
lua_setfield(L, -2, "nametag_color");
+ if (prop->nametag_bgcolor) {
+ push_ARGB8(L, prop->nametag_bgcolor.value());
+ lua_setfield(L, -2, "nametag_bgcolor");
+ } else {
+ lua_pushboolean(L, false);
+ lua_setfield(L, -2, "nametag_bgcolor");
+ }
lua_pushnumber(L, prop->automatic_face_movement_max_rotation_per_sec);
lua_setfield(L, -2, "automatic_face_movement_max_rotation_per_sec");
lua_pushlstring(L, prop->infotext.c_str(), prop->infotext.size());
diff --git a/src/script/common/helper.cpp b/src/script/common/helper.cpp
index 488144790..fbf24e1b7 100644
--- a/src/script/common/helper.cpp
+++ b/src/script/common/helper.cpp
@@ -50,22 +50,26 @@ bool LuaHelper::isNaN(lua_State *L, int idx)
/*
* Read template functions
*/
-template <> bool LuaHelper::readParam(lua_State *L, int index)
+template <>
+bool LuaHelper::readParam(lua_State *L, int index)
{
return lua_toboolean(L, index) != 0;
}
-template <> s16 LuaHelper::readParam(lua_State *L, int index)
+template <>
+s16 LuaHelper::readParam(lua_State *L, int index)
{
return lua_tonumber(L, index);
}
-template <> int LuaHelper::readParam(lua_State *L, int index)
+template <>
+int LuaHelper::readParam(lua_State *L, int index)
{
return luaL_checkint(L, index);
}
-template <> float LuaHelper::readParam(lua_State *L, int index)
+template <>
+float LuaHelper::readParam(lua_State *L, int index)
{
if (isNaN(L, index))
throw LuaError("NaN value is not allowed.");
@@ -73,7 +77,8 @@ template <> float LuaHelper::readParam(lua_State *L, int index)
return (float)luaL_checknumber(L, index);
}
-template <> v2s16 LuaHelper::readParam(lua_State *L, int index)
+template <>
+v2s16 LuaHelper::readParam(lua_State *L, int index)
{
v2s16 p;
CHECK_POS_TAB(index);
@@ -88,7 +93,8 @@ template <> v2s16 LuaHelper::readParam(lua_State *L, int index)
return p;
}
-template <> v2f LuaHelper::readParam(lua_State *L, int index)
+template <>
+v2f LuaHelper::readParam(lua_State *L, int index)
{
v2f p;
CHECK_POS_TAB(index);
@@ -103,7 +109,8 @@ template <> v2f LuaHelper::readParam(lua_State *L, int index)
return p;
}
-template <> v3f LuaHelper::readParam(lua_State *L, int index)
+template <>
+v3f LuaHelper::readParam(lua_State *L, int index)
{
v3f p;
CHECK_POS_TAB(index);
@@ -122,7 +129,8 @@ template <> v3f LuaHelper::readParam(lua_State *L, int index)
return p;
}
-template <> std::string LuaHelper::readParam(lua_State *L, int index)
+template <>
+std::string LuaHelper::readParam(lua_State *L, int index)
{
size_t length;
std::string result;
diff --git a/src/script/common/helper.h b/src/script/common/helper.h
index 7a794dc9b..6491e73cf 100644
--- a/src/script/common/helper.h
+++ b/src/script/common/helper.h
@@ -38,7 +38,8 @@ protected:
* @param index Lua Index to read
* @return read value from Lua
*/
- template <typename T> static T readParam(lua_State *L, int index);
+ template <typename T>
+ static T readParam(lua_State *L, int index);
/**
* Read a value using a template type T from Lua State L and index
diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp
index 12a497b1e..eb3d49a5e 100644
--- a/src/script/lua_api/l_mapgen.cpp
+++ b/src/script/lua_api/l_mapgen.cpp
@@ -482,9 +482,7 @@ int ModApiMapgen::l_get_biome_id(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- const char *biome_str = lua_tostring(L, 1);
- if (!biome_str)
- return 0;
+ const char *biome_str = luaL_checkstring(L, 1);
const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager();
if (!bmgr)
@@ -527,30 +525,12 @@ int ModApiMapgen::l_get_heat(lua_State *L)
v3s16 pos = read_v3s16(L, 1);
- NoiseParams np_heat;
- NoiseParams np_heat_blend;
-
- MapSettingsManager *settingsmgr =
- getServer(L)->getEmergeManager()->map_settings_mgr;
+ const BiomeGen *biomegen = getServer(L)->getEmergeManager()->getBiomeGen();
- if (!settingsmgr->getMapSettingNoiseParams("mg_biome_np_heat",
- &np_heat) ||
- !settingsmgr->getMapSettingNoiseParams("mg_biome_np_heat_blend",
- &np_heat_blend))
- return 0;
-
- std::string value;
- if (!settingsmgr->getMapSetting("seed", &value))
- return 0;
- std::istringstream ss(value);
- u64 seed;
- ss >> seed;
-
- const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager();
- if (!bmgr)
+ if (!biomegen || biomegen->getType() != BIOMEGEN_ORIGINAL)
return 0;
- float heat = bmgr->getHeatAtPosOriginal(pos, np_heat, np_heat_blend, seed);
+ float heat = ((BiomeGenOriginal*) biomegen)->calcHeatAtPoint(pos);
lua_pushnumber(L, heat);
@@ -566,31 +546,12 @@ int ModApiMapgen::l_get_humidity(lua_State *L)
v3s16 pos = read_v3s16(L, 1);
- NoiseParams np_humidity;
- NoiseParams np_humidity_blend;
-
- MapSettingsManager *settingsmgr =
- getServer(L)->getEmergeManager()->map_settings_mgr;
+ const BiomeGen *biomegen = getServer(L)->getEmergeManager()->getBiomeGen();
- if (!settingsmgr->getMapSettingNoiseParams("mg_biome_np_humidity",
- &np_humidity) ||
- !settingsmgr->getMapSettingNoiseParams("mg_biome_np_humidity_blend",
- &np_humidity_blend))
+ if (!biomegen || biomegen->getType() != BIOMEGEN_ORIGINAL)
return 0;
- std::string value;
- if (!settingsmgr->getMapSetting("seed", &value))
- return 0;
- std::istringstream ss(value);
- u64 seed;
- ss >> seed;
-
- const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager();
- if (!bmgr)
- return 0;
-
- float humidity = bmgr->getHumidityAtPosOriginal(pos, np_humidity,
- np_humidity_blend, seed);
+ float humidity = ((BiomeGenOriginal*) biomegen)->calcHumidityAtPoint(pos);
lua_pushnumber(L, humidity);
@@ -606,45 +567,11 @@ int ModApiMapgen::l_get_biome_data(lua_State *L)
v3s16 pos = read_v3s16(L, 1);
- NoiseParams np_heat;
- NoiseParams np_heat_blend;
- NoiseParams np_humidity;
- NoiseParams np_humidity_blend;
-
- MapSettingsManager *settingsmgr =
- getServer(L)->getEmergeManager()->map_settings_mgr;
-
- if (!settingsmgr->getMapSettingNoiseParams("mg_biome_np_heat",
- &np_heat) ||
- !settingsmgr->getMapSettingNoiseParams("mg_biome_np_heat_blend",
- &np_heat_blend) ||
- !settingsmgr->getMapSettingNoiseParams("mg_biome_np_humidity",
- &np_humidity) ||
- !settingsmgr->getMapSettingNoiseParams("mg_biome_np_humidity_blend",
- &np_humidity_blend))
+ const BiomeGen *biomegen = getServer(L)->getEmergeManager()->getBiomeGen();
+ if (!biomegen)
return 0;
- std::string value;
- if (!settingsmgr->getMapSetting("seed", &value))
- return 0;
- std::istringstream ss(value);
- u64 seed;
- ss >> seed;
-
- const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager();
- if (!bmgr)
- return 0;
-
- float heat = bmgr->getHeatAtPosOriginal(pos, np_heat, np_heat_blend, seed);
- if (!heat)
- return 0;
-
- float humidity = bmgr->getHumidityAtPosOriginal(pos, np_humidity,
- np_humidity_blend, seed);
- if (!humidity)
- return 0;
-
- const Biome *biome = bmgr->getBiomeFromNoiseOriginal(heat, humidity, pos);
+ const Biome *biome = biomegen->calcBiomeAtPoint(pos);
if (!biome || biome->index == OBJDEF_INVALID_INDEX)
return 0;
@@ -653,11 +580,16 @@ int ModApiMapgen::l_get_biome_data(lua_State *L)
lua_pushinteger(L, biome->index);
lua_setfield(L, -2, "biome");
- lua_pushnumber(L, heat);
- lua_setfield(L, -2, "heat");
+ if (biomegen->getType() == BIOMEGEN_ORIGINAL) {
+ float heat = ((BiomeGenOriginal*) biomegen)->calcHeatAtPoint(pos);
+ float humidity = ((BiomeGenOriginal*) biomegen)->calcHumidityAtPoint(pos);
- lua_pushnumber(L, humidity);
- lua_setfield(L, -2, "humidity");
+ lua_pushnumber(L, heat);
+ lua_setfield(L, -2, "heat");
+
+ lua_pushnumber(L, humidity);
+ lua_setfield(L, -2, "humidity");
+ }
return 1;
}
@@ -1493,9 +1425,12 @@ int ModApiMapgen::l_generate_ores(lua_State *L)
NO_MAP_LOCK_REQUIRED;
EmergeManager *emerge = getServer(L)->getEmergeManager();
+ if (!emerge || !emerge->mgparams)
+ return 0;
Mapgen mg;
- mg.seed = emerge->mgparams->seed;
+ // Intentionally truncates to s32, see Mapgen::Mapgen()
+ mg.seed = (s32)emerge->mgparams->seed;
mg.vm = LuaVoxelManip::checkobject(L, 1)->vm;
mg.ndef = getServer(L)->getNodeDefManager();
@@ -1519,9 +1454,12 @@ int ModApiMapgen::l_generate_decorations(lua_State *L)
NO_MAP_LOCK_REQUIRED;
EmergeManager *emerge = getServer(L)->getEmergeManager();
+ if (!emerge || !emerge->mgparams)
+ return 0;
Mapgen mg;
- mg.seed = emerge->mgparams->seed;
+ // Intentionally truncates to s32, see Mapgen::Mapgen()
+ mg.seed = (s32)emerge->mgparams->seed;
mg.vm = LuaVoxelManip::checkobject(L, 1)->vm;
mg.ndef = getServer(L)->getNodeDefManager();
@@ -1734,11 +1672,10 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L)
std::ostringstream os(std::ios_base::binary);
switch (schem_format) {
case SCHEM_FMT_MTS:
- schem->serializeToMts(&os, schem->m_nodenames);
+ schem->serializeToMts(&os);
break;
case SCHEM_FMT_LUA:
- schem->serializeToLua(&os, schem->m_nodenames,
- use_comments, indent_spaces);
+ schem->serializeToLua(&os, use_comments, indent_spaces);
break;
default:
return 0;
diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp
index 07aa3f7c9..8ae99b929 100644
--- a/src/script/lua_api/l_object.cpp
+++ b/src/script/lua_api/l_object.cpp
@@ -737,6 +737,18 @@ int ObjectRef::l_set_nametag_attributes(lua_State *L)
}
lua_pop(L, 1);
+ lua_getfield(L, -1, "bgcolor");
+ if (!lua_isnil(L, -1)) {
+ if (lua_toboolean(L, -1)) {
+ video::SColor color;
+ if (read_color(L, -1, &color))
+ prop->nametag_bgcolor = color;
+ } else {
+ prop->nametag_bgcolor = nullopt;
+ }
+ }
+ lua_pop(L, 1);
+
std::string nametag = getstringfield_default(L, 2, "text", "");
prop->nametag = nametag;
@@ -758,13 +770,24 @@ int ObjectRef::l_get_nametag_attributes(lua_State *L)
if (!prop)
return 0;
- video::SColor color = prop->nametag_color;
-
lua_newtable(L);
- push_ARGB8(L, color);
+
+ push_ARGB8(L, prop->nametag_color);
lua_setfield(L, -2, "color");
+
+ if (prop->nametag_bgcolor) {
+ push_ARGB8(L, prop->nametag_bgcolor.value());
+ lua_setfield(L, -2, "bgcolor");
+ } else {
+ lua_pushboolean(L, false);
+ lua_setfield(L, -2, "bgcolor");
+ }
+
lua_pushstring(L, prop->nametag.c_str());
lua_setfield(L, -2, "text");
+
+
+
return 1;
}
diff --git a/src/script/lua_api/l_settings.cpp b/src/script/lua_api/l_settings.cpp
index bcbaf15fa..a82073ed4 100644
--- a/src/script/lua_api/l_settings.cpp
+++ b/src/script/lua_api/l_settings.cpp
@@ -20,18 +20,43 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "lua_api/l_settings.h"
#include "lua_api/l_internal.h"
#include "cpp_api/s_security.h"
+#include "threading/mutex_auto_lock.h"
#include "util/string.h" // FlagDesc
#include "settings.h"
#include "noise.h"
#include "log.h"
-#define SET_SECURITY_CHECK(L, name) \
- if (o->m_settings == g_settings && ScriptApiSecurity::isSecure(L) && \
- name.compare(0, 7, "secure.") == 0) { \
- throw LuaError("Attempt to set secure setting."); \
+/* This protects:
+ * 'secure.*' settings from being set
+ * some mapgen settings from being set
+ * (not security-criticial, just to avoid messing up user configs)
+ */
+#define CHECK_SETTING_SECURITY(L, name) \
+ if (o->m_settings == g_settings) { \
+ if (checkSettingSecurity(L, name) == -1) \
+ return 0; \
}
+static inline int checkSettingSecurity(lua_State* L, const std::string &name)
+{
+ if (ScriptApiSecurity::isSecure(L) && name.compare(0, 7, "secure.") == 0)
+ throw LuaError("Attempt to set secure setting.");
+
+ bool is_mainmenu = false;
+#ifndef SERVER
+ is_mainmenu = ModApiBase::getGuiEngine(L) != nullptr;
+#endif
+ if (!is_mainmenu && (name == "mg_name" || name == "mg_flags")) {
+ errorstream << "Tried to set global setting " << name << ", ignoring. "
+ "minetest.set_mapgen_setting() should be used instead." << std::endl;
+ infostream << script_get_backtrace(L) << std::endl;
+ return -1;
+ }
+
+ return 0;
+}
+
LuaSettings::LuaSettings(Settings *settings, const std::string &filename) :
m_settings(settings),
m_filename(filename)
@@ -129,6 +154,7 @@ int LuaSettings::l_get_np_group(lua_State *L)
return 1;
}
+// get_flags(self, key) -> table or nil
int LuaSettings::l_get_flags(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
@@ -161,7 +187,7 @@ int LuaSettings::l_set(lua_State* L)
std::string key = std::string(luaL_checkstring(L, 2));
const char* value = luaL_checkstring(L, 3);
- SET_SECURITY_CHECK(L, key);
+ CHECK_SETTING_SECURITY(L, key);
if (!o->m_settings->set(key, value))
throw LuaError("Invalid sequence found in setting parameters");
@@ -178,14 +204,14 @@ int LuaSettings::l_set_bool(lua_State* L)
std::string key = std::string(luaL_checkstring(L, 2));
bool value = readParam<bool>(L, 3);
- SET_SECURITY_CHECK(L, key);
+ CHECK_SETTING_SECURITY(L, key);
o->m_settings->setBool(key, value);
- return 1;
+ return 0;
}
-// set(self, key, value)
+// set_np_group(self, key, value)
int LuaSettings::l_set_np_group(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
@@ -195,7 +221,7 @@ int LuaSettings::l_set_np_group(lua_State *L)
NoiseParams value;
read_noiseparams(L, 3, &value);
- SET_SECURITY_CHECK(L, key);
+ CHECK_SETTING_SECURITY(L, key);
o->m_settings->setNoiseParams(key, value);
@@ -210,7 +236,7 @@ int LuaSettings::l_remove(lua_State* L)
std::string key = std::string(luaL_checkstring(L, 2));
- SET_SECURITY_CHECK(L, key);
+ CHECK_SETTING_SECURITY(L, key);
bool success = o->m_settings->remove(key);
lua_pushboolean(L, success);
@@ -253,20 +279,36 @@ int LuaSettings::l_write(lua_State* L)
return 1;
}
-// to_table(self) -> {[key1]=value1,...}
-int LuaSettings::l_to_table(lua_State* L)
+static void push_settings_table(lua_State *L, const Settings *settings)
{
- NO_MAP_LOCK_REQUIRED;
- LuaSettings* o = checkobject(L, 1);
-
- std::vector<std::string> keys = o->m_settings->getNames();
-
+ std::vector<std::string> keys = settings->getNames();
lua_newtable(L);
for (const std::string &key : keys) {
- lua_pushstring(L, o->m_settings->get(key).c_str());
+ std::string value;
+ Settings *group = nullptr;
+
+ if (settings->getNoEx(key, value)) {
+ lua_pushstring(L, value.c_str());
+ } else if (settings->getGroupNoEx(key, group)) {
+ // Recursively push tables
+ push_settings_table(L, group);
+ } else {
+ // Impossible case (multithreading) due to MutexAutoLock
+ continue;
+ }
+
lua_setfield(L, -2, key.c_str());
}
+}
+
+// to_table(self) -> {[key1]=value1,...}
+int LuaSettings::l_to_table(lua_State* L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ LuaSettings* o = checkobject(L, 1);
+ MutexAutoLock(o->m_settings->m_mutex);
+ push_settings_table(L, o->m_settings);
return 1;
}
diff --git a/src/server.cpp b/src/server.cpp
index af4eb17e2..a8d452783 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -1821,6 +1821,9 @@ void Server::SendMovePlayer(session_t peer_id)
PlayerSAO *sao = player->getPlayerSAO();
assert(sao);
+ // Send attachment updates instantly to the client prior updating position
+ sao->sendOutdatedData();
+
NetworkPacket pkt(TOCLIENT_MOVE_PLAYER, sizeof(v3f) + sizeof(f32) * 2, peer_id);
pkt << sao->getBasePosition() << sao->getLookPitch() << sao->getRotation().Y;
@@ -2493,7 +2496,9 @@ void Server::fillMediaCache()
// Collect all media file paths
std::vector<std::string> paths;
- // The paths are ordered in descending priority
+
+ // ordered in descending priority
+ paths.push_back(getBuiltinLuaPath() + DIR_DELIM + "locale");
fs::GetRecursiveDirs(paths, porting::path_user + DIR_DELIM + "textures" + DIR_DELIM + "server");
fs::GetRecursiveDirs(paths, m_gamespec.path + DIR_DELIM + "textures");
m_modmgr->getModsMediaPaths(paths);
diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp
index c7277491a..3bcbe107b 100644
--- a/src/server/luaentity_sao.cpp
+++ b/src/server/luaentity_sao.cpp
@@ -146,15 +146,11 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
// Each frame, parent position is copied if the object is attached, otherwise it's calculated normally
// If the object gets detached this comes into effect automatically from the last known origin
- if(isAttached())
- {
- v3f pos = m_env->getActiveObject(m_attachment_parent_id)->getBasePosition();
- m_base_position = pos;
+ if (auto *parent = getParent()) {
+ m_base_position = parent->getBasePosition();
m_velocity = v3f(0,0,0);
m_acceleration = v3f(0,0,0);
- }
- else
- {
+ } else {
if(m_prop.physical){
aabb3f box = m_prop.collisionbox;
box.MinEdge *= BS;
@@ -492,6 +488,9 @@ void LuaEntitySAO::sendPosition(bool do_interpolate, bool is_movement_end)
if(isAttached())
return;
+ // Send attachment updates instantly to the client prior updating position
+ sendOutdatedData();
+
m_last_sent_move_precision = m_base_position.getDistanceFrom(
m_last_sent_position);
m_last_sent_position_timer = 0;
diff --git a/src/server/mods.cpp b/src/server/mods.cpp
index cf1467648..83fa12da9 100644
--- a/src/server/mods.cpp
+++ b/src/server/mods.cpp
@@ -98,7 +98,8 @@ void ServerModManager::getModNames(std::vector<std::string> &modlist) const
void ServerModManager::getModsMediaPaths(std::vector<std::string> &paths) const
{
- for (const ModSpec &spec : m_sorted_mods) {
+ for (auto it = m_sorted_mods.crbegin(); it != m_sorted_mods.crend(); it++) {
+ const ModSpec &spec = *it;
fs::GetRecursiveDirs(paths, spec.path + DIR_DELIM + "textures");
fs::GetRecursiveDirs(paths, spec.path + DIR_DELIM + "sounds");
fs::GetRecursiveDirs(paths, spec.path + DIR_DELIM + "media");
diff --git a/src/server/mods.h b/src/server/mods.h
index 54774bd86..8954bbf72 100644
--- a/src/server/mods.h
+++ b/src/server/mods.h
@@ -42,5 +42,13 @@ public:
void loadMods(ServerScripting *script);
const ModSpec *getModSpec(const std::string &modname) const;
void getModNames(std::vector<std::string> &modlist) const;
+ /**
+ * Recursively gets all paths of mod folders that can contain media files.
+ *
+ * Result is ordered in descending priority, ie. files from an earlier path
+ * should not be replaced by files from a latter one.
+ *
+ * @param paths result vector
+ */
void getModsMediaPaths(std::vector<std::string> &paths) const;
};
diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp
index 110d2010d..0d31f2e0b 100644
--- a/src/server/player_sao.cpp
+++ b/src/server/player_sao.cpp
@@ -260,10 +260,13 @@ void PlayerSAO::step(float dtime, bool send_recommended)
// otherwise it's calculated normally.
// If the object gets detached this comes into effect automatically from
// the last known origin.
- if (isAttached()) {
- v3f pos = m_env->getActiveObject(m_attachment_parent_id)->getBasePosition();
+ if (auto *parent = getParent()) {
+ v3f pos = parent->getBasePosition();
m_last_good_position = pos;
setBasePosition(pos);
+
+ if (m_player)
+ m_player->setSpeed(v3f());
}
if (!send_recommended)
@@ -570,34 +573,11 @@ void PlayerSAO::setMaxSpeedOverride(const v3f &vel)
bool PlayerSAO::checkMovementCheat()
{
if (m_is_singleplayer ||
+ isAttached() ||
g_settings->getBool("disable_anticheat")) {
m_last_good_position = m_base_position;
return false;
}
- if (UnitSAO *parent = dynamic_cast<UnitSAO *>(getParent())) {
- v3f attachment_pos;
- {
- int parent_id;
- std::string bone;
- v3f attachment_rot;
- bool force_visible;
- getAttachment(&parent_id, &bone, &attachment_pos, &attachment_rot, &force_visible);
- }
-
- v3f parent_pos = parent->getBasePosition();
- f32 diff = m_base_position.getDistanceFromSQ(parent_pos) - attachment_pos.getLengthSQ();
- const f32 maxdiff = 4.0f * BS; // fair trade-off value for various latencies
-
- if (diff > maxdiff * maxdiff) {
- setBasePosition(parent_pos);
- actionstream << "Server: " << m_player->getName()
- << " moved away from parent; diff=" << sqrtf(diff) / BS
- << " resetting position." << std::endl;
- return true;
- }
- // Player movement is locked to the entity. Skip further checks
- return false;
- }
bool cheated = false;
/*
diff --git a/src/server/serverinventorymgr.cpp b/src/server/serverinventorymgr.cpp
index 555e01ec6..2a80c9bbe 100644
--- a/src/server/serverinventorymgr.cpp
+++ b/src/server/serverinventorymgr.cpp
@@ -168,6 +168,18 @@ bool ServerInventoryManager::removeDetachedInventory(const std::string &name)
return true;
}
+bool ServerInventoryManager::checkDetachedInventoryAccess(
+ const InventoryLocation &loc, const std::string &player) const
+{
+ SANITY_CHECK(loc.type == InventoryLocation::DETACHED);
+
+ const auto &inv_it = m_detached_inventories.find(loc.name);
+ if (inv_it == m_detached_inventories.end())
+ return false;
+
+ return inv_it->second.owner.empty() || inv_it->second.owner == player;
+}
+
void ServerInventoryManager::sendDetachedInventories(const std::string &peer_name,
bool incremental,
std::function<void(const std::string &, Inventory *)> apply_cb)
diff --git a/src/server/serverinventorymgr.h b/src/server/serverinventorymgr.h
index ccf6d3b2e..0e4b72415 100644
--- a/src/server/serverinventorymgr.h
+++ b/src/server/serverinventorymgr.h
@@ -43,6 +43,7 @@ public:
Inventory *createDetachedInventory(const std::string &name, IItemDefManager *idef,
const std::string &player = "");
bool removeDetachedInventory(const std::string &name);
+ bool checkDetachedInventoryAccess(const InventoryLocation &loc, const std::string &player) const;
void sendDetachedInventories(const std::string &peer_name, bool incremental,
std::function<void(const std::string &, Inventory *)> apply_cb);
diff --git a/src/serverlist.cpp b/src/serverlist.cpp
index 3bcab3d58..09a946eb5 100644
--- a/src/serverlist.cpp
+++ b/src/serverlist.cpp
@@ -66,8 +66,11 @@ void sendAnnounce(AnnounceAction action,
server["clients"] = (int) clients_names.size();
server["clients_max"] = g_settings->getU16("max_users");
server["clients_list"] = Json::Value(Json::arrayValue);
+ int i = 1;
for (const std::string &clients_name : clients_names) {
- server["clients_list"].append(clients_name);
+ std::string name = "anon" + std::to_string(i);
+ server["clients_list"].append(name);
+ i++;
}
if (!gameid.empty())
server["gameid"] = gameid;
diff --git a/src/settings.h b/src/settings.h
index b5e859ee0..e22d949d3 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -239,6 +239,8 @@ private:
// Allow TestSettings to run sanity checks using private functions.
friend class TestSettings;
+ // For sane mutex locking when iterating
+ friend class LuaSettings;
void updateNoLock(const Settings &other);
void clearNoLock();
diff --git a/src/settings_translation_file.cpp b/src/settings_translation_file.cpp
index 8ce323ff6..317186e94 100644
--- a/src/settings_translation_file.cpp
+++ b/src/settings_translation_file.cpp
@@ -203,6 +203,8 @@ fake_function() {
gettext("Graphics");
gettext("In-Game");
gettext("Basic");
+ gettext("Show nametag backgrounds by default");
+ gettext("Whether nametag backgrounds should be shown by default.\nMods may still set a background.");
gettext("VBO");
gettext("Enable vertex buffer objects.\nThis should greatly improve graphics performance.");
gettext("Fog");
@@ -513,7 +515,7 @@ fake_function() {
gettext("Damage");
gettext("Enable players getting damage and dying.");
gettext("Creative");
- gettext("Enable creative mode for new created maps.");
+ 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("Default password");
diff --git a/src/tool.cpp b/src/tool.cpp
index 90f4f9c12..3f639a69e 100644
--- a/src/tool.cpp
+++ b/src/tool.cpp
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include "inventory.h"
#include "exceptions.h"
+#include "convert_json.h"
#include "util/serialize.h"
#include "util/numeric.h"
@@ -142,7 +143,7 @@ void ToolCapabilities::serializeJson(std::ostream &os) const
}
root["damage_groups"] = damage_groups_object;
- os << root;
+ fastWriteJson(root, os);
}
void ToolCapabilities::deserializeJson(std::istream &is)
diff --git a/src/unittest/test_noderesolver.cpp b/src/unittest/test_noderesolver.cpp
index 28da43620..ed66093a9 100644
--- a/src/unittest/test_noderesolver.cpp
+++ b/src/unittest/test_noderesolver.cpp
@@ -56,6 +56,8 @@ void TestNodeResolver::runTests(IGameDef *gamedef)
class Foobar : public NodeResolver {
public:
+ friend class TestNodeResolver; // m_ndef
+
void resolveNodeNames();
content_t test_nr_node1;
diff --git a/src/unittest/test_schematic.cpp b/src/unittest/test_schematic.cpp
index da4ce50d2..d2f027eb4 100644
--- a/src/unittest/test_schematic.cpp
+++ b/src/unittest/test_schematic.cpp
@@ -66,13 +66,14 @@ void TestSchematic::testMtsSerializeDeserialize(const NodeDefManager *ndef)
std::stringstream ss(std::ios_base::binary |
std::ios_base::in | std::ios_base::out);
- std::vector<std::string> names;
- names.emplace_back("foo");
- names.emplace_back("bar");
- names.emplace_back("baz");
- names.emplace_back("qux");
-
- Schematic schem, schem2;
+ Schematic schem;
+ {
+ std::vector<std::string> &names = schem.m_nodenames;
+ names.emplace_back("foo");
+ names.emplace_back("bar");
+ names.emplace_back("baz");
+ names.emplace_back("qux");
+ }
schem.flags = 0;
schem.size = size;
@@ -83,18 +84,21 @@ void TestSchematic::testMtsSerializeDeserialize(const NodeDefManager *ndef)
for (s16 y = 0; y != size.Y; y++)
schem.slice_probs[y] = MTSCHEM_PROB_ALWAYS;
- UASSERT(schem.serializeToMts(&ss, names));
+ UASSERT(schem.serializeToMts(&ss));
ss.seekg(0);
- names.clear();
- UASSERT(schem2.deserializeFromMts(&ss, &names));
+ Schematic schem2;
+ UASSERT(schem2.deserializeFromMts(&ss));
- UASSERTEQ(size_t, names.size(), 4);
- UASSERTEQ(std::string, names[0], "foo");
- UASSERTEQ(std::string, names[1], "bar");
- UASSERTEQ(std::string, names[2], "baz");
- UASSERTEQ(std::string, names[3], "qux");
+ {
+ std::vector<std::string> &names = schem2.m_nodenames;
+ UASSERTEQ(size_t, names.size(), 4);
+ UASSERTEQ(std::string, names[0], "foo");
+ UASSERTEQ(std::string, names[1], "bar");
+ UASSERTEQ(std::string, names[2], "baz");
+ UASSERTEQ(std::string, names[3], "qux");
+ }
UASSERT(schem2.size == size);
for (size_t i = 0; i != volume; i++)
@@ -120,14 +124,14 @@ void TestSchematic::testLuaTableSerialize(const NodeDefManager *ndef)
for (s16 y = 0; y != size.Y; y++)
schem.slice_probs[y] = MTSCHEM_PROB_ALWAYS;
- std::vector<std::string> names;
+ std::vector<std::string> &names = schem.m_nodenames;
names.emplace_back("air");
names.emplace_back("default:lava_source");
names.emplace_back("default:glass");
std::ostringstream ss(std::ios_base::binary);
- UASSERT(schem.serializeToLua(&ss, names, false, 0));
+ UASSERT(schem.serializeToLua(&ss, false, 0));
UASSERTEQ(std::string, ss.str(), expected_lua_output);
}
@@ -159,6 +163,8 @@ void TestSchematic::testFileSerializeDeserialize(const NodeDefManager *ndef)
schem1.slice_probs[0] = 80;
schem1.slice_probs[1] = 160;
schem1.slice_probs[2] = 240;
+ // Node resolving happened manually.
+ schem1.m_resolve_done = true;
for (size_t i = 0; i != volume; i++) {
content_t c = content_map[test_schem2_data[i]];
diff --git a/src/util/Optional.h b/src/util/Optional.h
new file mode 100644
index 000000000..9c2842b43
--- /dev/null
+++ b/src/util/Optional.h
@@ -0,0 +1,77 @@
+/*
+Minetest
+Copyright (C) 2021 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.
+*/
+
+#pragma once
+
+#include "debug.h"
+
+struct nullopt_t
+{
+};
+constexpr nullopt_t nullopt{};
+
+/**
+ * An implementation of optional for C++11, which aims to be
+ * compatible with a subset of std::optional features.
+ *
+ * Unfortunately, Minetest doesn't use C++17 yet.
+ *
+ * @tparam T The type to be stored
+ */
+template <typename T>
+class Optional
+{
+ bool m_has_value = false;
+ T m_value;
+
+public:
+ Optional() noexcept {}
+ Optional(nullopt_t) noexcept {}
+ Optional(const T &value) noexcept : m_has_value(true), m_value(value) {}
+ Optional(const Optional<T> &other) noexcept :
+ m_has_value(other.m_has_value), m_value(other.m_value)
+ {
+ }
+
+ void operator=(nullopt_t) noexcept { m_has_value = false; }
+
+ void operator=(const Optional<T> &other) noexcept
+ {
+ m_has_value = other.m_has_value;
+ m_value = other.m_value;
+ }
+
+ T &value()
+ {
+ FATAL_ERROR_IF(!m_has_value, "optional doesn't have value");
+ return m_value;
+ }
+
+ const T &value() const
+ {
+ FATAL_ERROR_IF(!m_has_value, "optional doesn't have value");
+ return m_value;
+ }
+
+ const T &value_or(const T &def) const { return m_has_value ? m_value : def; }
+
+ bool has_value() const noexcept { return m_has_value; }
+
+ explicit operator bool() const { return m_has_value; }
+};
diff --git a/src/util/numeric.cpp b/src/util/numeric.cpp
index 1af3f66be..99e4cfb5c 100644
--- a/src/util/numeric.cpp
+++ b/src/util/numeric.cpp
@@ -106,10 +106,6 @@ u64 murmur_hash_64_ua(const void *key, int len, unsigned int seed)
bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir,
f32 camera_fov, f32 range, f32 *distance_ptr)
{
- // Maximum radius of a block. The magic number is
- // sqrt(3.0) / 2.0 in literal form.
- static constexpr const f32 block_max_radius = 0.866025403784f * MAP_BLOCKSIZE * BS;
-
v3s16 blockpos_nodes = blockpos_b * MAP_BLOCKSIZE;
// Block center position
@@ -123,7 +119,7 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir,
v3f blockpos_relative = blockpos - camera_pos;
// Total distance
- f32 d = MYMAX(0, blockpos_relative.getLength() - block_max_radius);
+ f32 d = MYMAX(0, blockpos_relative.getLength() - BLOCK_MAX_RADIUS);
if (distance_ptr)
*distance_ptr = d;
@@ -141,7 +137,7 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir,
// such that a block that has any portion visible with the
// current camera position will have the center visible at the
// adjusted postion
- f32 adjdist = block_max_radius / cos((M_PI - camera_fov) / 2);
+ f32 adjdist = BLOCK_MAX_RADIUS / cos((M_PI - camera_fov) / 2);
// Block position relative to adjusted camera
v3f blockpos_adj = blockpos - (camera_pos - camera_dir * adjdist);
diff --git a/src/util/numeric.h b/src/util/numeric.h
index 864ab7543..32a6f4312 100644
--- a/src/util/numeric.h
+++ b/src/util/numeric.h
@@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include "basic_macros.h"
+#include "constants.h"
#include "irrlichttypes.h"
#include "irr_v2d.h"
#include "irr_v3d.h"
@@ -36,6 +37,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
y = temp; \
} while (0)
+// Maximum radius of a block. The magic number is
+// sqrt(3.0) / 2.0 in literal form.
+static constexpr const f32 BLOCK_MAX_RADIUS = 0.866025403784f * MAP_BLOCKSIZE * BS;
inline s16 getContainerPos(s16 p, s16 d)
{
diff --git a/src/util/serialize.h b/src/util/serialize.h
index b3ec28eab..15bdd050d 100644
--- a/src/util/serialize.h
+++ b/src/util/serialize.h
@@ -290,7 +290,7 @@ inline void writeS8(u8 *data, s8 i)
inline void writeS16(u8 *data, s16 i)
{
- writeU16(data, (u16)i);
+ writeU16(data, (u16)i);
}
inline void writeS32(u8 *data, s32 i)
diff --git a/src/util/string.h b/src/util/string.h
index d4afcaec8..21f1d6877 100644
--- a/src/util/string.h
+++ b/src/util/string.h
@@ -670,15 +670,19 @@ inline const std::string duration_to_string(int sec)
std::stringstream ss;
if (hour > 0) {
- ss << hour << "h ";
+ ss << hour << "h";
+ if (min > 0 || sec > 0)
+ ss << " ";
}
if (min > 0) {
- ss << min << "m ";
+ ss << min << "min";
+ if (sec > 0)
+ ss << " ";
}
if (sec > 0) {
- ss << sec << "s ";
+ ss << sec << "s";
}
return ss.str();
diff --git a/textures/base/pack/aux1_btn.png b/textures/base/pack/aux1_btn.png
new file mode 100644
index 000000000..8ceb09542
--- /dev/null
+++ b/textures/base/pack/aux1_btn.png
Binary files differ
diff --git a/textures/base/pack/aux_btn.png b/textures/base/pack/aux_btn.png
deleted file mode 100644
index f589910e8..000000000
--- a/textures/base/pack/aux_btn.png
+++ /dev/null
Binary files differ
diff --git a/textures/base/pack/server_flags_favorite.png b/textures/base/pack/server_favorite.png
index 6a3fc5efe..6a3fc5efe 100644
--- a/textures/base/pack/server_flags_favorite.png
+++ b/textures/base/pack/server_favorite.png
Binary files differ
diff --git a/textures/base/pack/server_incompatible.png b/textures/base/pack/server_incompatible.png
new file mode 100644
index 000000000..9076ab58f
--- /dev/null
+++ b/textures/base/pack/server_incompatible.png
Binary files differ
diff --git a/textures/base/pack/server_public.png b/textures/base/pack/server_public.png
new file mode 100644
index 000000000..46a48fac8
--- /dev/null
+++ b/textures/base/pack/server_public.png
Binary files differ
diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh
index e62d32969..db3a23375 100755
--- a/util/buildbot/buildwin32.sh
+++ b/util/buildbot/buildwin32.sh
@@ -20,8 +20,10 @@ packagedir=$builddir/packages
libdir=$builddir/libs
# Test which win32 compiler is present
-which i586-mingw32msvc-windres &>/dev/null && toolchain_file=$dir/toolchain_i586-mingw32msvc.cmake
-which i686-w64-mingw32-windres &>/dev/null && toolchain_file=$dir/toolchain_i646-w64-mingw32.cmake
+which i686-w64-mingw32-gcc &>/dev/null &&
+ toolchain_file=$dir/toolchain_i686-w64-mingw32.cmake
+which i686-w64-mingw32-gcc-posix &>/dev/null &&
+ toolchain_file=$dir/toolchain_i686-w64-mingw32-posix.cmake
if [ -z "$toolchain_file" ]; then
echo "Unable to determine which mingw32 compiler to use"
@@ -29,7 +31,7 @@ if [ -z "$toolchain_file" ]; then
fi
echo "Using $toolchain_file"
-irrlicht_version=1.8.4
+irrlicht_version=1.9.0mt0
ogg_version=1.3.2
vorbis_version=1.3.5
curl_version=7.65.3
@@ -46,7 +48,7 @@ mkdir -p $libdir
cd $builddir
# Get stuff
-[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget http://minetest.kitsunemimi.pw/irrlicht-$irrlicht_version-win32.zip \
+[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget https://github.com/minetest/irrlicht/releases/download/$irrlicht_version/win32.zip \
-c -O $packagedir/irrlicht-$irrlicht_version.zip
[ -e $packagedir/zlib-$zlib_version.zip ] || wget http://minetest.kitsunemimi.pw/zlib-$zlib_version-win32.zip \
-c -O $packagedir/zlib-$zlib_version.zip
@@ -100,6 +102,10 @@ if [ "x$NO_MINETEST_GAME" = "x" ]; then
cd ..
fi
+irr_dlls=$(echo $libdir/irrlicht/bin/*.dll | tr ' ' ';')
+vorbis_dlls=$(echo $libdir/libvorbis/bin/libvorbis{,file}-*.dll | tr ' ' ';')
+gettext_dlls=$(echo $libdir/gettext/bin/lib{intl,iconv}-*.dll | tr ' ' ';')
+
# Build the thing
[ -d _build ] && rm -Rf _build/
mkdir _build
@@ -116,9 +122,9 @@ cmake .. \
-DENABLE_FREETYPE=1 \
-DENABLE_LEVELDB=1 \
\
- -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include \
- -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/Win32-gcc/libIrrlicht.dll.a \
- -DIRRLICHT_DLL=$libdir/irrlicht/bin/Win32-gcc/Irrlicht.dll \
+ -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include/irrlicht \
+ -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/libIrrlicht.dll.a \
+ -DIRRLICHT_DLL="$irr_dlls" \
\
-DZLIB_INCLUDE_DIR=$libdir/zlib/include \
-DZLIB_LIBRARIES=$libdir/zlib/lib/libz.dll.a \
@@ -133,9 +139,8 @@ cmake .. \
\
-DVORBIS_INCLUDE_DIR=$libdir/libvorbis/include \
-DVORBIS_LIBRARY=$libdir/libvorbis/lib/libvorbis.dll.a \
- -DVORBIS_DLL=$libdir/libvorbis/bin/libvorbis-0.dll \
+ -DVORBIS_DLL="$vorbis_dlls" \
-DVORBISFILE_LIBRARY=$libdir/libvorbis/lib/libvorbisfile.dll.a \
- -DVORBISFILE_DLL=$libdir/libvorbis/bin/libvorbisfile-3.dll \
\
-DOPENAL_INCLUDE_DIR=$libdir/openal_stripped/include/AL \
-DOPENAL_LIBRARY=$libdir/openal_stripped/lib/libOpenAL32.dll.a \
@@ -146,8 +151,7 @@ cmake .. \
-DCURL_LIBRARY=$libdir/libcurl/lib/libcurl.dll.a \
\
-DGETTEXT_MSGFMT=`which msgfmt` \
- -DGETTEXT_DLL=$libdir/gettext/bin/libintl-8.dll \
- -DGETTEXT_ICONV_DLL=$libdir/gettext/bin/libiconv-2.dll \
+ -DGETTEXT_DLL="$gettext_dlls" \
-DGETTEXT_INCLUDE_DIR=$libdir/gettext/include \
-DGETTEXT_LIBRARY=$libdir/gettext/lib/libintl.dll.a \
\
diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh
index 94e009c29..53c6d1ea9 100755
--- a/util/buildbot/buildwin64.sh
+++ b/util/buildbot/buildwin64.sh
@@ -20,7 +20,7 @@ packagedir=$builddir/packages
libdir=$builddir/libs
toolchain_file=$dir/toolchain_x86_64-w64-mingw32.cmake
-irrlicht_version=1.8.4
+irrlicht_version=1.9.0mt0
ogg_version=1.3.2
vorbis_version=1.3.5
curl_version=7.65.3
@@ -37,7 +37,7 @@ mkdir -p $libdir
cd $builddir
# Get stuff
-[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget http://minetest.kitsunemimi.pw/irrlicht-$irrlicht_version-win64.zip \
+[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget https://github.com/minetest/irrlicht/releases/download/$irrlicht_version/win64.zip \
-c -O $packagedir/irrlicht-$irrlicht_version.zip
[ -e $packagedir/zlib-$zlib_version.zip ] || wget http://minetest.kitsunemimi.pw/zlib-$zlib_version-win64.zip \
-c -O $packagedir/zlib-$zlib_version.zip
@@ -92,6 +92,10 @@ if [ "x$NO_MINETEST_GAME" = "x" ]; then
cd ..
fi
+irr_dlls=$(echo $libdir/irrlicht/bin/*.dll | tr ' ' ';')
+vorbis_dlls=$(echo $libdir/libvorbis/bin/libvorbis{,file}-*.dll | tr ' ' ';')
+gettext_dlls=$(echo $libdir/gettext/bin/lib{intl,iconv}-*.dll | tr ' ' ';')
+
# Build the thing
[ -d _build ] && rm -Rf _build/
mkdir _build
@@ -108,9 +112,9 @@ cmake .. \
-DENABLE_FREETYPE=1 \
-DENABLE_LEVELDB=1 \
\
- -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include \
- -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/Win64-gcc/libIrrlicht.dll.a \
- -DIRRLICHT_DLL=$libdir/irrlicht/bin/Win64-gcc/Irrlicht.dll \
+ -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include/irrlicht \
+ -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/libIrrlicht.dll.a \
+ -DIRRLICHT_DLL="$irr_dlls" \
\
-DZLIB_INCLUDE_DIR=$libdir/zlib/include \
-DZLIB_LIBRARIES=$libdir/zlib/lib/libz.dll.a \
@@ -125,9 +129,8 @@ cmake .. \
\
-DVORBIS_INCLUDE_DIR=$libdir/libvorbis/include \
-DVORBIS_LIBRARY=$libdir/libvorbis/lib/libvorbis.dll.a \
- -DVORBIS_DLL=$libdir/libvorbis/bin/libvorbis-0.dll \
+ -DVORBIS_DLL="$vorbis_dlls" \
-DVORBISFILE_LIBRARY=$libdir/libvorbis/lib/libvorbisfile.dll.a \
- -DVORBISFILE_DLL=$libdir/libvorbis/bin/libvorbisfile-3.dll \
\
-DOPENAL_INCLUDE_DIR=$libdir/openal_stripped/include/AL \
-DOPENAL_LIBRARY=$libdir/openal_stripped/lib/libOpenAL32.dll.a \
@@ -138,8 +141,7 @@ cmake .. \
-DCURL_LIBRARY=$libdir/libcurl/lib/libcurl.dll.a \
\
-DGETTEXT_MSGFMT=`which msgfmt` \
- -DGETTEXT_DLL=$libdir/gettext/bin/libintl-8.dll \
- -DGETTEXT_ICONV_DLL=$libdir/gettext/bin/libiconv-2.dll \
+ -DGETTEXT_DLL="$gettext_dlls" \
-DGETTEXT_INCLUDE_DIR=$libdir/gettext/include \
-DGETTEXT_LIBRARY=$libdir/gettext/lib/libintl.dll.a \
\
diff --git a/util/buildbot/toolchain_i586-mingw32msvc.cmake b/util/buildbot/toolchain_i686-w64-mingw32-posix.cmake
index 0eeefb84d..b5d9ba5c4 100644
--- a/util/buildbot/toolchain_i586-mingw32msvc.cmake
+++ b/util/buildbot/toolchain_i686-w64-mingw32-posix.cmake
@@ -2,12 +2,14 @@
SET(CMAKE_SYSTEM_NAME Windows)
# which compilers to use for C and C++
-SET(CMAKE_C_COMPILER i586-mingw32msvc-gcc)
-SET(CMAKE_CXX_COMPILER i586-mingw32msvc-g++)
-SET(CMAKE_RC_COMPILER i586-mingw32msvc-windres)
+# *-posix is Ubuntu's naming for the MinGW variant that comes with support
+# for pthreads / std::thread (required by MT)
+SET(CMAKE_C_COMPILER i686-w64-mingw32-gcc-posix)
+SET(CMAKE_CXX_COMPILER i686-w64-mingw32-g++-posix)
+SET(CMAKE_RC_COMPILER i686-w64-mingw32-windres)
# here is the target environment located
-SET(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc)
+SET(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32)
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
diff --git a/util/buildbot/toolchain_i646-w64-mingw32.cmake b/util/buildbot/toolchain_i686-w64-mingw32.cmake
index 015baa210..015baa210 100644
--- a/util/buildbot/toolchain_i646-w64-mingw32.cmake
+++ b/util/buildbot/toolchain_i686-w64-mingw32.cmake
diff --git a/util/ci/lint.sh b/util/ci/clang-format.sh
index 395445ca7..89576c656 100755
--- a/util/ci/lint.sh
+++ b/util/ci/clang-format.sh
@@ -1,6 +1,6 @@
#! /bin/bash
-function perform_lint() {
- echo "Performing LINT..."
+
+function setup_for_format() {
if [ -z "${CLANG_FORMAT}" ]; then
CLANG_FORMAT=clang-format
fi
@@ -8,6 +8,12 @@ function perform_lint() {
CLANG_FORMAT_WHITELIST="util/ci/clang-format-whitelist.txt"
files_to_lint="$(find src/ -name '*.cpp' -or -name '*.h')"
+}
+
+function check_format() {
+ echo "Checking format..."
+
+ setup_for_format
local errorcount=0
local fail=0
@@ -41,3 +47,18 @@ function perform_lint() {
echo "LINT OK"
}
+
+
+function fix_format() {
+ echo "Fixing format..."
+
+ setup_for_format
+
+ for f in ${files_to_lint}; do
+ whitelisted=$(awk '$1 == "'$f'" { print 1 }' "$CLANG_FORMAT_WHITELIST")
+ if [ -z "${whitelisted}" ]; then
+ echo "$f"
+ $CLANG_FORMAT -i "$f"
+ fi
+ done
+}
diff --git a/util/ci/common.sh b/util/ci/common.sh
index 7523fa7ff..d73c31b2f 100644
--- a/util/ci/common.sh
+++ b/util/ci/common.sh
@@ -2,12 +2,20 @@
# Linux build only
install_linux_deps() {
- local pkgs=(libirrlicht-dev cmake libbz2-dev libpng-dev \
+ local pkgs=(cmake libpng-dev \
libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev \
libhiredis-dev libogg-dev libgmp-dev libvorbis-dev libopenal-dev \
gettext libpq-dev postgresql-server-dev-all libleveldb-dev \
libcurl4-openssl-dev)
+ if [[ "$1" == "--old-irr" ]]; then
+ shift
+ pkgs+=(libirrlicht-dev)
+ else
+ wget "https://github.com/minetest/irrlicht/releases/download/1.9.0mt0/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[@]} "$@"
}
diff --git a/util/fix_format.sh b/util/fix_format.sh
new file mode 100755
index 000000000..3cef6f58d
--- /dev/null
+++ b/util/fix_format.sh
@@ -0,0 +1,5 @@
+#!/bin/bash -e
+
+. ./util/ci/clang-format.sh
+
+fix_format
diff --git a/util/gather_git_credits.py b/util/gather_git_credits.py
new file mode 100755
index 000000000..1b2865182
--- /dev/null
+++ b/util/gather_git_credits.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python3
+import subprocess
+import re
+from collections import defaultdict
+
+codefiles = r"(\.[ch](pp)?|\.lua|\.md|\.cmake|\.java|\.gradle|Makefile|CMakeLists\.txt)$"
+
+# two minor versions back, for "Active Contributors"
+REVS_ACTIVE = "5.2.0..HEAD"
+# all time, for "Previous Contributors"
+REVS_PREVIOUS = "HEAD"
+
+CUTOFF_ACTIVE = 3
+CUTOFF_PREVIOUS = 21
+
+# For a description of the points system see:
+# https://github.com/minetest/minetest/pull/9593#issue-398677198
+
+def load(revs):
+ points = defaultdict(int)
+ p = subprocess.Popen(["git", "log", "--mailmap", "--pretty=format:%h %aN <%aE>", revs],
+ stdout=subprocess.PIPE, universal_newlines=True)
+ for line in p.stdout:
+ hash, author = line.strip().split(" ", 1)
+ n = 0
+
+ p2 = subprocess.Popen(["git", "show", "--numstat", "--pretty=format:", hash],
+ stdout=subprocess.PIPE, universal_newlines=True)
+ for line in p2.stdout:
+ added, deleted, filename = re.split(r"\s+", line.strip(), 2)
+ if re.search(codefiles, filename) and added != "-":
+ n += int(added)
+ p2.wait()
+
+ if n == 0:
+ continue
+ if n > 1200:
+ n = 8
+ elif n > 700:
+ n = 4
+ elif n > 100:
+ n = 2
+ else:
+ n = 1
+ points[author] += n
+ p.wait()
+
+ # Some authors duplicate? Don't add manual workarounds here, edit the .mailmap!
+ for author in ("updatepo.sh <script@mt>", "Weblate <42@minetest.ru>"):
+ points.pop(author, None)
+ return points
+
+points_active = load(REVS_ACTIVE)
+points_prev = load(REVS_PREVIOUS)
+
+with open("results.txt", "w") as f:
+ for author, points in sorted(points_active.items(), key=(lambda e: e[1]), reverse=True):
+ if points < CUTOFF_ACTIVE: break
+ points_prev.pop(author, None) # active authors don't appear in previous
+ f.write("%d\t%s\n" % (points, author))
+ f.write('\n---------\n\n')
+ once = True
+ for author, points in sorted(points_prev.items(), key=(lambda e: e[1]), reverse=True):
+ if points < CUTOFF_PREVIOUS and once:
+ f.write('\n---------\n\n')
+ once = False
+ f.write("%d\t%s\n" % (points, author))
diff --git a/util/updatepo.sh b/util/updatepo.sh
index 168483bd4..95acb01ea 100755
--- a/util/updatepo.sh
+++ b/util/updatepo.sh
@@ -58,6 +58,7 @@ xgettext --package-name=minetest \
--keyword=fgettext_ne \
--keyword=strgettext \
--keyword=wstrgettext \
+ --keyword=core.gettext \
--keyword=showTranslatedStatusText \
--output $potfile \
--from-code=utf-8 \